Vous êtes sur la page 1sur 15

3- Algorithmique

Dfinition : algorithmique Critre algorithmique lmentaire Une application courante ou un problme est automatisable (traitable par informatique) si - Il est possible de dfinir et dcrire parfaitement les donnes et les rsultats de sortie - Il est possible de dcomposer le passage de ces donnes vers ces rsultats en une suite finie d'oprations lmentaires dont chacune peut tre excute par une machine L'algorithmique est la transformation de la connaissance que l'humain possde sur un problme en actions lmentaires excutes par l'ordinateur Ensemble de rgles opratoires dont l'application permet de rsoudre un problme au moyen d'un nombre fini d'oprations (ou actions)

Exemple 1: Fabrication d'un pain la machine ralisant ces actions lmentaires nest bien sur pas un ordinateur ! Entres : farine, eau, sel, levure Oprations squentielles Sortie : pain cuit

Battre ensemble les ingrdients Faire monter la pte 1h 25C Faire cuire 20mn 200C

De l algorithmes au programme : Programme : codage dun algorithme afin que lordinateur puisse excuter les actions dcrites dans lalgorithme doit tre crit dans un langage comprhensible par lordinateur cest un langage de programmation (Assembleur (micropro), C, Fortran, Pascal, Cobol )

A la conception d un ordinateur, est dfini l ensemble des oprations lmentaires qu il peut raliser. Ces oprations doivent tre les plus simples possible pour diminuer la complexit des circuits lectroniques. L ensemble des oprations lmentaires est appel langage machine. Un programme en "code-machine" est une suite d'instructions lmentaires, composes uniquement de 0 et de 1, exprimant les oprations de base que la machine peut physiquement excuter: instructions de calcul (addition, ...) ou de traitement ("et" logique, ...), instructions d'changes entre la mmoire principale et l'unit de calcul ou entre la mmoire principale et une mmoire externe, des instructions de test qui permettent par exemple de dcider de la prochaine instruction effectuer. Voici en code machine de l'IBM 370 l'ordre de charger la valeur 293 dans le registre "3": 01011000 0011 00000000000100100100 charger 3 293 Ce type de code binaire est le seul que la machine puisse directement comprendre et donc rellement excuter. Tout programme crit dans un langage volu devra par consquent tre d'abord traduit en code-machine avant d'tre excut.

Algorithme programmation Programme en langage volu (exemple C) traduction Programme en langage machine Interprtation par lUnit Centrale de traitement le traitement souhait est ralis
2001/2002 DEUG MIAS-MASS 1re anne - Ph. Hunel - JN Provost - V Pag 68

Importance des algorithmes :


- La calculabilit des algorithmes (convergence de lalgorithme) la mthode existe telle ? - La complexit des algorithmes (nombre doprations ncessaires) - Lefficacit des algorithmes (vitesse des algo: raisonnable) Temps dexcution et taux doccupation de la mmoire centrale Exemple: Calcul de la circonfrence d'un cercle de r=12 Ici la machine ralisant les oprations lmentaires est un ordinateur !! Analyse : il faut connatre la valeur de r, calculer 2 r, afficher le rsultat

Solution 1: algorithme DEBUT crire (2*3.14159*12) FIN

Programme C #include <stdio.h> int main (void) { printf(" %10.5f\n ", 2*3.14159*12) ; }

Notion de variable

x dans laquelle on peut placer une valeur ou aller

chercher une valeur pour faire du calcul

Solution 2: algorithme Rel : x DEBUT Lire (x) crire (2*3.14159*x) FIN

Programme C #include <stdio.h> int main (void) { double x ; printf("tapez la valeur du rayon\n") ; scanf(" %f ",&x) ; printf(" %10.5f\n ", 2*3.14159*x) ; }

3 variables relles : rayon pi perimetre

Solution 3: algorithme Rel : rayon, Pi,Perimetre DEBUT Pi=3.14159 crire ('Entrer la valeur du rayon:') Lire (rayon) Perimetre<- 2*Pi*rayon crire ('la circonfrence du cercle est',Perimetre) FIN

Programme C #include <stdio.h> int main (void) { double Rayon,Pi , Perimetre ; /* lecture du rayon */ printf(" tapez la valeur du rayon\n") ; scanf(" %f ",&Rayon) ; /* initialisation de Pi /* Pi=3.14159 ; /* calcul du perimetre et criture */ Perimetre=2*Pi*Rayon ; printf("%10.5f\n", Perimetre) ; }

Mthodologie simple 1. Dfinir clairement le problme 2. Chercher une mthode de rsolution (formules) 3. Dfinir les entres ncessaires et les rsultats obtenus 4. crire l'algorithme (langage algorithmique) - Analyse mthodique descendante Si le problme est trop complexe, le dcomposer en sous-problmes, et appliquer, pour chacun, la mthodologie simple Dcomposition du problme = description de + en + dtaille du problme = ensemble d'oprations lmentaires traductibles en langage de programmation

Langage algorithmique - Donnes :valeur introduite par l'utilisateur (au clavier ou dans un fichier) - Constante : identificateur dont la valeur, utilise dans le programme, ne change pas lors de l'excution (par ex. ) - Variable: identificateur dont la valeur, utilise dans le programme, peut changer lors de l'excution (par ex. rayon d'un cercle) Cette variable se rfre un emplacement prcis en mmoire centrale Il est indispensable de:

- Dfinir la nature des donnes, constantes et variables - Choisir les identificateurs les plus appropris - Pouvoir rfrencer tous les genres de valeurs (entier,reel,caractre) Ainsi une variable a un nom fixe (identificateur de variable) Un type de contenu fixe ( caractere, entier, reel.) Par contre son contenu peut varier au cours de lxcution du programme L'change de donnes entre programme et utilisateur pour recevoir de l'information de l'extrieur - Lire (x) o x est une variable qui va prendre la valeur donne par l'utilisateur au clavier crire : pour fournir de l'information l'extrieur - crire (x) : la valeur contenue dans la variable x sera affiche - crire ('Bonjour') : Bonjour sera crit l'cran L'affectation : Opration qui consiste attribuer une valeur une variable note :

variable <-- valeur Exemples: x <-- 1.2

1.2 (x prend la valeur 1.2) x 10=2+8 4=3+1

n <-- 2+8

(n prend la valeur 10)

i <-- i+1

(i est incrment de 1)

ECRITURE DALGORITHMES :

Oprateurs arithmtiques : +, -, *, / - Exemple : x <- x-6; surface <- pi*sqr(rayon)

Oprateurs logiques -Sur variables boolennes ou logiques : vrai/faux, 1/0, oui/non

- La structure de squence suite doprations (instructions) xcutes dans lordreLe paquet peut tre preced de DEBUT et suivi de FIN

- La structure de slection simple SI condition ALORS expression1 SINON expression2 FINSI

Recherche du Max de A et B: algorithme Programme C Entres : rel: A, B #include <stdio.h> Sortie : rel : max int main (void) DEBUT { ECRIRE( donnez A et B ) double A,B,max ; LIRE(A,B) /* lecture donnes */ printf(" tapez les valeurs de A et B\n") ; SI A>B ALORS scanf(" %lf,%lf " , &A , &B ) ; max <- A /* calcul du maximum */ SINON if (A > B) max<- B max = A; FINSI else ECRIRE( Le maximum est,max) FIN max = B; /* criture*/ printf(" le max de %lf et %lf est %lf\n ",A,B,max); }

Exercice : Drouler et comprendre lalgorithme et le programme en langage C suivants : Pour les entres 100.4 , 56 puis - 24.2 , 2.12 puis 3 , 3 algorithme Entres : rel: A, B Sortie : rel : max DEBUT ECRIRE( donnez A et B ) LIRE(A,B) SI A>B ALORS max <- A SINON Max <- B FINSI ECRIRE( Le maximum est,max) FIN Programme C #include <stdio.h> int main (void) { double A,B,max ; /* lecture donnes */ printf(" tapez les valeurs de A et B\n") ; scanf(" %lf,%lf " , &A , &B ) ; /* calcul du maximum */ if (A > B) max = A; else max = B; /* criture*/ printf(" le max de %lf et %lf est %lf\n ",A,B,max); }

Exercice : crire un algorithme permettant de faire le calcul suivant : En entre on a deux entiers x et y , et le programme produit la sortie suivante : x+y si x >=y et 2*x +2*y si x<y

rptitions (nombre connu) POUR variable DE valeur1 valeur2 FAIRE Expression FINPOUR

Pour calculer Xn (n >0) et stocker le rsultat dans Y: algorithme Entres : rel : X, entier : n Sorties : rel : Y Variables : entier : i DEBUT Lire (X,n) Y=1 POUR i DE 1 n FAIRE Y=Y*X FINPOUR crire (X, 'puissance', n, 'vaut', Y) FIN Programme C #include <stdio.h> int main (void) { double X,Y; int n , i ; /* lecture de X et n */ printf(" tapez les valeurs de X et n \n") ; scanf("%lf,%d", &X , &n) ; /* calcul de X la puissance n /* Y=1.0 ; for ( i=1,(i<n),i=i+1) Y = Y * X; /* resultat */ printf(" %lf puissance %d vaut %lf \n ", X , n ,Y ) ; }

Pour calculer la moyenne de 16 notes: algorithme Programme C #include <stdio.h> int main (void) { double note , moyenne , somme ; int i ; /* initialisation de la somme */ somme = 0.0 ; /* calcul de la somme */ for ( i=1,(i<16), i=i+1) { /* lecture de la note courante */ printf(" donnez la note numro %d \n ",i) ; scanf("%lf",,&note) ; /* ajout de la note somme */ somme = somme + note; } /* resultat et sortie du resultat */ moyenne = somme /16 ; printf(" la moyenne est %lf \n",moyenne) ; }

Entres : rel : Note Sorties : rel : Moyenne Variables : rel : Somme, entier : i DEBUT Somme=0 POUR i DE 1 16 FAIRE Lire (Note) Somme = Somme + Note FINPOUR Moyenne = Somme / 16 crire ('La moyenne des 16 notes vaut', Moyenne) FIN

La boucle TANT QUE: structure rptitive, nombre de rptition inconnu TANT-QUE condition FAIRE expression FINTANTQUE

La boucle REPETERTANTQUE : structure rptitive, nombre de rptition inconnu REPETER Expression TANTQUE condition REPETER Expression JUSQUA condition oppose

peut scrire

Exemple Pour calculer Xn (n >0) et stocker le rsultat dans Y: algorithme Entres : rel : X, entier : n Sorties : rel : Y Variables : entier : i DEBUT Lire (X , n) Y=1 i=1 TANTQUE i <= n FAIRE Y=Y*X i = i+1 FINTANTQUE crire (X, 'puissance', n, 'vaut', Y) FIN Programme C #include <stdio.h> int main (void) { double X,Y; int n , i ; /* lecture de X et n */ printf(" tapez les valeurs de X et n \n") ; scanf("%lf,%d",&X, &n) ; /* calcul de X la puissance n /* Y=1.0 ; i=1; while (I <= n) { Y = Y * X; i=i+1; } /* resultat */ printf(" %lf puissance %d vaut %lf \n ", X ,n , Y ) ; }

algorithme Entres : rel : X, entier : n Sorties : rel : Y Variables : entier : i DEBUT Lire (X , n) Y=1 i=1 REPETER REPETER Y=Y*X Y=Y*X i = i+1 i=i + TANTQUE i <= n JUSQUA i > n crire (X, 'puissance', n, 'vaut', Y) FIN

Programme C #include <stdio.h> int main (void) { double X,Y; int n , i ; /* lecture de X et n */ printf(" tapez les valeurs de X et n \n") ; scanf("%lf,%d",&X, &n) ; /* calcul de X la puissance n /* Y=1.0 ; i=1; do { Y = Y * X; i=i+1; } while (i <= n) /* resultat */ printf(" %lf puissance %d vaut %lf \n ", X ,n , Y ) ; }

Exemple 2 Pour obliger l'utilisateur entrer n>0 dans le calcul de Xn et viter un chec. algorithme Programme C Entres : rel : X, entier : n #include <stdio.h> Sorties : rel : Y int main (void) Variables : entier : i { DEBUT double X,Y; int n , i ; Lire (X) /* lecture de X et n */ LIRE(n) printf("tapez la valeur de X \n") ; scanf("%lf",&X) ; TANTQUE NOT(n > 0) FAIRE printf(" tapez la valeur de n \n") ; scanf("%d",&n) ; Ecrire ('Le nombre n'est pas strictement while ( !(n>0) ) positif!!') { Ecrire ('Entrer un nombre positif non printf(" le nombre tap nest pas strict positif ! \n") ; nul:') printf("retapez un nombre correct!!! \n ") ; Lire (n) scanf("%d",&n) ; FINTANTQUE } /* calcul de X la puissance n /* Y=1 Y=1.0 ; i=1; i=1 while (I <= n) TANTQUE i <= n FAIRE { Y=Y*X Y = Y * X; i = i+1 i=i+1; FINTANTQUE } crire (X, 'puissance', n, 'vaut', Y) printf(" %f puissance %d vaut %f \n ", X ,n , Y ) ; FIN }

algorithme Entres : rel : X, entier : n Sorties : rel : Y Variables : entier : i DEBUT Lire (X) REPETER Ecrire ('Entrer un nombre positif non nul:') Lire (n) TANTQUE n >= 0 Y=1 i=1 TANTQUE i <= n FAIRE Y=Y*X i = i+1 FINTANTQUE crire (X, 'puissance', n, 'vaut', Y) FIN

Programme C #include <stdio.h> int main (void) { double X,Y; int n , i ; /* lecture de X et n */ printf(" tapez la valeur de X \n") ; scanf("%lf",&X) ; do { printf(" tapez la valeur de n \n") ; scanf("%d",&n) ; } while (n <= 0 ) /* calcul de X la puissance n /* Y=1.0 ; i=1; while (I <= n) { Y = Y * X; i=i+1; } /* resultat */ printf(" %f puissance %d vaut %f \n ", X ,n , Y ) ;

Exercice crire un algorithme permettant de faire le calcul suivant : En entre on a six entiers sexe, an_nais, mois_nais, dept_nais, x et y reprsentant le numro de scurit sociale de lutilisateur ( par exemple 1, 46, 04, 97, 129, 132) , et le programme produit les sorties suivantes : Bonjour monsieur si cest un homme et Bonjour madame si cest une femme Tu es bien petit si son age est infrieur ou gal 6 ans que fais tu la a ton age si il a entre 6 et 16 ans bonjour pp si il a plus de 16 ans bonjour la Guadeloupe si dept_ nais vaut 97 et que x est un nombre commenant par 1 crire ensuite le programme C correspondant rappel : entier / entier donne le quotient de la division entire

Exercice Faire un algorithme et le programme en C correspondant qui lit 20 notes et calcule deux moyennes , la moyenne des notes suprieures ou gales 10 et la moyenne des notes infrieures 10

Exercice Ecrire un algorithme et le programme C correspondant qui lit un entier entre 1 et 10 Puis qui demande un autre utilisateur ne connaissant pas le nombre qui a t rentr prcdemment de donner un nombre entre 1 et 10 Ds que lutilisateur tape le bon nombre on quitte le programme et on flicite le joueur Sinon on lui indique si ce quil a donn est trop bas ou trop haut et on lui demande de redonner un nombre

Vous aimerez peut-être aussi