Você está na página 1de 26

Algorithmes et Programmes

Introduction linformatique

!
!
!

Vie d'un programme


Algorithme
Programmation : le langage
Excution et test des programmes

Chapitre 1: Algorithmes et Programmes

Universit PARIS-SUD - Licence MPI - S1

2
Universit PARIS-SUD - Licence MPI - S1

Cycle de vie d'un programme (d'un logiciel)

Cycle de vie d'un programme (d'un logiciel)


!

Conception - Modlisation
!
!

langage de haut niveau

Excution sur machine


!
!

Compilation Interprtation
!

Langage de description d'algorithme


simplicit , prcision
! indpendant de la programmation et de la machine
! Exemple : diagramme , pseudo C, ...

langage d'algorithmes

Programme
!

Conception - Modlisation
!

Programmation
!

Analyse du problme
Solution algorithmique

langage machine de bas niveau


assembleur et code machine

Programmation
Excution

Mise au point
!
!

Vrification par test


Evaluation du cot

pour
pour

corriger
optimiser
3

Universit PARIS-SUD - Licence MPI - S1

4
Universit PARIS-SUD - Licence MPI - S1

Cycle de vie d'un programme (d'un logiciel)


!
!

Conception - Modlisation
Programmation
!

!
!

syntaxe contraignante, diffrents styles d'abstraction


indpendant de la machine

Conception - Modlisation
Programmation
Excution
!

!
!
!

Langage assembleur
dpendant de la machine, du processeur
! Exemples : Assembleur pour PC (IA-32), PowerPC,
MIPS, SPARC, etc.

Types de langages
!

Langage de programmation (langages volus )


!

Cycle de vie d'un programme (d'un logiciel)

impratifs : Fortran, Cobol, Pascal, C


fonctionnels : Lisp, ML, Caml
logiques : Prolog
objets : C++, Java

Excution

5
Universit PARIS-SUD - Licence MPI - S1

6
Universit PARIS-SUD - Licence MPI - S1

L'entier N est-il pair ?

L'entier N est-il pair ?


!

Conception - Modlisation
!

Programme C
main () {// dbut du programme principal
int nombreateste ;
printf("Donner un nombre :") ;
scanf("%d", & nombreateste) ;
if ((nombreateste % 2) == 0)
printf("%d est pair \n", nombreateste);
else
printf("%d n'est pas pair \n", nombreateste);
} // fin du programme principal

Analyse du problme
!

Programmation

Un nombre N est pair si le reste de la division de N


par 2 est nul

Solution algorithmique
1. calculer le reste R de la division de N par 2
! 2. si R est gal 0 alors N est pair
! 3. sinon N n'est pas pair
!

7
Universit PARIS-SUD - Licence MPI - S1

8
Universit PARIS-SUD - Licence MPI - S1

L'entier N est-il pair ?


!

Algorithme

Compilation - Codage
9de3bfc0

load N
modi 2
jzer P
...
halt

!
21000000 a0142000 d2040000

90000000 80a24000 02800009 01000000


.

!
808a6001 02800003 01000000 90022001

(!) Recette, rgle, mcanisme, procd, procdure,


mthode,
(=) Description d'une procdure de calcul par une suite
d'tapes de calcul, d'actions (plus ou moins)
lmentaires.
Un algorithme n'est pas forcment destin dcrire la
solution d'un problme pour la programmation et
l'informatique ...
!

Assembleur

Code machine

Un algorithme en cuisine s'appelle une recette


Un algorithme en musique s'appelle une partition
Un algorithme en tissage s'appelle un point

9
Universit PARIS-SUD - Licence MPI - S1

Algorithme (historique)
!

Algorithme de la mousse au chocolat (6 p)

Les premires formulations de rgles prcises pour la


rsolution de certains types d'quations remontent aux
Babyloniens (poque d'Hammurabi, (1800 avant J.C.).
Depuis l'antiquit : algorithmes sur les nombres.

Ingrdients :
!

Le mot algorithme est plus rcent, il vient du nom d'un


mathmaticien perse du IXe sicle: Muhammad ibn
Musa al-Khowrizm.
La signification du mot volue au cours des temps :

!
!
!

pratique de l'algbre (d'Alembert, XVIIIe sicle)


mthode et notation de toute espce de calcul
tout procd de calcul systmatique, voire automatique
11

Universit PARIS-SUD - Licence MPI - S1

!
!
!

250g de chocolat, 125g de beurre, 6 ufs, 50 g de sucre,


caf

Etapes :

Exemple : l'algorithme d'Euclide qui permet de calculer le


p.g.c.d. de deux nombres entiers.

10
Universit PARIS-SUD - Licence MPI - S1

faire fondre le chocolat avec 2 cuillres d'eau


ajouter le beurre
laisser refroidir avant d'ajouter les jaunes dufs
ajouter le sucre et comme parfum un peu de caf
battre les blancs en neige et les ajouter au mlange.

A partir des ingrdients (donnes en entre), appliquer


la recette (les tapes) va produire une mousse au
chocolat (le rsultat).

Labus de mousse au chocolat est dconseill

12

Universit PARIS-SUD - Licence MPI - S1

Algorithme : un peu de mthodologie


!
!
!
!

identifier les donnes fournies / ncessaires


(donnes en entre)
identifier le rsultat (donnes en sortie)
dterminer les actions ou oprations
lmentaires
spcifier l'enchanement des actions
langage d'algorithmes = langage de description
des donnes, des actions et des enchanements

Langage de description d'algorithmes


Algorithme titre
% commentaire
Lexique : variables // entre
: variables // sortie
: variables // auxiliaire
actions : noms des oprations
dbut
liste d'instructions
fin

13
Universit PARIS-SUD - Licence MPI - S1

Calculer le carr de N avec l'addition seule


!

Analyse
!

N2 = N + N + ... + N

14
Universit PARIS-SUD - Licence MPI - S1

Variable
!

N fois

Algorithme :
Algorithme Calcul-Carr-par-Add
%Calcul du carr d'un entier
Lexique :

N entier // Entre
Carr entier // Sortie

Action : +
Debut

Une variable est le nom d'un rcipient destin


contenir une valeur. Lorsque nous nous intresserons
un peu plus l'ordinateur, le rcipient sera une zone
mmoire.
Le type d'une variable sert prciser la nature des
valeurs acceptables par le rcipient. Un type est un nom
pour un ensemble de valeurs.
!

Initialiser Carr 0
Faire N fois :
Carr ! Carr + N

Exemple : Carr est une variable de type entier. La valeur de


(dans) Carr est un entier. La valeur de Carr ne peut tre
un caractre ou un rel

Fin
15
Universit PARIS-SUD - Licence MPI - S1

16
Universit PARIS-SUD - Licence MPI - S1

Affectation par une valeur


!

L'affectation variable ! valeur est une instruction qui


permet de changer la valeur d'une variable.
L'affectation modifie le contenu du rcipient dsign
par la variable.
!
!

Affectation par une expression

La valeur de la variable gauche de ! est remplace par la


valeur droite de !.
Exemple : Carr ! 0 se lit le rcipient Carr reoit la
valeur 0.

L'affectation variable ! expression est effectue par :


!
!

Attention
!

Avertissement
!
!
!

L'affectation est une instruction qui est dite destructrice.


L'ancienne valeur de la variable est dtruite, crase, efface
par la nouvelle valeur !
Carr ! N Copie de la valeur de N. La valeur de N (par
exemple 7) existe en double

1. valuation de l'expression
2. placement du rsultat dans le rcipient dsign par la
variable gauche.

A droite de !, dans l'expression, les variables sont


abusivement utilises pour dsigner les valeurs qu'elles
contiennent. Ceci est une convention.
Exemple : Carr ! Carr + N a pour effet de mettre le
rsultat de la somme de la valeur de Carr avec la valeur de
N dans le rcipient Carr.

17
Universit PARIS-SUD - Licence MPI - S1

Tester si N est un carr parfait


!

N est un carr parfait si il existe un entier J dont le carr


vaut N. (16 en est un, 23 non !)

Algorithme
!
!

Algorithme Test-Carr-Parfait
Lexique :
!
!
!
!

Tester si N est un carr parfait

Analyse
!

18
Universit PARIS-SUD - Licence MPI - S1

N entier
Rponse boolen
Actions : + , * , ", =
Auxiliaire : I, J entier

(* voir page suivante *)

Dbut
1. I!0
Rpter
2.
J!I*I
3.
I!I+1
4. jusqu J # N
5a. Si J = N
5b
alors Reponse ! Vrai
5c
sinon Reponse ! Faux
Finsi
Fin

19
Universit PARIS-SUD - Licence MPI - S1

20
Universit PARIS-SUD - Licence MPI - S1

Algorithme = Abstraction de squences de calcul

Algorithme = Abstraction de squences de calcul

Test du carr parfait (N=7)

Calcul-Carr-par-Add pour N=0

Instruction

Instruction

Expression value

Valeur de carr

1.

2.

Calcul-Carr-par-Add pour N=3


Instruction
1.

Expression value
0

Valeur de carr
0

2.
3.

Carr + N

3.

Carr + N

3.

Carr + N

Expression value

Valeur de i

Valeur de J

Valeur de
rponse

I*I

I+1

J#7?

I*I

I+1

J#7?

I*I

I+1

J#7?

I*I

I+1

J#7?

J=N

5c

faux

0
1
1
2
4
3
9
4

Faux

21
Universit PARIS-SUD - Licence MPI - S1

Instruction conditionnelle
!

22
Universit PARIS-SUD - Licence MPI - S1

Algbre de Boole

Si condition alors faire liste d'instructions


sinon faire liste d'instructions

FINSI
! Exemple : l'instruction 5 de l'algorithme TestCarr-Parfait est une conditionnelle.
!

!
!

Exemple : Reprenons l'excution de Test-CarrParfait pour N=7.


!

Addition : x + y = max(x,y)
Multiplication : x.y = min(x,y)
Complmentation :

x = 0 si x = 1 et x = 1 si x = 0

Condition est une expression boolenne


!

Un ensemble $ = {0, 1} muni de l'ordre total (0 < 1) et


des oprations suivantes :

La premire valuation de la condition J # 7 produit la


valeur boolenne faux donc les instructions 2. et 3.
sont excutes.

proprits
!
!
!
!
!

l'addition et la multiplication sont commutatives


0 est lment neutre de l'addition
1 est lment neutre de la multiplication
l'addition est distributive sur la multiplication et vice versa.
Proprit des complments : x + x = 1 et x.x = 0

23
Universit PARIS-SUD - Licence MPI - S1

24
Universit PARIS-SUD - Licence MPI - S1

Fonctions boolennes tables de vrit


Une fonction boolenne f est une application de $2 dans $
! cas n=1.
!

!
!

Il existe 4 fonctions boolennes de { 0, 1 } dans { 0, 1 } :


!

Algbre de Boole et Logique

l'identit, la complmentation et ...

cas n=2.
!

Utiliser faux et vrai (ou F et V) la place de 0 et 1


Renommer l'addition, la multiplication et la
complmentation par ou, et et non respectivement
appele disjonction, conjonction et ngation.

Il existe 24 fonctions boolennes de { 0, 1 }2 dans { 0, 1}

f0

f1

f2

f3

f4

f5

f9

f13

f14

f15

ou

et

Non (x)

25
Universit PARIS-SUD - Licence MPI - S1

Condition et Expression boolenne


!

J est de type entier, 7 est un entier et la comparaison < est un


oprateur de N x N dans { F, V }.

(J < 7 et J > 4) est une expression boolenne.


C'est la conjonction de deux expressions boolennes
lmentaires.
! Elle est value vraie si la valeur de la variable J
appartient ]4,7[.
!

Rponse est de type boolen.

(Lettre = `a`) est une expression boolenne lmentaire si la


variable Lettre est de type caractre.

Considrons les variables cv pour la couleur de ma


voiture, mv pour la marque et div pour
l'immatriculation (dpartement).
!

Remarque
!

Expression boolenne lmentaire par l'exemple

(Rponse) est une expression boolenne lmentaire.


!

(J < 7) est une expression boolenne lmentaire.


!

Condition et Expression boolenne

Expression boolenne lmentaire par l'exemple


!

26
Universit PARIS-SUD - Licence MPI - S1

Que signifie l'expression ci-dessous ?

(cv = blanc et mv = peugeot) ou


((cv = gris ou cv = blanc) et div = 75 )

Les mmes symboles (=, <, etc.) sont utiliss pour la


comparaison d'entiers, de caractres, de boolens.
27

Universit PARIS-SUD - Licence MPI - S1

28
Universit PARIS-SUD - Licence MPI - S1

Algbre de Boole (suite)


!

Thorme de De Morgan
!
!

Langage de programmation C

non (a ou b) % (non a) et (non b)


non (a et b) % (non a) ou (non b)

Exemple
!
!

#include <stdio.h>

//bibliothque

main() {
const type nom = valeur ;

//entte
// bloc dclaration

Quel est le contraire de le prof porte un pantalon


bleu OU bien il porte un pull beige ?
Si un tudiant soutient une telle affirmation, par
quelle affirmation pouvait vous soutenir
exactement linverse ?
!

Le prof ne porte pas un pantalon bleu

Le prof ne porte pas un pull beige

ET

type1 nom1, nom2 ;


type2 nom3 ;
instruction;
...
instruction;

//bloc d'instructions

}
29

Universit PARIS-SUD - Licence MPI - S1

Syntaxe : symboles, mots, rgles


!
!

[ ] \{ } . , ; : # =< > - * / ( ) !

Contraintes imposes par le langage


!

if else int char float double while for switch


case, const etc.

point virgule aprs chaque instruction


accolade ouvrante au dbut { et fermante } la fin de
chaque fonction (y compris main ), de chaque bloc
dinstructions

Toute variable apparaissant dans le bloc


d'instructions doit tre dclare.

Contraintes imposes par l'usage


!

rgles syntaxiques
!

mots rservs
!

Autres rgles

symboles spciaux
!

30
Universit PARIS-SUD - Licence MPI - S1

Tout programme doit tre comment !


Un commentaire est du texte encadr par des
symboles de dbut /* et de fin */ ou une ligne
commenant par //
Ignor lors des traitements du programme
/* Tout lalgo repose sur la recherche du plus grand
nombre premier aprs le carr parfait */
int i = 0; // sert dindice dans la boucle

La syntaxe d'un programme est dfinie par une


grammaire.
31

Universit PARIS-SUD - Licence MPI - S1

32
Universit PARIS-SUD - Licence MPI - S1

Bloc dclaration

Types

type nom-variable ;
! Syntaxe
!

!
!
!

Un type est un nom pour un ensemble de valeurs.


Un type est muni d'oprateurs. Donc :
! Dclarer une variable sert aussi connatre les
oprateurs applicables (la valeur de) la variable

les caractres sont les lettres (A..Z,a..z) et les chiffres 0..9 et le


soulignement (pas de caractres spciaux, pas de blancs) mais ne
commencent pas par un chiffre
ne commence pas par un chiffre
minuscules et majuscules sont diffrentes fred! Fred
longueur maximum = 31 (plus de caractres sont tolrs, mais ils
sont ignors)

! Avertissement
Les compilateurs C ne peuvent dtecter certaines erreurs de typage.
!

Dclarer une variable sert


!
!

Gnralits
!

nom-variable est un identificateur :


!

Exemple
un caractre (lettre de lalphabet, chiffres) sera
reprsent par un entier de type char (8 bits) : la lettre
a sera reprsente par lentier 97 !
! Une erreur flagrante de typage ( 4 * a) ne sera pas
dtecte !
!

dsigner un rcipient par son nom


spcifier le domaine des valeurs que peut contenir cette
variable
33

Universit PARIS-SUD - Licence MPI - S1

34
Universit PARIS-SUD - Licence MPI - S1

Les types entiers

Les types rels


!

!
!

Pour manipuler les entiers, C propose 6 types (Table cidessous). Dautres existent.
Les oprations sur les entiers sont laddition +, la
soustraction -, la multiplication *, la division / et les
comparaisons (=, !=, >; >=, etc.)

TYPE

Intervalle

Codage

unsigned char

[0,255]

1 octet (= 8 bits)

char

[-128,127]

1 octet

unsigned short

[0, 65536]

2 octets

short

[-32768, 32767]

2 octets

unsigned int

[0, 4294967295]

4 octets

int

[-2147483648, 2147483647]

4 octets

Pour manipuler les rels, C propose 2 types (dautres


existent) prsents dans la table ci-dessous
Les oprateurs sur les rels sont laddition +, la
soustraction -, la multiplication *, la division /, les
comparaisons (=, !=, >, >=, etc.)

TYPE

Intervalle

Codage

Chiffres
significatifs

float

[-2-150, -2128], 0,
[+2-150, +2128]

4 octets

7 chiffres
dcimaux

double

[-2-1075, -21024], 0, 8 octets


[+2-1075, +21024]

35
Universit PARIS-SUD - Licence MPI - S1

15 chiffres
dcimaux
36

Universit PARIS-SUD - Licence MPI - S1

Type boolen
!
!
!

Type caractre

Le type boolen nexiste pas en C.


Le boolen faux est reprsent par lentier 0, et
le boolen vrai par tout entier diffrent de 0.
Les oprations de comparaison produisent 0
quand la condition est fausse et 1 quand la
condition est vraie.
Les oprateurs sur les expressions boolennes
sont le ET : &&, le OU : || et le NON : !

!
!

Le type caractre nexiste pas de manire


indpendante en C
Les caractres sont reprsents par des char
correspondant au codage ASCII des caractres
alphanumriques (lettres et chiffres),
typographiques (ponctuation), etc.
Les caractres sont entrs entre quotes a, b,
09, etc.

37
Universit PARIS-SUD - Licence MPI - S1

Dclarations de constantes
!

!
!

nom-constante est un identificateur qui sert nommer une


valeur.
Une constante sert souvent simplifier la lisibilit d'un
programme.
Le nom donn la valeur correspondant l'utilisation de
cette valeur dans un contexte particulier (ici le programme).

nom-variable = expression ;
!
smantique
seule la notation change par rapport au langage algorithmique i!i+1
le type de l'expression droite de = doit tre identique au type de la variable
gauche
!

Exemples
I =0;
I =I+1;
res = (J = =I*I) ;

Exemples
!
!
!

Affectation

const type nom-constante = valeur


!

38
Universit PARIS-SUD - Licence MPI - S1

const float PI = 3.14159;


const float euro 6.56;
const int duo = 2;

// PI est la valeur 3.14159


// euro est le rel 6.56
// duo est synonyme de 2

Avertissement
!
!

Attention : le compilateur C fait des conversions pour que la


valeur affecte corresponde au type de la variable gauche.
!

Il est impossible de changer la valeur 2 :


De la mme manire il est impossible de toucher la
constante duo dans le programme !

Exemple :
!
!
!

int n; float x=15.4;


n=x;
printf("n=%d \n", n);

39
Universit PARIS-SUD - Licence MPI - S1

// res = 1 ou res = 0

// Les deux types sont diffrents


// rsultat affich : n=15

40
Universit PARIS-SUD - Licence MPI - S1

Instructions dentre-sortie

Instructions dentre-sortie
scanf ("FORMATS", liste de variables);

scanf("FORMAT", &nom-variable);
!
!

Permet de saisir (lire) des donnes tapes au clavier


FORMAT permet de spcifier le type de la variable lue. Par
exemple, "%d" pour un entier, "%f" pour un rel
( d = dcimal, f = floating point )

L'excution de l'instruction ci-dessus


!
!
!

Attend que l'utilisateur tape une valeur au clavier


Cette valeur est affecte la variable (idem au pluriel)
La variable doit avoir t declare (avec le bon type) (const)

Exemple

int I= 234 ;
scanf ("%d",&I) ;
Si l'utilisateur tape 33, la valeur de la variable I est 33
aprs excution des deux instructions.
41

Universit PARIS-SUD - Licence MPI - S1

Exemple
scanf ("%d %d %d", &I, &J, &N)
si l'utilisateur tape 33 44 22, la valeur de la variable I
est 33, celle de J est 44 et celle de N est 22 aprs
excution.
Avertissement
Si la valeur saisie n'est pas du type de la variable alors
une erreur d'excution se produit.
Si la valeur n'est pas saisie, alors l'excution du
programme attend !
42
Universit PARIS-SUD - Licence MPI - S1

Instructions dentre-sortie

Programmation en C du Test-Carr-Parfait

printf ("FORMAT", expression)


printf ("FORMATS", liste d'expressions)
!
permet d'afficher des valeurs (rsultats de calcul) l'cran.
Exemple
I =1 ;
//la valeur de I est 1
printf("%d", I) ;
//affichage de 1 l'cran
printf("%d", 5+7) ;
//affichage de 12 l'cran
printf("valeur de I= %d", I) ;
//affichage de valeur de I= 1
printf ("FORMAT \n", expression) affiche le rsultat de l'valuation
de l'expression puis effectue un retour la ligne (voir console)

main() {
int I, N;
...
printf ("Donnez l'entier a tester : \n");
scanf("%d", &N);
// saisie de la valeur de N au clavier
I = 0;
// initialisation de I
...
printf( "Oui la valeur que vous avez entr");
}
! Avertissement
!

Toute instruction est suivie dun point virgule ;

43
Universit PARIS-SUD - Licence MPI - S1

44
Universit PARIS-SUD - Licence MPI - S1

Conditionnelle

Conditionnelle

if (condition) instruction1 ;
Erreur viter :
if (condition);
instruction1 ;
condition est une expression boolenne
L'excution de l'instruction globale
!
!

if (condition) instruction1;
if (condition) instruction1; else instruction2;
if ();; instruction1; EST TOUJOURS EXECUTE A CAUSE DU ;
!
!

value la condition
si la condition est vraie, excute l'instruction 1.

!
!

Attention : si la condition est fausse, il ne se passe rien dans ce cas.

value la condition
si la condition est vraie, excute l'instruction 1
sinon excute l'instruction 2.

N = 4 ; I=2;
if (N==I*I)
printf ("L'entier %d est un carr parfait", N);

Exemple
N = 5; I=2;
if (N= =I*I) printf ("L'entier %d est un carre parfait", N);
else printf("L'entier %d n'est pas un carre parfait", N);

Affichage l'cran de : L'entier 4 est un carr parfait

Affichage l'cran de L'entier 5 n'est pas un carre parfait

Exemple

Permet d'introduire des branchements d'instructions.


L'excution de l'instruction globale

45
Universit PARIS-SUD - Licence MPI - S1

Conditionnelle

Conditionnelle

if (condition) bloc-instruction1 else bloc-instruction2


Un bloc d'instructions est une liste d'instructions encadre par les mots cl
{ et }
!

Exemple
N=5;
if (N % 2 = =0) printf("%d est pair", N);
else {
N = N-1 ;
printf ("%d est pair", N);
}

Affichage l'cran : 4 est pair

46
Universit PARIS-SUD - Licence MPI - S1

% est le
reste de la
division
entire

switch (expression) {
case expression-constante : bloc-instruction 1; break;
case expression-constante : bloc-instruction 2; break;
...
case expression-constante : bloc-instruction n; break;
default : bloc-instruction; break;
}
! le cas default est facultatif.
! Pas de break signifie que les 2 cas sont traits ensemble
! L'instruction break provoque une sortie immdiate du
switch

47
Universit PARIS-SUD - Licence MPI - S1

48
Universit PARIS-SUD - Licence MPI - S1

Conditionnelle

Itration

Exemple
N=5
switch (N%2) {
case 1 : printf ("%d est impair", N) ; break;
case 0 : printf ("%d est pair", N) ; break;
}
!

Une itration correspond la rptition d'une


squence de calcul.
!

Exemple : l'instruction 3. est itre N fois dans


l'algorithme du Calcul-Carr-par-Add
!

Exemple
switch (C) {
case 0 : case 2 : case 4 : case 6 : case 8 :
printf("%d est un chiffre pair" , C); break;
case 1 : case 3 : case 5 : case 7 : case 9 :
printf("%d est un chiffre impair", C); break;
default :
printf ("%d nest pas un chiffre", C);
}
!

Le nombre d'excutions rptes de l'instruction 3 ne


dpend pas des calculs effectus par l'instruction 3.

Exemple : la squence d'instructions [ 2. 3. 4.] est


itre dans l'algorithme Test-Carr-Parfait}.
!

Le nombre d'excutions rptes de [ 2. 3. 4.] dpend


des calculs effectus par la squence elle-mme.

49
Universit PARIS-SUD - Licence MPI - S1

Itration : tant que

Itration : Rpter jusqu


Rpter

Tant que (expression)

Instructions

Instructions

jusqu (expression)

fin tant que


!

Attention
!

Attention
!

Initialiser les variables testes dans lexpression


Modifier les variables dans la boucle pour quelle sarrte.

!
!

Exemple : calcul de factorielle

Lexique : N, Res entier;


ecrire ("entrez N") ; lire (N);
Res!1;
Tant que (N>0)
Res!Res*N;
N!N-1;
Fin tant que
!

50
Universit PARIS-SUD - Licence MPI - S1

Initialiser les variables testes dans lexpression avant le rpter


Modifier les variables dans la boucle pour quelle sarrte.
On excute des instructions avant de tester lexpression

Exemple : calcul de factorielle


Lexique : N, Res entier;
ecrire ("entrez N") ; lire (N);
Res!1;
rpter
Res!Res*N;
N!N-1;
jusqu (N " 0);

Excution pour N=3, N=0.

Excution pour N=3, N=0;

51
Universit PARIS-SUD - Licence MPI - S1

52
Universit PARIS-SUD - Licence MPI - S1

Itration : Pour

Itration

Pour i allant de borne_inf borne sup (par pas de 1) faire


instructions
Fin pour
!

!
!

Exemple : calcul de factorielle

Lexique : N, Res, i entier;


ecrire ("entrez N") ; lire (N);
Res!1;
Pour i allant de 2 N faire
Res!Res*i;
Fin pour
!

Une criture concise pour la rptition de blocs


d'instructions
Il existe 2 sortes d'itration :
1. Le nombre de rptitions est fixe
!
!

faire N fois
en C : for

2. Le nombre de rptitions n'est pas fixe


Il dpend des calculs effectus par les instructions
rptes
! si ... alors repartir
! en C : while ou do...while
!

Excution pour N=3, N=0;

53
Universit PARIS-SUD - Licence MPI - S1

Itration-while
!

L'excution de cette itration s'effectue par :

1. valuation de la condition
2.
!
!

Le nombre de rptitions n'est pas fixe


do liste-instruction while (condition);

while (condition) bloc-instruction;


condition est une expression boolenne

L'excution de cette itration s'effectue par :


!

Itration - do...while

Le nombre de rptitions n'est pas fixe


!

54
Universit PARIS-SUD - Licence MPI - S1

1.- excution de la liste d'instructions


2.- valuation de la condition
3.-

si la condition est vraie alors excution du bloc-instruction et repartir


(recommencer) en 1.
si la condition est fausse alors l'excution est termine.

Tant que la condition est vraie, le bloc d'instructions est


excut.
A la sortie de la boucle, la condition est toujours fausse
( ne pas tester)

!
!

si la condition est vraie alors repartir (recommencer) en 1.


si la condition est fausse alors l'excution est termine.

Excuter la liste d'instructions tant que la condition est


vraie et toujours au moins une fois !!!

55
Universit PARIS-SUD - Licence MPI - S1

56
Universit PARIS-SUD - Licence MPI - S1

Itration - do...while
Exemple
Main () {
scanf("%d", &N);
Res = 1;
do {
Res = Res * N ;
N = N -1 ;
} while (N > 0) ;
printf("%d \n", Res);
}

Itration - for
Le nombre de rptitions est fixe
for (expr1; expr2; expr3;) {bloc-instructions}

L'excution de cette itration s'effectue par :


1.
2.
3.

// N est modifi
// N est test

Utilisation typique (boucle pour du langage de description


dalgorithme)
for (i=0; i<N; i=i+1) {bloc-instructions}
Remarque gnrale d'utilisation

Simulation de l'excution
!

initialiser le compteur d'itration par expr1


Tant que la condition expr2 est vraie, excuter le bloc d'instructions
Le compteur est modifi par expr3 chaque itration

Veiller ce que l'intervalle [dbut, fin] soit identifiable avant l'itration.

pour la saisie de 0 et pour la saisie de 5


57

Universit PARIS-SUD - Licence MPI - S1

58
Universit PARIS-SUD - Licence MPI - S1

Itration - for

Itration - for

Exemple
scanf("%d", &N) ; res = 1 ;
for (I = 2; I <=N; I = I + 1)
res = res * I ;
printf("%d \n", res);

Exemple d'itration avec dcrmentation

Simulation de l'excution (pour la saisie de 0 et pour la saisie de 5)

scanf("%d", &N) ; res = 1 ;


for (I = N; I >=2; I = I - 1)
res = res * I ;
printf ("%d", res);
Simulation de l'excution pour la saisie de 0 et pour la saisie de 5

Simulation par while


scanf("%d", &N) ; res = 1 ; I = 2 ;
while (I <= N)
{ res = res * I ;
I = I + 1;}
printf("%d", res);

Remarque gnrale
!

pour l'itration for, on peut mettre plusieurs autres variantes pour les
expressions expr1, expr2 et expr3.

59
Universit PARIS-SUD - Licence MPI - S1

60
Universit PARIS-SUD - Licence MPI - S1

Programmation de Test-Carr-Parfait
!

Rappel de l'algorithme

Programme Test-Carr-Parfait
#include <stdio.h> ;
// bibliothque
main() {
/* Test-Carr-Parfait : Ce programme vrifie si l'entier N est ou non un carr
parfait */
int N, I, J ;
// bloc dclaration
printf ("Donnez l'entier tester : ");
scanf("%d", &N);
// saisie de la valeur de N au clavier
I = 0;
// initialisation de I
J=0;
while (J<N) {
I = I+1 ;
J=I*I ;
}
if (J == N)
printf("%d est un carr parfait", N);
else
printf("%d n'est pas un carr parfait", N);
}

Dbut
1. I!0
Rpter
2.
J!I*I
3.
I!I+1
4. jusqu J # N
5a. Si J = N alors Reponse ! Vrai
5b. Sinon Reponse ! Faux
Finsi
Fin
61
Universit PARIS-SUD - Licence MPI - S1

Autres prog. de Test-Carr-Parfait


main(){

62
Universit PARIS-SUD - Licence MPI - S1

Imbrication de boucles

// Test-Carr-Parfait

Supposons que la multiplication soit interdite !

...

main(){ // Test-Carr-Parfait
...
I = 0;
// initialisation de I
do {
J=0;
for (k=1; k <= I; k = k + 1)
J = J + I;
// calcul de J=I*I par additions successives
I = I+1;
// incrmentation de I
}
while (J<N);
...

I = 0;
// initialisation de I
do {J = I * I ; I = I+1 ;} while (J<N);
...

}
main(){
// Test-Carr-Parfait
...
// enlever J de la dclaration
I = -1;
// initialisation de I
do I = I+1 ; while (I * I <N);
...

}
main(){

// Test-Carr-Parfait

...

for (I=0; I*I<N; I=I+1);

// BOUCLE AUTO-SUFFISANTE

La boucle for est imbrique dans la boucle do...while .

...

}
63
Universit PARIS-SUD - Licence MPI - S1

64
Universit PARIS-SUD - Licence MPI - S1

Tableaux mono-dimensionnels
!

Tableaux mono-dimensionnels

Dfinition
!
!

Le type tableau permet de reprsenter des fonctions


domaine fini
A chaque valeur d'un indice, le tableau associe une valeur
ou lment de tableau.

11

19

13

17

23

Dfinitions sur un exemple


!

Exemple
!

On peut reprsenter les N entiers premiers par :

!
!

main (){
...
const int N = 10;
int Tprem[N];

A chaque case i, le tableau fait correspondre un nombre


premier
Accessible par l'opration Tprem[i]
On peut changer la valeur d'une case par Tprem[i]=valeur
Le type des lments (ici entier) peut tre quelconque
Attention : les compilateurs C ne vrifient pas que lindice
est compris dans lintervalle dfini la dclaration du
tableau. Sil nest pas dans cet intervalle, il y a gnralement
erreur lexcution.

65
Universit PARIS-SUD - Licence MPI - S1

Tableaux mono-dimensionnels
!

Utilisation
!

Le programme Tableau est un exemple simple qui affiche


sur l'cran tous les lments du tableau des nombres
premiers Tprem

main() {
const int N = 10;
int Tprem [N];
Tprem[0] = 1;
Tprem[1] = 2; Tprem[9] = 2 ; // pas Tprem[10] !!!
int i;
for (i= 0; i < N; i = i +1)
printf("%d \n", Tprem[i]);
}
67
Universit PARIS-SUD - Licence MPI - S1

66
Universit PARIS-SUD - Licence MPI - S1

Tableaux mono-dimensionnels
Utilisation (suite)
!

Le programme TabCar compte et affiche le nombre de 'a' dans le


tableau Tcar

main(){
// programme TabCar
const int N = 100;
char Tcar [N];
int i, Nba;
Nba = 0;
for (i= 0; i < N; i = i +1)
if (Tcar[i] == 'a')
Nba = Nba + 1;
printf("le nombre de a est : %d", Nba);
}
68
Universit PARIS-SUD - Licence MPI - S1

Tableaux mono-dimensionnels

Tableaux multi-dimensionnels
!

Utilisation (suite)
!

Le programme PremCar vrifie et affiche si 'a' est prsent dans le


tableau Tcar

main(){
const int N = 100;
char Tcar [N];
int i ;

Dfinition

// programme PremCar

A chaque valeur d'un couple dindice, le tableau associe une


valeur ou lment de tableau.

Exemple
!

On peut reprsenter les N*M entiers par :

const int N = 3;
const int M = 4;
int Matrice[N] [M];

i = 0;
while ((i < N) && (Tcar[i] != 'a')) i = i + 1;
if (i == N) printf("a n'est pas dans le tableau " , i);
else printf("a est dans le tableau la pos %d ");
}
69
Universit PARIS-SUD - Licence MPI - S1

Tableaux multi-dimensionnels
0

Boucles imbriques et tableaux 2D

main () {
const int N = 3; //Attention a ne pas se melanger les pinceaux
const int M = 4; // entre les 2 dimensions !!!!
int Matrice[N] [M];
for (i= 0; i < N; i = i +1) {
for (j= 0; j < M; j = j +1) {
if (Matrice[i][j] ==0)
NbZero = NbZero+1;
}
}
printf("le nombre de 0 est : %d", NbZero);
}

11

34

25

33

12

Dfinitions sur un exemple


!
!

A chaque case i,j le tableau fait correspondre un nombre entier


Accessible par l'opration Matrice[i][j]
!

!
!

Les boucles imbriques permettent de parcourir un


tableau multi-dimensions.

70
Universit PARIS-SUD - Licence MPI - S1

i.e : grdnb = Matrice[1][6];

On peut changer la valeur d'une case par Matrice[i][j]=valeur


Le type des lments (ici entier) peut tre quelconque
71

Universit PARIS-SUD - Licence MPI - S1

72

Universit PARIS-SUD - Licence MPI - S1

Boucles imbriques et tableaux 2D


main () {
const int N = 7;
const int M = 7;
int Mat1[N] [M];
int Mat2[N-2] [M-2];
for (i= 1; i < N-1; i = i +1) {
for (j= 1; j < M-1; j = j +1) {
Mat2[i-1][j-1] =
(Mat1[i-1][j]+Mat1[i+1][j]+ Mat1[i][j-1]+Mat1[i][j+1])/4;
}
}
for (i= 0; i < N-2; i = i +1) {
for (j= 0; j < M-2; j = j +1) {
printf("%d ", Mat2[i][j]);
}
printf( "\n");
}

Tableaux multi-dimensionnels
!

Que fait ce code ?

!
!
!

main() {
const int N = 10;
const int M = 10;
int Matrice [N][M];
Matrice [0][0] = 1;
Matrice [1][0] = 2; Matrice [9][0] = 2 ; // pas Tprem[10] !!!

Matrice [1][9] = 2; Matrice [9][9] = 5 ; // pas Tprem[10] !!!


int i;
for (i= 0; i < N; i = i +1)
for (j= 0; j < M; j = j +1)
printf("%d \n", Matrice [i][j]);
}
74

Algorithmique

Les fonctions permettent:

Le programme Tableau2 est un exemple simple qui affiche sur l'cran


tous les lments du tableau des nombres Tprem

Universit PARIS-SUD - Licence MPI - S1

Gnralits sur les fonctions


!

73

Universit PARIS-SUD - Licence MPI - S1

Utilisation

de scinder un programme en plusieurs parties, et de


dcrire le droulement du programme principal de
faon claire
de mettre en commun des ressources entre
programmeurs
dviter des squences dinstructions rptitives
de spcialiser des squences dinstructions grce
leurs paramtres
de calculer des valeurs, et/ou dagir sur des objets

action NOM
{ DESCRIPTION DE LACTION}
Donnes : LES DONNES EN ENTRE
Rsultats : LE OU LES DONNES RETOURNEES
Dbut

INSTRUCTIONS (construisant la valeur des


donnes retournes)

Fin

75
Universit PARIS-SUD - Licence MPI - S1

76
Universit PARIS-SUD - Licence MPI - S1

Exemple

Algorithmique

action div
{ les variables rsultats q et r sont respectivement
calcules comme le quotient et le reste de la division
entire }
Donnes : a, b : entier;
Rsultats : q, r : entier;
Dbut
q !0;
tant que a"b faire
a ! a-b;
Appel :
q ! q+1;
fin tant que
div (125, 37, x, y);
r ! a;
77
Fin

Universit PARIS-SUD - Licence MPI - S1

Exemple

fonction NOM " type de retour


{ DESCRIPTION DE LA FONCTION}
Lexique : LES DONNES LOCALES
Dbut

INSTRUCTIONS

retourner variable;
Fin
78
Universit PARIS-SUD - Licence MPI - S1

Particularits des fonctions en C

fonction puissance " entier


{ calcul la puissance n dun entier a donn }
Lexique: res, i : entier;
Dbut
res ! 1;
pour I allant de 1 a N faire
res ! res*a;
fin pour
Appel :
retourner res;
x=puissance (125, 37);
Fin

!
!
!

Types de modules: les fonctions et


procdures ne sont pas distingues
Mode de transmission des arguments:
uniquement par valeur
Variables globales: accessibles toutes les
fonctions

79
Universit PARIS-SUD - Licence MPI - S1

80
Universit PARIS-SUD - Licence MPI - S1

Types de modules
!

Transmission des paramtres

Les fonctions fournissent un rsultat (valeur de retour),


calcul partir des valeurs de ses paramtres, qui peut
ensuite apparatre dans une expression.
Typiquement, les procdures des autres langages
ralisent des actions, mais en pratique rien nempche
les fonctions den raliser galement.
En C, il nexiste que la notion de fonction:
!
!
!
!

la valeur de retour dune fonction peut tre ignore (ex:


printf)
une fonction peut ne retourner aucune valeur
une fonction peut retourner une valeur non scalaire (ex:
structures)
une fonction peut modifier (indirectement) les valeurs de
certains paramtres

En C, la transmission des paramtres se fait uniquement


par valeur:
!

les valeurs des paramtres passs lors de lappel dune


fonction sont copies localement la fonction, et les copies
sont ensuite utilises en lecture/criture
toute modification des valeurs est perdue lorsque la
fonction se termine

Il est nanmoins possible de modifier les paramtres


dune fonction grce la notion de pointeur (variable
pointant en mmoire vers un objet dun certain type):
!
!

la fonction peut alors oprer en lecture/criture sur lobjet


point par le pointeur
les modifications sont alors effectues sur lobjet dorigine,
et restent donc effectives aprs la fin de la fonction

81

Universit PARIS-SUD - Licence MPI - S1

Dfinition dune fonction


!

82
Universit PARIS-SUD - Licence MPI - S1

Paramtres dune fonction

Syntaxe gnrale:

<type-de-retour> <nom>(<liste-paramtres>)
<instructions>
!

Ex:

/* dfinition dune fonction abs retournant un


entier et prenant deux entiers comme paramtres */
int abs(int a, int b) {
/* corps de la fonction */
if (a > b)
return (a b);
return (b a);

Tout type dobjet peut tre pass comme


paramtre dune fonction:

Universit PARIS-SUD - Licence MPI - S1

!
!

types de base (variantes de int, float, double, char)


structures
tableaux
pointeurs

Les dclarations des paramtres, spares par


des virgules, associent un spcificateur de type
un dclarateur (nom de variable)
Un liste de paramtres vide est possible

83

84
Universit PARIS-SUD - Licence MPI - S1

Linstruction return
!

Dclaration dune fonction

Syntaxe:

return [expression];
!

Instruction de rupture de squence:


!
!
!

valuation de expression si elle est prsente


conversion dans le type de retour de la fonction si ncessaire
retour la fonction appelante

Nombre doccurrences dans une mme fonction:


plusieurs instructions return sont possibles
! labsence dinstruction return provoque un retour la
fonction appelante la fin du bloc dinstructions de la
fonction
Une fonction qui retourne une valeur doit ncessairement
contenir au moins une instruction return.

La dclaration dune fonction est ncessaire pour que


le compilateur puisse ensuite grer les appels qui lui
sont faits.
La dfinition de fonction vaut dclaration (donc la
redclaration est permise), mais il est en gnral
conseill davoir :
!

les dclarations de fonctions dans les fichiers enttes (.h )


les dfinitions de fonctions dans les fichiers sources (.c )

La porte dune dclaration de fonction:


!

valable pour toute la partie du fichier source qui suit la


dclaration

85
Universit PARIS-SUD - Licence MPI - S1

Exemples de porte des dclarations de fonctions (1/2)

/* dclaration de maFonction */
int maFonction(int val);
int main() {
/* maFonction est accessible ici */
}
void autreFonction() {
/* maFonction est accessible ici */
}

86
Universit PARIS-SUD - Licence MPI - S1

toto.c

Exemples de porte des dclarations de fonctions (2/2)


int main() {
/* maFonction nest pas connue ici */
}
/* dclaration de maFonction */
int maFonction(int val);
void autreFonction() {
/* maFonction est accessible ici */
}

87
Universit PARIS-SUD - Licence MPI - S1

toto.c

88
Universit PARIS-SUD - Licence MPI - S1

Prototype de fonction
!

Il est recommand de dclarer une fonction sous forme de


prototype qui spcifie:
!
!
!

Passage de paramtres
!

le type de la valeur de retour


le nom de la fonction
le type des paramtres de la fonction

Les paramtres de fonction sont toujours passs par


valeur:
!
!

Ex:
int maFonction(int par1, float par2);
/* maFonction retourne une valeur de type int, et prend deux
paramtres de type int et float */

!
!

Note: les identificateurs de paramtres sont optionnels dans une


dclaration. Ils sont nanmoins recommands pour rendre les
dclarations plus faciles interprter.
Note: une fonction ne peut avoir quun seul prototype complet
valide en C. En C++, la surdfinition de fonction permet de
dfinir une fonction par son nom et le type de ses arguments.
89

Universit PARIS-SUD - Licence MPI - S1

!
!

!
!

les tableaux ne sont pas passs par valeur (voir plus loin)
les structures sont effectivement passes par valeur, ce qui
implique la recopie de lensemble des champs de la
structure
90

Exemple de porte des variables locales

Les variables locales appartiennent au bloc dans


lequel elles sont dclares (par exemple, le bloc
de dfinition dune fonction).
Les paramtres formels se comportent comme
des variables locales.
Porte dune variable locale:
!

Cas particuliers:

Universit PARIS-SUD - Licence MPI - S1

Variables locales
!

si le paramtre est une expression, celle-ci est dabord


value
la valeur du paramtre est si besoin convertie dans le type
prcis par le prototype de la fonction
cette valeur est utilise comme valeur initiale pour le
paramtre formel (celui de la dfinition de la fonction)
toute modification du paramtre formel na aucune
incidence sur le paramtre effectif du contexte appelant

elle est visible depuis sa dclaration jusqu la fin


du bloc o elle est dclare
elle peut masquer des variables issues des contextes
englobants (cf. exemple suivant)

int a, b; /* variables globales */


void main() {
int b, c; /* variables locales main */
/* ici b se rfre la variable locale main */
{
long a, c;
/* ici a et c se rfrent aux variables locales au bloc */
/* b se rfre la variable locale main */
}
/* ici b et c se rfrent aux variables locales main */
/* a se rfre la variable globale */
}

91
Universit PARIS-SUD - Licence MPI - S1

92
Universit PARIS-SUD - Licence MPI - S1

Qualit d'un programme


!
!
!

Test de programme - Trouver les fautes

Le programme est-il une bonne traduction de


l'algorithme ?
Le programme produit-il toujours la solution du
problme ?
Le programme est-il performant ? Fait-il des actions
inutiles ? Utilise-t-il des variables sans en avoir
rellement besoin ?
La validation, vrification, test de programme sont des
tches trs complexes qui s'appliquent de faon
beaucoup plus gnrale ... tout au long du cycle de vie
du logiciel !

Test statique (lecture attentive du texte du


programme)
! le type des variables
! usage des variables

Test dynamique (excution du programme)


1. choisir un jeu de tests (les entres tester)

test structurel (texte et structure du programme)


test fonctionnel (spcification, algorithme)
test alatoire ou statistique

2. traitement/excution du jeu de tests


3. analyse (dpouillement) des rsultats du jeu de tests

93
Universit PARIS-SUD - Licence MPI - S1

Test structurel - Trouver les fautes


!

Un exemple plus labor

Impossible d'essayer toutes les valeurs possibles en entre !


!

Un jeu de test est un ensemble reprsentatif de valeurs d'entres


permettant de gnrer tous les types d'excution du programme : de
couvrir toutes les instructions et enchanements d'instructions

Mini-exemple
(1) scanf("%d", &I);
(2) if (I <= 10)
(3)
bloc1 ;
else
(4) bloc2 ;
!

- squence 1.2.3
valeurs test de I : -435 , 10
- squence 1.2.4
valeurs test de I : 832
Avertissement
! 0 est un entier particulier, mais ici ce n'est pas une valeur de test
plus intressante que -435 !
95
Universit PARIS-SUD - Licence MPI - S1

94
Universit PARIS-SUD - Licence MPI - S1

(1) scanf("%d", &I); scanf("%d", &J); K= 0; signe = 1;


(2) if (I < 0) {
(3)
signe = -1 ;
(4)
I = - I;
(5)}
(6) if (J < 0) {
(7)
signe = -signe ;
(8 )
J = - J;
(9) }
(10) while (I >= J) {
(11) I = I - J ;
(12) K = K+1;
(13)}
(14) K = signe * K; printf("%d", K) ;
Universit PARIS-SUD - Licence MPI - S1

96

Un exemple plus labor


!

!
!
!

squence 1.2.3.4.5.6.7.8
squence 1.2.4.6.8
squence 1.2.3.4.6.8
squence 1.2.4.5.6.8

...
!
!

(1) if ( (I==0) || (I==36 ))


(2) bloc1
else
(3) bloc2

jeu de tests
!

Test des conditions


valeurs test : ...
valeurs test : ...
valeurs test : ...
valeurs test : ...

!
!

...
squence 1.2.4.6.7.6.8
squence 1.2.3.4.5.6.7.6.8

...

Jeu de tests

valeurs test : ...


valeurs test : ...

squence 1.2 valeurs test de I : 0


Ne pas ngliger la valeur test 36 pour I afin que le bloc1 soit test pour
les deux valeurs 0 et 36 qui rendent la condition vraie.

Rgle gnrale
!

Gnrer les tests qui permettent d'explorer toute la table de vrit d'une
expression boolenne partir des conditions lmentaires.

...
97

Universit PARIS-SUD - Licence MPI - S1

Complexit et cots des algorithmes


!

Un problme peut avoir une solution mais pas de


solution algorithmique (on ne sait pas construire la
solution).

Exemple (problme de l'arrt) :


!

!
!

98
Universit PARIS-SUD - Licence MPI - S1

Complexit et cots des algorithmes

Considrons la fonction boolenne 2 arguments. Le


premier argument est un programme C. Le deuxime
argument est une entre pour ce programme.
Cette fonction vaut vraie si le programme s'arrte pour
l'entre donne et faux sinon.
Il est impossible d'crire un algorithme (et un programme C)
qui ralise cette fonction.

Un problme peut avoir une solution


algorithmique mais cet algorithme peut ne pas
tre raisonnable parce qu'il effectue un nombre
trs grand d'oprations.

Exemple (programme de jeux):


!

Jeu d'chec. A chaque tape, il existe un nombre


fini de coups possibles. Donc il est possible
d'explorer la suite du jeu pour chaque coup. Mais il
faut examiner de l'ordre de 1019 coups pour dcider
de chaque dplacement.

99
Universit PARIS-SUD - Licence MPI - S1

100
Universit PARIS-SUD - Licence MPI - S1

Cot en temps d'un algorithme


!

unit de mesure : opration lmentaire


!

Algorithme d'Euclide

identifier les oprations lmentaires

calcul du cot
!

cas le pire = compter le nombre maximal


d'oprations lmentaires effectues par une
excution (la pire)
moyenne = considrer toutes les excutions
possibles, pour chacune compter le nombre ...

101
Universit PARIS-SUD - Licence MPI - S1

Entre I, J : entier
Auxiliaire K entier

//Calcul du pgcd de i et j
Sortie P : entier

dbut
tant que J > 0 faire
K ! I mod J;
I !J ; J ! K ;
P ! I;
fin
Nombre d'itrations ?
103
Universit PARIS-SUD - Licence MPI - S1

102

Universit PARIS-SUD - Licence MPI - S1

Algorithme d'Euclide
Algorithme PGCD-2

Algorithme PGCD-1
//Calcul du pgcd de i et j
Lexique I, J : entier // Entres
P : entier // Sortie
dbut
tant que I ! J faire
si I > J alors
I!I-J
sinon
J ! J - I;
P ! I;
fin
Nombre d'itrations ?

Você também pode gostar