Objectifs ALGORITHMIQUE ET PROGRAMMATION Une façon de raisonner Automatiser la résolution de problèmes Maîtriser les concepts de l algorithmique Pas faire des spécialistes d un langage Pierre TELLIER 2 Définitions Algorithme Séquence finie d opérations qui conduisent à la réalisation d un calcul Ensemble complet des règles permettant la résolution d'un problème donné Programme Traduction de l algorithme dans un langage de programmation Moyens Intellectuels Créativité, imagination, abstraction, modélisation, structuration, déduction, induction Pratiques Entraînement intensif Expérimentation : choix d un langage 3 4 Langage Langage : syntaxe, grammaire réalise certaines opérations (élémentaires ) expressions composition d expressions désignation d objets Déclaratifs vs. impératifs Le langage C et son infinité de possibilités d erreurs killerquizz.swf Le Php, langage orienté web Bibliographie Programmer en langage C Cours et exercices corrigés - 4ème édition Claude Delannoy, Eyrolles 268 pages, avril 2002, ISBN: 2-212-11072-3 Algorithmique et Programmation en C Techniques de programmation Algorithmes et structures de données Pierre Tellier, Polycopiés. 5 6 1
Objets élémentaires Nombres entiers : 26, -172. Nombres réels : 2.7, 3.14, 2.0, -3.4 10-3. Caractères : 'A', 'a', '0', ',', ENTER, TAB, BEEP. Chaînes de caractères : "bonjour", "ceci est une chaîne". Booléens : VRAI ou FAUX. Arithmétiques Opérateurs addition +, soustraction -, moins (unaire) -, multiplication *, division /, division entière div, modulo (reste de la division entière) mod. Booléens : ET, OU, NON Sur les chaînes : De comparaison = (égal), <> (différent), <, >, <=, >=. 7 8 Expressions arithmétiques 2 + 3 17 * 73 + 2 7 mod 2 7 div 2 (vaut 3 : division entière) 7 / 2 (vaut 3.5 : division réelle) 0.3 * 168.2 + (4. + 0.11)/5. Expressions Booléennes Opérateurs de comparaison : =, <>, <=, >= Opérateurs Booléens : ET, OU, NON 3<2 vaut FAUX. (3<2) ET (6=5). Comme (3<2) vaut FAUX, l'expression (FAUX ET quelque chose) donnera forcément FAUX. (3>2) OU (6=5). Comme (3>2) vaut VRAI, l'expression (VRAI OU quelque chose) donnera forcément VRAI. 9 10 Nombres types : int, float, opérateurs +,-,/,*,%,==,!=,<=,>= Caractères char ==,!=,<=,>= Chaînes : on verra + tard Booléens int (0 : FAUX, autre : VRAI), (FAUX : 0, VRAI : 1) &&,,! Accumulation Opérations sur les bits &,,~,<<,>> 11 12 2
En Php En Php Nombres types : opérateurs +,-,/,*,%,==,!=,<=,>= Caractères ==,!=,<=,>= Chaînes., ==, 13 Booléens (0 : FAUX, autre : VRAI), (FAUX : 0, VRAI : 1) &&,,!, and, or, not Accumulation 14 Identificateurs Suite "presque" (chiffres, accents) quelconque de caractères, comme fact, pgcd, produit, somme, etc. Ils doivent être choisis de la façon la plus parlante possible. Dans tous les langages, certains identificateurs sont réservés. Constantes réel Pi vaut 3.1415927; 2.0 * Pi Pi / 4.0 réel courseuro vaut 6.55957; 3.60 / courseuro entier nbcôtésducarré vaut 4; 12 * nbcôtésducarré 4.5 * entierversréel(nbcôtésducarré) 15 16 const const int nbmax = 100; cont int faux=0,vrai=1; const float pi=3.14159; #define #define NBMAX 100 #define FAUX 0 #define VRAI 1 #define PI 3.14159 Usage 2.0 * pi PI / 4.0 4.5 * (float)nbmax Constantes en C Constantes en Php <?php define ("COURSEURO", 6.55957); define ("NBMAX", 100); define ("FAUX", 0); define ("VRAI", 1); define ("PI", 3.14159);?> 17 18 3
Variables En maths : noms symboliques (paramètres à valeur connue ou spécifiée plus tard, inconnues, variables de fonctions) Cette notion existe dans presque tous les langages Sauf notion d'inconnue (excepté Prolog). Variables : déclaration Objets désignés par un identificateur Occupent un emplacement mémoire Servent à la résolution de problèmes Résultats intermédiaires variables entier nombreetudiants; entier age, nbfrèressoeurs, taillefamille; réel rayon; réel a, b, c; 19 20 int nombreetudiants; int age, nbfreressoeurs, taillefamille; float rayon; float a, b, c; En Php Pas de déclaration obligatoire On le fera parfois pour les résultats de fonctions (pour s'assurer du type) Le type est en principe "chaîne de caractères" Il est déterminé en fonction du contexte (opérateurs) $y="a"+1; echo $y."<br>"; $y="a"+"b"; echo $y."<br>"; $y="1a2"+"b3"; echo $y."<br>"; $toto = 1 + "10.5" // 11.5 $toto = 1 + "Hello World" // 1 $toto = 1 + "89.5 bande FM" // 90.5 21 22 Conversion entre types A l'aide de la fonction settype() Casting : comme en C : Ex : $a = 10 // Entier $b = (double) $a // Virgule flottante Accès aux types : int, integer, float, real, double, string, array, object Variables dynamiques Noms variables de variables Ex : $a = "Hello" $$a = "World" $a "Hello" $$a $Hello "World" echo "$a ${$a}"; "Hello World" echo "$a $hello"; "Hello World" 23 24 4
Initialisation Variables entier nombreetudiants init 20; entier age, nombrefrèresetsoeurs init 0, taillefamille init 3; réel rayon init -1.0, pisur2 init pi/2.0; int nombreetudiants = 20; int age, nombrefreresetsoeurs=0, taillefamille = 3; float rayon=-1.0, pisur2=pi/2.0; C 25 26 Php $nombreetudiants = 20; $nombrefreresetsoeurs=0; $taillefamille = 3; $rayon=-1.0, $pisur2=pi/2.0; Expressions nombrefrèresetsoeurs+2+1 2.0 * Pi * rayon Pi * rayon * rayon nombrefreresetsoeurs+2+1 2.0 * Pi * rayon Pi * rayon * rayon 27 28 Affectation Consiste à donner une valeur (le résultat d'une expression) à une variable Ranger valeur dans l'emplacement mémoire occupé par la variable rayon := 5.0 nombrefrèresetsoeurs := 4 taillefamille:=nombrefrèresetsoeurs+1+2 rayon = 5.0; nombrefrèresetsoeurs = 4; taillefamille=nombrefreresetsoeurs+1+2; 29 30 5
Php $rayon = 5.0; $nombrefrèresetsoeurs = 4; $taillefamille=$nombrefreresetsoeurs+1+2; Séquentialité Les instructions sont exécutées les unes après les autres Elles sont terminées par «;» Idem en C, Pascal, Php, etc ;; en Caml Numéro de ligne en Basic Ordre des lignes en Fortran 31 32 Affectations rayon := 5.0; nombrefrèresetsoeurs := 4; taillefamille:=nombrefrèresetsoeurs+1+2; Variable informatique Accumulation. exemple X := X*2; En maths : X n+1 = 2 * X n : X = 2*X ou X *= 2; rayon = 5.0; nombrefreresetsoeurs = 4; taillefamille=nombrefreresetsoeurs+1+2; $rayon = 5.0; $nombrefreresetsoeurs = 4; $taillefamille=nombrefreresetsoeurs+1+2; 33 34 Variable informatique Echange 2 entiers Echange des contenus de 2 variables tmp := a; a := b; b := tmp; a := a-b; b := a+b; a := b-a; 35 36 6
Entrées/sorties afficher(); afficher(x); afficher("texte à l'écran"); afficher(y+z); lire(); x:=lire(); De nos jours : Interfaces graphiques (MFC, Motif, GTK, ) Utilisation de navigateurs (HTML + CGI) Exemple afficher("combien de Francs? "); francs := lire(); euros := francs/courseuro; afficher("en euros : ", euros); 37 38 Affichage d'un texte : printf("voici "); printf("mon texte"); voici mon texte Avec passage à la ligne : printf("voici\n"); printf("mon texte"); voici mon texte Affichage d'un entier : int x=2; printf("%d",x); printf("\nx vaut : %d\n",x); 2 x vaut : 2 d'une expression à valeur entière printf("%d\n",2*x-5); -1 39 40 Affichage d'un réel : float y=2.; printf("%f",y); 2.000000 d'une expression à valeur réelle printf("%f\n",2.*sqrt(y)-1.19); 1.638427 Affichage d'un entier, d'un texte et d'un réel (texte sur une seule ligne) printf("racine de %d vaut\ %f\n", x,sqrt((float)x); racine de 2 vaut 1.414214 41 42 7
Lecture d'un entier : int x; scanf("%d",&x); lecture d'un réel : float y; scanf("%f",&y); Lecture d'un entier et d un réel int x; float y; scanf("%d %f\n",&x,&y); Lecture d'un caractère Théorie : scanf("%c", &car); En pratique : scanf("%c%c",&car, &ret); 43 44 En Php Affichage : echo ou print print "voici "; echo "mon texte"; voici mon texte Avec passage à la ligne : echo "voici<br>"; echo "mon texte"; voici mon texte Affichage d'un entier : $x=2; echo $x; echo "<BR>x vaut : ".$x."<br>"; 2 x vaut : 2 d'une expression à valeur entière $tmp=2*$x-5; echo $tmp."<br>"; -1 45 46 Affichage d'un réel : $y=2.; print $y; 2 d'une expression à valeur réelle $tmp= 2.*sqrt($y)-1.19;print $tmp; 1.638427 Affichage d'un entier, d'un texte et d'un réel (texte sur une seule ligne) $tmp=sqrt($x); echo "racine de ".$x." vaut ".$tmp; racine de 2 vaut 1.414214 47 48 8
par l'url Lecture d'un entier : http://mach.domaine/prog.php?x=2 $x = $_GET["x"]; lecture d'un réel : http://mach.domaine/prog.php?y=2.3 $y = $_GET["y"]; Lecture d'un entier et d un réel http://mach.domaine/prog.php?x=2&y=2.3 $x = $_GET["x"]; $y = $_GET["y"]; Lecture d'un caractère http://mach.domaine/prog.php?c='a' $c = $_GET["c"]; 49 50 Via un formulaire toto.html <form action="toto.php" method=post> <input type=text name="x"> <input type=submit value="ok"> </form> toto.php <?php $v=$_post["x"]; echo "valeur : ".$v;?> Accumulations (suite) i = i+1; i = i-1; i += 1; i -= 1; i++; i--; ++i; --i; int i,j; i=1; j=i++; i=1; j=++i; 51 52 Accumulations (suite) $i = $i+1; $i = $i-1; $i += 1; $i -= 1; $i++; $i--; ++$i; --$i; Constantes Variables Début Instructions; Fin Programmes élémentaires $i=1; $j=$i++; $i=1; $j=++$i; 53 54 9
Exemple : conversion en Euros constantes réel courseuro vaut 6.55957; variables réel francs; début francs := lire(); afficher("en euros : ", francs/courseuro); fin 55 plus parlant! constantes réel courseuro vaut 6.55957; variables réel francs, euros; début afficher("combien de Francs? "); francs := lire(); euros := francs/courseuro; afficher("en euros : ", euros); fin 56 : euros.c int main() { const float courseuro = 6.55957; float francs, euros; printf("combien de Francs? "); scanf("%f", &francs); euros = francs/courseuro; printf("en euros : %f", euros); return 0; Compilation Compilateur : gcc, djgpp, vc++, gcc euros.c : génère a.out gcc euros.c -o euros : génère euros gcc -Wall euros.c -o euros exécution : euros (./euros) Cmd.exe C Source file } 57 58 En Php : euros.php <?php define("courseuro", 6.55957); $francs=$_get["f"]; $euros = $francs/courseuro; echo "En euros : ".$euros;?> Autres exemples Calculs géométriques Cercle (périmètre, surface) Diagonale d'un rectangle Arrondis http://mach.domaine/euros.php?f=100 59 60 10
Les nombres décimaux binaires, petits indiens, boutisme hexadécimaux, octaux décimo-binaires (calculettes) réels (norme IEEE 754 8-23, 11-52) Faux! Le programme suivant est faux. Pourquoi? variables entier x, y; début y := x+1; afficher("y vaut : ", y); fin 61 62 int main () { int x,y; y = x+1; printf("y vaut : %d", y); return 0; } contrôle de la syntaxe, pas de la sémantique Compilez avec l'option Wall (certains compilos) En Php <?php $y=$x+1; echo $y."<br>"; //?> 63 64 Analyse descendante Exemple Décomposer un problème en sous problèmes Élémentaires Faciles à résoudre Volume d'un écrou à 8 pans 65 66 11
Découpage fonctionnel Programme obtenu constantes réel pi vaut 3.14159; variables réel l, h, r, hauteurt, surfacet, surfaceo, surfacec, surfacee, volumee; début afficher("entrez la taille du côté, le rayon du trou et la hauteur de l'écrou :"); l := lire(); r := lire(); h := lire(); hauteurt:=(l/2.0)/tangente(pi/8.0); /*tangente:fonction mathématique prédéfinie*/ surfacet := l*hauteurt/2.0; surfaceo := 8.0*surfaceT; surfacec := pi*r*r; surfacee := surfaceo-surfacec; volumee := surfacee*h; afficher("son volume est : ",volumee); fin 67 68 12