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.
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";
?>