Retour aux projets // Algorithmie PHP
🎯

Algorithmie PHP

Série d'exercices d'algorithmique implémentés en PHP : manipulation de tableaux, tri, logique conditionnelle, et Bataille Navale avec placement de navires sur une grille 10×10.

PHP Algorithmie Tableaux Grilles Boucles

Description du projet

Exercices réalisés dans le cadre du cours d'algorithmique BTS SIO. Le projet principal est une Bataille Navale en PHP CLI : initialisation d'une grille 10×10, placement interactif des navires (porte-avion, croiseur, sous-marins, torpilleur) avec vérification des collisions et des dépassements de grille.

D'autres exercices couvrent : calcul de notes (min/max/moyenne), rendu de monnaie, et manipulation de tableaux.

Fonctionnalités

🚢

Bataille Navale

Grille 10×10, placement horizontal/vertical, détection de collisions

📊

Gestion de notes

Saisie de 5 notes, calcul min/max/moyenne

💰

Rendu monnaie

Calcul automatique des billets et pièces à rendre

🔢

Tableaux & Matrices

Affichage et manipulation de matrices multidimensionnelles

Code source

affichetab.php
affichetab.php — Bataille Navale
<?php
function affichetab($tab, $m, $n) { // tableau matrice
    for ($i = 0; $i < $m; $i++) {
        for ($j = 0; $j < $n; $j++) {
            echo $tab[$i][$j] . " ";
        }
        echo "\n";
    }
    echo "------------\n";
}

function initialisegrille() {
    $grille = array();
    for ($i = 0; $i < 10; $i++) {
        for ($j = 0; $j < 10; $j++) {
            $grille[$i][$j] = 0;
        }
    }
    return $grille;
}

function positionneNavire(&$grille, $nom, $taille) {
    echo "Placement du navire : $nom ($taille cases)\n";
    $l = (int)readline("Ligne de départ (0-9) : ");
    $c = (int)readline("Colonne de départ (0-9) : ");
    $position = readline("Horizontal ? (o/n) : ");

    if ($position == "o") {
        if ($c + $taille <= 10) {
            for ($i = 0; $i < $taille; $i++) {
                if ($grille[$l][$c + $i] != 0) {
                    echo "Erreur : collision détectée.\n";
                    return;
                }
            }
            for ($i = 0; $i < $taille; $i++) {
                $grille[$l][$c + $i] = 1;
            }
        } else {
            echo "Erreur : dépassement de la grille.\n";
        }
    } else {
        if ($l + $taille <= 10) {
            for ($i = 0; $i < $taille; $i++) {
                if ($grille[$l + $i][$c] != 0) {
                    echo "Erreur : collision détectée.\n";
                    return;
                }
            }
            for ($i = 0; $i < $taille; $i++) {
                $grille[$l + $i][$c] = 1;
            }
        } else {
            echo "Erreur : dépassement de la grille.\n";
        }
    }
}

// Initialisation
$grilleJ1 = initialisegrille();

// Placement des navires
positionneNavire($grilleJ1, "Porte-avion", 5);
positionneNavire($grilleJ1, "Croiseur", 4);
positionneNavire($grilleJ1, "Sous-marin 1", 3);
positionneNavire($grilleJ1, "Sous-marin 2", 3);
positionneNavire($grilleJ1, "Torpilleur", 2);

// Affichage final
affichetab($grilleJ1, 10, 10);
?>
pageex3.php — Gestion de notes
<?php
$notes = [];
$cmpt = 0;
$total = 0;

// Lecture des notes
for ($i = 0; $i < 5; $i++) {
    $notes[$i] = (int)readline("Entrer la note : ");
    $cmpt++;
    $total += $notes[$i];

    // Initialisation du max et min à la première note
    if ($i == 0) {
        $max = $notes[$i];
        $min = $notes[$i];
    } else {
        if ($notes[$i] > $max) $max = $notes[$i];
        if ($notes[$i] < $min) $min = $notes[$i];
    }
}

echo "Max : $max\n";
echo "Min : $min\n";
echo "Total : $total\n";
echo "Moyenne : " . ($total / $cmpt) . "\n";
?>
pageexo2.php — Rendu de monnaie
<?php
$prix = 1;
$montanttotal = 0;

while ($prix != 0) {
    $prix = readline("Saisir un prix : ");
    $montanttotal += $prix;
}

echo "Vous devez payer $montanttotal euros\n";
$mv = readline("Entrez le montant versé : ");

$reste = $mv - $montanttotal;
$billetdix = 0;
$billetcinq = 0;

while ($reste >= 10) {
    $reste -= 10;
    $billetdix++;
}
if ($reste > 5) {
    $reste -= 5;
    $billetcinq = 1;
}

echo "Rendu de la monnaie :\n";
echo "Billets de 10 : $billetdix\n";
echo "Billets de 5  : $billetcinq\n";
echo "Pièces de 1   : $reste\n";
?>