Documente Academic
Documente Profesional
Documente Cultură
ECONOMIQUE
2009
ISEC-HEPCUT
Catgorie : Type : Section : Enseignant : Anne : Fonction : Activit denseignement : Nombre dheures : Nombre de crdits :
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
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
Matire faisant X lobjet de lvaluation X Ecrit X Oral X Dure X Questionnaire Aucune drogation aux rgles ci-dessus ne sera admise.
Dfinition :
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
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
OU
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
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
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
Dbut x1, x2, y1, y2, d: entier Ecrire " 2 points " Lire x1, x2, y1, y2 d (x1 x2) + ( y1 y2) Ecrire d
Fin 9
? Non C
Oui
Les Conditions Affirmation Ngation (contraire de l'affirmation) = = < > > <
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
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
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
+ + + + -
|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 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
Si d = 0 alors r1
2
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
Non
15
16
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
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
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
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
2i - 1
20
21
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.
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.
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
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.
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
25
Suivant
Traitement
S0
1 1 1 1 + + + . 3 5 7 9
S1
Fin?
Le choix du "rpter jusqu' ce que" est bonne car il faut l'acquisition d'une deuxime valeur.
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
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
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
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
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.
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
31
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
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
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 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
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
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
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
+
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
39
40
ch 1
ch 2
cr 3
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 ;
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
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
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
)!! + +
en
48
( + 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
50
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
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
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
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
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
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
63
64
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
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
67
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
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
70
71
() = = ( ). () +
=
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
72
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
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
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
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
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
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
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
87
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
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 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
Symtrie centrale :
1 0
0 1/2
0 1
89
90
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.
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
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
97
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
98
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
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
Ordre : 1, 2, 3, 5, 7, 6, 4
Procdure sym ( ) Si a alors sym (a fg) Trt (a info) Sym (a fd) FSi FProc
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
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
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
105