Académique Documents
Professionnel Documents
Culture Documents
1. DEFINITION
Un algorithme, c’est une suite d’instructions, qui une fois exécutée correctement, conduit à un
résultat donné. Si l’algorithme est juste, le résultat est le résultat voulu, et si l’algorithme est faux, le
résultat est aléatoire.
2. Types
Le type d’une variable détermine l’ensemble des valeurs qu’elle peut prendre, les types offerts par la
plus part des langages sont:
3. Les variables
La première chose à faire avant de pouvoir utiliser une variable est de créer la boîte et de lui
coller une étiquette. Ceci se fait tout au début de l’algorithme, avant même les instructions
proprement dites. C’est ce qu’on appelle la déclaration des variables.
Le nom de la variable (l’étiquette de la boîte) obéit à des impératifs changeant selon les langages.
Toutefois, une règle absolue est qu’un nom de variable peut comporter des lettres et des chiffres,
4. Opérateurs
5. Instructions d’écriture
C C++ Pascal
printf("Message") ; cout<< "message" ; Write(‘Message’) ;
cout<< variable ; Write(x) ;
printf("message %format" , variable) ; cout<< "message"<< variable ;
Revenir à la ligne; cout<<endl; Writeln(‘x vaut : ‘,x) ;
ou cout<<"\n"; Clrscr() ;
Effacer l'écran: system("cls");
6. La lecture
La lecture permet d'entrer des donnés à partir du clavier
C C++ Pascal
scanf("%format", &variable) ; Cin>>variable ; Read(variable) ;
scanf("%d%f%c%",&v1,& v2,&v3) ; Cin>> v1>> v2>> … Read(v1, v2, …, vn) ;
>>n) ;
Remarque: Le programme s'arrête lorsqu'il rencontre une instruction Lire et ne se poursuit qu'après
la frappe d’une valeur au clavier et de la touche Entrée
Conseil: Avant de lire une variable, il est fortement conseillé d’écrire des messages à l’écran, afin de
prévenir l’utilisateur de ce qu’il doit frapper
Écrire un algorithme qui demande un nombre entier à l'utilisateur, puis qui calcule et affiche le
double de ce nombre
7. Exemples
C C++ Pascal
#include<stdio.h> #include<iostream> Program somme ;
int a,b,s; using namespace std; Var a,b,s : integer ;
int main() int a,b,s; Bigin
int main() Write(‘Donnez deux
{ entier :’) ;
printf("Donnez deux entiers :"); { cout<<"Donnez deux entiers"; Read(a,b) ;
scant("%d%d",&a,&b); Cin>>a>>b; S :=a+b ;
s=a+b; s=a+b; Write(a, ‘+’, b, ‘=’, s) ;
printf("%d+%d=%d\n”,a,b,s); cout<<a<<"+"<<b<<"="<<s; Readln ;
return 0; return 0; End.
} }
Le si est utilisé si on a plusieurs cas et que c'est un seul choix qui se réalisera.
a. Si simple
b. Si sinon
c. Si imbrique
C C++ Pascal
#include <stdio.h> #include <iostream>
using namespace std; program signe;
int main() var
int main()
{ a : integer;
int a; begin
int a; cout << "Tapez la valeur de a : "; write('Tapez la valeur de a : ') ;
printf("Tapez la valeur de a :"); read(a);
cin >> a;
scanf("%d", &a); if a > 0 then
if (a< 0)
if (a< 0) write (a, ' est positif')
cout << a<< " est negatif »;
printf("%d est negatif", a); else
else if (a>0) else if (a>0) if <0 then
printf("%d est positif", a); cout << a<<" est positif " ; write (a, ' est negatif')
else else else
printf("%d est nul", a) ; cout << a<<" est nul " ; write(a, ‘ est nul’);
return 0; return 0; readln;
} }
end.
2. Le choix
La structure Si peut être remplacée par le choix dans certaines conditions, qui est plus simple à
représenter.
Une boucle permet d’exécuter plusieurs fois de suite une même séquence d’instructions. Cet
ensemble d’instructions s’appelle le corps de la boucle. Chaque exécution du corps d’une
boucle s’appelle une itération, ou encore un passage dans la boucle. Il existe trois types de
boucle :
Tant que
Répéter ... jusqu’à
Pour
Chacune de ces boucles a ses avantages et ses inconvénients. Nous les passerons en revue
ultérieurement.
3. Pour
Exemples
C C++ Pascal
#include <stdio.h> #include <iostream> program compter;
using namespace std;
int main() int main() var n,i: integer;
{ { int i,n; begin
int i, n; Cout<<”Donnez un entire:”
write('Donnez le nombre:');
printf("Saisir un nombre :"); read(n) ;
Cin>>n
scanf("%d", &n); for i :=1 to n do
for(i=0 ; i<=n ; i++)
for(i=0 ; i<=n ; i++) writeln(i, ‘ ‘);
cout << i << “ “;
printf(" %d ", i); readln() ;
return 0; return 0; end.
} }
5. Tant que
Exemples
C C++ Pascal
#include <stdio.h> #include <iostream> Program somme ;
int main() using namespace std; Var s, n :integer ;
{ int main() Begin
int s=0,n; { int s=0,n; Write("Donnez un entier :") ;
printf("Saisir un entier :"); cout<<”Donnez un entier:”; Read(n) ;
scanf("%d", &n); S :=0 ;
cin>>n;
while(n !=0) While n<> 0 do
while(n !=0)
{ Begin
{
s+=n; S :=s+n ;
printf("Saisir un entier :"); s+=n; Write("Donnez un entier :" ;
scanf("%d", &n); cout<<”Donnez un entier:”; Read(n) ;
} cin>>n; End ;
printf("La somme est: %d", s); } Write(‘la somme=’,s) ;
return 0; cout<<”S=”<<s<<end; Readln() ;
return 0; End.
} }
Nombres aléatoires
C Pascal C++
#include<time.h> program alea; #include<iostream>
# include <stdio.h> uses crt ; #include<ctime>
# include <cstdlib>
int main() var i,k:integer; using namespace std;
{ begin int main()
srand(time(0)); {
int k=1; randomize; srand(time(NULL));
while( k<=10) k:=1; int k=1;
{ while k<=10 do while( k<=10)
int i=rand()%10; begin {
printf(" %d ", i); i:=random(10); int i=rand()%10;
k++; writeln(i); cout<<i<<endl;
} k:=k+1; k++;
return 0; end; }
} end. return 0;
}
Exemple
Exo 1
1. Écrire un programme qui résout l’équation ax2+bx+c=0 en envisageant tous les cas
particuliers.
2. Écrire un programme qui demande à l’utilisateur de saisir un entier X et qui affiche la valeur
absolue de X.
3. Écrire un programme qui demande à l’utilisateur de saisir 3 entiers A, B et C et qui indique si
C est compris entre A et B, bornes incluses.
Exo 2
1. Écrire un programme ; qui dit si une année donnée est une année bissextile. Une année est
bissextile si elle est divisible par 4
2. Écrire un programme qui demande un numéro de mois à l’utilisateur et indique en retour
son nom et le nombre de jours dans ce mois.
Exo 3 :
Écrire un programme qui lit le nombre d'années le nombre de moi et des jours pour tout en jour.
Exemple: 9 ans 8 mois et 20 jours=3500jours
Exo 4 :
Écrire un programme qui lit un entier n et affiche entiers inférieurs ou égaux à n, leurs carrés et leurs
cubes. Il affiche à la fin la somme de ces entiers ; la somme des carrés et la somme des cubes.
Exo 5:
1. Écrire un programme qui va afficher à l’écran les entiers compris entre 5 et 35.
2. Écrire un programme qui va afficher les multiples de 3 compris entre deux bornes données
3. Écrire un programme qui va afficher les multiples de 4 compris entre deux bornes données
4. Écrire un programme qui calcule le maximum entre quatre entier a, b, c et d.
Exo 6:
1. Écrire un programme, qui affiche les multiple d'un entier donné inférieurs à 100;
2. Écrire un programme qui affiche les diviseurs d'un entier n donnée
Exo 7:
1. Écrire un programme qui demande un nombre compris entre 10 et 20, jusqu’à ce que la
réponse convienne. En cas de réponse supérieure à 20, on fera apparaître un message :
« Plus petit ! », et inversement, « Plus grand ! » si le nombre est inférieur à 10.
2. Écrire un programme qui demande un nombre de départ, et qui calcule la somme des
entiers jusqu’à ce nombre.
3. Écrire un programme qui un réel n et calcule la somme
s= +…+
4. Écrire un programme ; qui lit une série de réels, calcule puis affiche leur somme S ; leur
produit P et leur Moyenne M. le programme va s'arrêter lorsque l'utilisateur entre 0 (zéro)
5. Écrire un programme qui demande à l’utilisateur de saisir 2 entiers A et B qu'il affiche à
l'écran. Le programme ne s'arrêtera que lorsque les deux entiers seront tous impairs
1. Les fonctions
retourne variable
FinFonction
Pascal
C++
type nomfonction(parametres)
{
Corps de la fonction;
Return type resultat;
}
C C++ Pascal
int paire(int x) bool paire(int x) Function paire(x:integer) :
{ { integer
return x%2==0; return x%2==0; Begin
} } Paire :=x mod 2 ; end ;
int minimum(int a, int b) int minimum(int a, int b)
{ {
int mn=a; int mn=a;
if(b<mn) if(b<mn)
mn=b; mn=b;
return mn; return mn;
} }
int puissance(int a, int b) int puissance(int a, int b) function
{ { puissance(x,n:integer):integer;
int p=1,i; int p=1,i; var i,p:integer;
for(i=1;i<=b;i++) for(i=1;i<=b;i++) begin
p=p*a;//p*=a; p=p*a;//p*=a; p:=1;
return p; return p; for i:=1 to n do
} } p:=p*x;
puissance:=p;
end;
int factorielle(int n) int factorielle(int n)
{ {
int f=1,i; int f=1,i;
for(i=1;i<=n;i++) for(i=1;i<=n;i++)
f=f*i; f=f*i;
return f; return f;
} }
Algorithme exepmleAppelFonction
Début
b ←Paire(3)
z ←5*SommeCarre(7,2)+1
Fin
2. Les procédures
Dans certains cas, on peut avoir besoin de répéter une tache dans plusieurs endroits du
programme, mais que dans cette tache 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
Une procédure est un sous-programme semblable à une fonction mais qui ne retourne
rien ou plusieurs résultats
FinProcédure
L'appel d'une procédure, se fait dans le programme principal ou dans une autre
procédure par une instruction indiquant le nom de la procédure :
instruction
FinProcédure
Début
exemple (…)
Fin
Les paramètres servent à échanger des données entre le programme principal (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
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 effectifs.
Ils contiennent les valeurs pour effectuer le traitement
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) : 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 : le paramètre effectif doit être une variable (et non une valeur) lorsqu'il s'agit
d'une transmission par adresse
x ← x+1
FinProcédure
Algorithme Test_incrementer1
variables n, m : entier
Début
n←3
m←3
incrementer1(n, m) résultat :
écrire (" n= ", n, " et m= ", m) n=3 et m=4
Fin
Remarque : l'instruction x ← x+1 n'a pas de sens avec un passage par valeur
Procédure SommeProduit (x,y: entier par valeur, som, prod : entier par adresse)
som ← x+y
prod ← x*y
FinProcédure
variables z : réel
z←x
x←y
y←z
FinProcédure
Une variable 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 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
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 de la factorielle
Exemple
Écrivez une fonction récursive (puis itérative) 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)
Une procédure récursive qui permet d'afficher la valeur binaire d'un entier n
#include <stdio.h>
void binaire(int n)
{
if(n!=0)
{
binaire(n/2);
printf("%d", n%2);
}
}
int main()
{
int n;
do
{
printf("\nSaisir un entier :");
scanf("%d", &n);
if (n!=0) printf("%d = ",n);
binaire(n);
}
while(n!=0);
return 0;
}
1. Écrire une fonction qui prend en paramètre un entier et affiche ses diviseurs
2. Écrire une fonction qui prend en paramètre un entier et compte ses diviseurs
3. Écrire une fonction qui prend en paramètre un entier et affiche s’il est premier ou pas
4. Lire un nombre et afficher tous les nombres premiers inférieurs ou égaux à ce nombre
5. Écrire une fonction qui prend en paramètre un réel et renvoie son carré
6. Écrire une fonction qui prend en paramètre un réel et renvoie son carré, son cube et
7. Écrire une fonction qui prend en paramètre trois réels et renvoie le plus petit d’entre eux
10. Écrire une fonction qui lit trois noms et les classe par ordre alphabétique croissant
11. Lire plusieurs nombre et renvoyez leur somme, leur minimum, leur moyenne, leur maximum
et leur produit
Un tableau est un regroupement de variables de même type, il est identifié par un nom.
Chacune des variables du tableau est numérotée, ce numéro s’appelle un indice. Chaque
variable du tableau est donc caractérisée par le nom du tableau et son indice.
2. Déclaration
Comme les variables d’un tableau doivent être de même type, il convient de préciser ce type
au moment de la déclaration du tableau. De même, on précise lors de la déclaration du
tableau le nombre de valeurs qu’il contient.
La syntaxe est :
Par exemple,
3. Saisie du tableau
Algo C++ Pascal
Affciher "Donnez la taille :" cout<<"Donnez la taille:"; Write(‘Donnez la taille :’) ;
Lire(N) cin>>n; Read(n) ;
for(i=0;i<n;i++) for i:=1 to n do
Pour i allant de 1 à N faire { begin
Ecire "donner la valeur :"
cout<<"Donnez la valeur :"; write('Donnez la valeur:');
lire E[i]
Finpour cin>>T[i]; read(T[i]);
} end;
C++ Pascal
void rechercher(int T[], int v) procedure rechercher(t:tab; v:real);
{ var trouver : boolean;
i=0; begin
bool trouver =false; trouver:=false;
while (!trouver && i<n ) i:=1;
{ while (not trouver) and (i<=n) do
if( T[i]==v) begin
trouver=true; if T[i]=v then
else trouver:=true
i++; else
} i:=i+1;
if (!trouver) end;
cout<<v<< " n'est pas dans le tableau"; if trouver then
else write(v:3:2 ,' est dans le tableau … l''indice: ' ,i)
cout<<v<<" est a la position:"<<i+1; else write(v, 'n''est dans le tableau!!');
cout<<endl; writeln;
} end;
6. Nombre d’occurrence
Le nombre d’occurrence est le nombre de fois qu’un élément appartient à un tableau. Il faut
parcourir le tableau du début jusqu’à sa fin et dénombrer cette valeur
C++ Pascal
int occurrence(int T[], int v) function occurrence(t:tab; v:real): integer;
{ var c:integer;
int c=0; begin
for(i=0; i<n;i++) c:=0;
if(T[i]==v) for i:=1 to n do
c++; if t[i]=v then
return c; c:=c+1;
} occurrence:=c;
end;
La technique du tri par sélection est la suivante : on met en bonne position l’élément
numéro 1, c’est-à-dire le plus petit. Puis en met en bonne position l’élément suivant. Et ainsi
de suite jusqu’au dernier élément.
Tri à bulles
L’idée de départ du tri à bulles consiste à se dire qu’un tableau trié en ordre croissant,
c’est un tableau dans lequel tout élément est plus petit que celui qui le suit.
En effet, prenons chaque élément d’un tableau, et comparons-le avec l’élément qui le
suit. Si l’ordre n’est pas bon, on permute ces deux éléments. Et on recommence jusqu’à ce
que l’on n’ait plus aucune permutation à effectuer. Les éléments les plus grands
« remontent » ainsi peu à peu vers les premières places, ce qui explique la dénomination de
« tri à bulle ».
EXERCICE 1
1. Écrire un programme qui demande à l'utilisateur de saisir n entiers stockés dans un tableau. Le
programme doit afficher le nombre d'entiers supérieurs ou égaux à 10.
2. Le programme doit rechercher si un réel V se trouve dans le tableau et afficher "V se trouve dans
le tableau" ou "V ne se trouve pas dans le tableau".
3. Le programme doit ensuite afficher l'indice du plus grand élément du tableau.
4. Le programme doit ensuite afficher soit "le tableau est croissant", soit "le tableau est
décroissant", soit "le tableau est constant", soit "le tableau est quelconque".
EXERCICE 2
Écrire un programme qui demande à l'utilisateur de saisir n réels stockés dans un tableau.
Le programme doit permettre de:
EXERCICE 3
Écrire un programme qui demande à l'utilisateur de saisir n nom stockés dans un tableau.
Le programme doit permettre de:
1. saisir et afficher les n Noms;
2. Chercher et afficher le plus petit nom
3. Chercher et afficher le grand nom
4. Trier le tableau par ordre croissant
5. réafficher le tableau.
Les tableaux traitent des éléments homogène (de même type), très nous avons besoin de manipuler
des éléments de types différents d’où utilité des enregistrements.
1. Déclaration
C C++ Pascal
#include <iostream> program enreg;
#include <cstdlib> uses crt;
using namespace std; const Taille=20;
type employes=record
struct employer nom, prenom: string;
{ salaire:longint;
string nom, prenom; end;
int salaire; type tab=array[1..Taille] of
}; employes;
var e:employes;
typedef struct employer emp; T:tab ;
emp e, *T; i,n:integer;
2. Saisie
C C++ Pascal
void saisie(emp *&T) procedure saisie(var T: tab);
{ begin
for(i=0; i<n; i++) for i:=1 to n do
{ begin
cout<<"Donnez le Nom:"; write('Donnez le nom:');
cin>>T[i].nom; readln(e.nom);
cout<<"Donnez le Prenom:"; write('Donnez le prenom:');
cin>>T[i].prenom; readln(e.prenom);
cout<<"Donnez le salaire:"; write('Salaire:') ;
cin>>T[i].salaire; readln(e.salaire);
} T[i]:=e;
} end;
end;
3. Affichage
C C++ Pascal
void afficher(emp * T) procedure afficher(t:tab);
{ begin
cout<<"\n----------------------------------\n"; writeln('Nom Prenom
cout<<"Nom\t\tPrenom\t\tSalaire\n"; Salaire');
for(i=0; i<n; i++) for i:=1 to n do
cout<<T[i].nom<<"\t\t"<<T[i].prenom<<"\t\t" writeln(T[i].nom, ' ',
<<T[i].salaire<<endl; t[i].prenom, ' ', t[i].salaire);
cout<<endl; writeln('---------------------);
} end
C C++ Pascal
void trier(emp *&T) procedure trier(var t:tab);
{ var j: integer;
for(int i=0; i<n-1;i++) begin
for(int j=i+1;j<n;j++) for i:=1 to n-1 do
for j:=i+1 to n do
if (T[i].salaire < T[j].salaire ) if T[i].salaire <t[j].salaire then
{ begin
e=T[i]; e:=T[i];
T[i]=T[j]; t[i]:=t[j];
T[j]=e; t[j]:=e;
} end;
} end;
5. Programme Principal
C C++ Pascal
Exo1 :
Soit une structure étudiant composée des champs Nom, Prénom, Age, Moyenne, Rang et Mention.
1. Écrire une fonction qui permet de saisir la liste des étudiants
3. Écrire une fonction qui permet d'affecter une mention aux étudiants
8. Écrire une fonction qui permet rechercher un étudiant en fonction de Nom et de son Prénom
Exo2 :
Soit une structure monôme composée des champs coefficient et exposant.
1. Écrire une fonction qui permet de saisir la liste des monômes (polynôme)
2. Écrire une fonction qui permet de calculer et afficher la dérivée d'un polynôme
3. Écrire une fonction qui permet de calculer et afficher la primitive d'un polynôme
4. Écrire une fonction qui permet de calculer et afficher la somme de deux polynômes
Exo3:
Soit une structure article composée des champs désignation; quantité; prix et Montant.
2. Écrire une fonction qui permet d'afficher la facture correspondante aux articles saisis;
3. Écrire une fonction qui permet de calculer et afficher le montant total hors taxe; le montant
TVA (18%) du montant hors taxe et le montant TTC.
Edition Avril 2022 : Page -27-
Cours d'algorithme et programmation réalisé par MATY Maman
Chapitre 6 Les listes chainées
1. Déclaration
C C++ Pascal
#include <stdio.h> # include <iostream> program listec;
#include <stdlib.h> using namespace std; uses crt;
2. La pile
C C++ Pascal
chaine saisie(liste * t) void saisie(liste * & T) procedure saisie(var T:ptr );
{ { var ter: char; a:integer;
ter='n'; char ter='n'; begin
liste *p; while(ter=='n') ter:='n';
while (ter=='n') { while ter='n' do
{ cout<<"Donnez la valeur:"; begin
printf("Donnez P= new liste; new(P);
l'element: "); cin>>P->info; write('Donnez la valeur:');
scanf("%d",&e); P->svt=T; readln(a);
p=malloc(sizeof(liste)); T=P; p^.info:=a; ;
p->elm=e; cout<<"Ternier"; p^.svt:=T;
p->svt=t; cin>>ter; T:=P;
t=p; } write('Terminer?');
printf("Terminer? "); } read(ter);
scanf("%c",&ter); end;
scanf("%c",&ter);
} end;
return t;
}
3. La file
C++ Pascal
chaine file(liste * t) void file(liste* &T) procedure laFile(var t:ptr);
{ { var ter: char; a:integer;
ter='n'; liste* Q; begin
liste *p,*q; char ter='n'; ter:='n';
while (ter=='n') while(ter=='n') while ter='n' do
{ { begin
4. Affichage
C C++ Pascal
void afficher(liste * t) void afficher(liste * T) procedure afficher(t:ptr);
{ { begin
liste *p=t; P=T; p:=t;
while (p!=NULL) while(P!=NULL) while p<>nil do
{ { begin
printf("%d ", p->elm); cout<<P->info<<"\t"; write(p^.info,' ');
p=p->svt; P=P->svt; p:=p^.svt;
} } end;
} cout<<endl; writeln();
} end;
5. Saisie ordonnée
C C++ Pascal
liste* saisieordonner(liste* &t) procedure saisieordonner(var
{ liste *s,*r; t:ptr);
ter='n'; var s,r:ptr; ter: char;
t=NULL; begin
while (ter=='n') ter:='n';
{ t:=niL;
cout<<"Donnez l'element: "; while ter='n' do
6. Programme Principal
C C++ Pascal
int main() int main() begin
{ T:=nil;
chaine t=k=0; { F:=nil;
t=file(t) ; T=NULL; {saisie(T);}
afficher(t); saisie(T); saisieordonner(T) ;
k=saisie(k); file(T); lafile(F);
affcoher(k); afficher (T); afficher(T);
return 1; return 0; afficher(F);
} } readln;
readln;
end.