23/09/2008 Déroulement Algorithmes et structures de données (avancées) Cours 3 Patrick Reuter • CM mardi de 8h à 9h (salle 33) • TD - Groupe 1 : mardi, 13h30 – 15h00 (salle 51D) - Groupe 2 : mardi, 15h15 – 16h45 (salle 51D) (en alternance: salle TD et salle machine) http://www.labri.fr/~preuter/asd2008 (rendre la feuille à la prochaine séance) Aujourd'hui • Rappel • Les tableaux • cet après-midi: salle TD Ingrédients d’algorithmes • • • • • Variables Affectation Condition/Comparaison Appel de fonction Structure de contrôle – Bloc d'instruction – Branchements conditionnels – Branchements conditionnels (multiples) – Boucles Typage • PHP: – typage dynamique et faible Æle type n'est n est pas associé au nom de la variable Æle type est encodé dans la donnée elle-même Typage dynamique et faible • Types différents dans le même algorithme a = 1; a = 1 + 3; afficher(a); a = "Maintenant c'est un texte"; afficher(a); --> pas possible en Delphi, p.ex. Comparer: Delphi/Pascal - typage statique et fort 1 23/09/2008 Typage dynamique et faible • Types différents dans le même algorithme a = 1; a = 1 + 3; afficher(a); a = "Maintenant c'est un texte"; afficher(a); $a = 1; $a = 1 + 3; echo $a; $a = "Maintenant c'est un texte"; echo $a; Appel de fonctions • Exemples : – afficher du texte à l'écran – générer les nombres aléatoires Ingrédients d’algorithmes • • • • • Variables Affectation Condition/Comparaison Appel de fonction Structure de contrôle – Bloc d'instruction – Branchements conditionnels – Branchements conditionnels (multiples) – Boucles Ingrédients d’algorithmes • Appel de fonctions, p.ex. afficher("Bonjour tout le monde"); En PHP : echo "Bonjour tout le monde"; Ingrédients d’algorithmes • Appel de fonctions: nombre aléatoires, p.ex. nombre b = rand(1, d(1 49) Ingrédients d’algorithmes • Appel de fonctions: nombre aléatoires, p.ex. d = rand(1, des d(1 6) En PHP : En PHP : $nombre = rand(1, 49) $des = rand(1, 6) 2 23/09/2008 Faire tourner un algorithme Ingrédients d’algorithmes • • • • • Variables Affectation Condition/Comparaison Appel de fonction Structure de contrôle Ingrédients d’algorithmes • Structure de contrôle – Branchements conditionnels – Bloc d'instruction – Branchements conditionnels – Branchements conditionnels (multiples) – Boucles Ingrédients d’algorithmes • Structure de contrôle – Branchements conditionnels SI <condition> condition ALORS Ingrédients d’algorithmes • Structure de contrôle – Branchements conditionnels SI <condition> condition ALORS <bloc d’instructions> [SINON <bloc d’instructions> SINON <bloc d’instructions>] <bloc d’instructions> Exemple: SI (score>meilleur_score) ALORS meilleur_score = score; 3 23/09/2008 Ingrédients d’algorithmes • Structure de contrôle Ingrédients d’algorithmes • Structure de contrôle – Branchements conditionnels – Branchements conditionnels SI <condition> condition ALORS SI <condition> condition ALORS <bloc d’instructions> SINON <bloc d’instructions> SINON <bloc d’instructions> Exemple: SI (score>meilleur_score) ALORS meilleur_score = score; afficher ("vous avez battu le score!"); Ingrédients d’algorithmes • Bloc d'instruction <bloc d’instructions> Exemple: NON !! SI (score>meilleur_score) ALORS meilleur_score = score; afficher ("vous avez battu le score!"); Ingrédients d’algorithmes • Bloc d'instruction – permet de regrouper plusieus instructions dans le même contexte de l'algorithme Sont définie par: En algorithmes : DEBUT FIN En PHP: { } Ingrédients d’algorithmes • Bloc d'instruction Ingrédients d’algorithmes • Bloc d'instruction SI <condition> ALORS <bloc d’instructions> SINON <bloc d’instructions> SI (score>meilleur_score) ALORS DEBUT meilleur_score = score; afficher ("vous avez battu le score!"); FIN SI (score>meilleur_score) ALORS DEBUT meilleur_score = score; afficher ("vous avez battu le score!"); FIN if ($score>$meilleur_score) { $meilleur_score = $score; echo "vous avez battu le score!"; } if ($score>$meilleur_score) { $meilleur_score = $score; echo "vous avez battu le score!"; } 4 23/09/2008 Structogramme • Diagramme Nassi-Shneidermann ("structogramme") Exercice • Affecter les variables a1 et a2 avec un nombre entier aléatoire entre 1 et 100 • Affecter la variable max avec la plus grande valeur de a1 et a2 (autrement dit: max contiendra la valeur de a1 si a1 est plus grand que a2, et a2 sinon • Afficher la variable max • Ebaucher le structogramme Exercice • Solution a1 = rand(1,100) a2 = rand(1 rand(1,100) 100) SI (a1>a2) ALORS max = a1 SINON max = a2 afficher(max) Exercice • Solution a1 = rand(1,100) a2 = rand(1 rand(1,100) 100) SI (a1>a2) ALORS max = a1 SINON max = a2 afficher(max) $a1 = rand(1,100); $a2 = rand(1,100); if($a1>$a2) ($ $ ) $max = $a1; else $max = $a2; echo $max; 5 23/09/2008 Structure de données • une structure logique – destinée à contenir des données – afin de leur donner une organisation permettant de simplifier leur traitement traitement. Les tableaux Les tableaux • Motivation • Les tableaux – Les tableaux numériques – Les L ttableaux bl associatifs i tif – Les tableaux multidimensionnels Motivation en arithmétique : • Affectation : a1 = 1 a2 = 5 a3 = 4 a4 = 8 … an = 4 en algorithmique a[1] = 1; a[2] = 5; a[3] = 4; a[4] = 8; … a[n] [ ] = 4; 4 en PHP: $a[1] = 1; $a[2] = 5; $a[3] = 4; $a[4] = 8; … $a[$n] = 4; Exemple • Vous avez vu comment faire le calcul : 5 Σi i=1 • Maintenant calculer 5 Σ ai i=1 6 23/09/2008 Exemple • Solution Exemple • Solution somme =0; i=1; somme =0; i=1; TANT QUE i <= 5 FAIRE DEBUT somme = somme +a[i]; i=i+1; FIN TANT QUE i <= 5 FAIRE DEBUT somme = somme +a[i]; i=i+1; FIN $somme =0; $i=1; while ($i <= 5) { $somme = $somme +$a[$i]; $i=$i+1; } Exemple Structogramme Exercice • Affecter les variables a1 et a2 avec un nombre entier aléatoire entre 1 et 100 • Affecter la variable max avec la plus grande valeur de a1 et a2 (autrement dit: max contiendra la valeur de a1 si a1 est plus grand que a2, et a2 sinon Exercice a1 = rand(1, 100) a1 = rand(1, 100) SI (a1>a2) ALORS max = a1 SINON max = a2 afficher(max) • Afficher la variable max • Ebaucher le structogramme 7 23/09/2008 Exercice • Structogramme • Solution mois[1] = 31; mois[2] = 30; mois[3] = 31; mois[4] i [4] = 28; 28 mois[5] = 31; mois[6] = 30; mois[7] = 31; mois[8] = 31; mois[9] = 30; mois[10] = 31; mois[11] = 30; mois[12] = 31; Exercice • Déclarer le nombre de jours dans chaque mois • Ecrire un algorithme qui compte le nombre de mois à 30 jours Exercice • Solution compteur = 0; i = 1; while (i<=12) { if (mois[i] == 30) compteur = compteur + 1; i = i + 1; } afficher("Nombre de mois à 30 jours : "); afficher(compteur); • Structogramme 8