Upload
hedya
View
61
Download
0
Embed Size (px)
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
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
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 :
20/04/23Algorithmique et programmation MPSI/TSI/PCSI3
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
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
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
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
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
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é ;
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
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.
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)
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
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
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
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 :
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
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
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
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) :
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) .
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)
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
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
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
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 :
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 :
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
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
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")
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")
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
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")
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.
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 :
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.
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
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 :
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 :
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 ;
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 :
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’à :
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
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 :
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!!!!")
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.
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
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
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
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
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
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
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
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
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
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
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.
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é :
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.
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).
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.
62
Programmation Programmation modulairemodulaire
20/04/23Algorithmique et programmation MPSI/TSI/PCSI
Fonctions et procéduresFonctions et procédures
ALGORITHMIQUEALGORITHMIQUE
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
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
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 :
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
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.
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
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
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
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
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
20/04/23Algorithmique et programmation MPSI/TSI/PCSI73
Langage pythonLangage python
defdef nom_fonction (paramètres) :" Commentaire " Instructions constituant le corps de la fonctionretourneretourne (…)
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 : :
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()
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
77
Les tableauxLes tableaux
20/04/23Algorithmique et programmation MPSI/TSI/PCSI
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
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
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
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
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
20/04/23Algorithmique et programmation MPSI/TSI/PCSI83
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
100
Recherche d’un élément dans un tableau :
Recherche séquentielle (linéaire) :
Recherche dichotomique :
20/04/23Algorithmique et programmation MPSI/TSI/PCSI
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
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
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
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
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
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
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
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
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
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
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
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
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
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
115
ALGORITHMIQUE
Fonctions et procéduresFonctions et procédures
20/04/23Algorithmique et programmation MPSI/TSI/PCSI
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
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
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).
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
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
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
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.
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
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
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
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
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
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
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
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
20/04/23Algorithmique et programmation MPSI/TSI/PCSI146
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
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
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
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
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
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
20/04/23Algorithmique et programmation MPSI/TSI/PCSI153
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
20/04/23Algorithmique et programmation MPSI/TSI/PCSI155
20/04/23Algorithmique et programmation MPSI/TSI/PCSI156
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
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 :
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
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, ….
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.
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 :
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 :
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] ;
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
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) ;
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) ;
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.
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;
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; }
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
20/04/23Algorithmique et programmation MPSI/TSI/PCSI172
3) Format simple d’un programme en C :
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
20/04/23Algorithmique et programmation MPSI/TSI/PCSI174
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