Problème :

175
Problème : Jeux pédagogique ( gestion des ressources) Aider les deux nobles paysans Ahmed et Ali de partager leur huile d’olive en deux quantités égaux dans les conditions suivantes : Quantité : 8 litres; Resource : 1 bidon de 8L; 1 bidon de 5L; 1 bidon de 3L. situation : le bidon de 8L est complètement remplit et les autres sont vides; Question : Ecrire les étapes a suivre afin de partager l’huile. 12/06/22 Algorithmique et programmation MPSI/TSI/PCSI 1

description

Problème :. Jeux pédagogique ( gestion des ressources). Aider les deux nobles paysans Ahmed et Ali de partager leur huile d’olive en deux quantités égaux dans les conditions suivantes : Quantité : 8 litres; Resource : 1 bidon de 8L; 1 bidon de 5L; - PowerPoint PPT Presentation

Transcript of Problème :

Page 1: Problème  :

Problème :

Jeux pédagogique (gestion des ressources)

Aider les deux nobles paysans Ahmed et Ali de partager leur huile d’olive en deux quantités égaux dans les conditions suivantes :

Quantité : 8 litres;Resource : 1 bidon de 8L; 1 bidon de 5L; 1 bidon de 3L. situation : le bidon de 8L est complètement remplit et les autres sont vides;Question : Ecrire les étapes a suivre afin de partager l’huile.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI1

Page 2: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI2

Résolution du jeux :La situation actuel est : B8←8L, B5←0L, B3←0L.

La situation souhaite est : B8←4L, B5←4L, B3←0L.

B8←8L, B5←0L, B3←0L;

B8←3L, B5←5L, B3←0L;

B8←3L, B5←2L, B3←3L;

B8←6L, B5←2L, B3←0L;

B8←6L, B5←0L, B3←2L;

B8←1L, B5←5L, B3←2L;

B8←1L, B5←4L, B3←3L;

B8←4L, B5←4L, B3←0L.

Résolution du jeux :

Page 3: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI3

Page 4: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI4

Enoncé du problèmeEnoncé du problème

Cahier des chargesCahier des charges

AlgorithmeAlgorithme

ProgrammationProgrammation

RésultatsRésultats

Etapes de réalisation d’un programmeEtapes de réalisation d’un programme

Page 5: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI5

Intérêt :

séparation analyse/codage (pas de préoccupation de syntaxe)

 Qualités :

• Exact (fournit le résultat souhaité) ;

• Efficace (temps d’exécution, mémoire occupée) ;

• Clair (compréhensible) ;

• Général (traite le plus grand nombre de cas possibles) ;

• …

Une bonne connaissance de l’algorithmique permet d’écrire des

algorithmes exacts et efficaces

Page 6: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI6

Notion d’algorithme

I) Définition de l’algorithme :

Un algorithme est une suite d’actions appliquées sur des données dans un ordre logique afin d’obtenir des résultats.

Exemple :

Réaliser une opération de calcule grâce à la calculatrice, tel que 2+7 :

DébutDébut Allumer la calculatrice Taper la touche Taper la touche + Taper la touche Taper la touche = Puis on obtient le résultat 9 à l’écran

FinFin

Page 7: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI7

Remarque : La résolution d’un problème se fait par la méthode

suivante(analyse) :Déterminer les données (entrés) ;Déterminer le résultat (sortie) ;Déterminer le processus de transformation des données en résultat (traitement).

Exercice d’application :

Calculer la somme de deux nombres réels.

L’analyse :

Les données fournies : Deux nombre réel A et B

Le résultat désiré : La somme S de deux nombres

Page 8: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI8

Le processus de transformation des données en résultat : Additionner les deux nombres A et B pour obtenir le résultat S

II) Notion de données  :

Une constante est une donnée fixe qui ne varie pas tout le long de l’algorithme.

Exemples :

Pi (π)=3,14 ; g=9,81 N/g ;R=8,31 SI ; Na=6,02 1023  ; e=1,6 10-19

1) Les constantes :

Une variable est le nom d’un espace mémoire (case mémoire) dont le contenu peut changer pendant l’exécution d’un algorithme.

2) Les variables :

Exemples :

Nom_eleve ; note_eleve ; Prix_unitaire ; x ; nom4

Page 9: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI9

3) Les caractéristiques d’une donnée : Pour définir une donnée il faut préciser les éléments suivants :

Le nom de la donnée (identificateur)  ; Le type de donnée (caractère, chaîne de caractères, entier, réel, booléen, …) ; La nature de la donnée (constante, variable).

Règles :

Les données (variables et constantes) doivent être déclaréesdéclarées avant d’être utilisées ;

Le choix des noms de variables est soumis à quelques règles :

Un nom doit commencer par une lettre alphabétique ;

Doit être constitué uniquement de lettres, de chiffres et du soulignement _ (Eviter les caractères de ponctuation et les espaces) ;

Doit être différent des mots réservés du langage ;

La longueur du nom doit être inférieure à la taille maximale spécifiée par le langage utilisé ;

Page 10: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI10

Conseil : Pour la lisibilité du code choisir des noms significatifs qui décrivent les données

manipulées.

Remarque :

En pseudo-code algorithmique, on va respecter les règles citées, même si on est libre dans la syntaxe.

Rappel :

Toute variable utilisée dans un programme doit avoir fait l’objet d’une déclaration préalable ;

En pseudo-code, on va adopter la forme suivante pour la déclaration de variables :

Variables liste d'identificateurs : typeVariables liste d'identificateurs : type

Exemples : Variables i, j,k : entier

x, y : réel OK : booléen ch1, ch2 : chaîne de

caractères

Page 11: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI11

Remarques :

Deux valeurs VRAI ou FAUX, TRUE ou FALSE, 0 ou 1.

Le type d’une variable détermine l’ensemble des valeurs qu’elle peut prendre, les types offerts par la plupart des langages sont:  

Type numérique (entier ou réel) :Type numérique (entier ou réel) :

Type logique ou booléen :Type logique ou booléen :

Entier courtEntier court (codé sur 2 octets) ;Entier long Entier long (codé sur 4 ou 8 octets) ;Réel simple précisionRéel simple précision (codé sur 4 octets) ;Réel double précisionRéel double précision (codé sur 8 octets).

Lettres majuscules, minuscules, chiffres, symboles, ….

Type caractère :Type caractère :

Type chaîne de caractère :Type chaîne de caractère :

Toute suite de caractères.

Exemples :

’’A’, ’a’, ’1’, ’?’, …A’, ’a’, ’1’, ’?’, …

Exemples : "Nom, Prénom", "code postale:1000", "CPGE ", …"Nom, Prénom", "code postale:1000", "CPGE ", …

Pour le type numérique on va se limiter aux entiers et réels sans considérer les sous types. 

Page 12: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI12

1) Instruction de lecture :III) Les instructions de base  :

Cette instruction permet de lire les données à travers le clavier, appelée également Instruction d’entrée.

L’instruction de lecture est notée :

Syntaxe : Lire (Variable)

Exemples : Lire (Note_eleve4) ; Lire (x) ; Lire (A8)

2) Instruction d’écriture : Cette instruction permet d’afficher un message, le contenu d’une variable

et/ou le résultat d’une opération de calcul, appelée aussi Instruction de sortie.

L’instruction d’écriture est représentée par :

Syntaxe : Ecrire (Variable) ; Ecrire ("message") ; Ecrire (opération de calcul)

Exemples : Ecrire (Note_eleve4) ; Ecrire ("Bonjour") ; Ecrire ((Note_eleve4+x)/3) ; Ecrire (x,A8,x+A8)

Page 13: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI13

3) L’affectation (Assignation) :

Cette instruction permet d’attribuer une valeur à une variable, elle est représentée par une flèche dirigée vers la gauche "←".

Syntaxe :

Variable ← valeur, une autre variable ou bien une expression

Exemples :

X ← 12 X ← Y+4Y ← X

12 X Y+412 12 16

Page 14: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI14

Exercice1 : Donnez les valeurs des variables A, B et C après exécution des instructions

suivantes ?

Algorithme :

Algorithme Affectation1 Variables A, B, C : Entier Debut A←3 B←7 A←B B←A+5 C←A+B C←B-A Ecrire (A,B,C) Fin

Version1 :

Algorithme Affectation2 Variables A, B : Entier Debut A←1 B←2 A←B B←A Ecrire (A,B) Fin

Version2 :

Les deux dernières instructions (Version2) permettent-elles d’échanger les valeurs de A et B ?

Exercice2 : Ecrire un algorithme permettant d’échanger les valeurs de deux variables A et B

Page 15: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI15

La transformation des données en résultat : Appliquer la relation qui donne la moyenne de deux nombres.

Algorithme : Version1 :

Algorithme Moyenne1 Variables A, B, C : Réel Debut Lire (A) Lire (B) C ← (A+B)/2 Ecrire (C) Fin

L’en-tête

Les déclarations

Le corps

Algorithme Moyenne1 Variables A, B, C : Réel Debut Lire (A,B) C ← (A+B)/2 Ecrire (C) Fin

Exercice d’application : Ecrire un algorithme qui permet de lire deux nombres réels et d’afficher leur moyenne.

L’analyse du problème : Les données fournies :

Deux nombres réels

Le résultat désiré : La moyenne des deux nombres réels

Page 16: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI16

Algorithme Moyenne2 Variables A, B, C : Réel Debut Ecrire ("Donner la valeur de A") Lire (A) Ecrire ("Donner la valeur de B") Lire (B) C ← (A+B)/2 Ecrire ("La moyenne de A et B est :",C) Fin

L’en-tête

Les déclarations

Le corps

Version2 :

Algorithme Moyenne2 Variables A, B, C : Réel Debut Ecrire ("Donner la valeur de A et de B") Lire (A,B) C ← (A+B)/2 Ecrire ("La moyenne de A et B est :",C) Fin

Ou bien :

Page 17: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI17

Remarques : Par convention, l’algorithme note certains des opérateurs différemment :

OpérateurReprésentation arithmétique

Représentation algorithmique

Exemple

Addition + + A+B

Soustraction - - A-B

Multiplication × * A*B

Division ÷ / A/B

Puissance An ^ A^n

Modulo, reste de la division entière

21÷8=2Reste 5

21 mod 8=5 A mod B

Pour les opérateurs arithmétiques donnés ci-dessus, l'ordre de priorité est le suivant (du plus prioritaire au moins prioritaire) :

^ (la puissance) ; * , / (multiplication, division) ; mod (modulo) ; + , - (addition, soustraction).

2 + 3 * 7 vaut 23 Exemples :

En cas de besoin (ou de doute), on utilise les parenthèses pour indiquer les opérations à effectuer en priorité :

Exemples : (2 + 3) * 7 vaut 35

Page 18: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI18

Langages informatiques I) Définition :

Un langage informatique est un outil permettant de donner des ordres (instructions) à la machine.

Définition :

II) Langage machine :

Intérêt : écrire des programmes (suite consécutive d’instructions) destinés à effectuer une tâche donnée ;

Contrainte : être compréhensible par la machine.

Langage binaire : l’information est exprimée et manipulée sous forme d’une suite de bits ;

Un bit (binary digit) = 0 ou 1 (2 états électriques) ;

Une combinaison de 8 bits= 1 Octet 28=256 possibilités qui permettent de coder tous les caractères alphabétiques, numériques, et symboles tels que ?,*,&, … ;

Les opérations logiques et arithmétiques de base (addition, multiplication, …) sont effectuées en binaire.

Le code ASCII (American Standard Code for Information Interchange) donne les correspondances entre les caractères alphanumériques et leurs représentations binaires.

Exemple : A= 01000001 ?=00111100

Page 19: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI19

II) Langage haut niveau :

Intérêts multiples pour le langage haut niveau :

Nécessite un traducteur (compilateur/interpréteur) ;

Exécution plus ou moins lente selon le traducteur.

Proche du langage humain «anglais» (compréhensible) ;

Permet une plus grande portabilité (indépendant du matériel) ;

Manipulation de données et d’expressions complexes (réels, objets, a*b/c, …).

Code sourceCode sourceen langage en langage éévoluvoluéé

Langage machineLangage machineCompilateur ouCompilateur ou

InterprInterprééteurteur

Compilateur : traduire le programme entier une fois pour toutes :1) Compilateur/interpréteur :

+ plus rapide à l’exécution ;

+ sécurité du code source ;

- il faut recompiler à chaque modification.

fichier exfichier exéécutablecutable fichier sourcefichier source exemple.c

CompilateurCompilateur ExExéécutioncutionexemple.exe

Page 20: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI20

Interpréteur : traduire au fur et à mesure les instructions du programme à chaque exécution.

fichier sourcefichier source

InterprInterpréétation+Extation+Exéécutioncutionexemple.py

+ exécution instantanée appréciable pour les débutants ;

- exécution lente par rapport à la compilation.

Un langage de programmation est un langage informatique composé d’un ensemble d’instructions pouvant être traduites et exécutées par un ordinateur.

Exemple :

Basic, Pascal, COBOL, Fortaran, C, C++, LOGO, Python,…

A) Définition d’un langage de programmation :

1) Langages python (Code python) :

Page 21: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI21

B) Définition d’un programme :

Un programme est une suite ordonnée d’instructions, compréhensibles par l’ordinateur, appliqué à des données afin d’obtenir des résultats.

C) L’identificateur :

Un identificateur en langage python doit débuter par une lettre suivie par un nombre de lettres ou de chiffres.

x, max, val4x, max, val4

Exemple :

D) Les types de données :

Le type entier :

Pas de valeur limite explicite, correspond au moins au long int du C (-263 à 263 ).

Le type réel :

Correspond au double du C (-1.7 10308 à +1.7 10308) .

Page 22: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI22

Le type chaine de caractères : Ce type sert à manipuler les caractères.

Le type booléen :

Ce type prend la valeur False pour faux et la valeur True pour vrai.

C) Les instructions :

i) l’instruction d’entrée :L’instruction de lecture est symbolisée par input, elle permet le

transfert des données vers la mémoire centrale .

Syntaxe : l’identificateur=input() 

ii) l’instruction de sortie  :

L’écriture se fait de façon semblable que la lecture à l’aide de l’instruction print.

Syntaxe : print(l’identificateur)

Exemple : x=input() 

Exemple : print(x) 

Page 23: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI23

iii) l’instruction d’affectation :Cette instruction permet de mettre une valeur dans une variable. Le symbole

de l’affectation est =

Syntaxe : variable = valeur

Remarques :

print permet d’afficher un texte.

Type Format

Entier int %d

Réel (Flottant) float %f ou %e

Caractère char %c

Chaîne de caractères char %s

Les codes de format :

Exemple : x=4 

Page 24: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI24

RésultatsRésultats

Enoncé du problèmeEnoncé du problème

Cahier des chargesCahier des charges

AlgorithmeAlgorithme

Programme sourceProgramme source

Interprétation et ExécutionInterprétation et Exécution

Etapes de réalisation d’un programmeEtapes de réalisation d’un programme

Page 25: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI25

Structures de contrôle de base I) Structure séquentielle :

La structure séquentielle est une suite d’instructions qui s’exécute l’une après l’autre dès le début jusqu'à la fin dans un algorithme.

Exemple : Calcul de la moyenne des deux nombres réels A et B.

Définition :

(Algorithme et Programmation)

Langage pythonLangage python

## Programme MoyenneA=input(input('Donner A:'))B=input(input('Donner B:'))A=float(float(A))B=float (float (B))Moyenne=(A+B)/2print(print("La moyenne de",A,"et",B,"=",Moyenne))

AlgorithmeAlgorithme

Algorithme Moyenne Variables A, B, Moyenne : Réel Debut Ecrire ("Donner la valeur de A") Lire (A) Ecrire ("Donner la valeur de B") Lire (B) Moyenne ← (A+B)/2 Ecrire ("La moyenne de A et B est :", Moyenne ) Fin

Page 26: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI26

1) Définition :

II) Structure alternative :

La structure alternative permet d’exécuter un bloc d’instructions ou un autre en fonction de la réponse de la condition.

Langage pythonLangage python

ifif condition: : ou ifif condition:: Instruction Instructions

AlgorithmeAlgorithme

Si Si condition alors alors Instruction ou suite d'instructionsFinsiFinsi

2) Structure alternative simple :Cette structure permet d’effectuer certaines opérations ou au contraire

de ne rien faire.

Syntaxe :

SiSi la condition est vérifiée alorsalors le bloc d’instructions serait exécuté, sinon il serait ignoré.

Cette instruction se lit :

Page 27: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI27

Langage pythonLangage python

if if Moyenne= =10:: print("Juste la moyenne")

AlgorithmeAlgorithme

Si Si Moyenne=10 alors alors Ecrire ("Juste la moyenne")FinsiFinsi

Remarques :

Opérateurs SignificationReprésentation algorithmique Exemple

Représentation Langage python

Exemple

= égal = A=B = = A= =B

≠ Différent de… <> A<>B != A!=B

< Strictement plus petit que… < A<B < A<B

> Strictement plus grand que… > A>B > A>B

≤ plus petit ou égal à… <= A<=B <= A<=B

≥ plus grand ou égal à… >= A>=B >= A>=B

Exemple :

Page 28: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI28

Cette structure permet d’exécuter un bloc d’instructions ou un autre en fonction d’une condition.

SiSi la condition est vérifiée alors alors le bloc d’instructionsA sera exécuté et le bloc, d’instructionsB sera ignoré. Sinon Sinon le bloc d’instructionsB sera exécuté et le bloc d’instructionsA sera ignoré.

3) Structure alternative complète :

Cette instruction se lit :

Syntaxe :

Code pythonCode python

ifif condition:: ou ifif condition:: InstructionA InstructionsAelse : else :else : else : InstructionB InstructionsB

AlgorithmeAlgorithme

Si Si condition alors alors InstructionsASinonSinon InstructionsBFinsiFinsi

Exemple : Langage python Langage python

if if Moyenne= =10:: print("Juste la moyenne")else : else : print("La moyenne est différente de 10")

AlgorithmeAlgorithmeSi Si Moyenne=10 alors alors Ecrire ("Juste la moyenne")SinonSinon Ecrire ("La moyenne est différente de 10")FinsiFinsi

Page 29: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI29

4) Structure alternative imbriquée  :Cette structure est utilisée quand on a plus de deux conditions.

Syntaxe :

AlgorithmeAlgorithme

Si (Si (condition1) alors) alors InstructionsASinonSinon Si (Si (condition2) alors) alors InstructionsB SinonSinon Si (Si (condition3) alors) alors InstructionsC SinonSinon InstructionsD FinsiFinsi FinsiFinsiFinsiFinsi

Langage pythonLangage python

ifif condition1:: InstructionsA elif elif condition2: : InstructionsB elif elif condition3: : InstructionC else : else : InstructionD

Page 30: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI30

AlgorithmeAlgorithmeSi (Si (Moyenne=10) alors) alors Ecrire ("Juste la moyenne")SinonSinon Si (Si (Moyenne<10) alors) alors Ecrire ("La moyenne est inferieure à 10") SinonSinon Ecrire ("La moyenne est supérieure à 10") FinsiFinsiFinsiFinsi

Langage python Langage python ifif Moyenne= =10 : : print("Juste la moyenne")elif elif Moy<10 : : print("La moyenne est inferieure à 10")else :else : print("La moyenne est supérieure à 10")

Exemple1 :

Exemple2 :

AlgorithmeAlgorithmeAlgorithme Temperature_eau Variable Temperature : Entier Debut Ecrire ("Entrez la température de l’eau :") Lire (Temperature) Si (Temperature<=0) Alors Ecrire ("C’est de la glace") Sinon Si (Temperature<=100) Alors Ecrire ("C’est du liquide") Sinon Ecrire ("C’est du vapeur") Finsi Finsi Fin

Langage python Langage python # Programme Temperature EauTemperature=input('Entrez la température de l’eau:')Temperature=int(Temperature)ifif Temperature<=0 :: print("C’est de la glace")elifelif Temperature<=100 :: print("C’est du liquide")else :else : print("C’est du vapeur")

Page 31: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI31

Exemple3 :

AlgorithmeAlgorithmeAlgorithme gestion_feu Variable Couleur : caractere Debut Ecrire ("De quelle couleur est le feu?") Lire (Couleur) Si ((Couleur = ‘V’)OU(Couleur = ‘v’)) Alors Ecrire ("Je passe") Sinon Si ((Couleur = ‘O’)OU(Couleur = ‘o’)) Alors Ecrire ("Je ralentis") Sinon Si ((Couleur = ‘R’)OU(Couleur = ‘r’)) Alors Ecrire ("Je m’arrête") Sinon Ecrire ("Cette couleur n’est pas une couleur de feu") Finsi Finsi Finsi Fin

Code python Code python

# Programme Gestion FeuCouleur=input('De quelle couleur est le feu?')ifif Couleur= ='V' or Couleur= ='v':: print("Je passe")elifelif Couleur= ='O' or Couleur= ='o':: print("Je ralentis")elifelif Couleur= ='R' or Couleur= ='r':: print("Je m’arrête")else:else: print("Cette couleur n’est pas une couleur de feu")

Page 32: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI32

5) Structure de choix :

Cette structure permet d’effectuer un choix parmi plusieurs cheminement proposés.

Syntaxe :

AlgorithmeAlgorithme

Selon queSelon que identificateur vautvaut Valeur 1 fairefaire Instructions 1 Valeur 2 fairefaire Instructions 2  Valeur n fairefaire Instructions n Autrement que Autrement que Instructions n+1FinselonFinselon

Langage python Langage python

Page 33: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI33

Exemple :

AlgorithmeAlgorithme

Algorithme gestion_feu1

Variable Couleur : caractere

Debut

Ecrire ("De quelle couleur est le feu?")

Lire (Couleur)

Selon queelon que Couleur vautvaut

‘V’ ‘v’ fairefaire Ecrire ("Je passe")

‘O’ ‘o’ fairefaire Ecrire ("Je ralentis")

‘R’ ‘r’ fairefaire Ecrire ("Je m’arrête")

Autrement queAutrement que Ecrire ("Cette couleur n’est

pas une couleur de feu")

FinselonFinselon

Fin

Code python Code python

# Programme Gestion FeuCouleur=input('De quelle couleur est le feu?')ifif Couleur= ='V' or Couleur= ='v':: print("Je passe")elifelif Couleur= ='O' or Couleur= ='o':: print("Je ralentis")elifelif Couleur= ='R' or Couleur= ='r':: print("Je m’arrête")else:else: print("Cette couleur n’est pas une couleur de feu")

Page 34: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI34

II) Instructions itératives (les boucles) :

Les boucles servent à répéter l'exécution d'un groupe d'instructions un certain nombre de fois.

Langage pythonLangage python

forfor compteur in range(range(initiale,finale+1,pas) :) :  suite d'instructions

AlgorithmeAlgorithme

Pour Pour compteur allant de allant de initiale àà finale parpar pas FaireFaire InstructionsFinPourFinPour

1) Les boucles Pour ou avec compteur :

On distingue trois sortes de boucles en langages de programmation.

Syntaxe :

Les boucles Tant queTant que ;

Les boucles Jusqu’à Jusqu’à ;

Les boucles PourPour ;

On y répète des instructions en faisant évoluer un compteur (variable particulière) entre une valeur initiale et une valeur finale.

Page 35: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI35

Exemple :

Langage pythonLangage python

# Programme Compteur forfor i in range(range(1,6) :) : print("La valeur de i=",i)

AlgorithmeAlgorithme

Algorithme Compteur Variable i : entier Debut Pour Pour i allant de allant de 1 àà 5 parpar pas 1 FaireFaire Ecrire (" La valeur de i est : " ,i) FinPourFinPour Fin

i n'a pas atteint finale instructions

Faux

Vrai

i ←initiale

i ← i + pasi n'a pas atteint finale instructions

Faux

Vrai

i ←initiale

i ← i + pas

Algorigramme :

Page 36: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI36

PasPas peut ne pas être mentionné, car par défaut sa valeur est égal à 1. Dans ce cas, le nombre d'itérations est égal à finale - initiale+ 1 ;

Initiale et finaleInitiale et finale peuvent être des valeurs, des variables définies avant le début de la boucle ou des expressions de même type que compteur.

Remarque :

Le nombre d'itérations dans une boucle PourPour est connu avant le début de la boucle ;

Il faut éviter de modifier la valeur du compteur (et finale) à l'intérieur de la boucle. En effet, une telle action :

perturbe le nombre d'itérations prévu par la boucle PourPour ;

rend difficile la lecture de l'algorithme ;

présente le risque d'aboutir à une boucle infinie.

Page 37: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI37

Exemple :

Langage pythonLangage python

# Programme Compteur forfor i in range(range(1,6) :) : i=i-1

print("La valeur de i=",i)

AlgorithmeAlgorithme

Algorithme Compteur Variable i : entier Debut i←0 Pour Pour i allant de allant de 1 àà 5 FaireFaire i←i-1 Ecrire (" La valeur de i est : " ,i) FinPourFinPour Fin

Page 38: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI38

Langage pythonLangage python

whilewhile condition ::  suite d'instructions

AlgorithmeAlgorithme

TantQue TantQue condition FaireFaire instructionsFinTantQueFinTantQue

2) Les boucles Tant que :

Syntaxe :

On y répète des instructions tant qu'une certaine condition est réalisée.

Exemple :

Langage pythonLangage python# Programme Compteur i=0whilewhile i<6 :: print("La valeur de i=",i) i=i+1

AlgorithmeAlgorithmeAlgorithme Compteur Variable i : entier Debut i←0 TantQue TantQue i<=5 FaireFaire Ecrire (" La valeur de i est : " ,i) i←i+1 FinTantQueFinTantQue Fin

i) boucle Tant que … Faire :

Page 39: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI39

Langage pythonLangage pythonAlgorithmeAlgorithme

FaireFaire instructionsTantQue TantQue condition

Syntaxe :

Exemple :

Langage pythonLangage pythonAlgorithmeAlgorithme

Algorithme Compteur Variable i : entier Debut i←0 FaireFaire Ecrire (" La valeur de i est : " ,i) i←i+1 TantQue TantQue i<=5 Fin

i) boucle Faire…Tant que :

Page 40: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI40

condition instructions

Faux

Vraicondition instructions

Faux

Vrai

Algorigramme :

La condition (dite condition de contrôle de la boucle) est évaluée avant chaque itération ;

Tant que la condition est vraie, on exécute les actions ;

Si la condition est fausse, on sort de la boucle et on exécute l'instruction qui est après FinTantQueFinTantQue.

Remarques :

Le nombre d'itérations dans une boucle TantQueTantQue n'est pas connu au moment d'entrée dans la boucle. Il dépend de l'évolution de la valeur de condition ; Une des instructions du corps de la boucle doit absolument changer la valeur de condition de vrai à faux (après un certain nombre d'itérations), sinon le programme tourne indéfiniment ;

Page 41: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI41

Exemple de boucle infinie  :

Attention aux boucles infinies !!!!

Langage pythonLangage python

# Programme Compteur i=1whilewhile i>0 ::

print("La valeur de i=",i)i=i+1

AlgorithmeAlgorithme

Algorithme Infinie Variable i : entier Debut i ← 1 TantQue TantQue i>0 FaireFaire

Ecrire("La valeur de i=",i) i ← i+1

FinTantQueFinTantQue Fin

Si on peut déterminer le nombre d'itérations avant l'exécution de la boucle, il est plus naturel d'utiliser la boucle PourPour ;

S'il n'est pas possible de connaître le nombre d'itérations avant l'exécution de la boucle, on fera appel à TantQue TantQue.

Choix d'un type de boucle :

Page 42: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI42

Langage pythonLangage pythonAlgorithmeAlgorithme

FaireFaire InstructionsJusqua Jusqua condition

Syntaxe :

Exemple :

Langage pythonLangage pythonAlgorithmeAlgorithme

Algorithme Compteur Variable i : entier Debut FaireFaire Ecrire (" La valeur de i est : " ,i) Jusqua Jusqua i>5 Fin

3) Boucle Faire…Jusqu’à :

Page 43: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI43

La boucle PourPour est un cas particulier de TantQue TantQue (cas où le nombre d'itérations est connu et fixé). Tout ce qu'on peut écrire avec PourPour peut être remplacé avec TantQueTantQue (la réciproque est fausse).

Lien entre Pour et TantQue :

Langage pythonLangage python

forfor compteur in range(range(initiale,finale+1,pas) :) :  suite d'instructions

AlgorithmeAlgorithme

Pour Pour compteur allant de allant de initiale àà finale parpar pas FaireFaire InstructionsFinPourFinPour

Peut être remplacé par :

Exemple :

Langage python Langage python # Programme Compteur compteur =initiale whilewhile compteur <= finale :  Instructions compteur = compteur+1

AlgorithmeAlgorithmeAlgorithme Compteur Variable compteur : entier Début compteur ← initiale TantQue TantQue compteur <= finale FaireFaire Instructions compteur ← compteur+1 FinTantQueFinTantQue Fin

Page 44: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI44

AlgorithmeAlgorithmeAlgorithme Boucle Imbriquée Variable A,B,Moy : Reels Reponse : caractère Début Reponse=‘o’ TantQueTantQue Reponse=‘O’ OU Reponse=‘o’ FaireFaire Ecrire (" Donner A et B :") Lire(A,B) Moy=(A+B)/2 Ecrire("La moyenne de ",A, "et",B, "est",Moy) Si (Si (Moy=10) alors) alors Ecrire ("Juste la moyenne") SinonSinon Si (Si (Moy<10) alors) alors Ecrire ("La moyenne est inferieure à 10") SinonSinon Ecrire ("La moyenne est supérieure à 10") FinsiFinsi FinsiFinsi Ecrire(" Voulez -Vous Continuer à exécuter ce programme? O/N ") Lire(Reponse) TantQueTantQue Reponse<>‘O’ ET Reponse<> ‘o’ ET Reponse<> ‘N’ ET Reponse<> ‘n’ FaireFaire Ecrire(" Donner une réponse O/N ") Lire(Reponse) FinFinTantQueTantQue FinFinTantQueTantQue Ecrire("Merci, Au revoir!!!!") Fin

3) Boucle imbriquées  :Les instructions d'une boucle peuvent être des instructions itératives.

Dans ce cas, on aboutit à des boucles imbriquées.

Exemple :

Page 45: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI45

Langage python Langage python # Programme Boucle ImbriquéeReponse='o'whilewhile Reponse=='o' or Reponse=='O' ::

A=input('Donner A:')B=input('Donner B:')A=int(A)B=int(B)Moy=(A+B)/2print('La moyenne de',A,'et',B,'est',Moy)ifif Moy==10::print("Juste la moyenne")elifelif Moy<10::print("La moyenne est inferieure à 10")else:else:print("La moyenne est supérieure à 10")print(" Voulez -Vous Continuer à exécuter ce programme? O/N")Reponse=input()whilewhile Reponse!='o' andand Reponse!='O' andand Reponse!='N' and and Reponse!

='n'::print("Donner une réponse O/N")Reponse=input()

print("Merci, Au revoir!!!!")

Page 46: Problème  :

Imbrications autorisées

Boucle 1

Fin Boucle 1

Boucle 2

Fin Boucle 2

Boucle 4

Fin Boucle 4

Boucle 3

Fin Boucle 3

Imbrications interdites

Boucle 1

Fin Boucle 1

Boucle 2

Fin Boucle 2

Boucle 4

Fin Boucle 4Boucle 3

Fin Boucle 3

Imbrications de boucles Imbrications de boucles ::

20/04/2346 Algorithmique et programmation MPSI/TSI/PCSI

L’instruction break :Elle sert à interrompre le déroulement d’une boucle.

L’instruction Continue :Elle permet de passer au tour de boucle suivant.

Page 47: Problème  :

47

Un algorithme qui détermine le premier nombre entier N tel que la somme de 1 à N dépasse strictement 100.

AlgorithmeAlgorithmeAlgorithme somme2

Variables som, i : entier

Debut

som ← 0

i ← 1

TantQueTantQue (som <=100) FaireFaire

     som ← som + i

i ← i+1

FinTantQueFinTantQue

Ecrire ("La valeur cherchée est N= ",i-1)

Fin

Langage python Langage python # Programme Somme100 i=0Som=0whilewhile Som<=100:: Som=Som+i i=i+1print("La valeur cherchée est N =",i-1)

Exercice1 :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 48: Problème  :

48

AlgorithmeAlgorithme

Algorithme puissance Variables x, puiss : réel n, i : entier Debut Ecrire (" Entrez la valeur de x ") Lire (x) Ecrire (" Entrez la valeur de n ") Lire (n) puiss ← 1 Pour i allant de 1 à n FaireFaire puiss← puiss*x FinPour Ecrire (x, " à la puissance ", n, " est égal à ", puiss) Fin

Langage pythonLangage python

# Programme Puissance x=int(input("Entrez la valeur de x:"))n=int(input("Entrer la valeur de n:"))puiss=1for i in range(1,n+1): puiss=puiss*x print(x,"à la puissance",n,"est égal à",puiss)

Exercice2 : Donner un programme qui Calcul x à la puissance n où x est un réel

non nul et n un entier positif ou nul.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 49: Problème  :

49

AlgorithmeAlgorithme

Algorithme factorielle Variables n,fact : entier Debut Ecrire (" Entrez la valeur de n") Lire (n) fact← 1 Pour i allant de 1 à n FaireFaire fact← fact*i FinPour Ecrire (" La factorielle de", n ,"est :", fact) Fin

Langage python Langage python

# Programme Puissance n=int(input("Entrer la valeur de n:"))fact=1for i in range(1,n+1): fact=fact*i print("La factorielle de",n,"est:",fact)input()

Exercice3 :

Donner un programme qui Calcul la factorielle d’un nombre entier n.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 50: Problème  :

50

AlgorithmeAlgorithmeAlgorithme Fibonacci Variables n, j, A,B,C : entierDebut B ← 1 C ← 1 Ecrire (" Donner La valeur de n ") Lire (n) Si (n=0 OU n=1) alors Ecrire (" La valeur Un=1") Sinon Pour j allant de 2 à n FaireFaire A ←B + C C ← B B ← A FinPour Ecrire (" La valeur Un=",A) FinsiFin

Langage python Langage python # Programme Fibonacci n=int(input("Entrer la valeur de n:"))B=1C=1if n= =0 or n= =1 : print("La valeur U",n,"=1")else: for j in range(2,n+1): A=B+C C=B B=A print("La valeur U",n,"=",A) input()

Exercice4 : Déterminez un algorithme permettant de calculer le terme de rang n

de la suite de. Fibonacci. Avec : U0=U1=1 et Un=Un-1+Un-2.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 51: Problème  :

51

Analyse descendanteAnalyse descendante :: Diviser pour régnerDiviser pour régner

Diviser pour régner consiste à décomposer le problème complexe à résoudre

en plusieurs sous problèmes moins complexes. A refaire cette décomposition

sur les sous problèmes jusqu’à obtenir des sous problèmes faciles à résoudre.

Conclusion :Conclusion :

La solution à un problème bien défini peut être formulée comme une suite des trois énoncés suivants :

• Séquentiel : suite d’étapes

• Conditionnel : choix entre deux étapes suivant une condition

• Répétitif (itératif) : répétition d’une étape

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 52: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI52

A

A1 A2

A

A1 A2

A11 A12A21 A22

AAction abstraite

Actions mois abstraites

Actions concrètes

Exemple :Algorithme de résolution d'équation de second degré :

a x2 + b x + c = 0

Page 53: Problème  :

53

ax2+bx+c=0

bx+c=0 ax2+bx+c=0

c=0

Infinités de

solutions

Pas de solutions

x=-c/b Δ=b2-4ac

Δ=0

x=-b/2a

Δ≠0

Δ<0

Pas de solutions

réelles

Δ>0

x1=-b-(Δ)1/2/2ax2=-b+(Δ)1/2/2a

a=0 a≠0

b=0

c=0

b≠0

c≠0

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 54: Problème  :

54

b=0b=0

=b*b - 4 * a * c =b*b - 4 * a * c

c=0c=0

Ecrire -c/bEcrire -c/bEcrire ‘pas de

solutions’

Ecrire ‘pas de

solutions’

Ecrire ‘pas de

solutions’

Ecrire ‘Infinité de solutions’

Ecrire ‘Infinité de solutions’

=0 =0 =0

Ecrire -b/2*aEcrire -b/2*a

>0 >0 >0

Ecrire(-b - racine(D))/(2*a)(-b + racine(D))/(2*a)

Ecrire(-b - racine(D))/(2*a)(-b + racine(D))/(2*a)

Ecrire‘pas de

solutions’

Ecrire‘pas de

solutions’

a=0

Lire a,b,c

Début

a=0a=0

Lire a,b,c

Début

FinFinFin 20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 55: Problème  :

55

Algorithme Eq_Second_DegréRéel a, b, c , Delta

DébutEcrire ("Donner les coefficients : ") Lire(a,b,c)Si (a = 0) alors

Si (b = 0) alorsSi (c = 0) alors

Ecrire ("Infinités de solutions")Sinon

Ecrire ("Pas de solutions")FSi

SinonEcrire ("Equation de 1er degré, une racine réelle : ",-c/b)

FSiSinon

Delta b*b –4*a*cSi (Delta = 0) Alors

Ecrire ("Une racine réelle double : " , -b/(2*a))Sinon

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 56: Problème  :

56

Si (Delta > 0) AlorsEcrire("Deux racines réelles :  x1 = ", (-b + racine(Delta)) /(2*a) ,

" x2 = ", (-b + racine(Delta)) /(2*a) )Sinon

Ecrire("Pas de solutions réelles ")FSi

FSiFSi

Fin

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 57: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI57

ComplexitésComplexités ::

C’est l’étude de l’efficacité comparée des algorithmes. On mesure ainsi le temps et aussi l’espace nécessaire à un algorithme pour résoudre un problème.

Complexité temporelle : (ou en temps) : temps de calcul ;

Complexité spatiale : (ou en espace) : l’espace mémoire requis par le calcul.

Complexité pratique : est une mesure précise des complexités

temporelles et spatiales pour un modèle de machine donné ; Complexité théorique : est un ordre de grandeur de ces couts,

exprimé de manière la plus indépendante possible des conditions pratiques d’exécution.

Page 58: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI58

O(1) constant ;

O(log n) logarithmique;

O(n) linéaire;

O(n×log n) quasi-linéaire;

O(n²) quadratique;

O(np) polynomial;

O(an) exponentiel (problèmes très difficiles).

Les principales classes de complexité :Les principales classes de complexité :

Page 59: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI59

Liste des caractères non imprimables et des caractères spécifiques : \f Saut de page

\n Saut de ligne

\r Retour chariot

\t Tabulation horizontale

\v Tabulation verticale

\\ \

\" "

Remarque :

Type Format

Entier int %d

Réel (Flottant) float %f ou %e

Chaîne de caractères str %s

Les codes de format :

Bibliothèques :Bibliothèques :Une bibliothèque est un ensemble de fonctions. Celles-ci sont

regroupées et mises à disposition afin de pouvoir être utilisées sans avoir à les réécrire.

Page 60: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI60

Langage C :Le résultat d’une fonction peut ne pas être utilisé

Une fonction peut ne pas fournir aucun résultat

Une fonction peut fournir un résultat non scalaire

Un programme C est un ensemble de fonctions contenant au moins la fonction main (fonction obligatoire). Toutes ces fonctions sont au même niveau(pas d’imbrication de fonctions).

Page 61: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI61

Liste des caractères non imprimables et des caractères spécifiques :

\n Saut de ligne

\r Retour chariot

\t Tabulation horizontale

\\ \

\" "

Remarque :

Type Format

Entier int %d

Réel (Flottant) float %f ou %e

Chaîne de caractères str %s

Les codes de format :

Bibliothèques :Bibliothèques :Une bibliothèque est un ensemble de fonctions. Celles-ci sont

regroupées et mises à disposition afin de pouvoir être utilisées sans avoir à les réécrire.

Page 62: Problème  :

62

Programmation Programmation modulairemodulaire

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Fonctions et procéduresFonctions et procédures

ALGORITHMIQUEALGORITHMIQUE

Page 63: Problème  :

63

Fonctions et procédures :Fonctions et procédures :

Certains problèmes conduisent à des programmes longs, difficiles à écrire et à comprendre. On les découpe en des parties appelées sous-programmessous-programmes ou modules ;modules ;

Les fonctionsfonctions et les procéduresprocédures sont des modules (groupe

d'instructions) indépendants désignés par un nom. Elles ont plusieurs intérêtsintérêts :

permettent de "factoriser" les programmes"factoriser" les programmes, càd de mettre en commun les parties qui se répètent ;

permettent une structurationstructuration et une meilleure lisibilitémeilleure lisibilité des programmes ;

facilitent la maintenancefacilitent la maintenance du code (il suffit de modifier une seule fois) ;

ces procédures et fonctions peuvent éventuellement être réutiliséesréutilisées dans d'autres programmes.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 64: Problème  :

64

Fonctions :Fonctions :

Le rôlerôle d'une fonction en programmation est similaire à celui d'une fonction en mathématique : elle retourne un résultat à retourne un résultat à partir des valeurs des paramètrespartir des valeurs des paramètres ;;

Une fonction s'écrit en dehors du programme principal sous la forme :

FonctionFonction nom_fonction (paramètres et leurs types) : type_fonction

Instructions constituant le corps de la fonction retourneretourne (…)

FinFonctionFinFonction

Pour le choix d'un nom de fonction il faut respecter les mêmes règles que celles pour les noms de variables ;

Type_fonction est le type du résultat retourné ; L'instruction retourne retourne sert à retourner la valeur du résultat.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 65: Problème  :

65

La fonction SommeCarre suivante calcule la somme des carrées de deux réels x et y :

FonctionFonction SommeCarre (x : réel, y: réel ) : réel

variable z : réel

z ←x^2+y^2

retourneretourne (z)

FinFonctionFinFonction

La fonction Pair suivante détermine si un nombre est pair :

FonctionFonction Pair (n : entier ) : booléen

retourneretourne (n mod 2=0)

FinFonctionFinFonction

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Exemple :

Page 66: Problème  :

66

Utilisation des fonctions :Utilisation des fonctions :L'utilisation d'une fonction se fera par simple écriture de

son nom dans le programme principale. Le résultat étant une valeur, devra être affecté ou être utilisé dans une expression, une écriture, ...

Exepmle :Exepmle : Algorithme exepmleAppelFonctionAlgorithme exepmleAppelFonction

variables z : réel, b : booléen

DébutDébut

b ←Pair(3)

z ←5*SommeCarre(7,2)+1

Ecrire("SommeCarre(3,5)= ", SommeCarre(3,5))

FinFin

Lors de l'appel Pair(3) le paramètre formelparamètre formel n est remplacé par le paramètre effectifparamètre effectif 3 20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 67: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI67

Arguments d'une fonction Arguments d'une fonction ::

Les paramètres servent à échanger des données entre le programme principale (ou le module appelant) et la fonction appelée ;

Les argument placés dans la déclaration d'une fonction sont appelés argument formelsargument formels. Ces paramètres peuvent prendre toutes les valeurs possibles mais ils sont abstraits (n'existent pas réellement) ;

Les argument placés dans l'appel d'une fonction sont appelés argument effectifsargument effectifs.

Page 68: Problème  :

68

ProcéduresProcédures : : Dans certains cas, on peut avoir besoin de répéter une tâche dans plusieurs

endroits du programme, mais que dans cette tâche on ne calcule pas de résultats ou qu'on calcule plusieurs résultats à la fois ;

Dans ces cas on ne peut pas utiliser une fonction, on utilise une procédure procédure ;

Une procédureprocédure est un sous-programme semblable à une fonction mais qui ne retourne rien ne retourne rien ;

Une procédure s'écrit en dehors du programme principal sous la forme :

ProcédureProcédure nom_procédure (paramètres et leurs types)

Instructions constituant le corps de la procédure

FinProcédureFinProcédure

Remarque : une procédure peut ne pas avoir de paramètres.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 69: Problème  :

69

Appel d'une procédure :Appel d'une procédure : L'appel d'une procédure, se fait dans le programme principale ou

dans une autre procédure par une instruction indiquant le nom de la procédure :

ProcédureProcédure exemple_proc (…) …

FinProcédure FinProcédure

Algorithme exepmleAppelProcédureAlgorithme exepmleAppelProcédure

DébutDébut

exemple_proc (…) …

FinFin

Remarque : contrairement à l'appel d'une fonction, on ne peut pas affecter la procédure appelée ou l'utiliser dans une expression. L'appel d'une procédure est une instruction autonome.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 70: Problème  :

70

Paramètres d'une Paramètres d'une procédure :procédure :

Les paramètres servent à échanger des données entre le programme principale (ou la procédure appelante) et la procédure appelée ;

Les paramètres placés dans la déclaration d'une procédure sont appelés paramètres formelsparamètres formels. Ces paramètres peuvent prendre toutes les valeurs possibles mais ils sont abstraits (n'existent pas réellement) ;

Les paramètres placés dans l'appel d'une procédure sont appelés paramètres effectifsparamètres effectifs. ils contiennent les valeurs pour effectuer le traitement ;

Le nombre de paramètres effectifs doit être égal au nombre de paramètres formels. L'ordre et le type des paramètres doivent correspondre.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 71: Problème  :

71

Variables locales et Variables locales et globales :globales :

On peut manipuler 2 types de variables dans un module (procédure ou fonction) : des variables localesvariables locales et des variables globalesvariables globales. Elles se distinguent par ce qu'on appelle leur portée portée (leur "champ de définition", leur "durée de vie") ;

Une variable localevariable locale n'est connue qu'à l'intérieur du module ou elle a été définie. Elle est crée à l'appel du module et détruite à la fin de son exécution ;

Une variable globalevariable globale est connue par l'ensemble des modules et le programme principale. Elle est définie durant toute l’application et peut être utilisée et modifiée par les différents modules du programme.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 72: Problème  :

72

Variables locales et Variables locales et globales :globales :

La manière de distinguer la déclaration des variables locales et globales diffère selon le langage :

En général, les variables déclarées à l'intérieur d'une fonction ou procédure sont considérées comme variables locales

En pseudo-code, on va adopter cette règle pour les variables locales et on déclarera les variables globales dans le programme principale ;

Conseil :Conseil : Il faut utiliser autant que possible des variables locales plutôt que des variables globales. Ceci permet d'économiser la mémoire et d'assurer l'indépendance de la procédure ou de la fonction.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 73: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI73

Langage pythonLangage python

defdef nom_fonction (paramètres) :" Commentaire " Instructions constituant le corps de la fonctionretourneretourne (…)

Page 74: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI74

ProcédureProcédure incrementer1 (xx : entier par valeur, par valeur, yy : entier par adressepar adresse)

x ← x+1

y ← y+1

FinProcédure FinProcédure

Algorithme Test_incrementerAlgorithme Test_incrementer1

variables n, m : entier

Début Début

n ← 3

m ← 3

incrementer1(n, m) résultat :résultat :

écrire (" n= ", n, " et m= ", m) n=3 et m=4n=3 et m=4

FinFin

Remarque :Remarque : l'instruction l'instruction x ← x+1 n'a pas de sens avec un passage par valeur

Transmission des paramètres : exemples : :

Page 75: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI75

Langage python Langage python

#Programme Incremetation1#Definition de la Procédure Incremetationdef Incremetation(x) : "Echange le contenu de deux variables" global y x=x+1 y=y+1

#Programme principale x=float(input('Donner x:'))y=float(input('Donner y:'))print("x=",x,"et y=",y)Incremetation(x)print("x=",x,"et y=",y)input()

Page 76: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI76

Procédure qui échange le contenu de deux variabales :Procédure qui échange le contenu de deux variabales :ProcédureProcédure Echange (xx : réel par adresse, par adresse, yy : réel par adressepar adresse)

variables z : réel

z ← x

x ← y

y ← z

FinProcédureFinProcédure

Transmission des paramètres : exemples : :

Langage pythonLangage python

#Definition de la Procédure Permutationdef Echange() : "Echange le contenu de deux variables" global x global y z=x x=y y=z

Page 77: Problème  :

77

Les tableauxLes tableaux

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 78: Problème  :

78

Exemple introductif : Supposons qu'on veut conserver les notes d'une classe de 30

étudiants pour extraire quelques informations. Par exemple : calcul du nombre d'étudiants ayant une note supérieure à 10

Le seul moyen dont nous disposons actuellement consiste à déclarer 30 variables, par exemple N1, …, N30N1, …, N30. Après 30 instructions lire, on doit écrire 30 instructions Si pour faire le calcul

nbre ← 0nbre ← 0

Si N1 >10 alorsSi N1 >10 alors

nbre ←nbre+1nbre ←nbre+1

FinSiFinSi

……..

Si N30>10 alorsSi N30>10 alors

nbre ←nbre+1nbre ←nbre+1

FinSiFinSi

c'est lourd à écrire Heureusement, les langages de programmation offrent la possibilité

de rassembler toutes ces variables dans une seuleune seule structure de structure de donnéedonnée appelée tableautableau

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 79: Problème  :

79

Tableaux Un tableautableau est un ensemble d'éléments de même type

désignés par un identificateur unique ;

Une variable entière nommée indiceindice permet d'indiquer la position d'un élément donné au sein du tableau et de déterminer sa valeur ;

La déclarationdéclaration d'un tableau s'effectue en précisant le typetype de ses éléments et sa dimensiondimension (le nombre de ses éléments) ; En pseudo code :

variable tableau tableau identificateur[dimension] : type[dimension] : typeExemple :

variable tableau tableau notes[30] : réel[30] : réel

On peut définir des tableaux de tous types : tableaux d'entiers, de réels, de caractères, de booléens, de chaînes de caractères, … 20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 80: Problème  :

80

Remarques :

L'accès à un élément du tableau se fait au moyen de l'indice. Par exemple, notes[i]notes[i] donne la valeur de l'élément i du tableau notes ;

Selon les langages, le premier indice du tableau est soit 0, soit 1. Le plus souvent c'est 0 (c'est ce qu'on va adopter en pseudo-code). Dans ce cas, notes[i]notes[i] désigne l'élément i+1 du tableau notes ;

Il est possible de déclarer un tableau sans préciser au départ sa dimension. Cette précision est faite ultérieurement ;

Un grand avantage des tableaux est qu'on peut traiter les données qui y sont stockées de façon simple en utilisant des boucles.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 81: Problème  :

81

Saisie et Affichage : Méthodes qui permettent de saisir et d'afficher les éléments d'un

tableau :

AlgorithmeAlgorithme SaisieTab variable i: entier

Tableau T[n] :reel DebutDebut

PourPour i allant de 0 à n-1     Ecrire ("Saisie de l'élément ", i + 1)     Lire (T[i] ) FinPourFinPour FinFin

Algorithme Algorithme AfficheTab variable i: entier

Tableau T[n] :reel DebutDebut

PourPour i allant de 0 à n-1     Ecrire ("T[",i, "] =", T[i]) FinPourFinPour FinFin

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 82: Problème  :

82

Exemples : Pour le calcul du nombre d'étudiants ayant une note

supérieure à 10 avec les tableaux, on peut écrire :

Algorithme Moyenne Variables i ,nbre : entier

tableau tableau notes[30] : ] : réel DébutDébut

nbre ← 0PourPour ii allant de 0 à 29 Ecrire ("Saisie de l'élément ", i + 1)

     Lire (notes[i]) SiSi notes[i]notes[i] >10 alors

nbre ← nbre+1 FinSiFinSiFinPourFinPourEcrire (" Le nombre de notes supérieures à 10 est : ", nbre)

FinFin

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 83: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI83

Page 84: Problème  :

84

Exemple 1 :

Calcul de la somme de 20 entiers stockés dans un tableau. # include<stdio.h >

main()

int i, som ;

int T[20] ;

for (i=0; i<20; i++)

{printf("Donner T[%d]=",i) ;

scanf("%d",&T[i]) ;

som+= T[i] ;

}

printf("La somme=%d",som) ;}

{

som=0 ;

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 85: Problème  :

85

/* Valeur maximale */

#include< stdio.h >main(){ int i; float Tab[12], Max ; Max=Tab[0] ; for i=1; i<11; i++ { if (Max<Tab[i]) Max=Tab[i] ; } printf (“La valeur maximale du tableau est : %f “,

Max); }

Donner la valeur maximale d’un tableau Tab[12].

Exercice1 :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 86: Problème  :

86

Algorithme polynôme Variables n, i, j : Entier x,Som,Puiss, Coef[n+1] : Réel Début Ecrire (" Donner le nombre x et n : ") Lire (x,n) Som←Coef[0] Pour i←1 jusqu’à n Puiss ← 1 Pour j← 1 jusqu’à i Puiss ← Puiss*x Fin Pour Som ← Puiss*Coef[i]+Som Fin Pour Ecrire ("Le polynôme de degre",n,"vaut",Som,"pour x=",x) Fin

Donner un programme qui calcul la valeur du polynôme de degré n pour un réel x .

Exercice2 :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

....)( 2210

nn xaxaxaaxP

Page 87: Problème  :

87

/* La somme de deux matrices */#include< stdio.h >main(){ int i,j ; int A[3][3], B[3][3], C[3][3] ;/* Lecture de la matrice A et de la matrice B */for (i=0; i<3; i++) { for (j=0; j<3; j++) {

printf (“Donner A[%d][%d] \n“,i,j); scanf ("%d",&A[i][j]);

printf (“Donner B[%d][%d] \n“,i,j); scanf ("%d",& A[i][j]); } }/* Calcul et affichage de la somme */for (i=0; i<3; i++) { for (j=0; j<3; j++) { C[i][j]=A[i][j]+B [i][j] ;

printf("C[%d][%d] =%d\n",i,j,C[i][j]) ; } }}

Donner un programme qui calcul la somme de deux matrices A[3][3], B[3][3].

Exercice3 :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 88: Problème  :

88

/* Calcul du produit */#include< stdio.h >main(){ int i,j,k ; int A[3][3], T[3][3] ;

/* Lecture de la matrice A et de la matrice B */for (i=0; i<3; i++) { for (j=0; j<3; j++) {

printf (“Donner A[%d][%d] \n“,i,j); scanf ("%d",&A[i][j]);

printf (“Donner B[%d][%d] \n“,i,j); scanf ("%d",& A[i][j]); } }/* Calcul et affichage du produit */for (i=0; i<3; i++) { for (j=0; j<3; j++) { T[i][j]=k*A [i][j] ;

printf(“T[%d][%d] =%d\n",i,j,T[i][j]) ; } }}

Donner un programme qui calcul le Produit k×A[3][3] avec kєN. Exercice4 :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 89: Problème  :

89

/* Calcul du produit de deux matrices */#include< stdio.h >main(){ int i,j,k ; int A[3][3], B[3][3], C[3][3] ;

/* Lecture de la matrice A et de la matrice B */for (i=0; i<3; i++) {for (j=0; j<3; j++)

{printf (“Donner A[%d][%d] \n“,i,j); scanf ("%d",&A[i][j]);

printf (“Donner B[%d][%d] \n“,i,j); scanf ("%d",& A[i][j]); } }/* Calcul du produit */for (i=0; i<3; i++) { for (j=0; j<3; j++) {C [i] [j]=0 ; for (k=0; k<3; k++) {C[i][j]=C[i][j]+ A[i][k]*B[k][j] ;} } }/* Affichage de la matrice C */for (i=0; i<3; i++) { for (j=0; j<3; j++)

{ printf("C[%d][%d] =%d\n",i,j,C[i][j]) ;} }}

Donner un programme qui calcul le Produit de deux matrices A[3][3], B[3][3].

Exercice5 :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 90: Problème  :

90

/* Calcul du produit de deux matrices */#include< stdio.h >main(){ int i,j,k ; int A[3][3], B[3][3], C[3][3] ;

/* Lecture de la matrice A et de la matrice B */for (i=0; i<3; i++) { for (j=0; j<3; j++) {

printf (“Donner A[%d][%d]\n“,i,j); scanf ("%d",&A[i][j]);

printf (“Donner B[%d][%d]\n“,i,j); scanf ("%d",& A[i][j]); } }/* Calcul du produit et Affichage de la matrice C */for (i=0; i<3; i++) { for (j=0; j<3; j++) { C [i] [j]=0 ; for (k=0; k<3; k++) { C[i][j]=C[i][j]+ A[i][k]*B[k][j] ; } }

printf("C[%d][%d] =%d\n",i,j,C[i][j]) ; }}

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 91: Problème  :

91

#include< stdio.h >main(){ int i,j ; float Mass=0,S=0,X,P[2][4] ; for (i=0; i<2; i++) {for (j=0; j<4; j++) {if(i==0) { Printf (“Donner la masse du point%d\n “,j+1); scanf ("%f",&P[i][j]); Mass=Mass+P[0][j]; } else { Printf (“Donner l’abscisse du point %d\n “,j+1); scanf ("%f",&P[i][j]); S=S+(P[0][j]*P[1][j]);} } } X=S/Mass; printf("L’abscisse du barycentre est : %f\n",X) ;}

Donner un programme qui détermine l’abscisse X du centre de masse de quatre points matériels.

Exercice6 :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 92: Problème  :

92

Tri d'un tableauLe tri consiste à ordonner les éléments du tableau

dans l’ordre croissant ou décroissant

Il existe plusieurs algorithmes connus pour trier les éléments d’un tableau :

Le tri par sélectionLe tri par insertionLe tri à bulles…

Nous verrons dans la suite l'algorithme de tri par sélection, l'algorithme de tri par insertion et l'algorithme de tri à bulles. Le tri sera effectué dans l'ordre croissant 20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 93: Problème  :

93

Tri par sélection PrincipePrincipe : On cherche le plus petit élément du tableau et on le

place en premier, puis on cherche le plus petit dans ce qui reste et on le met en second, etc…

Exemple :Exemple : Étape 1: on cherche le plus petit parmi les 5 éléments du

tableau. On l’identifie en troisième position, et on l’échange alors avec l’élément 1 :

Étape 2: on cherche le plus petit élément, mais cette fois à partir du deuxième élément. On le trouve en dernière position, on l'échange avec le deuxième:

Étape 3:

99 44 11 77 33

11 44 99 77 33

11 33 99 77 44

11 33 44 77 99

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 94: Problème  :

94

Tri par sélection :

Supposons que le tableau est noté T et sa taille N

PourPour i allant de 0 à N-2Min ← T[i]       

PourPour j allant de i + 1 à N-1        SiSi (T[j] <Min) alorsalors              Min ← T[j]

T[j] ← T[i] T[i] ← Min

        FinsiFinsi  FinPourFinPour 

FinPourFinPour

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 95: Problème  :

95

Tri par insertion PrincipePrincipe : dans cet algorithme, on peut considérer qu’à chaque

etape, la suite à trier est constituée de deux sous-suites :la sous-suites D (destination) des éléments déjà triés et la sous-suites S (source) des éléments restant à trier

Le 1er élément de S (ième élément du tableau) doit être inséré dans D à la bonne place :

La situation initiale est la suivante :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 96: Problème  :

96

Tri par insertionSupposons que le tableau est noté T et

sa taille N

Pour Pour i allant de 0 à N

PourPour j allant de 0 à i-1        SiSi (T[i] < T[j] ) alorsalors              Min ← T[i]

PourPour k allant de 0 à i-n-1

T[i-k] ← T[i-k-1]

FinPourFinPour

T[j] ← Min         FinsiFinsi  FinPourFinPour 

FinPourFinPour20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 97: Problème  :

97

Tri à bulles PrincipePrincipe : L’algorithme consiste à comparer

chaque paire d’éléments consécutifs, si ces éléments sont dans l’ordre, on passe à la paire suivante, sinon on procède à leur échange avant de traiter la paire suivante.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 98: Problème  :

98

Tri à bulles : algorithmeSupposons que le tableau est noté T et sa taille N

Faire k←0 Pour i←1 jusqu’à N-1 Faire Si (T[i]<T[i-1]) Alors Min ← T[i] T[i] ← T[i-1] T[i-1] ← Min k ← k+1 FinSi Fin Pour TantQue (k≠0)

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 99: Problème  :

99

Tri par sélection : complexité Quel que soit l'ordre du tableau initial, le nombre de tests et

d'échanges reste le même

On effectue N-1 tests pour trouver le premier élément du tableau trié, N-2 tests pour le deuxième, et ainsi de suite. Soit : (N-1)+(N-2)+…+1 = N(N-1)/2 On effectue en plus (N-1) échanges.

La complexitécomplexité du tri par sélection est d'ordre N²d'ordre N²

Pour un ordinateur qui effectue 106 tests par seconde on a :

N 103 106 109

temps 1s 11,5 jours 32000 ans

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 100: Problème  :

100

Recherche d’un élément dans un tableau :

Recherche séquentielle (linéaire) :

Recherche dichotomique :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 101: Problème  :

101

Recherche séquentielle (linéaire) Recherche séquentielle (linéaire) ::

Exploration séquentielle de tableau.

Condition d’arrêt :

On a trouvé l’élément ;

On a parcouru tout le tableau sans trouver l’élément.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 102: Problème  :

102

Recherche de la valeur x dans un tableau T de N éléments :

Algorithme recherche_ séquentielle Variables i : entier

Trouve : booleen

tableau T[N],x: reel

Debut

i←0 , Trouvé ← FauxTantQue ((i < N) ET (Trouve=Faux))

  si (T[i]=x) alors     Trouve ← Vrai sinon

i←i+1

    finSiFinTantQue

si (Trouve= Vrai) alors

Ecrire ("x appartient au tableau")sinon

Ecrire ("x n'appartient pas au tableau")finsi

Fin20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 103: Problème  :

103

complexité :

Pour évaluer l’efficacité de l'algorithme de recherche séquentielle, on va calculer sa complexité dans le pire des cas. Pour cela on va compter le nombre de tests effectués ;

Le pire des cas pour cet algorithme correspond au cas où x n'est pas dans le tableau T ;

Si x n’est pas dans le tableau, on effectue 3N tests : on répète N fois les tests

(i < N), (Trouvé=Faux) et (T[i]=x) ;

La complexité dans le pire des cas est d'ordre N, (on note O(N)) ;

Pour un ordinateur qui effectue 106 tests par seconde on a :

N 103 106 109

temps 1ms 1s 16mn40s

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 104: Problème  :

104

Recherche dichotomique :

Dans le cas où le tableau est ordonné, on peut améliorer l'efficacité de la

recherche en utilisant la méthode de recherche dichotomique;

Principe : diviser par 2 le nombre d'éléments dans lesquels on cherche

la valeur x à chaque étape de la recherche. Pour cela on compare x avec

T[milieu] :

Si x < T[milieu], il suffit de chercher x dans la 1ère moitié du tableau entre (T[0]

et T[milieu-1]) ;

Si x > T[milieu], il suffit de chercher x dans la 2ème moitié du tableau entre

(T[milieu+1] et T[N-1]).

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 105: Problème  :

105

Algorithme : Algorithme recherche_ dichotomique

Variables i,inf,sup,milieu : entier

Trouve : booleen

tableau T[N],x : reel

Debut

inf←0 , sup←N-1, Trouve ← Faux

TantQue ((inf <=sup) ET (Trouve=Faux)) milieu←(inf+sup)div2

si (x=T[milieu]) alors

Trouve ← Vrai

  sinon

si (x>T[milieu]) alors          inf←milieu+1

sinon

sup←milieu-1

    finsi finsi

finTantQue

si (Trouve=Vrai) alors

Ecrire ("x appartient au tableau")

sinon

Ecrire ("x n'appartient pas au tableau")

finSi

Fin

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 106: Problème  :

106

Exemple :Considérons le tableau

T : 4 6 10 15 17 18 24 27 30

Si la valeur cherché est 20 alors les indices inf, sup et

milieu vont évoluer comme suit :

Si la valeur cherché est 10 alors les indices inf, sup et

milieu vont évoluer comme suit :

inf 0 5 5 6

sup 8 8 5 5

milieu 4 6 5

inf 0 0 2

sup 8 3 3

milieu 4 1 2

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 107: Problème  :

107

complexité :

La complexité dans le pire des cas est d'ordre log2 N ;

• L'écart de performances entre la recherche séquentielle et la recherche dichotomique est considérable pour les grandes valeurs de N.

Exemple :

au lieu de N=1milion ≈220 opérations à effectuer avec une recherche séquentielle il suffit de 20 opérations avec une recherche dichotomique.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 108: Problème  :

108

Les chaînes de Les chaînes de caractères :caractères :

•Chaîne constante :

Char mot ;

mot = "bonjour" ;

Exemple :

•Tableau de caractères : Exemple :

Char ch[12] ;

Char ch[12] = "bonjour" ;

Char ch[12] = {‘b’,’o’,’n’,’j’,’o’,’u’,’r’,’\0’ } ;

On pourra aussi faire :

Char ch[] = "bonjour" ;

ch = "bonjour" ;

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 109: Problème  :

109

Char ch[12] = "bonjour" ;

b o n j o u r \0 0 0 0 0

Affichage de chaînes de caractères :

printf ("%s",ch ) ;

puts (ch ) ;

Lecture de chaînes de caractères :

scanf ("%s",ch ) ;

gets (ch ) ;20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 110: Problème  :

110

Fonctions Opérations

strlen(s) Longueur de s

strcpy(s,ct) Copie ct dans s

strncpy(s,ct,n) Copie jusqu’à n caractères

strcat(s,ct) Concatène ct après s

strncat(s,ct,n) Concatène jusqu’à n caractère

memcpy(s,ct,n) Copie n caractères de ct dans s

Opérations sur les chaînes de caractères : <string.h>

s, t : chaînes de caractères

ct : chaîne de caractères constante

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 111: Problème  :

111

Les pointeurs :

Le langage C permet de manipuler les adresses mémoires «&» par l’intermédiaire de variables nommées « pointeurs ».

Déclaration :

Exemple :

int *adr ;

int n=20 ;

adr :

* :

*adr :

& :

pointeur sur les entiers (adresse d’un entier) opérateur qui désigne le contenu de l’adresse qui le suit désigne le contenu de l’adresse adr opérateur unaire qui fournit comme résultat l’adresse de son opérande 20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 112: Problème  :

112

20

30

nadr

nadr

adr= & n

*adr=30

Remarque :Le nom d’un tableau est un pointeur sur

le premier élément du tableau. Exemple :

int tab[20] ;

int i;

tabtab+1

tab+i

&tab[0] ;

&tab[1] ;

&tab[i] ;

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 113: Problème  :

113

#include< stdio.h >main(){ int x,y ; int *pti, *ptj ; /*Déclaration de 2 pointeurs pti et ptj vers des entiers */ x=123 ; y=456 ; /*1 */ pti=&x ; /*Le pointeur pti reçoit l’adresse de x */ ptj=&y ; /*Le pointeur ptj reçoit l’adresse de y */ /*2 */ *pti=789 ; /*L’entier pointé par pti reçoit 789 */ *ptj=(*pti)-123 ; /*L’entier pointé par ptj reçoit la valeur de l’entier pointé par pti, moins 123 */ /*3 */ ptj=pti ; /*Le pointeur pti reçoit la valeur du pointeur ptj, moins 123 */

}

Exemple :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 114: Problème  :

114

123

456

xpti

yptj

789

666

xpti

yptj

789

666

xpti

yptj

1

2

3

* pti vaut 123

* ptj vaut 456

x vaut 789

y vaut 666

*pti et *ptj valent 666

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 115: Problème  :

115

ALGORITHMIQUE

Fonctions et procéduresFonctions et procédures

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 116: Problème  :

116

Fonctions et procédures

Certains problèmes conduisent à des programmes longs, difficiles à écrire et à comprendre. On les découpe en des parties appelées sous-programmessous-programmes ou modulesmodules

Les fonctionsfonctions et les procéduresprocédures sont des modules (groupe

d'instructions) indépendants désignés par un nom. Elles ont plusieurs intérêtsintérêts :

permettent de "factoriser" les programmes"factoriser" les programmes, càd de mettre en commun les parties qui se répètent ;

permettent une structurationstructuration et une meilleure lisibilitémeilleure lisibilité des programmes ;

facilitent la maintenancefacilitent la maintenance du code (il suffit de modifier une seule fois) ;

ces procédures et fonctions peuvent éventuellement être réutiliséesréutilisées dans d'autres programmes.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 117: Problème  :

117

Fonctions Le rôlerôle d'une fonction en programmation est similaire à celui

d'une fonction en mathématique : elle retourne un résultat à retourne un résultat à partir des valeurs des paramètrespartir des valeurs des paramètres ;;

Une fonction s'écrit en dehors du programme principal sous la forme :

FonctionFonction nom_fonction (paramètres et leurs types) : type_fonction

Instructions constituant le corps de la fonction retourneretourne (…)

FinFonctionFinFonction

Pour le choix d'un nom de fonction il faut respecter les mêmes règles que celles pour les noms de variables ;

Type_fonction est le type du résultat retourné ; L'instruction retourne retourne sert à retourner la valeur du résultat.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 118: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI118

Langage C :Le résultat d’une fonction peut ne pas être utilisé

Une fonction peut ne pas fournir aucun résultat

Une fonction peut fournir un résultat non scalaire

Un programme C est un ensemble de fonctions contenant au moins la fonction main (fonction obligatoire). Toutes ces fonctions sont au même niveau(pas d’imbrication de fonctions).

Page 119: Problème  :

119

Fonctions : exemplesLa fonction SommeCarre suivante calcule la somme des

carrées de deux réels x et y :

FonctionFonction SommeCarre (x : réel, y: réel ) : réel

variable z : réel

z ←x^2+y^2

retourneretourne (z)

FinFonctionFinFonction

La fonction Pair suivante détermine si un nombre est pair :

FonctionFonction Pair (n : entier ) : booléen

retourneretourne (n mod 2=0)

FinFonctionFinFonction

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 120: Problème  :

120

Utilisation des fonctionsL'utilisation d'une fonction se fera par simple écriture de

son nom dans le programme principale. Le résultat étant une valeur, devra être affecté ou être utilisé dans une expression, une écriture, ...

Exepmle : Exepmle : Algorithme exepmleAppelFonctionAlgorithme exepmleAppelFonction

variables z : réel, b : booléen

DébutDébut

b ←Pair(3)

z ←5*SommeCarre(7,2)+1

Ecrire("SommeCarre(3,5)= ", SommeCarre(3,5))

FinFin

Lors de l'appel Pair(3) le paramètre formelparamètre formel n est remplacé par le paramètre effectifparamètre effectif 3 20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 121: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI121

Arguments d'une fonction :

Les paramètres servent à échanger des données entre le programme principale (ou la procédure appelante) et la procédure appelée

Les argument placés dans la déclaration d'une fonction sont appelés argument formelsargument formels. Ces paramètres peuvent prendre toutes les valeurs possibles mais ils sont abstraits (n'existent pas réellement)

Les argument placés dans l'appel d'une fonction sont appelés argument effectifsargument effectifs.

Page 122: Problème  :

122

Procédures Dans certains cas, on peut avoir besoin de répéter une tâche dans plusieurs

endroits du programme, mais que dans cette tâche on ne calcule pas de résultats ou qu'on calcule plusieurs résultats à la fois ;

Dans ces cas on ne peut pas utiliser une fonction, on utilise une procédure procédure ;

Une procédureprocédure est un sous-programme semblable à une fonction mais qui ne retourne rien ne retourne rien ;

Une procédure s'écrit en dehors du programme principal sous la forme :

ProcédureProcédure nom_procédure (paramètres et leurs types)

Instructions constituant le corps de la procédure

FinProcédureFinProcédure

Remarque :Remarque : une procédure peut ne pas avoir de paramètres.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 123: Problème  :

123

Appel d'une procédure L'appel d'une procédure, se fait dans le programme principale ou

dans une autre procédure par une instruction indiquant le nom de la procédure :

ProcédureProcédure exemple_proc (…) …

FinProcédure FinProcédure

Algorithme exepmleAppelProcédureAlgorithme exepmleAppelProcédure

DébutDébut

exemple_proc (…) …

FinFin

Remarque : contrairement à l'appel d'une fonction, on ne peut pas affecter la procédure appelée ou l'utiliser dans une expression. L'appel d'une procédure est une instruction autonome.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 124: Problème  :

124

Paramètres d'une procédure

Les paramètres servent à échanger des données entre le programme principale (ou la procédure appelante) et la procédure appelée ;

Les paramètres placés dans la déclaration d'une procédure sont appelés paramètres formelsparamètres formels. Ces paramètres peuvent prendre toutes les valeurs possibles mais ils sont abstraits (n'existent pas réellement) ;

Les paramètres placés dans l'appel d'une procédure sont appelés paramètres effectifsparamètres effectifs. ils contiennent les valeurs pour effectuer le traitement ;

Le nombre de paramètres effectifs doit être égal au nombre de paramètres formels. L'ordre et le type des paramètres doivent correspondre.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 125: Problème  :

125

Transmission des paramètres

Il existe deux modes de transmission de paramètres dans les langages de programmation :

La transmission par valeur La transmission par valeur : les valeurs des paramètres effectifs sont affectées aux paramètres formels correspondants au moment de l'appel de la procédure. Dans ce mode le paramètre effectif ne subit aucune modification ;

La transmission par adresse (ou par référence) La transmission par adresse (ou par référence) : les adresses des paramètres effectifs sont transmises à la procédure appelante. Dans ce mode, le paramètre effectif subit les mêmes modifications que le paramètre formel lors de l'exécution de la procédure ;

Remarque : Remarque : le paramètre effectif doit être une variable (et non une valeur) lorsqu'il s'agit d'une transmission par adresse.

En pseudo-code, on va préciser explicitement le mode de transmission dans la déclaration de la procédure ;

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 126: Problème  :

126

Transmission des paramètres :exemples

ProcédureProcédure incrementer1 (xx : entier par valeur, par valeur, yy : entier par par adresseadresse)

x ← x+1 y ← y+1

FinProcédure FinProcédure

Algorithme Test_incrementerAlgorithme Test_incrementer1 variables n, m : entier Début Début

n ← 3m ← 3incrementer1(n, m) Ecrire (" n= ", n, " et m= ", m)

FinFin

Résultat :Résultat :n=3 et m=4n=3 et m=4

Remarque :Remarque : l'instruction l'instruction x ← x+1 n'a pas de sens avec un passage par valeur

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 127: Problème  :

127

Transmission par valeur, par adresse : exemples

Procédure qui échange le contenu de deux variables :Procédure qui échange le contenu de deux variables :ProcédureProcédure Echange (xx : réel par adresse, par adresse, yy : réel par adressepar adresse)

variables z : réel

z ← x

x ← y

y ← z

FinProcédureFinProcédure

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 128: Problème  :

128

Variables locales et globales (1)

On peut manipuler 2 types de variables dans un module (procédure ou fonction) : des variables localesvariables locales et des variables globalesvariables globales. Elles se distinguent par ce qu'on appelle leur portée portée (leur "champ de définition", leur "durée de vie") ;

Une variable localevariable locale n'est connue qu'à l'intérieur du module ou elle a été définie. Elle est créée à l'appel du module et détruite à la fin de son exécution ;

Une variable globalevariable globale est connue par l'ensemble des modules et le programme principale. Elle est définie durant toute l’application et peut être utilisée et modifiée par les différents modules du programme.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 129: Problème  :

129

Variables locales et globales (2)

La manière de distinguer la déclaration des variables locales et globales diffère selon le langage :

En général, les variables déclarées à l'intérieur d'une fonction ou procédure sont considérées comme variables locales

En pseudo-code, on va adopter cette règle pour les variables locales et on déclarera les variables globales dans le programme principale ;

Conseil :Conseil : Il faut utiliser autant que possible des variables locales plutôt que des variables globales. Ceci permet d'économiser la mémoire et d'assurer l'indépendance de la procédure ou de la fonction.

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 130: Problème  :

130

RécursivitéUn module (fonction ou procédure) peut s'appeler lui-

même: on dit que c'est un module récursif ;

Tout module récursif doit posséder un cas limite (cas trivial) qui arrête la récursivité ;

Exemple : Calcul du factorielle FonctionFonction fact (n : entier ) : entier

Si (n=0) alors

retourneretourne (11)

Sinon

retourneretourne (n*fact(n-1)n*fact(n-1))

Finsi

FinFonctionFinFonction

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 131: Problème  :

131

Fonctions récursives : exercice

Ecrivez une fonction récursive qui calcule le terme n de la suite de Fibonacci définie par : U(0)=U(1)=1

U(n)=U(n-1)+U(n-2)

FonctionFonction Fib (n : entier ) : entier

Variable res : entier

Si (n=1 OU n=0) alors

res ←1

Sinon

res ← Fib(n-1)+Fib(n-2)

Finsi

retourneretourne (res)

FinFonctionFinFonction

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 132: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI132

Fonctions récursives : exercice (suite)

Une fonction itérative pour le calcul de la suite de Fibonacci :

FonctionFonction Fib (n : entier ) : entier

Variables i, AvantDernier, Dernier, Nouveau : entier

Si (n=1 OU n=0) alors

retourneretourne (1)

Finsi

AvantDernier ←1, Dernier ←1

Pour i allant de 2 à n

Nouveau← Dernier+ AvantDernier

AvantDernier ←Dernier

Dernier ←Nouveau

FinPour

retourneretourne (Nouveau)

FinFonctionFinFonction Remarque: la solution récursive est plus facile à écrire

Page 133: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI133

Fonction récursives : exemple

Une fonction récursive qui permet d'afficher la valeur binaire d'un entier n

ProcédureProcédure binaire (n : entier )

Si (n<>0) alors

binaire (n/2)

Ecrire (n mod 2)

Finsi

FinProcédureFinProcédure

Page 134: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI134

La fonction récursiverécursive suivante calcule xn pour un entier strictement positif n:

Exponentiation rapide : exercice

Page 135: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI135

FonctionFonction puissance ( x : réel, n : entier ) : réel VariablesVariables n : entier, x, tmp : réel DEBUTDEBUT

SSI (n=0) alors retourneretourne (1) SINONSINON SISI (n=1) alors retourneretourne (x) SINONSINON tmp ← puissance( x , n/2 ) SISI (n est pair) alors retourneretourne (tmp * tmp) SINONSINON retourneretourne (x * tmp * tmp) Finsi Finsi Finsi FinFonctionFinFonction

Exponentiation rapide : exercice

Page 136: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI136

Algorithme d’Euclide : Exercice

Principe :Principe :Soient deux entiers naturels a et b, dont on

cherche le PGCD. Une suite d'entiers an est définie par récurrence, plus précisément par divisions euclidiennes successives; la suite est initialisée par a0=a, a1=b, puis propagée par la règle de récurrence : tant que an+1 est non nul, an+2 est défini comme le reste de la division euclidienne de an par an+1.

Page 137: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI137

Algorithme d’Euclide : Exercice

On commence donc par calculer le reste de la division de a par b, qu'on note r ; puis on remplace a par b, puis b par r, et on réapplique le procédé depuis le début.

On obtient ainsi une suite, qui vaut 0 à un certain rang ; le PGCD cherché est le terme précédent de la suite.

Page 138: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI138

aa et bb entiers naturelsnon nuls et aa>bb

Calculer le reste rr de laDivision de aa par bb

aa prend la valeur de bbbb prend la valeur de rr

rr=0 ?

Pgcd bb

Oui

Non

Organigramme :Organigramme :

Algorithme d’Euclide : Exercice

Page 139: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI139

Algorithme d’Euclide : Exercice

FonctionFonction Pgcd ( a : entier , b : entier ) : entier

Variable a,b : entier DebutDebut

Si (b=0) alors retourneretourne (a) Sinon

retourneretourne (Pgcd (b , a mod b)) Finsi

FinFonctionFinFonction

Page 140: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI140

Exemples : lecture d'une matrice

Procédure qui permet de saisir les éléments d'une matrice :

ProcédureProcédure SaisieMatrice (n : entier par valeur, m : entier par valeur ,tableautableau A : réel par référence )

DébutDébut

variables i,j : entier

PourPour i allant de 0 à n-1Ecrire ("saisie de la ligne ", i + 1)

PourPour j allant de 0 à m-1

     Ecrire ("Entrez l'élément de la ligne ", i + 1, " et de la colonne ", j+1)

    Lire (A[i][j])

FinPourFinPour

FinPourFinPour

FinProcédureFinProcédure

Page 141: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI141

Exemples : affichage d'une matrice

Procédure qui permet d'afficher les éléments d'une matrice :

ProcédureProcédure AfficheMatrice (n : entier par valeur, m : entier par valeur ,tableautableau A : réel par valeur )DébutDébut

variables i,j : entier

PourPour i allant de 0 à n-1 PourPour j allant de 0 à m-1

     Ecrire ("A[",i, "] [",j,"]=", A[i][j])

FinPourFinPour

FinPourFinPour

FinProcédureFinProcédure

Page 142: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI142

Exemples : somme de deux matrices

Procédure qui calcule la somme de deux matrices :

ProcédureProcédure SommeMatrices (n, m : entier par valeur,

tableautableau A, B : réel par valeur , tableautableau C : réel par référence )DébutDébut

variables i,j : entier

PourPour i allant de 0 à n-1 PourPour j allant de 0 à m-1

     C[i][j] ← A[i][j]+B[i][j]

FinPourFinPour

FinPourFinPour

FinProcédureFinProcédure

Page 143: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI143

Appel des Fonctions définies sur les matrices Exemple d'algorithme principale où on fait l'appel des Procédures

définies précédemment pour la saisie, l'affichage et la somme des matrices :

Algorithme MatricesAlgorithme Matrices

variables tableautableau M1[3][4],M2 [3][4],M3 [3][4] : : réel

DébutDébut

SaisieMatrice (3, 4, M1)

SaisieMatrice (3, 4, M2)

AfficheMatrice (3,4, M1)

AfficheMatrice (3,4, M2)

SommeMatrice (3, 4, M1,M2,M3)

AfficheMatrice (3,4, M3)

FinFin

Page 144: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI144

Recherche séquentielle :

Une fonction Recherche qui retourne un booléen pour indiquer si une valeur x appartient à un tableau T de dimension N.

x , N et T sont des paramètres de la fonction

Fonction Recherche(x : réel, N: entier, tableau T : réel ) : booléen

Variable i: entier

Pour i allant de 0 à N-1  Si (T[i]=x) alors          retourne (Vrai)

FinSi FinPour

retourne (Faux)

FinFonction

Page 145: Problème  :

145

Il existe très peu de contraintes dans l’écriture d’un programme C. Aussi existe-t-il un certain nombre de conventions :• On n’écrit qu’une seule instruction par ligne : le point virgule d’une instruction ou d’une déclaration est toujours le dernier caractère de la ligne;• Les instructions sont disposées de telle façon que la structure modulaire du programme soit mise en évidence. En particulier, une accolade ouvrante marquante début d’un bloc doit être seule sur sa ligne ou placée à la fin d’une ligne. Une accolade fermante est toujours seule sur sa ligne;• On laisse un blanc : Entre les mots clefs if, while, switch, for et la parenthèse ouvrante qui suit ; Après une virgule ; De part et d’autre d’une opérateur binaire.• On ne met pas de blanc entre un opérateur unaire et son opérande, ni entre les deux caractères d’un opérateur d’affectation composée;• Les instructions doivent être indentées afin que toutes les instructions d’un même bloc soient alignées.

Les conventions d’écriture d’un programme C :Les conventions d’écriture d’un programme C :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 146: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI146

Page 147: Problème  :

147

Analyse descendanteAnalyse descendante :: Diviser pour régnerDiviser pour régner

Diviser pour régner consiste à décomposer le problème complexe à résoudre

en plusieurs sous problèmes moins complexes. A refaire cette décomposition

sur les sous problèmes jusqu’à obtenir des sous problèmes faciles à résoudre.

Conclusion :Conclusion :

La solution à un problème bien défini peut être formulée comme une suite des trois énoncés suivants :

• Séquentiel : suite d’étapes

• Conditionnel : choix entre deux étapes suivant une condition

• Répétitif (itératif) : répétition d’une étape

Exemple :

Algorithme de résolution d'équation de second degré :

a x2 + b x + c = 020/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 148: Problème  :

148

ax2+bx+c=0

bx+c=0 ax2+bx+c=0

c=0

Infinités de

solutions

Pas de solutions

x=-c/b Δ=b2-4ac

Δ=0

x=-b/2a

Δ≠0

Δ<0

Pas de solutions

réelles

Δ>0

x1=-b-(Δ)1/2/2ax2=-b+(Δ)1/2/2a

a=0 a≠0

b=0

c=0

b≠0

c≠0

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 149: Problème  :

149

b=0b=0

=b*b - 4 * a * c =b*b - 4 * a * c

c=0c=0

Ecrire -c/bEcrire -c/bEcrire ‘pas de

solutions’

Ecrire ‘pas de

solutions’

Ecrire ‘pas de

solutions’

Ecrire ‘Infinité de solutions’

Ecrire ‘Infinité de solutions’

=0 =0 =0

Ecrire -b/2*aEcrire -b/2*a

>0 >0 >0

Ecrire(-b - racine(D))/(2*a)(-b + racine(D))/(2*a)

Ecrire(-b - racine(D))/(2*a)(-b + racine(D))/(2*a)

Ecrire‘pas de

solutions’

Ecrire‘pas de

solutions’

a=0

Lire a,b,c

Début

a=0a=0

Lire a,b,c

Début

FinFinFin 20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 150: Problème  :

150

Algorithme Eq_Second_DegréRéel a, b, c , Delta

DébutEcrire ("Donner les coefficients : ") Lire(a,b,c)Si (a = 0) alors

Si (b = 0) alorsSi (c = 0) alors

Ecrire ("Infinités de solutions")Sinon

Ecrire ("Pas de solutions")FSi

SinonEcrire ("Equation de 1er degré, une racine réelle : ",-c/b)

FSiSinon

Delta b*b –4*a*cSi (Delta = 0) Alors

Ecrire ("Une racine réelle double : " , -b/(2*a))Sinon

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 151: Problème  :

151

Si (Delta > 0) AlorsEcrire("Deux racines réelles :  x1 = ", (-b + racine(Delta)) /(2*a) ,

" x2 = ", (-b + racine(Delta)) /(2*a) )Sinon

Ecrire("Pas de solutions réelles ")FSi

FSiFSi

Fin

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 152: Problème  :

152

\f Saut de page

\n Saut de ligne

\r Retour chariot

\t Tabulation horizontale

\v Tabulation verticale

\ \ \

\" "

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 153: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI153

Page 154: Problème  :

154

Algorithme somme2

Variables som, i : entier

Debut

som ← 0

i ← 1

TantQue (som <=100)

     som ← som + i

i ← i+1

FinTantQue

Ecrire ("La valeur cherchée est N= ",i-1)

Fin

#include<stdio.h>main () { Int i,som ; som=0; i=0 ; while (som <=100) { som = som + i ; i = i+1 ;}Printf ("La valeur cherchée est N=%d ",i-1); }

Exercice :

Algorithme : Langage C :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI

Page 155: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI155

Page 156: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI156

Page 157: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI157

AlgorithmeAlgorithme

Selon queSelon que identificateur vautvaut Valeur 1 fairefaire Instructions 1 Valeur 2 fairefaire Instructions 2  Valeur n fairefaire Instructions n Autrement que Autrement que Instructions n+1FinselonFinselon

Langage CLangage CSwitchSwitch (Expression) { case n1 : action 1; break; case n2 : action 2; break; case n3 : action 3; break;  default : action n; }

Algorithme jour_de_travail Variable jour : chaine de caractères Debut Lire (jour) Selon que Selon que jour vautvaut Lundi Mardi Mercredi jeudi Vendredi fairefaire Ecrire ("c’est un jour de travail") Samedi Dimanche fairefaire Ecrire ("c’est weekend") Autrement que Autrement que Ecrire ("Le nom du jour invalide") FinselonFinselon Fin

Page 158: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI158

Opérateurs SignificationReprésentation algorithmique Exemple

= égal = A=B

≠ Différent de… <> A<>B

< Strictement plus petit que… < A<B

> Strictement plus grand que… > A>B

≤ plus petit ou égal à… <= A<=B

≥ plus grand ou égal à… >= A>=B

Par convention, l’algorithme note certains opérateurs de comparaison différemment :

Remarques :

Page 159: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI159

Opérateurs SignificationReprésentation algorithmique Exemple

Représentation Langage C

Exemple

= égal = A=B = = A= =B

≠ Différent de… <> A<>B != A!=B

< Strictement plus petit que… < A<B < A<B

> Strictement plus grand que… > A>B > A>B

≤ plus petit ou égal à… <= A<=B <= A<=B

≥ plus grand ou égal à… >= A>=B >= A>=B

Page 160: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI160

Exemple de langages  :

Deux types de langages :

Langages procéduraux ;

Langages orientés objets.

Fortran, Cobol, Pascal, C, … ;

C++, Java, ….

Page 161: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI161

LANGAGE DE PROGRAMMATION

I) Définitions :

Un langage de programmation est un langage informatique composé d’un ensemble d’instructions pouvant être traduites et exécutées par un ordinateur.

Exemple :

Basic, Pascal, COBOL, Fortaran, C, C++, LOGO,…

1) Définition d’un langage de programmation :

2) Définition d’un programme :

Un programme est une suite ordonnée d’instructions, compréhensibles par l’ordinateur, appliqué à des données afin d’obtenir des résultats.

Page 162: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI162

1) L’identificateur :

Un identificateur en langage C doit débuter par une lettre suivie par un nombre de lettres ou de chiffres.

x, max, val4x, max, val4

Exemples :

2) Les types de données :

Le type entier :

Le langage C distingue plusieurs types d’entiers tels que :

Type Taille (Octet) Plage de valeur

int 2 -231 à 231

unsigned int 2 0 à 232

long int 4 -263 à 263

II) Langage de programmation C :

Page 163: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI163

int n ;unsigned int n ;long n ;

Le type réel : En langage C les réels sont subdivisés en plusieurs

types :

Déclaration :

Type Taille (Octet) Plage de valeur

float 4 -3.4 1038 à 3.4 1038

double 8 -1.7 10308 à 3.4 10308

long double 12 -3.4 104932 à 1.1 104932

float x ;double x ;long double x ;

Déclaration :

Page 164: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI164

Le type caractère :

Ce type sert à manipuler les caractères.

char a ;

Déclaration :

Le type booléen :

Ce type prend la valeur 0 pour faux et une valeur différente de 0 (Exemple : 1) pour vrai.

bool p  ;

Déclaration :

Remarques :

Chaque déclaration est obligatoirement suivie d’un point virgule.

Un caractère

Chaîne de caractères char d[10]  ;

Page 165: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI165

3) Les instructions :a) l’instruction d’entrée :

L’instruction de lecture est symbolisée par scanf, elle permet le transfert des données vers la mémoire centrale .

Syntaxe : scanf("code d’entrée", adresse de l’identificateur) ;

Remarques : Les codes d’entrée pour scanf sont :

Type Format

Entier %d

Entier non signé %u

Entier long %ld

Réel (Flottant) %f

Réel double %lf

Réel long double %Lf

Caractère %c

Chaîne de caractères %s

Page 166: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI166

Exemples :

Le type entier :

scanf("%d",&n) ;

scanf("%u",&n) ;

scanf("%ld",&n) ;

Le type réel :

scanf("%f",&x) ;

scanf("%lf",&x) ;

scanf("%Lf",&x) ;

Le type caractère :

scanf("%c",&c) ;

scanf("%s",ab) ;

Page 167: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI167

b) l’instruction de sortie  :

L’écriture se fait de façon semblable que la lecture à l’aide de l’instruction printf.

Syntaxe :

printf("code de sortie", l’identificateur) ;

Remarque :

Les codes d’entrée pour scanf deviennent les codes d’affichage pour printf.

Exemples :

Le type entier :

printf ("%d",n) ;

Le type réel : Le type caractère :

printf ("%u",n) ;

printf ("%ld",n) ;

printf ("%f",x) ;

printf ("%lf",x) ;

printf ("%Lf",x) ;

printf ("%c",a) ;

printf ("%s",ab) ;

Page 168: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI168

Important :

Au début d’un programme utilisant les fonctions d’affichage et de saisie il est nécessaire d’écrire # include <stdio.h>, car toutes les fonctions sont déclarées dans ce fichier d’en-tête.

c) l’instruction d’affectation  :

Cette instruction permet de mettre une valeur dans une variable. Le symbole de l’affectation est =

Syntaxe :

variable = valeur ;

Remarques :

Toute instruction doit être suivie d’un point virgule « ;; » ;

printf permet d’afficher un texte qui doit être entre double cotte.

Page 169: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI169

d) les instructions conditionnelles  :

Instruction conditionnelle simple (choix unaire) :Instruction conditionnelle simple (choix unaire) :

Syntaxe :

ifif (condition) Instruction;

Instruction conditionnelle complète (choix binaire) :Instruction conditionnelle complète (choix binaire) :

Syntaxe :

ifif (condition) InstructionA;elseelse InstructionB;

Page 170: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI170

Instruction conditionnelle imbriquée :Instruction conditionnelle imbriquée :Syntaxe :

ifif (condition1) ifif (condition2) InstructionA; elseelse InstructionB;elseelse ifif (condition3) InstructionC;

Instruction de choix multiple: Instruction de choix multiple: Syntaxe :

SwitchSwitch (Expression) { case n1 : action 1; break; case n2 : action 2; break; case n3 : action 3; break;  default : action n; }

Page 171: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI171

Si un bloc contient plus qu’une instruction, il doit être délimité par les accolades « {} ».

Remarque :

Opérateurs Signification Représentation en langage C

Exemple

= égal = = A= =B

≠ Différent de… != A!=B

< Strictement plus petit que… < A<B

> Strictement plus grand que… > A>B

≤ plus petit ou égal à… <= A<=B

≥ plus grand ou égal à… >= A>=B

Page 172: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI172

3) Format simple d’un programme en C :

 

 

 

 

Page 173: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI173

Programme (langage C)Programme (langage C)  : :

/*Programme Temperature_eau*/#include <stdio.h>main(){ int Temperature ; printf("Entrez la température de l’eau :") ; scanf("%d",&Temperature) ; if(Temperature<=0) printf("C’est de la glace") ; else if(Temperature<=100) printf("C’est du liquide") ; else printf("C’est du vapeur") ;}

Algorithme Temperature_eau Variable Temperature : Entier Debut Ecrire ("Entrez la température de l’eau :") Lire (Temperature) Si (Temperature<=0) Alors Ecrire ("C’est de la glace") Sinon Si (Temperature<=100) Alors Ecrire ("C’est du liquide") Sinon Ecrire ("C’est du vapeur") Finsi Finsi Fin

Page 174: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI174

Page 175: Problème  :

20/04/23Algorithmique et programmation MPSI/TSI/PCSI175

Type Format

Entier int %d

Entier non signé unsigned int %u

Entier long long %ld

Entier long non signé unsigned long %lu

Réel (Flottant) float %f ou %e

Réel double double %lf ou %le

Réel long double Long double %Lf

Caractère char %c

Chaîne de caractères char %s