Vous êtes sur la page 1sur 105

HEPCUT CAT.

ECONOMIQUE

Analyse et conduite de projet algorithmique


Jean-Franois CHALLE, maitre assistant
1re Informatique classe 1 A & B

2009

ISEC-HEPCUT

Catgorie : Type : Section : Enseignant : Anne : Fonction : Activit denseignement : Nombre dheures : Nombre de crdits :

Informations pdagogiques destination des tudiants

conomique court informatique Jean-Franois Challe 1re matre-assistant analyse et conduite de projets algorithmique 120 10

Etalement en quadrimestre 1er quadrimestre : 2me quadrimestre : 1me et 2me quadrimestre : 60 60 120 Non

PREREQUIS (Article 11 de lAGCF du 02/07/1996) dans le cadre des crdits rsiduels :

1. Objectifs de lactivit denseignement


Lactivit denseignement vise permettre ltudiant de : dvelopper des comportements professionnels ; prendre conscience des comptences dvelopper pour rpondre lvolution de la technique ; mettre en uvre des mthodes spcifiques pour : apprhender, globalement, la diversit des techniques requises par la fonction de programmation dans le secteur informatique ; dvelopper des comptences de base applicables dans tous les langages procduraux ; adopter une dmarche algorithmique cohrente ;

2 Dfinition des pr-requis (comptences et contenus)


Les comptences requises sont de deux ordres. Dune part des comptences en langue franaise et dautre part des comptences en mathmatiques. Face un document de plusieurs pages rdig en franais, ltudiant doit tre capable : de rpondre des questions de comprhension portant sur les liens logiques entre les ides dveloppes ; de rdiger un commentaire critique portant sur les ides essentielles du texte ; dtablir un plan de la structure du texte et de le justifier. Lalgorithmique et linformatique puisant leurs racines dans le domaine des mathmatiques, ltudiant doit matriser lapplication des notions suivantes : les fonctions polynomiales ; lalgbre linaire (les vecteurs, les matrices, les dterminants, les systmes dquations linaires) ; les fonctions de R dans R, graphe de la fonction, domaine de dfinition, variation,

croissance, parit, continuit ; les suites, les sries et les logarithmes.

3 Place de lactivit denseignement dans lensemble de la formation


Lalgorithmique est la cl de vote de linformatique aussi bien dans le domaine de la programmation que dans ltude des systmes dexploitation, des rseaux et des bases de donnes. De bonnes comptences en algorithmique permettent dapprhender les autres disciplines propres la formation, non pas comme des ensembles disjoints de matires mmoriser, mais comme un ensemble cohrent et logique. Ltude de linformatique laisse ainsi peu de place la mmorisation en incitant la rflexion logique.

4 Comptences minimales qui devront tre matrises la fin de lactivit denseignement


Pour atteindre le seuil de russite, ltudiant devra prouver quil est capable, face un problme de : mettre en uvre une stratgie cohrente et efficace de rsolution du problme pos ; concevoir, de construire et de reprsenter les algorithmes dans un langage de description proche des langages de programmation usuels ; justifier la dmarche algorithmique et les choix mis en uvre ;

5 Mthodes et moyens didactiques


Dans un premier temps, lenseignement de lalgorithmique passe par un expos magistral des concepts de bases. Ds que les tudiants ont assimil les principes lmentaires, le cours passe dans une phase de pdagogie active. La didactique employe est une approche par problme enjoignant aux tudiants ltablissement de leur solution. Pour chaque problme pos, une ou plusieurs solutions sont proposes en guise de correction. La diversit des solutions prsentes engendre une rflexion sur la qualit des algorithmes. Cette qualit est dans un premier temps mesure de manire qualitative mais trs rapidement une approche quantitative est prfre. Toutes les sances de cours sont mises profit pour aborder un nouveau sujet, un nouveau problme. Cela permet ltudiant de comprendre quune tude base sur la mmorisation nest pas la cl du succs. Cette approche mthodologique se justifie par le fait que lalgorithmique nest pas un savoir acqurir mais bien un savoir-faire. De cette manire, les tudiants sont placs en situation dexamen lors de chaque sance. Des exercices dauto-valuation sont organiss durant lanne. Cela permet ltudiant de se familiariser avec la mthode dinterrogation ainsi quavec celle dvaluation avec pour consquence la prise de conscience bilatrale de la situation de ltudiant.

6 Contenu de lactivit denseignement


Voici les points abords dans le cadre de ce cours : les variables ; les structures de programmation (la squence, les alternatives, les rptitives) ; la dcomposition dun problme en sous-problmes ; le contrle de la saisie dinformations ; la rcursivit ; les structures de donnes statiques (les vecteurs et les matrices) et les algorithmes spcifiques associs ;

les structures de donnes dynamiques (les listes et les arbres) et les algorithmes spcifiques associs ;

Rfrences
[1] KYLE LOUDON, MASTERING ALGORITHM WITH C, OREILLY, PARIS 1999. [2] ROBERT SEDGEWICK, ALGORITHMS IN C, ADDISON-WESLEY, LONDON 1990. [3] THOMAS CORMEN, CHARLES LEISERSON, RONALD RIVEST, AN INTRODUCTION TO ALGORITHMS, MIT PRESS, LONDON, 1990. [4] DONALD E. KNUTH, THE ART OF COMPUTER PROGRAMMING VOLUME 1 FUNDAMENTAL ALGORITHMS, ADDISON-WESLEY, LONDON 1973. [5] DONALD E. KNUTH, THE ART OF COMPUTER PROGRAMMING VOLUME 2 SEMINUMERICAL ALGORITHMS, ADDISON-WESLEY, LONDON 1981. [6] DONALD E. KNUTH, THE ART OF COMPUTER PROGRAMMING VOLUME 3 SORTING AND SEARCHING, ADDISON-WESLEY, LONDON 1973. [7] IAN PARBERRY, WILLIAM GASARCH, PROBLEMS ON ALGORITHMS, PRENTICE HALL, DENTON, 2002. [8] STEVEN S. SKIENA, THE ALGORITHM DESIGN MANUAL, SPRINGER-VERLAG, NEW YORK, 1997. [9] ROBERT SEDGEWICK, ALGORITHMS IN C++, ADDISON-WESLEY, LONDON, 1999. [10] ROY A. PLASTOCK, GORDON KALLEY, THEORY AND PROBLEMS OF COMPUTER GRAPHICS, MACGRAW-HILL, NEW YORK, 1986. [11] SEYMOUR LIPSCHUTZ, THEORY AND PROBLEMS OF DATA STRUCTURES, MACGRAW-HILL, NEW YORK, 1986. [12] ROBERT SEDGEWICK, ALGORITHMS, ADDISON-WESLEY, LONDON, 1983. [13] ROBERT SEDGEWICK, ALGORITHMS IN JAVA, ADDISON-WESLEY, BOSTON, 2002. [14] DOUGLAS BALDWIN, GREG W. SCRAGG, ALGORITHMS AND DATA STRUCTURES : THE SCIENCE OF COMPUTING, CHARLES RIVER MEDIA, HINGHAM, 2004. [15] P. S. DESHPANDE, O. G. KAKDE, C & DATA STRUCTURES, CHARLES RIVER MEDIA, HINGHAM, 2004. [16] ALAN PARKER, ALGORITHMS AND DATA STRUCTURES IN C++, CRC PRESS, HUNTSVILLE, 1993. [17] MI LU, ARITHMETIC AND LOGIC IN COMPUTER SYSTEMS, JOHN WILEY & SONS, HOBOKEN, 2004. [18] WALLACE WANG, BEGINNING PROGRAMMING FOR DUMMIES, WILEY PUBLISHING, HOBOKEN, 2004. [19] ADRIAN AND KATHIE KINGSLEY-HUGHES, BEGINNING PROGRAMMING, WILEY PUBLISHING, INDIANAPOLIS, 2004. [20] BRUNO R. PREISS, DATA STRUCTURES AND ALGORITHMS WITH OBJECT-ORIENTED DESIGN PATTERNS IN C++, WILEY PUBLISHING, WATERLOO, 2002. [21] BRUNO R. PREISS, DATA STRUCTURES AND ALGORITHMS WITH OBJECT-ORIENTED DESIGN PATTERNS IN JAVA, WILEY PUBLISHING, WATERLOO, 2002. [22] FRANCIS GLASSBOROW, ROBERTA ALLEN, A BEGINNERS INTRODUCTION TO COMPUTER PROGRAMMING, JOHN WILEY AND SONS, CHICHESTER, 2004. [23] NELL DALE, C++ PLUS DATA STRUCTURES, JONES AND BARTLETT PUBLISHERS, LONDON, 2003. [24] JIM KEOGH, KEN DAVIDSON, DATA STRUCTURES DEMYSTIFIED, MCGRAW-HILL, NEW YORK, 2004. [25] JOHN NOLT, DENNIS ROHATYN, ACHILE VARZI, THEORY AND PROBLEMS OF LOGIC, MACGRAW-HILL, NEW YORK, 1992. [26] JOHN R. HUBBARD, THEORY AND PROBLEMS OF PROGRAMMING WITH C++, MACGRAW-HILL, NEW YORK, 1996. [27] DANIEL P. FRIEDMANMITCHELL, WANDCHRISTOPHER T. HAYNES, ESSENTIALS OF PROGRAMMING LANGUAGES, THE MIT PRESS, LONDON, 2001. [28] MATTHIAS FELLEISEN, ROBERT BRUCE FINDLER, MATTHEW FLATT, SHRIRAM KRISHNAMURTHI, HOW TO DESIGN P ROGRAMS AN I NTRODUCTION TO C OMPUTING AND PROGRAMMING , THE MIT P RESS , LONDON, 2001. [29] HAROLD ABELSON, GERALD JAY SUSSMAN, JULIE SUSSMAN, STRUCTURE AND INTERPRETATION OF COMPUTER PROGRAMS, THE MIT PRESS, LONDON, 1996. [30] JON ORWANT, JARKKO HIETANIEMI, JOHN MACDONALD, MASTERING ALGORITHMS WITH PERL,

OREILLY, SEBASTOPOL, 1999. [31] PETER DRAKE, DATA STRUCTURES AND ALGORITHMS IN JAVA, PRENTICE HALL, UPPER SADDLE RIVER, 2006. [32] IAN PARBERRY, WILLIAM GASARCH, PROBLEMS ON ALGORITHMS, PRENTICE HALL, DENTON, 1994.

7 Evaluation
Interrogation(s) dispensatoire (s)
12/20

Travail anne % par rapport la note totale X X X X X

Examen % par rapport la note totale Tout 100% V X 4h X

Matire faisant X lobjet de lvaluation X Ecrit X Oral X Dure X Questionnaire Aucune drogation aux rgles ci-dessus ne sera admise.

Dfinition :

Chapitre 1 : Entre Traitement Sortie : Notion de base


Algorithme : mthode compos dun nombre fini dtape en 1 temps fini.

Algorithme n 01 : Afficher la somme de deux nombres.


Dbut a, b : Ecrire Lire a Ecrire Lire b Ecrire Fin entier "1re valeur :" "2me valeur :" "Rsultat " a+b

Remarque : A la dfinition des variables, beaucoup de langage de programmation remplissent les nouvelles variables avec un "Je ne sais quoi" c'est--dire un chiffre qui n'a pas encore tait entr, elle n'est donc pas vide.

Algorithme n 02 : Afficher effectuer une sommes de deux nombres mais affecter cette valeur dans une variable.
Dbut a, b, c : entier Ecrire "1re valeur :" Lire a Ecrire "2me valeur :" Lire b c a + b Ecrire "Rsultat " c Fin

Symbole

Affecter, assigner, donner

Rgle n01

Entre

Traitement

Sortie

Algorithme n 03 : Comparer le rsultat entre une rsolution de type PC (C) et une rsolution de type algorithmique.
Dbut x, y, z : rel x 1000/3 Y x*333 Z 3*y-1 Ecrire z Fin
3 * ( x - 333 ) - 1 3*(1000/3-333 ) - 1 1000 - 999 - 1 0

0,000 031

Algorithme 4 : Inverser le contenu de 2 variables (avec une variable temporaire).


Dbut a, b, tmp: entier Ecrire "2 Valeurs" Lire a, b tmp a a b b tmp Ecrire a, b Fin Dbut a, b, tmp: entier Ecrire "2 Valeurs" Lire a, b tmp b b a a tmp Ecrire a, b Fin

OU

Algorithme 5 : Inverser le contenu de 2 variables (sans variable temporaire).


Dbut Faire la preuve Pour vrifier, il faut tre formelle et cela grce avec la mthode de remplacement avec des lettres. a, b: entier Ecrire "2 Valeurs" Lire a, b b a + b a b a a + b - a b b a a + b - a Ecrire a, b Fin

Algorithme 6 : l'incrmentation
Dbut a : entier Ecrire "Entrez A" Lire a a a + 1 Dbut Ecrire a a, b : Ecrire Lire a b a Ecrire Fin

Fin

entier "Entrez A" + 1 b

Algorithme 7 : Calculer la somme des n premier nombre impaire


Un nombre impaire est par formule = 2 1 0 Ds lors =1(2i 1) = =1 2i =1 1 n, s : entier Ecrire "La valeur de n" Lire n s n Ecrire s Fin = 2 =1 i n =
2 n ( n+1 ) 2

Dbut

n = n

Algorithme 8 : Ecrire un algorithme dfinissant les variables entires a et b cette algorithme effectuera les oprations suivante : a + b; a b; a * b; a / b; a mod b.
Dbut a, b, d, p, q, r, s : entier Ecrire "A et B" Lire a, b s a + b d a b p a * b q a / b r a mod b Ecrire d, p, q, r, s Fin

!!! Attention !!! En ce qui concerne la division et le modulo (le calcule du reste), il est impossible d'effectuer une division ou modulo par 0, et donc on va ajouter une mthode pour rendre l'algorithme intelligent, et va donc vrifier si l'utilisateur n'a pas mis un 0. Ce sujet sera abord dans la 2me partie

Algorithme 9 : Ecrire un algorithme calculant la somme de n premier nombre.


Dbut a, b,: entier Ecrire "A" Lire a b (a (a + 1)) / 2 Ecrire b Fin

Algorithme 10 : Ecrire un algorithme la somme des carrs de n premier nombre entier.


Dbut n, b : entier Ecrire "N" Lire n b (n(n+1)*(2*n+1))/6 Ecrire b Fin

Algorithme 11 : Ecrire un algorithme de conversion de F en C


Dbut c, f : rel Ecrire "en F" Lire f c (5*(f-32))/9 Ecrire c Fin

En algorithme tous comme les langages de programmations, la rgle des priorits en vigueur. Exposant Racine Parenthse Produit Division Somme Diffrence Il faut donc utiliser des parenthses pour les fractions.

Algorithme 12 : Ecrire un algorithme qui affiche la rsistance quivalente 3 rsistances r1, r2, r3 si elles sont branches en srie et en parallle.
Dbut r1, r2, r3, p, s: entier Ecrire " r1, r2, r3 " Lire r1, r2, r3 s r 1 + r2 + r 3 p (r1 + r2 + r3)/( r1* r2+ r1* r3+ r2* r3) Ecrire p, s Fin

Algorithme 13 : Ecrire un algorithme qui calcule et affiche la distance entre


2 point a et b du plan dont les coordonnes sont .

Dbut x1, x2, y1, y2, d: entier Ecrire " 2 points " Lire x1, x2, y1, y2 d (x1 x2) + ( y1 y2) Ecrire d

Fin 9

Algorithme 14 : Recherche la valeur de x dans une quation du 1er degr.


Dbut a, b, c, x : rel Ecrire "3 Valeurs" Lire a, b, c x (c-b)/a Ecrire x Fin
!!! ATTENTION !!! Si a est nul, le programme plantera et ne continuera pas. Car la division par 0 est impossible.

Chapitre 2 : La prise de dcision

Structure alternative : Organigramme 1re forme A

? Non C

Oui

Les Conditions Affirmation Ngation (contraire de l'affirmation) = = < > > <

Algorithme 14 : Recherche la valeur de x dans une quation du 1er degr.

Ajout d'une notation : La structure Alternative. SI [condition] alors Si la condition est remplie (Vrai) Sinon Si la condition n'est pas remplie (Faux) FSi

Dbut a, b, c, x : rel Ecrire "3 Valeurs" Lire a, b, c Si a b alors x (c-b)/a Ecrire x Fsi Fin

10

Algorithme 15 : Recherche la valeur de x dans une quation du 1er degr.


Structure alternative : Organigramme 2me forme
C Non A

Oui

Dbut a, b, c, x : rel Ecrire "3 Valeurs" Lire a, b, c Si a 0 alors x (c-b)/a Ecrire x Sinon Ecrire "Impossible de ralis l'opration." Fsi Dbut a, b, c, x : rel Ecrire "3 Valeurs" Lire a, b, c Si a = 0 alors Ecrire "Impossible de ralis l'opration." Sinon x <-- (b - c) / a Ecrire x Fsi

1re Possiblit

2me possibilit

Fin

Fin

Algorithme 16 : Connatre le signe d'un produit sans le calculer.


Dbut a, b: rel Ecrire "2 Valeurs" Lire a, b Si a 0 alors Si b 0 alors Ecrire '+' Sinon Ecrire '-' Fsi Sinon Si b 0 alors Ecrire '-' Sinon Ecrire '+' Fsi Fsi Fin Dbut
Dbut

a, b: rel c : caractre Ecrire "2 Valeurs" Lire a, b Si a 0 et b 0 alors c '+' Sinon Si a <0 et b < 0 alors c '+' Sinon Fin c '-' Fsi Fsi Fin

a, b: rel c : caractre Ecrire "2 Valeurs" Lire a, b Si (a0 et b 0) ou (a<0 et b<0) alors c '+' Sinon c '-' Fsi

OU
Condition 1 Condition 2 Rponse

ET et du OU : Tableau de vrit ET
Condition 1 Condition 2 Rponse

O O I I

O I O I

O I I I

O O I I

0 I O I

O O O I

Pour le Ou, il ne suffit que d'avoir une seule condition vrai et la rponse est vrai. Pour le Et, il est imprative que toutes conditions soient vrai pour envoy une rponse vrai.

11

Algorithme 17 : Connatre le signe d'une somme.


Etude des diffrents cas possibles I. II. III. IV. V. VI. VII. VIII. Analyse:
Dbut

+ + + + -

|a|<|b| dans les cas 1, 3, 5, 8 b > 0 (+) b < 0 (-) |a|>|b| dans les cas 2, 4, 6, 7 a > 0 (+) a < 0 (-)

a, b: rel c : caractre Ecrire "2 Valeurs" Lire a, b Si | | < || alors Si < 0 alors c '-' Sinon c '+' Fsi Sinon Si a < 0 c '+' Sinon c '-' Fsi Fsi Ecrire c Fin

Algorithme 18 : Le boolen
Les variables : Rel -> rel Entier Entier 1 caractre caractre Boolen Boolen
Dbut a, b : entier c : boolen Ecrire "2Valeurs" Lire a,b c (( 0 0) ( < 0 < 0) Ecrire c

Fin

12

Algorithme 19 : Connaitre le signe d'un nombre en du boolen


Dbut a, b : entier c : boolen Ecrire "2Valeurs" Lire a, b c (( 0 0) ( < 0 < 0) Ecrire c Si c alors 'Si c = vrai alors cela donne directement le vrai Ecrire '+' Sinon 'Si c = faux Ecrire '-' Fsi Fin

Algorithme 20 : Lisez 2 nombre, soustrayait le plus grand du plus petit et imprimez le rsultat.
Dbut a, b, c : rel Ecrire "2 Valeurs" Lire a, b Si a > b alors c b a Sinon c a -b Fsi Ecrire c Fin

Algorithme 21 : Ecrivez un Algorithme permettant d'obtenir les solutions rels d'une quation du seconde rel de la forme ax + bx c = 0.
Analyse
Dbut a, b, c, d, r1, r2 : rel Ecrire "ax + bx + c = 0" Lire a, b, c d = b - 4*a*c Si d > 0 alors r1 (-b + )/2 Sinon r2 (-b - )/2 Ecrire r1, r2 Si d = 0 alors r1 -b /2 Ecrire r1 Sinon Ecrire "Pas de rponse" Fsi Fsi Fin

ax + bx + c = 0 = 2 4. . >0: =0:
2 2

> 0 :

13

Algorithme 22 : Ecrivez un algorithme donnant les solutions rels d'une quation bi carre ax4 + bx + c = 0.
Dbut a, b, c, d, r1, r2 : rel Ecrire " ax4 + bx + c = 0" Lire a, b, c d b - 4*a*c Si d > 0 alors r1
+ 2 2

Analyse

ax4 + bx + c = 0 posons y = x
ay + by + c = 0 = 2 4. . >0: =0:
2 2

Sinon

r2

Ecrire r1, -r1, r2, -r2

Si d = 0 alors r1
2

> 0 : Et donc la rponse devra tre la racine carre de la rponse r1 et r2

Ecrire r1 Sinon Fsi Fsi Fin

Ecrire "Pas de rponse"

Algorithme 23 : Ecrivez un algorithme calculant l'inverse d'une valeur rel, cet algorithme ne doit jamais produire d'erreur.
Dbut a, b: rel Ecrire " 1 Valeur" Lire a Si a = 0 alors Ecrire "Erreur" Sinon b = 1/a Fsi Ecrire a Fin

Algorithme 24 : Ecrivez un Algorithme permettant d'lev un nombre une puissance quelconque cette algorithme ne doit jamais produire d'erreur.
Dbut a, b, c : rel Ecrire "2 valeurs" Lire a, b Si a = 0 alors Ecrire "Erreur" Sinon c = (log(, )) Ecrire c Fsi Fin

> 0
log

14

Algorithme 25 : Faire les sommes des N nombres.


i1 Dbut i, n, s: entier Ecrire "Valeur" Lire n Pour i de 1 n faire ss+1 FPour Ecrire S Fin ii+1 Oui Traitement

Chapitre 3 : Les itrations a bornes dfinies

Non

Algorithme 26 : Faire la moyenne arithmtique des tailles d'une classe.


Dbut i, n: entier s, v : rel Ecrire "Nombre" Lire n s0 Pour i de 1 n faire Ecrire "Taille" Lire v ss+v FPour ss/n Ecrire s Fin

15

Algorithme 27: Connatre le maximum d'une srie de valeur.


Dbut i, n, max, v: entier Ecrire "Nombre" Dbut Lire n i, n, max, v: entier Si n 0 alors Ecrire "Nombre" Ecrire "Valeur" Lire n Lire max max 0 (ou -) Pour i de 1 n faire Pour i de 1 n faire Ecrire "Taille" Ecrire "Taille" Lire v Lire v Si v > max alors Si v > max max v max v FSi FSi Copie de lentre. Il ne FPour FPour changera pas v (X2 v) si Ecrire max Ecrire max x2 change FSi Fin Fin

Algorithme 28: Connatre le minimum d'une srie de valeur.


Dbut i, n, min, v: entier Ecrire "Nombre" Dbut Lire n i, n, min, v: entier Si n 0 alors Ecrire "Nombre" Ecrire "Valeur" Lire n Lire max min + Pour i de 2 n faire Pour i de 1 n faire Ecrire "Taille" Ecrire "Taille" Lire v Lire v Si v > max alors Si v < min min v min v FSi FSi FPour FPour Ecrire min Ecrire min FSi Fin Fin

Algorithme 29 : Pouvoir donner l'infini.


Le float : la norme IEEE 754.

16

Algorithme 30 : Ecrire les x premiers nombre entier.


X = 20 Dbut i : entier pour i de 1 19 faire Ecrire i FPour Fin Fin X = 30 Dbut i : entier pour i de 1 29 faire Ecrire i FPour Fin X = Constante Dbut Constante n=50 i : entier pour i de 1 n-1 faire Ecrire i Fsi

Algorithme 31 : Afficher les nombres impaires et les nombres paires et compris entre 1 et n.

Dbut

Dbut i, n : entier Ecrire "Nombre" Lire n Pour i de 1 n faire Si i mod 2 = 0 alors Ecrire i Fsi FPour Pour i de 1 n faire Si i mod 2 0 alors Fin Ecrire i Fpour i, n : entier Ecrire "Nombre" Lire n Pour i de 2 n par pas 2 faire Ecrire i FPour Pour i de 1 n par pas 2 faire Ecrire i FPour

Fin

Algorithme 32 : Faire une table de multiplication.


Dbut i, j, n : entier Ecrire "Valeur" Lire Pour i de 1 n faire Pour j de 1 n faire Ecrire (i*j) 'Excut n FPour Fpour Fin

17

Algorithme 33 : Ecrivez un algorithme lisant un nombre entier et dterminant tout ces diviseurs. Dbut
Dbut i, n : entier Ecrire "Valeur" Lire n Pour i de 1 n faire Si n mod i = 0 alors Ecrire i FSi FPour Fin Fin i, n : entier Ecrire "Valeur" Lire n Pour i de 1 n/2 faire Si n mod i = 0 alors Ecrire i FSi FPour Ecrire n

Algorithme 34: Entrez n nombre formant un vecteur u, calculez la norme de ce vecteur. ( = )


Dbut i, n, u, s : entier Ecrire "Valeur" Lire n Pour i de 1 n faire Ecrire "U" Lire u s s + u FPour Fin Ecrire

Algorithme 35 : Ecrivez un algorithme calculant la somme des n


premiers terme de la srie harmonique. (+ = )

Dbut

i, n, s : entier Ecrire "Valeur" Lire n Pour i de 1 n faire s=s+ FPour Ecrire s Fin
1

18

Algorithme 36 : Ecrivez un algorithme qui traite n nombre rel positif ou ngatif, les nombres sont lues, n est dfini comme un constante en tte de l'algorithme. L'algorithme calcule la somme des nombres positif et la somme des nombres ngatifs, il crit ses sommes ainsi que le nombre d'lment de chaque une d'elle.
Dbut ip, in, sp, sn, v : rel n : entier Ecrire "Valeur" Lire n ip = 0 in = 0 Pour i de 1 n faire Ecrire "Valeur" Lire v Si v < 0 alors sn = sn + v in = in + 1 Sinon sp =sp+v ip=ip+1 Fsi FPour Ecrire sp"Somme positif pour "ip" nombre positif" Ecrire si"Somme ngative pour "is" nombre ngatif" Fin

Algorithme 37 : Ecrivez un algorithme qui vrifie cos 2x = 2 cosx 1.


sin Dbut Constante n = 360 i: entier x: rel x pour i de 1 n faire Ecrire cos(2*x), 2*cos(x)*cos(x)-1 x x + 2Pi/n fpour Fin

cos

19

Algorithme 38 : Le mathmaticien italien Leonardo Fibonatchi, qui vivait a Pise s'est pos le problme crucial de savoir combien de couple de lapin serait engendr au bout de n priode de reproduction. Il supposa pour cela que chaque couple peut engendre un nouveau couple partir de la 2me gnration. Autre hypothse nulle animal n'est suppose mourir pendant la priode tudie. Essay de trouve un algorithme de calcul de nombre reprsentant la population de la unime gnration. Dbut
F0 F1 F2 F3 F4 F5 F6 = = = = = = = 0 1 1 2 3 5 8 I, n, f0, f1,fn : entier Ecrire "n?" Lire n F0 0 F1 1 Fn n Pour i de 2 a n faire Fn f0 + f1 F0 f1 F1 Fn FPour Fin

F0 =0 F1 = 0 = 1 + 2

> 1

Algorithme 39: Ecrire un algorithme qui dessine un sapin de n range.


Dbut i, j, n: entier Ecrire "n?" Lire n Pour i de 1 n faire Pour j de 1 n i faire Ecrire " " FPour Pour j de 1 2i 1 faire Ecrire "*" Fpour Ecrire CRLF 'Passage la ligne Fpour Fin n-i * *** ***** ******* ********* *********** ************* i 1|1 2|3 3|5 4| 7 5|9

2i - 1

20

Algorithme 39: Ecrire un algorithme qui dessine un sapin de n range.


1 232 34543 4567654 567898765 67890109876 7890123210987 n-i i 1|1 2|3 3|5 n 4|7 5|9 6 | 13 2i - 1 Dbut i, j, n: entier Ecrire "n?" Lire n Pour i de 1 n faire Pour j de 1 n i faire Ecrire " " FPour Pour j de 1 2i 1 faire Pour k de 1 n faire Ecrire 10 mod i Pour k de n n-i Fpour Ecrire CRLF 'Passage la ligne Fpour Fin

21

Chapitre 5 : Boucle tant que


La boucle "tant que" t cre pour itre un ensemble vide. Si la condition est dj remplie avant d'arriver dans la boucle, la boucle ne sera pas excute.

Initiation

Algorithme 40 : Disposez une suite de nombre entr par l'ordinateur et additionn- les.
Dbut v, s: entier Ecrire "Valeur" Lire v s0 Tant que v 0 faire s s+v Ecrire "Valeur" Lire v FTant Ecrire s Fin.

Pas le dernier Oui Traitement

Non Traitement

Suivant

Fait dans un livre d'algorithme Dbut v, s: entier v0 s0 Tant que v 1 faire Ecrire "Valeur" Lire v Si v 1 alors s s+v Fsi FTant Ecrire s Fin.

Algorithme 41: Faire la moyenne de plusieurs cotes


Dbut v, cpt: entier s: rel cpt 0, s 0 Ecrire "Valeur" Lire v Tant que v 0 faire ss+v cpt cpt + 1 Ecrire "Valeur" Lire v FTant Si cpt 0 alors S s /cpt Ecrire s FSi Fin.

22

Dans un tant que on ne met pas de OU mais plutt des ET ainsi que d'utilis surtout des ngations. Tant que je ne suis pas arriv l'cole, je continue de march. Tant qu'il n'est pas 10h15 ou que je n'ai pas fini de termin mon cours, je ne m'arrte pas. Tant que l'eau n'est pas arrte, je continue de me laver

Algorithme 41 : Interactivit avec l'utilisateur Lui permettre un choix


Rappel : Table de vrit de ET O O O O I O I O O I I I Dbut Choix : entier Ecrire "Choisir" Lire choix Tant que choix 1 2 Ecrire "Choisir" Lire Choix Ftant Fin.

1 > 1 > 10 Pas possible < 1 > 10

2 Dbut c: entier Ecrire "Choix" Lire c Tant que pas ( 1 10) faire Ecrire "Choix" Lire c FTant Fin.

Algorithme 42 : Ecrivez un algorithme calculant le maximum et le minimum d'une srie de valeur termine par 0 (marque la fin par 0)
Dbut v, max, min Ecrire "Valeur" Lire v Max - Min Tant que v 0 faire Si v > max alors Max v 23 Fsi Si v < min alors Min v Fsi Ecrire "Valeur" Lire v Ftant Ecrire Max, min Fin

Algorithme 43: Concevez un algorithme comptant le nombre de couple LE d'une phrase termine par un POINT.
Dbut Cpt : entier c, p : caractre Cpt 0 P 'x' 'Tous sauf un "l" Ecrire "Phrase" Lire c Tant que . faire Si c = 'e' et p = 'l' alors Cpt cpt + 1 Fsi Pc Lire c Ftant Ecrire Cpt Fin.

Algorithme 44 : Ecrivez un algorithme comptant le nombre de mot d'une phrase termine par un point, les mots son sparez par au moins un espace.
Dbut Cpt : entier C, p : caractre Cpt 0 P'' Ecrire "Phrase" Lire c Tant que . faire Si (c ' 'and c = ' ') alors Cpt cpt + 1 Fsi Pc Lire c Ftant Ecrire Cpt Fin.

Algorithme 45 : Rdig un algorithme qui ralise le jeu suivant :


A tour de rle, l'ordinateur et le joueur choisissent un nombre qui ne peux prendre que 3 valeurs 0, 1, 2. Si la diffrence entre les nombre choisi vaut : - 2 : Le joueur qui a propos le plus grand nombre gagne un point

24

- 1 : Le joueur qui a propos le plus petit nombre gagne un point - 0 : Aucun point n'est marqu Le jeu se termine quand l'un des deux joueurs totalise 10 points. Ou quand l'tre Humain introduit un nombre ngatif indiquant sa volont d'arrt. Cos1 : Si ch < co alors Ph ph + 1 Sinon Po po + 1 Fsi FCase Fselon Ecrire po, ph Ecrire "Valeur" Lire Ch Co alatoire (0,2) Ftant Ecrire po, ph Fin.

Dbut Ph, po, ch, co: entier Ph 0 Po 0 Ecrire "Valeur" Lire ch Co alatoire(0,2) Tant que ph < 10 et ch 0 faire Selon |ch - co| C0s2: si ch > co alors Ph ph +1 Sinon Po po + 1 Fsi FCas

Algorithme 46 : Calcul par des soustractions successives le quotient entier et le reste de la division entier de deux entier entr au clavier.
15 4 15 4 3 3 Dbut Nbre1, nbre2, cpt : entier Ecrire "2Valeurs" Lire nbre1, nbre2 Cpt 0 Si nbre2 0 alors Tant que nbre1 > nbre2 Nbre1 nbre1 nbre2 Cpt cpt +1 FTant Ecrire Nbre1, cpt Sinon Ecrire "Impossible" Fsi Fin

15 -4 7 -4 3

Algorithme 47 : Lisez un nombre entier et dtermin s'il est premier.


Dbut N, i : entier Ecrire "Valeur" Lire n I2 Tant que n mod i 0 alors Ii+1 Ftant Si i = n alors Ecrire "Premier" Sinon Ecrire " pas premier" Fsi Fin Dbut N, i : entier Ecrire "Valeur" Lire n I2 Tant que n mod i 0 et alors I1+i Ftant Si alors Ecrire "Premier" Sinon Ecrire "Pas premier" Fsi Fin

25

Chapitre 6 : Boucle rpt jusqu' ce que


Initiation 1 1 1 1 + + + . 3 5 7 9 + 1 = (1) +1 2 1 = 1
=1

Suivant

Traitement

S0

1 1 1 1 + + + . 3 5 7 9

S1

Fin?

Algorithme 48: Calculer pi / 4


Dbut = 105 S0, S1 : rel i : entier S1 1 i0 Rpter S0 S1 ii+1 S1 S0 + (1) /(2 + 1) Jusqu' ce que |S0 S1| < Ecrire S0 Fin.

Le choix du "rpter jusqu' ce que" est bonne car il faut l'acquisition d'une deuxime valeur.

Algorithme 49 : Calculer pi / 4 avec un si


Dbut = 105 S0, S1 : rel i : entier S1 1 i0 Rpter S0 S1 ii+1 Si i mod 2 = 0 alors S1 S0 + 1 /(2 + 1) Sinon Dbut = 105 S0, S1 : rel I, signe : entier S1 1 i0 signe 1 Rpter S0 S1 ii+1 Signe - signe S1 S0 + Signe/(2i +1) Jusqu' ce que |S0 S1| < Ecrire S0 Fin.

S1 S0 - 1 /(2 + 1) Jusqu' ce que |S0 S1| < Ecrire S0 Fin. 26

Algorithme 50 : Ecrivez l'algorithme de Newton


Dbut Const E = 105 x0, x1, a : rel Ecrire "Valeur" Lire a x1 (1+a)/2 Rpter x0 x1 x1 (x0 +a/x0)/2 Jusqu' ce que |x0 x1| < E 0 1 Ecrire x0 | | 0 Fin.

L'algorithme de newton
1 + 2 + > 0 0 = 2 a=2 5 0 = = 2,5 2 5 24 + 5 = 5 + 8 1 1 = 2 2 2 5 2 41 = = 2.05 0 =
20

+ Algorithme 51 : Ecrivez un algorithme qui produit = =

41 4 20 + 41 = 41 + 80 1 2 = 20 2 20 41 2 = 2.0006

Utiliser par les processeurs afin de raliser les racines carrs. Car cette mthode amliore le rsultat dcimal !

Dbut Const = 105 x, x0, x1: rel i: entier Entrez "Valeur" Lire x Devient alors x1 1 i0 Rpter Temps : n X0 x1 ii+1 S1 s0 + /! Nn+1 Jusqu' ce que |x0 x1| < E Fin.

i1 I1 1 ----2i - 1

Mme nonc mais e diminuant les calculs Dbut Const = 105 x, x0, x1, y : rel i, j : entier Entrez "Valeur" Lire x x1 1, i0, y 1, j1 Rpter x0 x1 ii+1 Temps : 3n yy*x jj*i x1 x0 + j/y Jusqu' ce que |x0 x1| < E Fin.

27

1 Algorithme 52 : Ecrivez lalgorithme de + =() = 1 x + x - x + x4+ |x| < 1

Dbut Const = 105 x, S0, S1: rel n: entier Entrez "Valeur" Lire x S1 1 Devient alors n0 Rpter S0 S1 nn+1 S1 S0 + (-1)n xn Jusqu' ce que |S0 S1| < E Ecrire S0 Fin.

Dbut Dbut 5 Const = 10 Const = 105 x, S0, y, z, S1: rel x, S0, y, S1: rel n: entier Entrez "Valeur" Entrez "Valeur" Lire x Lire x S1 1 S1 1 y1 x -x n0 Rpter y -1 S0 S1 z1 yy*x Rpter S1 S0 + y S0 S1 Jusqu' ce que |S0 S1| < E nn+1 Ecrire S0 y=-y Fin. zz*x S1 S0 + y * z Jusqu' ce que |S0 S1|< E E Ecrire S0 Fin.

O U

Algorithme 52 : Ecrivez lalgorithme de + =() (

Dbut Const = 105 x, S0, S1: rel n: entier Entrez "Valeur" Lire x S1 x Devient alors n0 Rpter S0 S1 nn+1 S1 S0 + x2n+1 /(2n+1)! Jusqu' ce que |S0 S1| < E Ecrire S0 Fin.

+)!

Dbut Const = 105 X,s0, s1, y: rel N : entier Entrez "Valeur" Lire x S1 x N0 Yx J1 X-x*x Rpter S0 S1 Nn+1 Yy*x J j * 2n * 2n+1 S1 S0 + y / j Jusqu' ce que |S0 S1|< E Ecrire S0 Fin.

28

Algorithme 53 : Ecrivez lalgorithme de + =() (

Dbut Const = 105 x, S0, S1: rel n: entier Entrez "Valeur" Lire x Devient alors S1 x n0 Rpter S0 S1 nn+1 S1 S0 + x2n /(2n)! Jusqu' ce que |S0 S1| < E Ecrire S0 Fin.

Dbut Const = 105 X,s0, s1, y: rel N : entier Entrez "Valeur" Lire x S1 1 N0 Y1 J1 X-x*x Rpter S0 S1 Nn+1 Yy*x J j * (2n 1) * 2n S1 S0 + y / j Jusqu' ce que |S0 S1|< E Ecrire S0 Fin.

)!

Algorithme 54 : Ecrivez en algorithme qui dtermine les n premiers nombres de Hamming la suite doit tre cre selon lordre croissant de ces termes.
Dbut Vv/3 Nbre, r, n, i : entier Ftant Ecrire N Tant que v mod 5 = 0 faire Lire n Vv/5 I0 Ftant Et je fais nbre 2 Si v = 1 alors lhypothse Tant que n i faire Ecrire Hamming que n peut tre nul v nbre Ii+1 Tant que v mod 2 = 0 faire Fsi Vv/2 Nbre nbre +1 Ftant Ftant Tant que v mod 3= 0 faire Fin.

2, 3, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20,

La suite des nombres d Hamming est dfinie comme la squence ordonne des entiers naturels nadmettant dautres diviseurs premiers que 2, 3 et 5 de nombre naturel.

29

Dbut Nbre, r, n, i : entier Ecrire N Lire n i0 Et je fais nbre 1 lhypothse Rpter Nbre nbre +1 que n ne peut tre v nbre Tant que v mod 2 = 0 faire Vv/2 Ftant Fin.

Tant que v mod 3= 0 faire Vv/3 Ftant Tant que v mod 5 = 0 faire Vv/5 Ftant Si v = 1 alors Ecrire Hamming Ii+1 Fsi Jusqu ce que n = cpt

Algorithme 55 : Ecrivez un algorithme demandant lutilisateur un entier n et construisant un entier m compos des chiffres de n dans lordre inverse.
Dbut N, m, i : entier Entrez n Lire n M0 Tant que n 0 faire M m * 10 + n mod 10 N n /10 Ecrire m Ftant Fin

30

Les Bibliothques de Fonction

31

Algorithme 56 : Calcul de la distance entre deux points sur un plan.


Fonction Distance (x1, y1, x2, y2 : rel) rsultat rel D : rel D (1 2 )2 + (1 2 ) Rsultat d. FFonc

x1 x2 y1 y2 d

= (1 2 )2 + (1 2 ) X1 t X2 u Y1 v Y2 w Xd

t
Dbut t, u, v, w, x : rel Ecrire Valeurs 1er point Lire t, u Ecrire Valeurs 2eme point Lire v, w x Distance(t, u, v, w) Ecrire x Fin

Copie

Algorithme 57 : Procdure dchange.


tmp

Procdure Echange ( , ) Tmp : entier Tmp a A b B tmp FProc Dbut X, y entier Ecrire 2 Valeurs Lire x, y Echange (x,y) Ecrire x, y Fin

Ax By

y Tmp

Xd

a x

b Y

ax by

32

Algorithme 58 : Permutation cyclique de 3 nombres.


Procdure Echange ( , , , , : ) Tmp : entier Si s = g alors Tmp a A b B c C tmp Sinon Tmp c b a c b a tmp Fsi FProc Dbut X, y, z entier Sens : caractre Ecrire 3 Valeurs Lire x, y, z Ecrire Sens ? [g] = gauche - [d] = droite Lire Sens Echange (x,y,z, sens) Ecrire x, y, z Fin Procdure Echange (a,bentier) Tmp : entier Tmp a A b B tmp FProc Procdure eg( , , , ) Echange(a,c) Echange(a,b) Fproc Procdure ed( , , , ) Echange(a,c) Echange(b,c) Fproc Procdure Es( , , , , : ) Si s=g alors Eg(a,b,c) Sinon Ed(a,b,c) Fsi Fproc Fonction Es( , , , ) rsultat boolen Res : boolen Res V Si s=g alors Eg(a,b,c) Sinon Si s=d alors Ed(a,b,c) Sinon Res F Fsi Fsi Rsultat Res Fin

Es

Eg Ech Ech

Ech

Eg Es (g)

33

Algorithme 59 : Ecrivez un algorithme qui traite une fonction qui donne les racines carres dune fonction du second degr.
Fonction Eq2d ( , , , 1, 2 ) rsultat boolen
Res : booln Delta : rel Res V Delta b-4ac Si Delta 0 alors

Delta X1 (-b + delta) / (2*a) X2 (-b - delta) / (2*a) Sinon Res F Fsi Rsultat Res FFonc

Dbut A, b, c, x1, x2 : rel Ecrire 3Valeur Lire a, b, c Si Eq2d(a,b,c,x1,x2) alors Ecrire x1, x2 Sinon Ecrire Impossible dans R Fsi Fin

Algorithme 60 : Ecrivez une fonction dterminant la racine carre dun nombre par la mthode de Newton.
Fonction sqrt ( : ) rsultat rel

Const E=105 X0, x1 : rel Lutilisateur doit test si le X1 (1+a)/2 nombre a leve a la racine est Rpter positif ou nul X0 x1 X1 (X0 + a/x0)/2 Jusqu ce que |(x0 x1)/x0| < E Rsultat x1 FFonc

Algorithme 61 : Calcul de la distance entre deux point en utilisant la fonction racine carre
Fonction sqrt ( : ) rsultat rel
Const E=105 X0, x1 : rel X1 (1+a)/2 Rpter X0 x1 X1 (X0 + a/x0)/2 Jusqu ce que |(x0 x1)/x0| < E Rsultat x1 FFonc Fonction Distance (x1, y1, x2, y2 : rel) rsultat rel Rsultat sqrt ((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)) Rsultat d. FFonc

34

Algorithme 62 : Appel de fonction dans un appel de fonction


Dbut A, b, c : rel Lire a, b C sqrt (sqrt (a) + sqrt (b)) Ecrire c Fin

Algorithme 63 : Lincrmentation
Procdure Inc ( : entier) A a +1 FProc Dbut X : entier X 4 Inc(x) Ecrire x Fin Dbut X, y : entier X 2 Y 3 Inc (y+x) Fin

Impossible car on ne retourne quune seule valeur)

Algorithme 64 : Ecrivez une fonction recevant en paramtre une valeur entire n et calculant la somme des n premier entier, la valeur de retour de la fonction sera la somme recherche.
Fonction SomN (n : entier) rsultat entier X0,x1 : entier X0 0 Pour i de 1 a n faire X1 x0 + n FTant Rsultat x1 FFonc

Fonction spe ( n : entier) rsultat entier Rsultat n*(n+1)/2 FFonc

Algorithme 65 : Ecrivez une fonction dterminant de combien de chiffre est compos un nombre entier positif non nul.
Valeur planch Retire les nombres dcimaux Fonction nbrech (n : entier) rsultat entier Rsultat () + 1 FFonc

Pour obtenir le nombre de chiffre binaire sont ncessaire pour reprsent un nombre
Fonction nbrech_bien (n : entier) rsultat entier Rsultat 2 ()/10 2 + 1 FFonc

35

Algorithme 66 : Ecrivez une fonction dterminant si une anne est bissextile ou non.
Fonction bissextile (a : entier) rsultat boolen Rsultat a mod 400 = 0 ou (a mod 100 0 et a mod 4 = 0) FFonc

Algorithme 67 : Ecrivez une fonction dterminant le plus grand de deux nombres.


Fonction max (a, b : entier) rsultat entier R : entier R : entier Si a > b alors R b R a Si a > b alors Sinon R a R b Fin Fin Rsultat r Rsultat r FFonc FFonc

Algorithme 68 : Ecrivez une fonction dterminant le maximum de trois nombre


Fonction bissextile (a, b, : entier) rsultat entier R : entier Si a > b alors R a Sinon Si b > c alors R b Sinon R c Fin Rsultat r FFonc Fonction max (a, b : entier) rsultat entier R : entier Si a > b alors R a Sinon R b Fin Rsultat r FFonc Fonction max3 (a, b, c : entier) rsultat entier Rsultat max(max(a, b), c) FFonc

36

Algorithme 69 : Le mathmaticien Lonardo Fibonacci a dfini une suite de nombre qui porte son nom : crivez une fonction crivant le nime nombre le Fibonacci.
F0= 0 F1=1 Fn = Fn-1 + Fn-2 2 On inscrit ici n car si le n est infrieur 2 (0 ou 1), alors fn naurait pas tait calcul, et le programme retournera la valeur de n.
Fonction fibonacci ( : entier) rsultat entier F0, f1, fn, i : entier F0 0 F1 1 Fn n Pour i de 2 n faire Fn f1 + f0 F0 f1 F1 fn FPour Rsultat Fn FFonc

Algorithme 70 : Un nombre parfait est un nombre reprsentant la particularit dtre gale la somme de tous ses diviseurs except luimme, le premier nombre parfait est six, il est bien gale 1 + 2 + 3, 1 2 et 3sont bien les diviseurs de 6. Ecrivez une fonction qui dtermine si un nombre est parfait.
Fonction nparfait ( : entier) rsultat boolen I, nbre, sdiv: entier On aurait pu mettre Pour i de 1 n-1 faire n/2 au lieu de n-1 Si (n mod I = 0) alors SDiv SDiv + i Fonction nparfait ( : entier) rsultat boolen Fsi I, s: entier FPour S 1 Rsultat sdiv = n FFonc I 2 Tant que s < n faire Si n mod i alors S s + i Fsi I i + 1 Ftant Rsultat s = n et i > n/2 FFonc

37

Algorithme 71 : Les nombres de Fibonacci peuvent tre calcul au moyen du nombre dor qui pour valeur nombre de Fibonacci
+

. Ecrivez une fonction calculant le nime

Fonction fibonacci ( : entier) rsultat entier Const M = 1 - 5 G, n, m : rel J : entier G n n N m M Si i > 1 alors Pour j de 2 i faire n n *N m m * M FPour g O * (n/2 m/2) Fsi Rsultat FFonc Const O = 5/2 Const N = 1 + 5

Algorithme 72 : Ecrivez une fonction calculant le PGCD de deux entier A et B en utilisant les proprits suivantes :
= 0 = 0 2 = 0 , 2 2 2 = 0 2 , 2 = 0 2 2 0 2 0 (, ) , 2 2 = 0 2 0 ( , ) 2 0 > 2 0 (, ) 2 0 >
Fonction pgcd ( , : entier) rsultat entier P, r : entier P 1 Tant que que a 0 0 faire Si a mod 2 = 0 alors Si b mod 2 = 0 alors P 2 * p A a/2 B b/2 Sinon A a/2 FSi Sinon Si b mod 2 = 0 alors B b/2 Sinon Si a > b alors A ab Sinon B b-a Fsi Fsi Fsi FTant Si a = 0 alors R p * b Sinon R p * a Fsi Rsultat r FFonc

38

Algorithme 73 : Ecrivez une fonction : crivez une mthode de Plus Grand Commun Multiple par la mthode dEuclide. Cette mthode fait intervenir le reste de la division entier de a par b. Si le reste est nul alors b est le PGCB sinon on remplace A par B et B par r et on itre.
Fonction PGCD ( , : entier) rsultat entier r: entier r a mod b r: entier Tant que r 0 faire rpter A b r a mod b B r a b R a mod b b r FTant Jusqu ce que r = 0 Rsultat B Rsultat a FFonc FFonc

a 48 13 9 4

b 13 9 4 1

R 9 4 1 0

Algorithme 74 : Ecrivez une fonction qui partir dun nombre rel appel x et dune valeur entier positive appele N retourne x la puissance n.
Fonction PGCD ( , : entier) rsultat entier I : entier R : rel Fonction PGCD ( , : entier) rsultat entier R 1 P : rel Pour i de 1 n faire P 1 car si on entre expos en 0 ca donne 1 R r * x Tant que n 0 faire FPour Si n mod 2 0 faire Rsultat r P p * x FFonc N n - 1 Sinon N n /2 X x * x Fsi FFaire Rsultat r FFonc

Algorithme 75 : Ecrivez une procdure qui ralise :


Procdure PGCD ( : entier) rsultat entier I, j : entier Pour i de 1 n faire Pour j de 1 n-i Ecrire FPour Pour j de 1 i Ecrire * FPour Ecrire CRLF FPour Pour i de 1 n-1 faire Pour j de 1 i faire Ecrire FPour Pour j de 1 n-1 faire Ecrire * FPour Ecrire CRLF FFonc

* ** n *** **** 2n-1 *** ** *

39

Les automates dEtat Fini

40

ch 1

ch 2

cr 3

1 : Etat Initiale 2 : Etat intermdiare 3 : Etat final 4 : Etat Erreur

Algorithme 76 : Ecrivez une fonction qui vrifie si un caractre entr est entier jusqu' ce que lon a appuy sur ENTER
Fonction Verif() rsultat boolen Etat : entier C : caractre Etat 1 Rpter Lire c Selon que Etat faire Cas 1 : Selon que c faire Cas 0 ; Cas 1 ; Cas 2 ; Cas 3 ; Cas 4 ; Cas 5 ; Cas 6 ; On vrifie si le caractre entr est un Si c nest pas 0, 1, 2, 3, 4, 5, 7, 8 ou 9. Cas 7 ; nombre. Sil est entr alors ltat devient 2. Alors ltat devient 4. Cas 8 ; Cas 9 : Etat 2 Fcas Autre : est le sinon du cas Autre : Etat 4 Default FCas FSelon FCas Cas 2 : Selon que c faire Cas 0 ; Cas 1 ; Cas 2 ; Cas 3 ; Cas 4 ; Cas 5 ; Cas 6 ; On vrifie si le caractre entr est un nombre. Cas 7 ; Sil est entr alors ltat ne change pas. Cas 8 ; Si c est CR (retour chariot) Cas 9 ; alors ltat devient 3. FCas Cos CR : Etat 3 FCas Autre : Etat 4 FSeln Si c nest pas 0, 1, 2, 3, 4, 5, FCas FSelon Si ltat est 3 alors, rsultat sera Vrai 7, 8, 9 ou CR. Alors ltat Fselon devient 2. Jusqu ce que etat = 3 ou etat = 4 Sinon ltat est 4 alors, rsultat sera faux Rsultat etat = 3 FFonc

41

Mais la simple retranscription du schma ne suffit pas, il faut renvoy les nombres.

Fonction CarEnt( ) Etat : entier Selon que c faire Cas 0 : r 0 Cas 1 : r 1 Cas 2 : r 2 Cas 3 : r 3 Cas 4 : r 4 Cas 5 : r 5 Cas 6 : r 6 Cas 7 : r 7 Cas 8 : r 8 Cas 9 : r 9 Fselon Rsultat R FFonc

rsultat entier

FCas FCas FCas FCas FCas FCas FCas FCas FCas Fcas

Fonction LireEnt( : ) rsultat boolen Etat : entier C : Caractre Rpter Lire C Selon que etat faire Cas 1 : Selon que c faire Cas 0 ; Cas 1 ; Cas 2 ; Cas 3 ; Cas 4 ; Cas 5 ; Cas 6 ; Cas 7 ; Cas 8 ; Cas 9 : n carent(c) Etat 2 FCas Autre : etat 4 FSelon FCas Cas 2 : Selon que c faire Cas 0 ; Cas 1 ; Cas 2 ; Cas 3 ; Cas 4 ; Cas 5 ; Cas 6 ; Cas 7 ; Cas 8 ; Cas 9 : n n * 10 + carent(c) Fcas Cas CR : Etat 3 Fcas Autre : Etat 4 Fselon FSelon Jusqu ce que etat = 3 ou etat = 4 Rsutlat Etat = 3 FFonc

42

Automate 2 : Ecrivez une fonction qui vrifie si un caractre entr est entier et sign jusqu' ce que lon a appuy sur ENTER

Fonction LireEntSign( : ) rsultat boolen Etat : entier C : Caractre Rpter Lire C Selon que etat faire Cas 1 : Selon que c faire Cas 0 ; Cas 1 ; Cas 2 ; Cas 3 ; Cas 4 ; Cas 5 ; Cas 6 ; Cas 7 ; Cas 8 ; Cas 9 : n carent(c) Etat 3 FCas Cas + s 1 etat 2 FCas Cas - s -1 etat 2 FCas Autre : etat 5 FSelon FCas Cas 2 : Selon que c faire Cas 0 ; Cas 1 ; Cas 2 ;

Cas 3 Cas 4 Cas 5 Cas 6 Cas 7 Cas 8 Cas 9 Autre :

; ; ; ; ; ; : n carent(c) etat 3 Fcas Etat 5

Fselon FCas Cas 3 : Selon que c faire Cas 0 ; Cas 1 ; Cas 2 ; Cas 3 ; Cas 4 ; Cas 5 ; Cas 6 ; Cas 7 ; Cas 8 ; Cas 9 : n n * 10 + carent(c) FCas Cas CR : n s * n etat 4 FCas Autre : etat 5 FSelon FSelon Jusqu ce que etat = 5 ou etat = 4 Rsultat etat = 4 FFonc

43

Automate 3 : Concevez un automate ainsi que la fonction danalyse associe comptant le nombre de couple le figurant dans une phrase termin par un point. Fonction cptle() rsultat entier
Cpt, etat :entier C : caractre Etat 1 Cpt 0 Rpter Lire c Selon que etat faire Cas 1 : Selon que c faire Cas L, etat 2 FCas Cas . Etat 4 FCas FSelon FCas Cas 2 : Selon que c faire Cas e: cpt cpt + 1 etat 3, FCas Cas .: etat 4, fcas Cas l : fcas Autre : etat 1, fcas FSelon Cas 3 : Selon que c faire Cas l : etat 2, fcas Cas . : etat 4, fcas Autre : Etat 1, fcas FSelon FCas FSelon Jusqu ce que etat = 4 Rsultat cpt FFonc

Reprsentation Matriciel 1 2 3 4 1 * L . 2 * L E . 3 * L .

Retranscription en c

Int cptle(){ Int cpt = 0, etat = 0; Char c; Do{ Scanf("%c" ,&c) ; Switch(etat){ Case 1: switch(c){ Case l: etat = 2, break; Case .: etat = 4; } Break; Case 2:switch(c){ Case e: etat = 3; cpt++; Break; Case .;

Etat = 4; Break; Case l: Break; Default: etat=1 } Break; Case 3: switch(c){ Case l: Etat = 2; Break; Break; Case .: Etat = 4; Break; Default : Etat = 1; }}} While (ett!=4); Return cpt;}

44

Automate 3 : Concevez un automate qui permet de compter le nombre mot dans une phrase termine par un point.

Automate 4 : Concevez un automate ainsi que la fonction danalyse associe assurant la saisie correcte dun nombre rationnel (4/3, 7/8, -8/2, -4, -6)

Automate 5 : Concevez un automate ainsi que la fonction danalyse associe assurant la saisie correcte dun nombre complexe. (Forme dun nombre complexe : a + bi a, b )

45

La rcursivit

46

La rcursivit est utilise depuis des sicles et des sicles. La poule nait dun uf qui est produite dune poule qui nait dun uf qui est produite dun uf, , FACTORIEL ! = =1
Fonction fact(n : entier) rsultat entier Res ,i : entier Res 1 Pour i de 1 n faire Res res * i FPour Resultat Res FFonc

La Base utilise pour la transmission ne prenait pas compte de la rcursivit tait utilise dans les annes 60.
Fonction fact(n : entier) rsultat entier Res: entier Si n = 0 alors Res 1 Sinon Res n*fact(n-1) Fonction Fsi Rsultat Res FFonc

Dbut R, i : entier Algorithme I 4 Appelant la R fact(i) fonction Ecrire r Fin

La rcursivit est comme une pile dassiette que lon doit dpiler avant de pouvoir atteindre la dernire. Dans le processeur, il y a diffrente partie qui compose celui-ci : LUAL Les registres

res n res n res n res n res n

Dans les processeurs INTEL il existe EAX (32 bits). Et donc la valeur RES va tre place dans le registre du processeur EAX afin de pouvoir faire lchange Dans le schma, trois signe se nomme un frame de stagne. Dans toutes rcursivit, il faut une condition darrt, car sinon cela fera une boucle infinie.

1 0 1 1 2 4 6 3 24 4

Voici un algorithme qui pourra un tre algorithme mais qui ne peux pas ltre
Fonction fact(n : entier) rsultat entier I, res : entier I n Tant que n 0 faire N n - 1 FTant Res 1 Pour n de 1 i faire Res res * n FPour Rsultat Res FFonc

47

On peut sintress ds lors un autre type dalgorithme, on va prendre une phrase et le lire lenvers.
Procdure Lecture () C : caractre Lire c Si c . Lecture () A Ecrire c FSi FProc Procdure Lecture () C : caractre Lire c Si c . Lecture () B FSi Ecrire c FProc

BONJOUR. . R U O J N O B A: RUOJNOB B: .RUOJNOB

sachant que = = et que = = et que =

Fonction Rcursive n 01 : Ecrivez une rcursivit qui rsout = (


Fonction Combinaison ( , ) N, p, res : entier Si n = p ou p = 0 alors Res 1 Sinon Res combinaison (n-1, p) + combinaison (n-1, p-1) Fsi Rsultat Res FFonc

)!! + +

en

6 3-3 1 - 2 - 2 -1 C2 C11 C3 C12 C11

C4 C13 C12 C11 C01 C02

48

Ecrivez une fonction rcursive calculant xn avec x appartenant R et n appartenant Z


Fonction p ( : , ) rel res : rel Si n = 0 alors Res 1 Sinon Res x * p(x, n-1) Fsi Resultat Res FFonc Fonction pu ( : , ) rel res : rel Cette procdure Si n O alors Res P(x,n) permet de grer les Sinon exposants ngatifs Res 1/P(x, -n) FSi Resultat Res FFonc

Ecrivez une fonction rcursive permettant de calculer le polynme de Legendre


Fonction L ( , ) 0 ( ) = 1 res : rel Si n = 0 alors 1 ( ) = Res 1 Sinon (2 + 1) 1 ( ) Si n = 1 alors = Res x Sinon Res ((2n+1)* L* P(x, n-1) - (n-1)* L(x, n-2))/n FSi FSi Rsultat Res FFonc

( + 1) +1 ( ) = (2 + 1) ( ) 1 ( )

( 1) ( )

Ecrivez deux fonctions rcursives qui calculent respectivement la somme et le produit de deux nombre entier a et b positif ou nul
Fonction S ( , ) res : entier Si a = 0 alors Res b Sinon Si b = 0 alors Res a Sinon Res 2 + S(a-1,b-1) Fsi Sinon la condition Fsi Resulat Res est a 0 et b 0 FFonc Fonction S( , ) res : entier Si a = 0 alors Res a Sinon Res 1 + (a-1,b) Rsultat Res FFonc Fonction S( , ) res : entier Si a = 0 alors Res a Sinon Res 1 + (a-1,b) Rsultat Res FFonc

Si a = 0 b Si b = 0 a Si a 0 1 + S(a-1,b)

Si b 0 1 + S(a,b-1) Si a 0 0 2 + (a-21,b-1)

49

Fonction P( , ) res : entier Si a = 0 alors Res 0 Sinon Res a + p(a-1,b) Fsi Rsultat Res FFonc

Fonction P( , ) res : entier Si b = 0 alors Res 0 Sinon Res a + p(a,b-1) Fsi Rsultat Res FFonc

Fonction P( , ) res : entier Si a 0 alors Res a + b-1 + p(a-1,b-1) Sinon Res 0 Fsi Rsultat Res FFonc

On a pu remarquer que de nombreuse fonctions mathmatiques lmentaires peuvent tre dfinies et donc calcules de faon rcursive il est permit de se demand si il nexiste pas une fonction gnrale et unique qui permettent de calculer de faon rcursive la somme, le produit et llvation une puissance de deux nombre A et B une telle fonction existe cest la fonction dAckermann, elle est dfinie de la manire suivante : Ecrivez une fonction rcursive permettant de calculer A(n,a,b) o n est un entier et o a et b sont des rels.
Fonction P( , ) res : entier Si n = 0 alors Res a + 1 Sinon Si b = 0 Selon que n faire Cas 1 : res a Fcas Cas 2 : Res 0 fcas Cas 3 : res 1 Fcas Autre : Res 2 FSelon Sinon Res A(n-1,A(n,a,b-1),a) FSi FSi Rsultat Res FFonc

A (0,a,b) = a +1 A(1,a,0) = a A(2,a,0)= 0 A(3,a,0)= 1 A (n,a,0)= 2 si n > 3 A (n,a,b) = A(n-1,A(n,a,b-1),a)

Calculer le nombre de combinaison de n lment parmi m au moyen de la + formule suivante : = =


Fonction P( , ) res : entier si n = 0 alors res 1 Sinon Res ((m-n+1)*c (n-1,m))/m FSi Rsultat res FFonc

50

Calculer le nombre de combinaison de n lment parmi m au moyen de la formule suivante : = =


Fonction P( , ) res : entier si n = 0 alors res 1 Sinon Res (m*C(n-1,m-1)/n FSi Rsultat res FFonc

51

Dfinition : une structure de donne est un regroupement de plusieurs informations de plusieurs entits. Mais il ne faut que lutilisateur ne sache pas dcouvrir comment est reprsente cette structure.
Entit n01 : Les nombres rationnels
Entit rationnel n, d : entier FEnt Dbut A, b : rationnel a.n 4 a.d 19 Ecrire a Fin Procdure Afficher ( ) Ecrire a.n / a.d FProc Fonction pgcd ( , : entier) rsultat entier P, r : entier P 1 Tant que que a 0 0 faire Si a mod 2 = 0 alors Si b mod 2 = 0 alors P 2 * p A a/2 B b/2 Sinon A a/2 FSi Sinon Si b mod 2 = 0 alors B b/2 Sinon Si a > b alors A ab Sinon B b-a Fsi Fsi Fsi FTant Si a = 0 alors R p * b Sinon R p * a Fsi Rsultat r FFonc Procdure rduire ( : rationnel) X : entier X pgcd(a.n, a.d) a.n a.n / x a.d a.d / x FProc Fonction Add ( , : ) a rsultat rationnel c : rationnel c.n a.n * b.d + a.d * b.n c.d a.d * b.d Rduire (c) Rsultat C FFonc Fonction SUB ( , : ) a rsultat rationnel c : rationnel c.n a.n * b.d - a.d * b.n c.d a.d * b.d Rduire (c) Rsultat C FFonc Procdure chgsgn ( : rationnel) a.n -a.n FProc Fonction SUB ( , : ) a rsultat rationnel Chgsgn (b) Rsultat ADD(a,b) FProc Fonction Mul( , : ) a rsultat rationnel C : rationnel c.n a.n * b.n c.d a.d * b.d Rduire (c) Rsultat c FFonc Procdure Div ( , : ) a rsultat rationnel C : rationnel c.n |a.n| * b.d c.d a.d * |b.n| Si (a.n >= 0 et b.n < 0 ou a.n < 0 et b.n >=0) alors Chgsn(c) Fsi Rduire c Rsultat c FFonc Fonction Inv( : ) a rsultat rationnel C : rationnel c.n a.d c.d |a.n| Si a n < 0 alors Chgsgn (c) Fsi Rsultat c FFonc

Structure de donne

4 19

52

Fonction Div( , ) C :rationnel C Inv(b) Rsultat mul(a,c) FFonc Fonction EntRat( ) C : rationnel c.n a c.d 1 Rsultat c FFonc Fonction Add( : ) a rsultat rationnel Rsutltat ADD(EntRat(a), b) FFonc Fonction Add ( , : ) a rsultat rationnel Rsutltat ADD(a, EntRat(b)) FFonc Fonction Add( , : ) a rsultat rationnel Rsutltat ADD(b,a) FFonc Fonction Sub ( : ) a rsultat rationnel Rsutltat Sub(Entrat(a),b) FFonc Fonction Sub ( : ) a rsultat rationnel Rsutltat Sub(a, Entrat(b)) FFonc Fonction Sub ( : ) a rsultat rationnel Rsutltat Sub(b,c) C sub(b,c) Chgsgn(c) Rsultat c FFonc Fonction mul( : ) a rsultat rationnel Rsutltat mul(Entrat(a),b) FFonc Fonction mul( : ) a rsultat rationnel Rsutltat mul(a, Entrat(a)) FFonc Fonction div( : ) a rsultat rationnel Rsutltat div(Entrat(a),b) FFonc Fonction div( : ) a rsultat rationnel Rsutltat div(a, Entrat(a)) FFonc Fonction div( : ) a rsultat rationnel Rsutltat div(a, Entrat(a)) FFonc Fonction eq( , : ) a rsultat boolen C : rationnel C sub(a,b) Rsutltat c.n = 0 FFonc Fonction neq( , : ) a rsultat boolen Rsutltat pas eq(a,b) FFonc Fonction GE( , : ) a rsultat boolen C : rationnel C sub(a,b) Rsutltat c.n >= 0 FFonc

Dans certain langage de programmation le C++, il est permis de surcharg les fonctions mais pas dans le c

Fonction lt( , : ) a rsultat boolen Rsutltat pas ge(a,b) FFonc Fonction le( , : ) a rsultat boolen C : rationnel C sub(a,b) Rsutltat c.n <= 0 FFonc Fonction gt( , : ) a rsultat boolen Rsutltat pas le(a,b) FFonc

53

LES VECTEURS

54

55

Permuter les valeurs dun vecteur de deux rangs


1 3 5 7 9 11 13 15 17 19

Procdure cyclek( : , , : ) I, j, s, t : entier I 0 Pour j de 1 PGCD (n, k) faire S i T vi Rpter I (i+k) mod n 'Echange de donne Vi t Jusqu ce que i = s I i + 1 FPour FFonc

N = 10 K=2

Procdure cyclek( : , , : ) I, j, s : entier I 0 Pour j de 1 PGCD (n, k) faire S i Rpter I (i+k) mod n Vi vs S J Jusqu ce que i = s 0 1 I i + 1 1 2 FPour FFonc Procdure cyclek( : , , : ) I, j : entier I 0 Pour j de 0 PGCD (n, k) faire Rpter I (i+k) mod n Vi vj Jusqu ce que i = j I i + 1 FPour FFonc

pgcd(n,k) (i+k) mod n

Avec variable temporaire

Sans la variable temporaire

Permutation symtrique
Procdure sym( : , : ) I, j : entier I 1 J n Tant que i j faire Vi vj Procdure sym( : , : ) I i + 1 I : entier J j + 1 Pour i de 1 n/2 faire FTant Vi vn-i+1 FFonc FPour FFonc

56

Confrontation de plusieurs problmes


Ecrivez un algorithme recevant une somme dargent exprime en uro calcul la dcoupe minimale de cette somme en coupure. Pour simplifier le problme vous supposez que la somme est une valeur entire

Procdure I ( : , : ) C1 500 Procdure Dcoupe ( , , , : ) C2 200 I : entier C3 100 Pour i de 1 n faire C4 50 C5 20 Vi C6 10 Val val mod Ci C7 5 FPour C8 2 FProc C9 1 FProc

Procdure Init( , , , : ) I : entier V1 1 Procdure Prt( , , , : ) Pour i de 2 n faire I : entier Vi 0 Pour i de 1 n faire est le numro de la ligne affich FPour Ecrire vi FProc FPour FProc Procdure svt ( : , : ) I : entier Pour i de n 2 par pas de -1 faire. Vi vi + vi-1 FPour Procdure Pascal( : , : ) FProc I : entier Init(v) Prt(v,1) Pour i de 2 n faire Svt(v,i) Prt(v,i) FProc FProc

Le triangle de Pascale est obtenu en considrant que tous les lments de la premire colonne sont gaux 1, les autres lments sont obtenu au moyen de la relation suivante : ai,j = ai-1,j + ai-1,j-1 ii,j > 1 - j i

57

Algorithme de recherche

58

Il existe 2 types de recherches : une recherche dans un ordre ordonn, ou une recherche dans un vecteur dsordonn. Commenons par recherch dans un vecteur qui nest pas ordonn
Fonction recherche( : , , : ) rsultat boolen I : entier I 1 Tant que vi val et i faire Pas possible car le tant testera jusque n I i + 1 a comme valeur n+1 qui est vide Ftant Rsultat i n + 1 FFonc Fonction recherche ( : , , : ) rsultat boolen I : entier Trouve : boolen I 1 Trouve faux Tant que pas trouve et i <= n faire Si Si = val alors Trouve vrai FSi I i + 1 Ftant Rsultat trouve FFonc Fonction recherche ( : , , : ) rsultat boolen I : entier Trouve : boolen I 1 Trouve faux Tant que pas trouve et i <= n faire Si Si = val alors Trouve vrai Sinon Le nombre de ritration I i + 1 FSi est de : 3n Ftant Rsultat trouve FFonc Fonction recherche( : , , : ) rsultat boolen I : entier Trouve : boolen I 1 Trouve Faux Vn+1 val Tant que pas trouv faire Si Vi = val alors Trouv vrai Sinon I i + 1 FSi Ftant Rsultat i n + 1 FFonc

59

Approfondissons
Fonction recherche ( : , , : ) rsultat boolen I : entier I 1 Vn+1 val Tant que vi val faire I i + 1 FTant Temps ditraration : n Rsultat i n + 1 FProc

Algorithme de recherche non - dcroissante

Algorithme de la recherche dichotomique


Vecteur de 5 lments : G 3 5 7 8 D 11

Fonction Dicho ( : , , : ) rsultat boolen G, d, p : entier Trouv : bolen G 1 D n Trouv faux Tant que pas trouv et g <= d faire P (g+d)/2 Si vp = p alors Trouv vrai Sinon Temps ditration : Log2 n Si vp < p alors d p - 1 Sinon G p + 1 FSi FSi FTant Rsultat Trouv FProc

60

Algorithme de triage

61

Mthode n 01
Procdure CV ( : , , : ) I : entier Pour i de n k par pas de 1 faire Vi+1 Vi FPour FProc Fonction Recherche ( : , , : ) rsultat entier I : entier Trouv : boolen I N Trouv faux Tant que pas trouv et i >= 1 faire Si vi <= val alors Trouv Vrai Sinon I i 1 FSi FTant Rsultat i FFonc Procdure Ta ( : , , : ) I , p, s, tmp : entier S 1 Pour i de 2 n faire Tmp Vi P Recherche (v, s, tmp) CV (v, s, p+1) Vp+1 tmp S s + 1 FPour

2me mthode
Procdure Tri ( : , , : ) I, j, m : entier Pour i de 1 n-1 faire M 1 Pour j de 1 i + 1 faire Si vj < vj alors M j FSi FPour Vi vm FPour FProc Procdure Tri ( : , , : ) I, j : entier Pour i de 1 n-1 faire Pour j de i + 1 faire Si vi > vj alors Vi vj FSi FPour FPour FProc

Vitesse de triage : N

62

Le tri rapide (Quick Sort par Hoare)


Procdure QS ( : , , : ) P, i, j: entier I l J r P <- v (i+j)/2 Rpter Tant que vi < p fair i i + 1 FTant Tant que vj > p faire j <- j - 1 FTant Si i <= j alors Vi Vj I i + 1 J j 1 FSi Jusqu ce que i > j Si l < j alors QS(v,l,j) FSi Si i < r alors QS (v,i,r) FSi FProc

La recherche des nombre premier peut tre effectue par la mthode dit du crible dEratosthne. Cette algorithme est trs simple, nous savons que tous les nombres entier sont dcomposable en facteur premier, supposons que lon souhaite rdiger un algorithme dterminant les n premier nombre premier. Il suffit de garnir un ensemble de nombre premier mesure de leur rencontre, de cette manire sil faut dterminer si un nombre est premier, il suffit de tenter de le diviser successivement par les nombre premier dj rencontr.
Procdure Tri ( : , , : ) j, tmp, k : entier V0 - Pour j de 2 n faire Tmp vj k j-1 tant que vk > tmp faire vk+1 vk k k -1 Ftant Vk+1 tmp Fpour FProc

Tri stable car il naccepte pas les doublons

63

La gestion des ensembles

64

La gestion des ensembles


A B

A B

\ A B

B A

65

Ensemble Dsordonn
Ecrivez un algorithme qui dtermine si un nombre appartient dans un ensemble.
Fonction Im (: , : ) rsultat boolen A.vA.m+1 x I 1 Tant que A.vi x I i + 1 FTant Rsultat i + 1 FFonc

Ecrivez un algorithme qui dtermine si deux ensembles sont gaux.


Fonction EQ (: : , : ) rsultat boolen I :entier Ok boolen Fonction EQ (: : , : ) rsultat boolen Ok Vrai I : entier I 1 Ok boolen Tant que i A.m et ok faire Ok A.m = B.m Ok im(B,A.vi) I 1 I i + 1 Tant que i A.m et ok faire FTant Ok im(B,A.vi) I 1 I i + 1 Tant que i B.m et ok faire FTant Ok Im (A,B.vi) Rsultat Ok I i + 1 FFonc FTant Rsultat Ok FFonc

Fonction inclus (: : , : ) rsultat boolen I :entier Fonction EQ (: : , : ) rsultat boolen Ok boolen Rsultat inclus (a,b) et inclus (b,a) Ok A.m = B.m FFonc I 1 Tant que i A.m et ok faire Ok im(B,A.vi) I i + 1 FTant Rsultat Ok FFonc

66

Ecrivez un algorithme qui permet de calculer lunion de deux ensembles non ordonns.
Fonction Union (: : , : ) rsultat ens C : ens I : entier C.n A.n C.m A.m Pour i de 1 A.m faire C.vi A.vi FPour Pour i de 1 B.m faire Si pas(in(A,B.vi)) alors C.m c.m + 1 C.vc.m B.Vi FSi FPour Rsultat C FFonc

Ecrivez un algorithme qui permet de calculer lintersection de deux ensembles.


Fonction Intersection (: : , : ) rsultat ens C : ens i : entier C.m 0 C.n A.n Pour i de 1 B.m faire Si in(A,B.vi) alors C.m c.m + 1 C.vc.m B.Vi FSi FPour Rsultat C FFonc

M = Position actuelle N = Nombre total du vecteur

Ecrivez un algorithme qui dtermine la diffrence (A\B)


Fonction diffrence (: : , : ) rsultat ens C : ens i : entier C.m 0 C.n A.n Pour i de 1 A.m faire Si pas(in(B, A.vi)) alors C.m c.m + 1 C.vc.m A.Vi FSi FPour Rsultat C FFonc

67

Ecrivez un algorithme qui dtermine la diffrence symtrique


Fonction DS (: : , : ) rsultat ens C : ens I,j : entier C.m 0 C.n A.n Pour i de 1 A.m faire Si pas(in(B, A.vi)) alors C.m c.m + 1 C.vc.m A.Vi FSI FPour Pour i de 1 B.m faire Si pas (in(A, B.vi) alors C.m c.m + 1 C.vc.m B.vi FSi FPOur Rsultat C FFonc

Ensemble Ordonn
Ecrivez un algorithme qui permet
Tant que i A.m et que j B.m faire C.m C.m + 1 Si a.vi < c.m + 1 C.vc.m a.vi I i + 1 Sinon c.vc.m b.vj Si a.vi = b.vi alors I i + 1 FSi J j + 1 FSi

Fonction Union (: : , : ) rsultat ens C : ens I,j : entier C.m 0 C.n A.n I 1 J I Tant que i A.m et que j B.m faire Si a.vi < b.vi alors C.m C.m + 1 C.vc.m a.vi I i + 1 Sinon Si a.vi = b.vi alors C.m c.m + 1 c.vc.m b.vj i i + 1 j i + 1 Sinon C.m C.m + 1 C.vc.m b.vj j j + 1 Fsi FSi FTant Tant que i A.m faire c.m c.m + 1 c.vc.m A.vi i i + 1 FTant Tant que j B.m faire c.m c.m + 1 c.vc.m B.vj j j + 1 FTant Rsultat C FFonc

68

Intersection de deux ensembles


Fonction Inter (: : , : ) rsultat ens C : ens i,j : entier C.m 0 C.n A.n i 1 j 1 Tant que i A.m et que j B.m faire Si a.vi < b.vi alors i i + 1 Sinon Si a.vi = b.vi alors C.m c.m + 1 c.vc.m b.vj i i + 1 j j + 1 Sinon j j + 1 Fsi FSi FTant Rsultat C FFonc

A non B
Fonction diff (: : , : ) rsultat ens C : ens I,j : entier C.m 0 C.n A.n I 1 J I Tant que i A.m et que j B.m faire Si a.vi < b.vi alors C.m C.m + 1 C.vc.m a.vi I i + 1 Sinon Si a.vi = b.vi alors i i + 1 j i + 1 Sinon j j + 1 Fsi FSi FTant Tant que i A.m faire c.m c.m + 1 c.vc.m A.vi i i + 1 FTant Rsultat C FFonc

69

Ecrivez une fonction qui permet de calculer la diffrence symtrique


Fonction DS (: : , : ) rsultat ens C : ens I,j : entier C.m 0 C.n A.n I 1 J I Tant que i A.m et que j B.m faire Si a.vi < b.vi alors C.m C.m + 1 C.vc.m a.vi I i + 1 Sinon Si a.vi = b.vi alors i i + 1 j i + 1 Sinon C.m C.m + 1 C.vc.m b.vj j j + 1 Fsi FSi FTant Tant que i A.m faire c.m c.m + 1 c.vc.m A.vi i i + 1 FTant Tant que j B.m faire c.m c.m + 1 c.vc.m B.vj j j + 1 FTant Rsultat C FFonc

70

La gestion des polynmes

71

Introduction la gestion des polynmes


() = + + + + +

() = = ( ). () +
=

Entit poly V : vecteur de 0N de rels N : rel Procdure DivXMR ( : , : , : , ) FEnt I,k : entier Q.n P.n 1 K q.n Q.vk P.vk+1 Pour i de k-1 0 par pas de -1 faire q.vi P.vi+1 + r * q vi+1 FPour R P.v0 + r * q.v0 FProc

Ecrivez une fonction qui fait varier la drive


Fonction DP( : ) rsultat poly Q :poly I, k : entier Q.n P.n -1 K q.n Pour i de 0 k faire q.vi P.vi + 1 * (i + 1) Fpour Rsultat Q FProc

Ecrivez une fonction qui permet de calculer la somme de deux polynmes.


Fonction S ( : , : ) rsultat poly R: poly I : entier R.n P.n Pour i de 0 n faire r.vi P.vi + Q.vi Fpour Pour i de Q.n+1 P.n faire r.vi P.vi FPour Rsultat Q FProc

72

Ecrivez une fonction qui permet de calculer la multiplication de deux polynmes.


Fonction M ( : , : , : , ) rsultat poly R: poly I,j : entier R.n P.n + Q.n Pour i allant de 0 R.n faire R.vi 0 FPour Pour i allant de 1 P.n faire Pour j allant de 1 Q.n faire R.vi+j R.vi+j P.vi* R.vj FPour FPour Rsultat r FProc

La division euclidienne
Fonction Eval ( : , : ) rsultat rel R: rel I : entier Res 0 Pour i allant de P.n 1 par pas de -1 faire Res (res+p.vi) * x FPour Res Res + p.v0 Rsultat r FProc Evalu un polynome lorsque que lon remplace x par un nombre. Procdure eucl ( , , , : ) rsultat rel Dn, dd, dq, dr, i, j :entier Dn n.n Dd d.n Procdure copier ( , : ) q.n dn dd I : entier dq q.n d.n s.n Copier (r,n) Pour i de 0 s.n faire r.n dd -1 d.vi s.vi dr r.n Fpour Tant que d.p >= 0 faire FProc q.vdr r.vdn / d.vdd j dn Pour i de dd 0 par pas de 1 faire r.vj r.vj q.vdq * d.vi j j 1 FPour Dn dn 1 Dq dq 1 FTant FProc

73

Structure de Stack

74

Manire LIFO (Last In first out) : Dernier entr premier sortie


La gestion des stack : certain langage de programmation ne permet pas la rcursivit il faut ds lors le programm soit mme
Entite pile V : vecteur 1.n dentier N, m : entier //n nombre maximum du vecteur et m position actuelle FEnt Procdure Init ( p : pile) p.n n p.m 0 FProc Fonction Empty ( p : pile) rsultat boolen Rsultat p.m = 0 FFonc Fonction Full ( p : pile) rsultat boolen Rsultat p.n = p.m FFonc Procdure Push ( p : pile, val entier) p.m p.m + 1 p. vp.m val FProc

Empty : Dtermine si une pile est ou nest pas vide Full : Dtermine si une pile est remplie ou non Push : permet dajouter un lment. Pop : permet de retir un lment du stack Top : permet de consult le sommet de la pile

Fonction Pop ( p : pile) rsultat entier Fonction Top ( p : pile) rsultat entier Rsultat p.vp.n p.m p.m 1 FFonc Rsultat p.vp.m + 1 FFonc Fonction Pop ( p : pile) rsultat entier p.m p.m 1 Rsultat p.vp.m + 1 FFonc

Manire FIFO (First In first out) : Premier entr premier trait


Entite file V : vecteur O n-1 dentier n : entier int, out : entier m : entier // connaitre le nombre dlement prsent dans la file FEnt

EmptyQ : Dtermine si une file est ou nest pas vide FullQ : Dtermine si une file est remplie ou non InQ : Ajouter un lment dans la file OutQ : Retir un lment dans la file

Procdure init ( : file) f.n N f.in 0 f.out O f.m 0 FProc

Fonction EmptyQ ( f : file) rsultat boolen Rsultat f.m = 0 FFonc Fonction PushQ ( f : file, val entier) Rsultat f.m = f.n FProc

rsutalt boolen

75

Procdure IntQ ( f : file, ) f.m f.m + 1 f.vf.In val f.in (f.in+1) mod n FProc

Fonction OutQ ( f : file) rsultat entier Res : entier Res f.vf.out f.m f.m - 1 f.out (f.out+1) mod n Resultat Res FFonc

76

Les chaines de caractre

77

Introduction
Une chaine de caractre est un vecteur de caractre. Il existe deux convention afin de dtermin le nombre de caractre : la fin dune chaine le dans le langage c et une autre convention qui fourni le nombre dans une variable qui est la convention Pascal. Voici lentit :
Entit chaine n : entier Fourni le nombre de caractre v : vecteur 1n de caractre FEnt

7 B O N J O U R

Ecrivez un algorithme qui dtermine le nombre de caractre prsent dans une chaine
En convention C
Fonction Lc ( ) rsultat entier i : entier i 0 Tant que chi faire i i + 1 Ftant Rsultat i FFonc

B O N J O U R 0 1 2 3 4 5 6 7 En convention Pascal
Fonction Lc ( ) rsultat entier Rsultat s.n FFonc

Ecrivez un algorithme qui permet de ralis une copie de chaine


Procdure CC ( , , ) i : entier pour i allant de 0 lc(ori)+1 faire desi orii FPour Ma solution FProc Procdure Lc ( , , : ) i : entier i -1 La Solution du Prof Rpter i i + 1 Orii desi Jusqu' ce que orii = faire FProc

En version c avec des pointeurs :


Void strcopy (char * d, char * s) { While(*d++ = * s++) ; }

78

Ecrivez un algorithme qui ajoute la fin dun vecteur de caractre et y ajout un second vecteur de caractre
Procdure ajout ( 1, 2 s) i, j : entier i 0 j -1 Tant que ch1i faire i i + 1 Ftant I i - 1 Rpter i i + 1 j j + 1 ch1i ch2j Jusqu' ce que ch2j = faire FProc

Ecrivez une procdure appele Gauche, avec comme paramtre deux chaine et k tant le nombre de caractre que a copi au maximum.
Procdure gauche ( 1, 2 s, k : entier) i : entier i 0 Tant que k > i ou ch1i faire ch2i ch1i i i + 1 FTant ch2i FProc

Ecrivez une procdure appele Droite, avec comme paramtre deux chaine et k tant le nombre de caractre que a copi au maximum.
c

79

Les Matrices

80

81

Calculer le dterminant dune matrice (mthode analytique)


Fonction det ( , : ) rsultat rel V : vecteur O. .n -1 de boolens. I : entier Pour i de 0 n-1 faire Vj vrai FPour Rsultat D(m, v, n, n) FFonc Fonction D ( : , , , , ) rsultat rel I, j : entier Signe : entier Rs, d : rel Si ordre = 1 alors J 0 Tant que pas vj faire J j + 1 FTant D mm-ordre, j Sinon D 0 Signe 1 Pour j allant de 0 n-1 faire Si vj alors Vj faux D d + mn-ordre, j * D(m, v, n, ordre-1) Vj vrai Signe -signe FSi FPour FSi Rsultat d FFonc

Etant donn une matrice A de dimension n . m et un vecteur colonne v de dimension m calculer le nombre de colonne de A gale au vecteur v.
Une colonne de A sera gale vrai si et seulement si chaque composant de la colonne considre est gal la composante correspondante de v.
Fonction cmp( : , , , ) Ok : boolen I, j, cpt : entier Cpt 0 Pour j de 0 m-1 I 0 Ok vrai Tant que i < n et ok faire Ok mij = vi I i + 1 FTant Si ok alors Cpt cpt + 1 FSi FPour Rsultat cpt FFonc

82

Un carr magique est un carr divis en cellule dans lesquelles les nombres entier partir de 1 sont disposs de telles sortes que les sommes de chaque ligne, de chaque colonne, de chaque diagonale. Par exemple : 4 9 2 3 5 7 8 1 6 Plusieurs algorithme permettent dobtenir des carrs magiques dordres impairs, voici le plus simple dentre eux :
Llment juste en dessous du centre est occup par le chiffre 1. Les lments suivant sont plac dans les casses se trouvant lintersection de la ligne du dessous et de la colonne de droite Arriv au bord du carr, on poursuite lopration lextrmit oppose en suivant la mme rgle. Si une casse est dj remplie, le nombre suivant est plac dans mme colonne de ligne en dessous.

Ecrivez une procdure qui engendre magique un carr magique au moyen de cette algorithme
Procdure carr_magique ( , ) I, j, v : entier V 1 Pour i de 0 n-1 faire Pour j de 0 n-1 faire Mij 0 FPour FPour I n/2 J i I i + 1 Mij v Tant que v <= n faire Si m(i+1) mod n , (j+1) mod n 0 alors I (i+2) mod n Sinon I (i + 1) mod n J (j + 1) mod n Mj v V v + 1 FSi FTant FProc

Ecrivez une procdure qui transfre un tableau m de dimension l et c dans un tableau v de dimension l x c
Procdure transfert ( , , , ) i : entier I,j,k : entier pour i de 0 l*c faire K 0 vi+1 mi mod l, i/l pour i de 0 l-1 faire FPour pour j de 0 c - 1 FProc vk mi,j k k + 1 FPour FPour

83

Procdure transfert ( , , , ) I,j : entier pour i de 0 l-1 faire pour j de 0 c - 1 vi*c+j mi,j FPour FPour FProc

Ecrivez une procdure qui compare deux tableaux bidimensionnels dentier de mme taille et affecte -1, 0 ou 1 chaque lment dun troisime tableau bidimensionnel et de mme taille suivant que llment du premier tableau est infrieur gale ou suprieur son homologue du deuxime tableau.
Procdure transfert ( , , , , , ) I,j : entier pour i de 0 l-1 faire pour j de 0 c - 1 Si mij < nij alors Oij -1 Sinon Si mij = nij alors Oij 0 Sinon Oij 1 FSi FSi FPour FPour FProc

Recherch dans une matrice A les lments qui sont la fois un maximum sur leur ligne et un minimum sur leur colonne des point coles.
Fonction max ( , , ) rsultat entier pos, j : entier Fonction min ( , , ) rsultat entier pos 0 pos, i : entier pour j de 1 c-1 faire pos 0 si m.ligne,pos < m.ligne,j alors pour i de 1 l-1 faire pos j si m.pos,colonne > m.i,colonne alors fsi pos i fpour Procdure init ( , , ) fsi Rsultat pos I, j : entier fpour FFonc Pour i de 0 l-1 faire Rsultat pos Pour j de 0 c-1 faire FFonc Mi,j 0 Procdure maxmat ( , , , ) FPour i, j, pos : entier FPour init(a,c,l) FProc pour i de 0 l-1 faire pos max(m,c,i) pour j de pos c-1 faire si m.i,pos = mi,j alors ai,j 1 FSi FPour Fpour FProc

84

Procdure minmat ( , , , ) I,j,pos : entier Pour j de 0 c-1 faire Pos min(m,l,j) Pour i de 0 pos 1 faire Ai,j 0 FPour Pour i de pos l-1 faire Si mij = mpos,j alors Ai,j ai,j x 1 Sinon Ai,j 0 FSi FPour fpour Procdure PC ( , , , ) FProc Maxmat(m,r,l,c) Minmat(m,r,l,c) FProc

85

LES DESSINS

86

Entit dessin M : matrice 0..n-1, o..r-1 de boolen L, c : entier X0, y0 : entier Fent Procdure init( , , ) I,j : entier E.l n E.c r E.x0 x E.y0 y Pour i de 0 E.l-1 faire Pour j de 0 E.c-1 faire E.mi,j faux FPour Fpour FProc

Ecrivez une procdure qui allume un pixel lcran


Procdure set( , , ) I,j : entier I E.y0 y J E.x0 + x Si i >= 0 et j >= 0 et i < El et j < E.c alors Mi,j vrai FSi FProc

Ecrivez une procdure qui teindre un pixel lcran


Procdure reset( , , ) I,j : entier I E.y0 y J E.x0 + x Si i >= 0 et j >= 0 et i < El et j < E.c alors Mi,j false FSi FProc

87

Ecrivez une procdure qui dessine un segment de droite


Pour rappel :
Procdure segment ( , 1, 1, 2, 2 ) X, y : entier Pour x de x1 x2 faire Y (y2-y1)/(x2-x1)*(x-x1) + y1 Set(e,x,y) FPour FProc

1 =

2 1 ( 1 ) 2 1

Problme rencontr avec cette fonction : Impossible de tracer un segment vertical Impossible de tracer le segment si X1 > X2 Prcision impossible partir de 45
Procdure segment ( , 1, 1, 2, 2 ) Dx, dy : rel X, y : entier Dx x2 x1 Dy y2 y1 Si |dx| > |dy| alors Si x1 > x2 alors 1 2 1 2 FSi Pour x de x1 x2 faire Y *(x-x1) + y1

Dans ce cas-ci : Il est possible de travaill la vertical Il est possible de tracer des segments si X1 > X2 Prcision possible aprs 45

Set(e,x,y) FPour Sinon Si y1 > y2 alors 1 2 1 2 FSi

Pour y de y1 y2 faire x (y-y1)* + x1

Set(e,x,y) FPour FSi FProc

Ecrivez un algorithme qui permet de ralis un segment en nombre entier


Procdure segment ( , 1, 1, 2, 2 ) X, y, dx, dy, cpt, ix, iy, i : entier Dx x2 x1 Si dx > dy alors Dy y2 y1 Cpt dx/2 Si x1 < x2 alors Pour i de 1 dx faire Ix 1 X x + ix Sinon Cpt cpt + dy Ix -1 Si cpt > dx alors FSi Y y + iy Si y1 < y2 alors Cpt cpt dx Iy 1 FSi Sinon Set (e,x,y) Iy -1 FPour FSi Sinon X x1 Cpt dy/2 Y y1 Pour i de 1 dy faire Set (e,x,y) Y y + iy

Cpt cpt + dx Si cpt > dy alors X x + ix Cpt cpt dy FSi Set (e,x,y) FPour FSi FProc

88

Ecrivez une procdure qui trace un rectangle avec comme paramtre le coin infrieur gauche et la longueur et la largeur
Procdure rectangle ( , , , , ) Segment (E,x,y,x+L,y) Segment (E,x,y,x,y+l) Segment (E,x+L,y,x+L,y+l) Segment (E,x,y+l,x+L,y+l) FProc

Ecrivez une procdure qui trace un carr avec comme paramtre le coin infrieur gauche et la longueur. Procdure carre ( , , , )
Rectangle(E,x,y,l,l) FProc

Ecrivez une procdure qui trace un polygone


Procdure polygone ( , , : , : ) Pour i de 0 sommet 2 faire Segment (E,xi,yi,xi+1, yi+1) FPour Segment (E,x0, y0 ,xsommet-1, ysommet-1) FProc Procdure polygone ( , , : , : ) Pour i de 0 sommet 2 faire Segment (E,xi-1,yi-1,xi, yi) FPour Segment (E,x0, y0 ,x sommet-1, y sommet-1) FProc

Ecrivez une procdure qui trace un graphique type court boursier.


Procdure graphe ( , , : , : ) Pour i de 0 sommet 1 faire Segment (E, xi ,yi ,xi+1, yi+1) FPour FProc

Ecrivez une fonction qui permet deffectuer une transformation dun dessin.
Procdure transfo ( , , : ) I, j, x, y, X, Y : entier Pour i de 0 E.L 1 faire Pour j de 0 E.c 1 faire Si e.mi,j alors x j - e.x0 y e.y0 i X a0,0 x + a1,1 y Y aa,0 x + a1,1 y Set (f,X, Y) FSi FPour FPour FProc

Exemple de matrice de transformation. Zoom 2 X : 2 0 0 2

Symtrie centrale :

1/2 D zoom 1/2 X : 0

Rotation anti horlogique de 90 : 90 90 90 90

1 0

0 1/2

0 1

89

90

Le problme des huit reines

91

Les problmes revient positionner, sur le jeu dchecs, les reines afin quelles ne se mettent pas en checs. Utilisation du BACK-TRACKING : On avance jusquau moment o lon dcouvre une erreur et lon retourne sur ses pas. O O O O O O O O Chaque dame ne se met pas en danger par rapport dune autre dame.

Ecrivez un algorithme qui permet de raliser les possibilits.


Procdure init( : , : ) I , j : entier Procdure afficher ( : , : ) Pour i de 0 n-1 faire I, j : entier Pour j de 0 n-1 faire Pour i de 0 n-1 faire mij 0 Pour j de 0 n-1 faire FPour Si m i,j = 1 alors FPour Ecrire R FProc Sinon Ecrire . O O O O O O O FSi O FPour Ecrire CRLF Retour la ligne FPour FProc

Pour rappel (0 , 0 ) 0 = ( 0 ) + = ) = 0 0 = + = = 0 = 1 = 3

92

Fonction test ( : , , , , : ) rsultat boolen I, j, cpt: entier Cpt -4 Pour i de 0 n-1 faire Cpt cpt + mi,c FPour Pour j de 0 n-1 faire Cpt cpt + ml,j FPour Si c l alors I l c J 0 Sinon I 0 J c l Procdure solution ( : , , : ) FSi I: entier Tant que i < n et j <n faire Si j < n alors Cpt cpt + mij Pour i de 0 n-1 faire I i + 1 Mi,j 1 FTant Si Verif(m, i, j, n) alors Si l c alors Solution (m,j,n) I n 1 FSi J c + l n + 1 Mi,j 0 Sinon FPour I c + l Sinon J 0 Afficher (m,n) FSi FSi Tant que i 0 et j < c faire FProc Cpt cpt + mij I i + 1 J j +1 FTant Rsultat cpt = 0 FFonc

Il sagit dun jeu trs populaire dans les salles dtudes et de rcration, il se joue sur une feuille quadrill que lon peut reprsenter par un damier n x n casse. Il sagit pour les joueurs dessay daligner des pions sur les lignes, les colonnes ou les diagonales du damier. Le problme est ici de ralis un jeu interactif contre lautomate.
Procdure Init ( : , : ) I , j : entier Pour i de 0 n 1 faire Procdure Afficher ( : , : ) Pour j de 0 n 1 faire I, j : entier Mi,j 0 Pour i de 0 n 1 faire FPour Pour j de 0 n 1 faire FPour Si mij = 0 alors FProc Ecrire Sinon Si mij = 1 alors Ecrire X Sinon Ecrire O FSi FSi FPour Ecrire CRLF FPour FProc

93

Fonction gagne ( : , : ) rsultat entier I, j, tot : entire I -1 Rpter i i + 1 Tot 0 Pour j de 0 n-1 faire Tot tot + m ij FPour Jusqu ce que i=n ou tot m = n(n+1) J 0 Tant que j < n-1 et tot n et tot ( + 1) Tot 0 Pour i de 0 n-1 faire Tot tot + mij Fpour J j + 1 FTant Si tot et tot ( + 1) alors Tot 0 Pour i de 0 n-1 faore Tot tot + mij FPour Si tot et n tot n(n+1) alors Tot Pour i de 0 n-1 faire Tot tot + mi , n-1-i FPour FSi Rsultat tot FFonc

94

Les allocations dynamiques

95

Entit elem Info: entire Next: pointeur sur elem FEnt Tete pointeur (ptr) sur elem Tete Tete Tete Tete Tete Tete info Next Next Next Next info (valeur 17) Info (valeur 9) Next info (valeur 4) Next Next (valeur ) Next Next Info 30 (remplacer 17 par 30)

Fonction recherche(( : , : ) rsultat boolen trouv : boolen p : ptr sur elem Ok faux p tete Tant que p et pas trouv faire Si n = p info alors trouv vrai FSi p p next FTant Rsultat trouv FFonc Fonction recherche(( : , : ) rsultat ptr sur elem Trouv : boolen p : ptr denum boolen faux p tete Tant que p et pas trouv faire Si n = p info alors resu p Sinon p p next Fsi FTant Rsultat p FFonc

96

Ajout un lment dans une liste trie


Procdure recherche (( , , : , : ) Trouv : boolen p : ptr denum trouv faux q tete r tete Tant que q et pas trouv faire Si p info > val alors Trouv vrai Sinon Procdure inserer (( , : ) r q P, q, r : pointeur sur elem q q next Recherche (tete , r , q , val) Fsi p alloc (elem) permet dajouter un lement FTant p info val FProc p next q Si r = q alors Tete p Sinon R next p FSi FProc

Retir un lment dans une liste trie


Fonction rechercher (( , : , , ) Trouv : boolen Trouve faux P tete Q tete Tant que q et pas trouv faire Si q info Trouv vrai Procdure Delete (( , : ) Sinon P, q : ptr sur elem P q Si recherche(tete, val, p, q) alors Si p = q alors Q q next Fsi Tete q next Ftant Sinon Si trouv alors P next q next Trouv q info = val FSi FSi Liberer(q) Rsultat trouv FSi FFonc FProc

97

Gestion des stacks en liste chaine (last in first out)


Fonction init() rsultat ptr sur elem P : ptr sur elem P alloc(elem) P info - P next Rsultat p FFonc Fonction Pop( , ) rsultat Entier P : ptr sur stack Tmp : valeur P S S S Next Tmp p info Liberer (p) Rsultat tmp FFonc Procdure Push( , ) P : ptr sur stack P alloc(stack) P info val P next S S p FProc

Entit stack Info :entier Next : ptr sur stack Fent

Fonction Init() rsultat sur stack Rsultat FFonc Procdure Init( ) S FProc Fonction Empty( ) rsultat boolen Rsultat S= FFonc Fonction Top( ) rsultat entier Rsultat S info FFonc

Gestion dune file dattente.


Entit queue Info : entier Next : ptr sur queue FEnt Procdure Init( , ) IN OUT FProc Fonction EmptyQ( , ) rsultat boolen Rsultat OUT= FFonc Procdure INQ( , , ) P : ptr sur queue P alloc(queue) P next P info val Si in = alors In next p Sinon Out p Fsi In p FFonc Procdure OUTQ( , : , ) P : ptr sur stack Tmp : entier P out Tmp p info Out Out next Liberer (p) Si out = alors In FSi FProc

98

Liste chaine simplement lie avec une pr-tte


Entit elem Info : entier Next : ptr sur elem Fin Ent

Procdure recherche ( , , , ) Trouver : boolen Trouver faux Q tete R tete Tant que q et trouver faire Si q info > val alors Trouver vrai Sinon R q Q q next FSi FTant FProc Procdure delite ( , ) Q, r : ptr sur elem Si recherche(tete, val, q ,r) alors R next q nex( Librer (q) FSi FProc Procdure supp2 ( ) Supp(tete next) FProc

Procdure Insert ( , ) P, q, r : ptr sur elem Recherche (tete, val, q, r) P alloc(elem) P info val P next q R next q R next p FProc Procdure recherche ( , , , ) Trouve : boolen Trouve faux Tant que q et pas trouve faire Si q info => val alors Trouve vrai Sinon R q Q q next FSi FTant Si trouve alors Trouve q info = val FSi Rsultat trouve FProc

99

Crer une union de deux listes chaines non trie


Fonction union ( , ) rsultat ptr sur ens A, b, c: ptr sur ens Trouv : boolen A p B q C Tant que a faire Insert(c, a info) FTant Tant que b faire Trouv faux Tant que a et pas trouve faire Si b info = a info alors Trouv vrai FSi a a next FTant Si pas trouv alors Insert(c, binfo) FSi b b next FTant Rsultat c FFonc

Entit ens Info : entier Next : ptr sur ens Fent

Procdure Insert( : , ) d : ptr sur elem d alloc(elem) d next c d info val c d FProc

Fonction union ( , ) rsultat ptr sur ens A, b, c: ptr sur ens Trouv : boolen A p B q C Tant que a faire Insert(c, a info) FTant Tant que b faire Trouv faux Tant que a et pas trouve faire Si b info = a info alors Trouv vrai FSi a a next FTant Si pas trouv alors Insert(c, binfo) FSi b b next FTant Rsultat c FFonc

100

Les Arbres

101

Entit Nud Info : entier Fg (fils gauche), fd (fils droit) : entier FEnt

Procdure Prordre ( ) Si a alors Trt ( a info ) Prordre ( a fg ) Prodre ( a fd ) FSi FProc Dbut Prordre (a) Fin

Ordre : 4, 3, 1, 2, 6, 5, 7

Procdure Postordre ( ) Si a alors Postordre ( a fg ) Postordre ( a fd ) Trt ( a info ) FSi FProc

Ordre : 1, 2, 3, 5, 7, 6, 4
Procdure sym ( ) Si a alors sym (a fg) Trt (a info) Sym (a fd) FSi FProc

Ordre : 1, 3, 2, 4, 5, 6, 7 Si on permute le 3 et le 2, on obtient une squence ordonne.

102

Considrons un tournoi de tennis, dtermin combien de fois une tel personne gagner
Procdure nbre ( , , ) Si a alors Si a info = joueur alors N n + 1 FSi Nbre(a fg, joueur, n) Nbre(a fd, joueur, n) FSi Fonction nbre ( , ) rsultat entier FProc N : entier N 0 Si a alors Si a info = joueur alors N n + 1 FSi N n + nbre(a fg, joueur) + nbre (a fd, joueur) FSi Rsultat n FFonc

Fonction nbre ( , ) rsultat entier N :entier n 0 Si a alors Si a info = joueur et a fg alors n 1 FSi N n + nbre(a fg, joueur) + nbre(a fd, joueur) FSi Rsultat n FFonc

Dfinir la position la quelle se trouve la premire occurrence dun nom


Fonction rechercher ( , : ) rsultat ptr sur nud Pos : ptr sur nud Pos Si a alors Si a info = joueur alors Pos a Sinon Pos Recherche (afg, joueur) Si pos = alors Pos recherche (afd, joueur) FSi FSi FSi Rsultat pos FFonc

103

Fonction nbre( , : ) rsultat entier Cpt : entier R : ptr sur nud R rechercher (a, joueur) Cpt 0 Tant que r faire Cpt cpt + 1 R r fg FTant Si cpt 0 alors Cpt cpt 1 FSi Rsultat cpt FFonc

Cre un tableau finale


Nombre dtage de larbre : 2 + 1
Fonction crer( ) rsultat ptr sur nud Tmp : ptr sur nud Tmp Si i 0 alors Tmp alloc (nud) Tmp info Tmp fg crer (i-1) Tmp fd crer (i-1) FSi Rsultat tmp FFonc

Ecrivez une fonction permettant dajouter un joueur dans une feuille la plus a gauche. ajout ( , ) Procdure
arbre Rechercher (arbre, ) arbre info nom FProc Procdure ajout ( , ) arbre Rechercher (arbre, ) arbre info nom FProc

104

Ecrire le vainqueur dun match


Procdure rechercher ( , : , , ) Si a alors Si a info = j alors F a Sinon Si f = alors Rechercher (afg,j,f,p) FSi Si f et p = alors P a Sinon Si f = alors Rechercher (a fd,j,f,p) FSi Si f et p = alors P a FSi FSi FSi FSi FProc

Ecrivez une procdure qui permet de lire un arbre par niveau


Procdure level ( ) Q : file Si a alors INQ (q,a) Tant que pas EmptyQ(a) faire A OUTQ(Q) TRT(a info) Si a fg alors INQ(Q,a fg) FSi Si a fd alors INQ (Q, a fd) FSi FTant FSi FProc

105