Académique Documents
Professionnel Documents
Culture Documents
ALGORITHMIQUE
ET LANGAGE
SUPPORT DE COURS
2
1 Définition
Il est nécessaire de disposer d'un langage qui soit non lié à l'implémentation. Ceci
permet une description plus précise des structures de données ainsi qu'une rédaction
de l'algorithme plus souple et plus lisible. Le langage EXALGO est un exemple de ce
qui peut être utilisé et qui sera utilisé dans ce cours. Il est composé de chaînes, de
mots réservés, de signes opératoires et de signes de ponctuation.
3
- Procedure : Ce mot clé permet de déclarer une procédure ;
- Const : Ce mot clé permet de déclarer une constante ;
- Debut : Ce mot clé précède le début du corps d’un algorithme ;
- Fin. : Ce mot clé met fin au corps de l’algorithme.
NB : Les mots réservés peuvent s’écrire aussi bien en minuscule qu’en majuscule.
Les signes opératoires utilisés en algorithmiques sont la plupart des signes utilisés en
arithmétique ce sont :
- (+ ) : Pour l’addition ;
- ( - ) : Pour la soustraction ;
- ( * ) : Pour la multiplication ;
- ( / ): Pour la division ;
- (< ): Pour la comparaison d’infériorité absolue ;
- (<=) : Comparaison d’infériorité non absolue ;
- (> ) : Comparaison de supériorité absolue ;
- (>=) : Comparaison de supériorité non absolue ;
- ( = ) : Comparaison d’égalité ;
- OU : L’opérateur ou inclusif ;
- NON : L’opérateur de négation ;
- ET : L’opérateur ou exclusif ;
- (← ) : L’opérateur d’affectation;
- ( // ou { } ) : Pour écrire des commentaires dans l’algorithme.
4
questions qui sont : que demande le problème ? Qu’elles sont les informations
données par le sujet ? Qu’elle moyens ou méthodes sont disponibles pour résoudre
ce genre de problème? Qu’elle type de résultats fournira la résolution de ce problème
? Comme il faut le remarquer, l’analyse du problème permet de comprendre en détaille
le problème poser et les moyens disponibles à sa résolution.
L’étape de la description des objets permet de recenser les données fournies par le
problème en deux catégories, données d’entrée et de sortie. Il sera question ensuite
de donnée un nom ou identifiant, un type et une description ou utilisation à chaque
donnée se trouvant dans chaque catégorie. Il faut noter que dans le cas où le problème
nomme les différents objets qu’il fournit, le concepteur de l’algorithme peut conserver
ces noms.
Cette partie de l’algorithme permet de donner les informations sur le nom ou identifiant
de l’algorithme. Il faut noter que le nom de l’algorithme est généralement en relation
avec le problème que permet de résoudre ce dernier, cependant ce n’est pas une
obligation de donner un nom en relation avec le sujet de l’algorithme. Le nom d’un
algorithme doit seulement être conforme aux conditions d’écriture de l’identifiant d’une
variables (nous verrons ces conditions dans la suite de ce cours). L’entête d’un
algorithme commence toujours par le mot clé ALGORITHME OU ALGO.
6
Algo exemple ; /*Entête de l’algorithme*/
/* La partie déclaration de l’algorithme */
/* Les constantes nécessitent une valeur dès leur déclaration */
Const var1←20 : entier ;
Const var2←"bonjour!" : chaîne ;
/* les variables proprement dites */
Var var3, var4 : réels ;
Var var5 : chaîne ;
Début /* corps de l’algorithme */
/* instructions */ ;
Fin.
1.2.3 Variables
Les variables sont des emplacements de la mémoire dans lesquels sont ou peuvent-
être stockées des informations. Une variable est constituée d’un nom ou
identificateur, d’une valeur et d’un type.
Exemples
7
Remarques
1 Il n'y a pas de différence entre minuscules et majuscules.
2 On n'a pas le droit de mettre d'accents, ni de caractères de ponctuation.
3 Un identificateur doit être différent des mots clés (début, fin, écrire etc.)
On se sert des identificateurs pour : le nom du programme, les noms de variables, les
noms de constantes, les noms de types.
L’ensemble des variables est stocké dans la mémoire de l’ordinateur. Il faut noter qu’il
existe plusieurs catégorie de variables les variables prédéfinies ou variables de base
qui sont reconnues par les différents copulateurs de programmes, les variables créer
par les programmeurs (types énumérés etc.).
Ce sont des entiers signé en complément à deux sur 16 ou 32 bits, selon la machine
et le compilateur : 16 pour Turbo Pascal, 32 pour Delphi. C’est un sous-ensemble
de Z.
+ : pour l’addition ;
– : pour la soustraction;
* : pour la multiplication ;
/ : Pour la division ;
x div y : dividende de la division entière de x par y ;
x mod y reste de la division entière, avec y non nul ;
8
= : Comparaison d’égalité ;
< : Comparaison d’infériorité ;
<= : Comparaison d’infériorité ou d’égalité ;
> : Comparaison de supériorité ;
>= : Comparaison de supériorité ou d’égalité ;
<> : Différence ;
Remarques
Attention, les opérateurs /, div et mod, produisent une erreur à l'exécution si y
est nul.
Lorsqu'une valeur (ou un résultat intermédiaire) dépasse les bornes au cours
de l'exécution, on a une erreur appelée débordement arithmétique.
+ : pour l’addition ;
– : pour la soustraction;
* : pour la multiplication ;
/ : Pour la division ;
= : Comparaison d’égalité ;
< : Comparaison d’infériorité ;
<= : Comparaison d’infériorité ou d’égalité ;
> : Comparaison de supériorité ;
>= : Comparaison de supériorité ou d’égalité ;
<> : Différence ;
1.2.3.4.3 Type caractères : char (Langage Pascal)
Ce sont les jeux des caractères comportant les lettres, les digits, l'espace, les
ponctuations, Etc. le type caractère est codé sur un octet non signée.
9
Opérateurs sur les caractères :
= : Comparaison d’égalité ;
< : Comparaison d’infériorité ;
<= : Comparaison d’infériorité ou d’égalité ;
> : Comparaison de supériorité ;
>= : Comparaison de supériorité ou d’égalité ;
<> : Différence ;
C’est un type utilisé pour les expressions logiques. Il comprend deux valeurs possibles
: false (faux) et true (vrai).
Les opérations usuelles sont ET, OU et NON qui sont données dans les tables de
vérité.
Solution
Analyse du problème
Variables d’entrée
10
Variables de sortie
11
avons la structure conditionnelle complète, la structure conditionnelle incomplète, la
structure conditionnelle imbriquée et la structure conditionnelle par cas.
Cette structure conditionnelle donne lieu à deux possibilités selon une condition test.
Si la condition test est vérifiée l’action 1 est exécutée, si par contre elle ne l’est pas
l’action 2 est exécutée. La syntaxe de cette instruction est la suivante.
Si <condition> Alors
< action 1>
Sinon
< action 2> ;
Finsi ;
Si <condition> Alors
< action1 > ;
Finsi ;
12
vérifiée l’action 2 est exécutée, sinon si la condition test 3 est vérifiée l’action 3 est
exécutée, …, si la condition test N est vérifiée l’action N est exécutée, sinon l’action
N+ 1 est exécutée. La syntaxe est la suivante.
si <condition1>
alors < action1 >
sinon si <condition2>
alors < action2 >
sinon si <condition3>
alors < action3>
sinon
< action4>
Finsi
Finsi
Finsi ;
L’instruction cas est utilisée pour éviter d’imbriquer un trop grand nombre de structures
conditionnelles (problèmes de lisibilité à partir de 3 / 4 niveaux). Elle permet donc
d’éviter certaines imbrications de conditionnelles donc de traiter directement des choix
qui ne sont plus binaires. Elle est réservée à des conditions bien précises (égalité
variable - constantes). Sa syntaxe est la suivante :
13
1.4.2 Structures répétitives ou boucles
Cette boucle permet de répéter la même action ou un bloc d’actions tant que qu’une
condition test est vérifiée. Il faut noter que cette boucle peut ne jamais être exécutée,
si la condition n’est pas vérifiée pour la première itération. La syntaxe est la suivante.
Cette boucle permet de répéter la même action ou un bloc d’actions jusqu’à ce qu’une
condition soit vérifiée. Il faut noter que cette boucle est toujours exécutée au moins
une fois, avant que la condition limite ne soit vérifiée. La syntaxe est la suivante.
Répéter
< actions >
JusquÀ <condition>;
14
- on effectue l’instruction (ou le bloc d’instructions)
Jusqu’à ce que la condition soit fausse. Lorsque la condition est fausse, on sort de la
boucle.
Il est fréquent que le nombre de répétitions soit connu à l'avance, et que l'on ait besoin
d'utiliser le numéro de l'itération afin d'effectuer des calculs ou des tests. Le
mécanisme permettant cela est la boucle Pour.
Finpour ;
Les types de variables composées utilisent soit plusieurs valeurs de même type ou
une combinaison de plusieurs types. Nous avons par exemples les types énumérés,
les tableaux, les enregistrements, les fichiers etc
Il est fréquent en programmation que l'on ait à distinguer plusieurs cas, et que l'on
cherche à coder le cas à l'aide d'une variable. Ceci est très pratique mais dans un
programme un peu long cela devient rapidement difficile à comprendre, car il faut se
souvenir de la signification du code. D'où l'intérêt d'utiliser un type énumérée, qui
permet de donner un nom aux valeurs de code. Par exemple pour résoudre un
problème lié aux feux tricolore, il est possible au programmeur de créer de type
énuméré nommé feu dont la déclaration se fait comme suit.
15
ALGO feu_tri ;
VAR
Feux : (Rouge, Orange, Vert, Clignotant) ;
DEBUT
Si Feux = Rouge
Alors
Afficher (‘Arrêter’)
Sinon si Feux = Orange
Alors
Afficher (‘Ralentir’)
Sinon si Feux = Vert
Afficher (‘Passer’) ;
Fsi
Fsi
Fsi
FIN.
Remarque
-En écrivant cette ligne de déclaration, on déclare en même temps :
-la variable feux, de type énuméré (toujours codée sur un entier),
-et les constantes nommées Rouge, Orange, Vert et Clignotant.
-A ces constantes sont attribuées les valeurs 0, 1, 2, 3 (la première constante prend
Toujours la valeur 0).
-On ne peut pas choisir ces valeurs soi-même et ces identificateurs ne doivent
pas déjà exister.
-L'intérêt n'est pas de connaître ces valeurs, mais d'avoir des noms explicites.
même type et est une table d'association à clé unique. Afin d'éviter de multiplier le
nombre des variables, on regroupe les données dans un tableau.
16
Exemple de tableau d’entiers de dimension 8, indicé de 1 à 8
5 0 2 19 -5 2 1 8
T[1] T[2] T[3] T[4] T[5] T[6] T[7] T[8]
Remarque
-le nombre d'éléments de la table (dimension ou taille) est constant,
-l'accès aux éléments s'effectue directement par la clé,
-les valeurs minimum et maximum des clés sont des constantes.
La variable T précédente est de type tableau d’entiers indicé de 1 (valeurs minimum
des clés) à 8 (valeurs maximum des clés).
On accède aux valeurs du tableau par T [1], T [2], …, T [8] (valeurs prise par la clé).
L’indice doit être une expression entière (constante, variable, calcul).
La déclaration d’une variable de type tableau se réalise comme suit :
17
1.5.2.1 Initialisation d'un tableau
ALGO init_tableau ;
Tab = tableau [Min_indice..Max_indice] d’entiers ;
i : entier ;
Début
Pour i de Min_indice à Max_indice faire
Tab[i] ← 0 ;
Fpour ;
Fin.
Cet algorithme permet d’avoir un tableau dont tous les éléments sont égaux à zéro.
18
Cet algorithme permet d’échanger des éléments d’indice différents dans un tableau
1.5.2.4 Copie de tableau
ALGO copie_tableau ;
T1 = tableau [Min_indice..Max_indice] : entier ;
T2 = tableau [Min_indice..Max_indice] : entier ;
Val indiceT1_1, indiceT1_2, indiceT2 : entier ;
Var i : entier ;
Début
Si (indiceT2 + indiceT1_2 - indiceT1_1) > Max_indice alors
Afficher (‘faux’)
Sinon
Pour i allant de indice T1_1 à indice T1_2 faire
T2 [indiceT2] = T1 [i];
indiceT2 = indiceT2 + 1;
Finpour
Afficher (‘vrai’) ;
Finsi
Fin.
Cet algorithme permet de copier les éléments du tableau T2 dans le tableau T1.
1.5.2.5 Somme des éléments d’un tableau
ALGO som_tab ;
T= tableau [Min_indice..Max_indice] : entier ;
Var s, i : entier;
Début
s←0 ;
Pour i allant de Min_indice à Max_indice faire
s= s + T[i]
Finpour
Afficher (s) ;
Fin.
19
Cet algorithme permet de faire la somme des éléments du tableau T
1.5.2.6 Recherche d'un élément
T= tableau [Min_indice..Max_indice] : entier ;
Val e : entier;
Var i : entier;
Début
Pour i allant de Min_indice à Max_indice faire
Si T[i] ==e alors
Afficher (i)
Finpour
Afficher (T[i]) ;
Fin.
Cet algorithme permet de recherche un élément précis d’un tableau
1.5.3 Matrices
Une matrice M de dimension n x m est un tableau de dimension n dont chaque
élément est un tableau de dimension m. On peut donc déclarer la matrice sous la
forme suivante.
1.5.3.1 Initialisation
ALGO init_tableau ;
Tab = tableau [1..n] de tableau [1..m] d’entiers ;
Var i, j : entier ;
Début
Pour i allant de 1 à n faire
Pour j allant de 1 à m faire
Tab [i, j]=0
Finpour
Finpour
Fin.
20
Cet algorithme permet de recherche un élément précis d’un tableau
1.5.3.2 Somme de deux matrices
ALGO som_mat ;
M1 = tableau [1..n] de tableau [1..m] de réels ;
M2 = tableau [1..n] de tableau [1..m] de réels ;
Var i, j : entier;
Var M : tableau [1..n] de tableau [1..m] de réels;
Début
Pour i allant de 1 à n faire
Pour j allant de 1 à m faire
M [i, j]=M1 [i, j] +M2 [i, j] ;
Finpour
Finpour
Fin.
Cet algorithme permet de recherche un élément précis d’un tableau
1.6 Tri d’un tableau
1.6.1 Tri sélection
Ce tri est basé sur l'algorithme de recherche du minimum. On adapte cet algorithme
pour pouvoir effectuer la recherche dans un sous-tableau. On a le déroulement ici
Recherche du minimum
ALGO minimum ;
T= tableau [1..N] d'entiers ;
Val i, Imin, Imax : entier ;
Var sauv : entier ;
Debut
sauv = Imin ;
Pour i allant de Imin+1 à Imax faire
Si T[i] <T[sauv] alors
Sauv = i ;
Finsi
Finpour
Afficher (i) ;
Fin.
21
Cet algorithme permet de recherche le plus petit élément d’un tableau
ALGO Tri_selection ;
Debut
/* Recherche du minimum */
- E ≤ T[i]
- il existe un unique entier k dans [i..j-1] tel que T[k] < E ≤T [k+1]
- E>T[j]
22
Début
/* Recherche du minimum */
/* échanger */
T [j+1]=T[j];
j = j-1;
Fintantque
T [j+1] = cle;
Finpour
Fin.
Cet algorithme permet de trier un tableau de N entiers.
1.6.2.2 Tri à bulle
ALGO Tri_ bulle ;
T= tableau [1..N] d'entiers ;
Var i, j, cle : entier ;
Début
/* Recherche du minimum */
Pour i allant de 1 à N-1 faire
Pour j allant de N à i+1 par pas de -1 faire
Si T[j] <T [j-1] alors
/* échanger */
Cle = T[j]
T[j] = T [j-1]
T [j-1] = Cle
Finsi
Finpour
Finpour
Fin.
Cet algorithme permet de trier un tableau de N entiers.
1.7 Structures ou enregistrement
Il s'agit simplement de regrouper des variables V1, V2, . . . de différents types T1,
T2, . . . dans une variable < à tiroirs >. La syntaxe de déclaration est la suivante :
23
Nom_du_type = structure
nom_champs_1 : type1 ;
nom_champs_2 : type2 ;
.......
Nom_champs_k : typek ;
Finstructure ;
Ceci signifie que lorsqu'une variable est déclarée de ce type, elle référence k variables
en même temps. Soit V une variable dont le type est une structure, on désigne un des
champs par V. suivi du nom du champ. Voici quelques exemples de structures
Exemple1
Une date de naissance est un exemple de structure. On peut écrire :
DateDeNaissance = structure
JourDeNaissance : entier ;
MoisDeNaissance : entier ;
AnnéeDeNaissance : entier ;
Finstructure ;
On peut définir une structure composée du sexe et de la date de naissance
Individu = structure
Sexe : booléen ;
Date : DateDeNaissance ;
Finstructure ;
Alors I. Sexe sera un booléen et I.date.jourDeNaissance sera un entier. Ainsi les
I.date.jour = 12 ;
I.sexe=false ;
Affectation de valeurs à un enregistrement
ALGO enregistrer ;
Personne_t = structure
Taille : réel ;
Cheveux : caractère ;
Yeux : caractère ;
Finstructure ;
VAR
bob, luc : Personne_t ;
24
Début
/* enregistrement des valeurs dans Personne_t */
bob.taille = 180 ;
bob.cheveux = Brun ;
bob.yeux = Noir ;
luc = bob ;
Fin.
Remarque
Intérêt de ce type
Il permet de structurer très proprement des informations qui vont ensemble, de les
recopier facilement et de les passer en paramètres à des procédures (on y reviendra).
1.8.1 Procédures
25
Exemple
ALGO exemple1;
VAR x , y, t : entier ;
PROCEDURE Echange_xy;
Début
{Corps de la procédure}
t := x; x := y; y := t;
Fin ;
Début
{Programme principal}
x := 3; y := 4;
Afficher (x, ’ ’, y);
Echange_xy; {1er appel de la procédure}
Afficher (x, ’ ’, y);
Echange_xy; {2eme appel de la procédure}
Afficher (x, ’ ’, y);
Fin.
Remarques
1.8.1.2 Appels
On peut très bien appeler une procédure P1 depuis une procédure P2, mais il faut
que la procédure P1 ait été déclarée avant la procédure P2.
Exemple
ALGO exemple2 ;
VAR x, y, t : entier ;
PROCEDURE Affiche_xy ;
Début
Afficher (x, ' ', y) ;
Fin ;
26
PROCEDURE Echange_xy ;
Débit
t=x;x=y;y=t;
Affiche_xy ;
Fin ;
Débit
x = 3 ; y= 4 ;
Affiche_xy ;
Echange_xy ;
Echange_xy ;
Fin.
Remarque
ALGO exemple3;
VAR x, y : entier ;
PROCEDURE Echange_xy ;
VAR t : entier ; {Déclaration locale}
Débit
t := x; x := y; y := t;
Fin ;
Debit
{ ... }
Fin.
Les variables déclarées dans le VAR du programme principal sont appelées variables
globales. Elles existent pendant toute la durée du programme et sont accessible de
27
partout. Une variable locale à une procédure P, portant le même nom x qu'une variable
globale, masque la variable globale pendant l'exécution de P.
Exemple
ALGO exemple4;
VAR x : entier ;
PROCEDURE Toto;
VAR x : entier ;
Débit
x = 4;
Afficher ('toto x = ', x);
Fin ;
Débit
x = 2;
Afficher ('glob x = ', x);
Toto ;
Afficher ('glob x = ', x);
Fin.
Ce programme affiche
glob x = 2
toto x = 4
glob x = 2
Dans le cadre d’une procédure paramétrée les paramètres sont fixés dans le nom de
la procédure.
ALGO exemple6 ;
VAR a, b, c, d : réel ;
Débit
z = x * y;
Fin ;
Débit
Afficher ('a b ? ') ; Lire (a, b) ;
Produit (a, b, c) ; {passage de}
Produit (a-1, b+1, d) ; {paramètres}
Afficher ('c = ', c, ' d = ', d) ;
Fin.
28
1.8.2 Fonction
Une fonction est une procédure particulière retournant ou non une valeur d’un type
donné par l'instruction simple (Afficher (Expression)). Une fonction s'utilise dans le
calcul d'une expression ou comme instruction simple. A la différence des procédures
les fonctions sont d’un type bien déterminé. Elle est déclarée à l’aide du mot clé
Fonction
Ecriture de la fonction
Renvoyer Facto (n - 1) * n
Fin
30
2.1 Langage de Programmation et programme informatique
Le langage PASCAL est celui qui dispose de la syntaxe la plus claire et la plus proche
du langage dit "algorithmique", même s'il est bien moins puissant que le langage C. Il
a été mis au point par le Professeur Niklaus Wirth dans les années 1970 dans un
but pédagogique et est en constante évolution depuis. Tous les algorithmes que nous
mettrons au point cette année pourront être écrits directement en PASCAL.
31
En PASCAL, on ne tient pas compte de la casse (majuscules / minuscules). Ce n'est
pas le cas dans la plupart des autres langages de programmation. Une constante est
une valeur définie au début du programme et qui reste inchangée durant toute son
exécution.
2.2.2.1 Affectation
Une affectation est une opération (instruction) permettant d'attribuer une valeur à
une variable. En PASCAL, elle est symbolisée par le signe :=
L'identifiant de la variable est à gauche du signe d'affectation. La valeur ou plus
généralement l'expression est à droite du signe d'affectation.
Exemple
x := 5
y2 := y + 2 * z
i := i + 1
x prend la valeur 5 (au symbole x est désormais associée la valeur 5, jusqu'à ce
que cette variable soit modifiée)
y + 2z donne y2 (l'expression y + 2*z est évaluée et sa valeur est "rangée" dans la
variable de nom y2)
i prend pour valeur i+1 (i est actualisée : on ajoute 1 à la précédente valeur
contenue dans la variable i)
Exemple
readln (x)
readln (nom, prenom, age)
32
2.2.2.3 Instruction basique de d'écriture
Exemple
writeln (19)
write ('Bonjour le monde!')
write (age)
writeln ('Je sais que 9*9 = ',9*9)
writeln ()
33
2.2.4.1 Type entier : Integer
- Booléens : deux valeurs possibles, vrai et faux ; en PASCAL : boolean (true /false)
- Caractères : lettres, chiffres, ponctuation… ; en PASCAL : char
En PASCAL, une valeur de type caractère doit être mentionnée entre apostrophes.
2.2.4.4 Opérateurs de calcul sur les types de base
2.2.4.4.1 Opérateurs de calcul sur les types de base
Les opérateurs de calcul disponibles pour les types de base :
34
EXEMPLE
program Calcul_TVA ;
var prixTTC, tauxTVA : real ;
begin
write ('Quel est le prix TTC ? ') ;
readln (prixTTC) ;
write ('Quel taux de TVA s'applique en % ? ') ;
readln (tauxTVA) ;
tauxTVA := tauxTVA / 100 ;
writeln ('Le prix HT est de ', (prixTTC * (1 – tauxTVA)):5:2) ;
writeln ('Le montant de la TVA est de ', (prixTTC * tauxTVA):5:2)
end.
Remarque
Dans les deux dernières instructions d’affichage la mention : 5:2 s’explique ainsi :
5 : Nombre minimal de caractères affichés (avec alignement à droite)
2 : Précision de l'arrondi (chiffres après la virgule)
35
if <condition> then
begin
<instruction1> ; Bloc d’instructions
<instruction2>
end
else <instruction3>
Comme une conditionnelle est elle-même une instruction, il peut y avoir une ou
plusieurs conditionnelles à l’intérieur d’une conditionnelle. On parle de conditionnelles
imbriquées.
if <condition1> then
else <instruction2>
else <instruction3>
Remarque
36
case <variable> of
<ensembleDeValeurs1> : <instruction1> ;
<ensembleDeValeurs2> : <instruction2> ;
…
<ensembleDeValeursN> : <instructionN>
else <instructionN+1>
end.
Remarque
- un ensemble de valeurs est une valeur constante, ou plusieurs valeurs
constantes séparées par des virgules
- le else est facultatif
- chaque instruction peut être un bloc d’instructions
37
Pour un boc d’instructions on a :
while <condition> do
begin
<instruction1> ;
<instruction2>
End
EXEMPLE
program tours_de_boucle ;
Var n : integer ;
begin
n := 0 ;
while n < 3 do
begin
writeln ('Un tour... ') ;
n := n + 1
end ;
writeln ('Fini !')
end.
Exercices :
1 – Quel est l’affichage produit par le programme tours_de_boucle ?
2 – Écrire l’algorithme d’Euclide en PASCAL (pgcd de deux nombres entiers)
38
• En PASCAL, la boucle RÉPÉTER est de type RÉPÉTER…JUSQU’À
• La condition doit finir par devenir vraie (on répète le traitement jusqu’à ce que la
condition soit vraie, i.e. tant que la condition est fausse)
• Le traitement est réalisé au moins une fois, car le test est effectué après.
EXEMPLE
repeat
writeln(’saisir la note’);
readln(note)
until (note >= 0) and (note <= 20)
Remarque : pas de begin/end car le bloc d’instructions à répéter est déjà encadré
par repeat et until.
39
EXEMPLE
sommeChiffres := 0;
for i := 1 to 9 do
sommeChiffres := sommeChiffres + i;
sommeChiffres := 0;
for i := 9 downto 1 do
sommeChiffres := sommeChiffres + i;
2.2.8 Variables de type tableaux
Un tableau est une structure de données regroupant un ensemble de variables de
même type.
2.2.8.1 Tableau à une dimension
Exemple de tableau d’entiers de dimension 8, indicé de 1 à 8
5 0 2 19 -5 2 1 8
T[1] T[2] T[3] T[4] T[5] T[6] T[7] T[8]
La variable T est de type tableau d’entiers indicé de 1 à 8.
On accède aux valeurs du tableau par T[1], T[2], …, T[8].
L’indice doit être une expression entière (constante, variable, calcul).
T [i+1]:=5
readln (T [3])
writeln (’La ’, Xème valeur est ’, T[x])
if T[T [1] +T [2]] = T [1] + T [2] then writeln (’coup de chance’)
40
Les instructions de lecture, écriture peuvent s’appliquer à chacun des éléments mais
pas au tableau tout entier.
readln(T) writeln(T)
Il faut saisir ou afficher les éléments un par un, en utilisant une boucle.
EXEMPLE
program reaffichage;
const Nmax =100 ; {limite de taille du tableau}
type Tent = array [1..Nmax] of integer ; {déclaration du type Tent}
var T : Tent ; {le tableau}
n : integer; {nombre d’éléments à saisir}
i : integer; {indice pour parcourir le tableau}
begin
write (’Combien de valeurs (<’, Nmax,’) ? ’);
readln(n);
i :=1;
while i<=n do
begin
write (’Donner le ’, i,’eme element: ’);
readln(T[i]) ;
i:=i+1
end
writeln (’Vous venez de saisir les valeurs suivantes : ’);
i:=1;
while i<=n do
begin
write (T[i],’ ’);
i:=i+1
end
end
41
2.2.8.2 Type tableaux à deux dimensions
2.2.8.2.1 Déclaration d’un tableau à deux dimensions
Syntaxe : var <NomVar> : array [<const1>..<const2>, [<const3>..<const4>] of <type> ;
EXEMPLE
program saisie_matrice;
const Lmax=100; Cmax=100;
type matrice = array[1..Lmax, 1..Cmax] of real;
var M : matrice ;
n1, n2 : integer;
i, j : integer;
begin
write (’Combien de lignes (<’, Lmax,’) ? ’);
readln (n1);
write (’Combien de colonnes (<’, Cmax,’) ? ’);
readln (n2);
i:=1;
while i<=n1 do
begin
j:=1;
while j<=n2 do
begin
write (’Donner l’’element [’, i,’,’, j,’] : ’) ;
readln (M [i, j]);
j:=j+1
end;
i:=i+1
end.
EXERCICE
Ecrit un programme pascal permettant d’initialiser une matrice de dimension 7x8
A l’aide de la boucle For…do et repeat. Until
42
2.2.9 Déclaration d’un type structuré
Syntaxe
Record
V1 : T1;
V2 : T2;
{ ... }
End ;
Soit r une variable de ce type ; on accède aux différents champs de r par r.V1,
r.V2, . . .
EXEMPLE
personne_t = Record
taille : taille_t;
cheveux : cheveux_t ;
yeux : yeux_t ;
End ;
VAR
taille : taille_t;
cheveux : cheveux_t;
yeux : yeux_t;
bob, luc : personne_t;
BEGIN
bob.taille := 180;
bob.cheveux := Brun;
bob.yeux := Noir;
luc := bob;
END.
Remarque
43
2.2.11 Type Chaines de caractères
Une chaine de caractère (en anglais : string) est un type structuré similaire à un
tableau de caractères, et représentant une suite de caractères. Il est prédéfini dans la
plupart des langages de programmation et associé à des fonctions spécifiques qui
permettent de les manipuler plus simplement.
Déclaration :
var <NomVar> : string
La taille n’est pas précisée
(valeur par défaut : 255 caractères)
EXEMPLE
program exemple_chaines;
var s, nom : string;
tel : string [10];
begin
write (’Comment vous appelez-vous ?’);
readln (nom);
s := ’Bonjour’;
writeln (s,’ ’, nom);
{…}
end.
2.2.11.1 Opérations de base sur les caractères
Concaténation : ‘Bon’ + ‘jour’ -> ‘Bonjour’
44
Tous les opérateurs de comparaison habituels sont disponibles : < ; > ; <= ; >=
; = ; <>
2.3 Sous-programmes
Une donnée est une valeur transmise au sous-programme et utilisée par celui-ci. Une
donnée n’est jamais modifiée par le sous-programme.
Un résultat est une valeur que le sous-programme transmet au programme ou sous-
programme qui l’appelle.
Une donnée modifiée est à la fois donnée et résultat. Il s’agit d’une donnée que le
sous-programme peut modifier dans le but d’être retransmise au programme qui
l’appelle. Les paramètres résultats et données modifiées sont des variables, non
initialisées (résultats) ou initialisées (données modifiées).
45
2.3.4 Catégories de sous-programme
Une fonction : sous-programme typé qui retourne un résultat à partir d’un certain
nombre de données (pas de données modifiées ni de paramètre résultat qui peut être
considéré comme la fonction elle-même).
Une procédure : sous-programme non typé qui utilise un nombre libre de données,
résultats et données modifiées, mais ne retourne pas à proprement parler un résultat.
2.4 Fonction
Une fonction calcule une valeur à partir de 0, 1 ou plusieurs données en paramètre.
2.4.1 Déclaration d’une fonction :
begin
… {bloc d’instructions}
end ;
Les paramètres sont uniquement des données, et le résultat n’est pas considéré
comme un paramètre.
Pour retourner un résultat, la fonction doit contenir au moins une instruction de type
NomFonction :=…;
46
Après exécution de la fonction, sa valeur calculée (résultat) remplace l’appel de la
fonction dans l’instruction où elle a été effectuée. L’appel d’une fonction correspond à
une expression dont on évalue la valeur.
EXEMPLE
program testmin ;
var a, b: integer;
begin
write(‘Entrer deux valeurs: ’) ;
readln(a);
readln(b);
writeln (‘Le min est : ’, min (a, b));
end.
REMARQUE
Sous-programmes : fonctions
• L’ordre des paramètres doit être bien respecté lors de l’appel de la fonction
• Il n’y a pas de lecture des données dans la fonction ; elles sont passées en
Paramètres
47
2.5 Procédure
Une procédure peut être considérée comme une fonction ne renvoyant pas de valeur.
En PASCAL, des paramètres peuvent être modifiés uniquement dans des procédures
(données modifiées et résultats). Une procédure peut également avoir des données
en paramètres, non modifiables.
L'appel à une procédure est une instruction en tant que telle.
begin
… {bloc d’instructions}
End ;
Les paramètres peuvent être des données, des données modifiées ou des résultats.
Les données modifiées et résultats sont précédés par le mot-clé var.
Une procédure n'a pas de type associé. Il ne doit jamais y avoir d'instruction du
genre nomProc:=…;
2.5.2 Appel d’une procédure (dans un autre bloc d’instructions)
• les données en paramètres doivent être des expressions (valeur, variable, résultat
d'un calcul ou d'une fonction) correspondant aux types déclarés
• les données modifiées et résultats (var lors de la déclaration, mais pas lors de
l'appel) correspond obligatoirement à une variable correspondant au type déclaré
• l'ordre des paramètres doit être bien respecté lors de l'appel de la procédure
48
program testajoute ;
begin
x := x+y ;
end ;
var a, b : integer
begin
readln(a);
readln(b);
ajoute(a, b);
writeln(a, b);
end.
2.6 Sous-programmes : synthèse
La distinction entre une procédure et une fonction
EXERCICE
On souhaite réaliser un programme calculant, à partir des relevés de températures sur
une semaine de deux villes, laquelle a la température moyenne la plus élevée.
-> Définir un type permettant de stocker les températures hebdomadaires d'une ville
-> Écrire un sous-programme calculant la moyenne des températures de la semaine
-> Écrire un sous-programme permettant la saisie des températures hebdomadaires
d'une ville
-> Écrire un sous-programme déterminant, parmi deux villes, celle qui a la température
moyenne la plus élevée
->Écrire le programme principal permettant de réaliser les traitements
49
50
3.1 Déclaration d’objets en C
3.1.1 Variables
Syntaxe :
type nom_variable ;
ou
type nom_variable=valeur ;
3.1.2 Constante
Syntaxe :
const type nom_constante= ;
3.1.3 Tableau
3.1.3.1 Tableau une dimension
Syntaxe :
type nom_tableau [taille_Tableau]= {val1, val2, val3,.., valn} ;
3.1.3.2 Matrice
type nom_tableau [nb_lignes][nb_colonnes]= { {val11val12,val13..val1n},
{val21val22val23..val2n},
{val31val32val33..val3n},
.
.
.
{valn1valn2valn3..valnn}
};
3.2 Pointeurs
51
3.3.1.1 Types d’affichage
3.5 Opérateurs
52
3.6.1.1 Structure conditionnelle complète
if (condition1)
{
<action1> ;
}
else
{
<action2>;
}
3.6.1.2 Structure conditionnelle incomplète
if (condition1)
<action>;
3.6.1.3 Structure conditionnelle imbriquée
if (condition1)
{
<action1> ;
}
else
{
if (condition2)
{
<action2>;
}
else
{
<action3>;
}
}
53
3.6.1.4 Structure Case
switch(Variable)
{case <Valeur1>:<Action1> ; break;
case <Valeur2>:<Action2> ; break;
case <Valeur3>:<Action3> ; break;
.
.
.
case <ValeurN>:<ActionN> ; break;
default :<ActionN> ; break;
}
3.6.2 Boucles
3.6.2.1 While
while(Condition)
{
<actions> ;
}
3.6.2.2 do...while
do
{
<actions> ;
}
while (condition);
3.6.2.3 For..do
3.6.2.3.1 For..do (avec incrémentation)
for (Compteur=valeur1; Compteur=valeur2 ; Compteur++)
{
<actions>;
}
54
3.6.2.3.2 For..do (avec décrémentation)
for (Compteur=valeur1; Compteur=valeur2 ; Compteur--)
{
<actions>;
}
3.7 Caractères et chaînes de caractères
3.7.1 Déclaration d’un caractère
Syntaxe :
char nom_variable=’caractère’
3.7.1.1 Lecture d’un caractère au clavier
Nom_variable_char=getchar () ;
3.7.1.2 Affichage d’un caractère à l’écran
printf (″%c″, nom_variable) ;
3.7.2 Déclaration chaînes de caractères
Syntaxe :
char <nom_tableau> [<taille_tableau] ;
Exemple : char nom_variable_char [8] ; char nom_variable_char [5]=’Eric’ ;
char nom_variable_char[ ]=’Eric’ ;
NB : il faut noter qu’un déclarant une chaine de caractère en fixant la taille du tableau
de déclaration à (n),ce sont (n-1) qui seront effectivement affichés et un zéro final sera
affiché à la fin de la chaîne, il faut donc faire attention en fixant la taille de déclaration
d’une chaine de caractères.
3.7.2.1 Pointeur sur une chaine de caractères
char*nom_tableau[ ] ; // Tableau de chaines de caractères
3.7.2.2 Fonctions de gestion de caractères
3.7.2.2.1 Fonction gets ()
La fonction gets permet de lire une chaîne de caractères validée par la touche
ENTREE du clavier de l‘ordinateur.
55
EXEMPLE
Char line [81] ; /* 81 : taille arbitraire supposée suffisante
Une ligne écran = 80 caractères + 1 case
Pour le ‘\0’ de fin de chaîne */
printf («Saisissez une chaîne de caractère : \n ») ;
gets (line) ; /* La frappe de l’utilisateur sera enregistrée
dans line, on suppose qu’il ne frappera pas
plus de 80 caractères, sinon aïe aïe aïe */
EXEMPLE
#include <stdio.h>
#include <string.h>
Int main () {
Le programme suivant affichera la chaîne « Bonjour Paul » à l’écran :
char chaine1 [20]= ″Bonjour ″ ;
Char chaine2 [20]= ″Paul ″ ;
strcat (chaine1, chaine2) ; /* ajoute chaine2 à la fin de chaine1 */
printf (« %s\n », chaine1) ;
return 0 ;
}
La fonction strncpy (<s>, <t>, <n>) est presque similaire à strcpy mais copie au plus
<n> caractères de la chaîne <t> au début de <s>.
EXEMPLE
#include <stdio.h>
#include <string.h>
int main () {
char chaine1 [20]= ″Bonjour ″ ;
char chaine2 [20]= ″Edouard ″ ;
strncpy (chaine1, chaine2, 2) ; /* recopie 2 caractères de chaine2
à l’adresse de chaine1 */
printf (« %s\n », chaine1) ;
return 0 ;
}
56
EXEMPLE
#include <stdio.h>
#include <string.h>
int main () {
char chaine1[20]= ″Bonjour ″ ;
char chaine2[20]= ″Edouard ″ ;
strncat(chaine1,chaine2,2) ; /* ajoute les 2 premiers caractères
de chaîne2 à la fin de chaine1 */
printf(« %s\n »,chaine1) ;
return 0 ;
}
– négatif si <s> précède <t>. Par exemple, strcmp (« AAAA », »BBBB ») renverrait -1
– positif si <s> suit <t>. Par exemple, strcmp (« BBBB », »AAAA ») renverrait +1
#include <stdio.h>
#include <string.h>
int main () {
char ch [] = ″toto ″ ;
printf (« La longueur de %s est : %d », ch, strlen (ch)) ;
return 0 ;
}
Affichera : « La longueur de toto est : 4 » à l’écran.
3.7.2.2.6 Fonction strcpy ()
Pour initialiser une chaîne de caractères, il est possible d’utiliser la fonction strcpy.
Cette fonction nous impose une nouvelle fois d’ajouter le fichier d’en-tête string.h.
57
EXEMPLE
#include <stdio.h>
#include <string.h>
int main (void) {
char line [80];
strcpy (line, «un exemple de chaine initialisée...") ;
printf ("%s\n", line);
return 0;
}
3.7.2.2.7 Fonction puts ()
EXEMPLE
EXEMPLE
Une structure est un objet composé de plusieurs champs qui sert à représenter un
objet réel ou un concept. Par exemple une voiture peut être représentée par les
renseignements suivants : la marque, la couleur, l’année, etc.
3.8.1 Définition d’une structure
Une structure peut être définie de plusieurs manières :
Syntaxe 1 :
struct nom_de_la_structure {
/* Définition de la structure */
} nom_du_type ;
58
Ceci fait, le nouveau type de données sera struct nom_du_type et une variable
pourra être déclarée ainsi :
Syntaxe 2 :
typedef struct {
/* Définition de la structure */
} nom_du_type;
Cette fois-ci, le nouveau type de données s’appelle nom_du_type (la structure a été
créée et en même temps un synonyme a été défini avec typedef).
EXEMPLE
#define LONGUEUR 40
struct personne{
char nom [LONGUEUR];
char prenom [LONGUEUR];
int age;
};
struct personne p;
#define LONGUEUR 40
typedef struct {
char nom [LONGUEUR];
char prenom [LONGUEUR];
int age;
} personne;
personne p;
L’accès aux éléments d’une structure, appelés aussi champ, se fait selon la syntaxe
: nom_de_variable.nom_du_champ
59
#include <stdio.h>
typedef struct {
char nom [40];
char prenom [20];
int age;
} personne;
int main () {
personne p ;
printf("Veuillez entrer le nom de la personne:");
scanf ("%s",p.nom);
printf ("Veuillez entrer le prénom de la personne:");
scanf ("%s", p.prenom);
printf ("Veuillez entrer l'âge de la personne:");
scanf ("%d", &p.age); /* ne pas oublier le & !!! */
printf ("Voici les caractéristiques de cette personne:\n");
printf ("nom=%s\n", p.nom);
printf ("prenom=%s\n", p.prenom);
printf ("age=%d\n", p.age);
return 0;
}
2.9 Fichiers
Tout ce qui est enregistré sur votre disque dur ou presque est un fichier, et porte un
nom. Il est possible de créer, de lire ou d’écrire dans des fichiers. Notez que certains
fichiers peuvent être protégés en lecture, en écriture ou les deux. Les fichiers seront
donc étudiés à travers l’analyse d’un programme
2.9.1 Analyse du programme
-Déclaration d’un pointeur de fichier
-FILE *Mon_pointeur_fichier ; // déclaration d’un pointeur sur un
// Enregistrement d'un fichier
-Ouverture d'un fichier, fonction fopen ( )
NB :
const char * mode correspond au mode d’ouverture d’un fichier. Pour ouvrir le ficher
en écriture par exemple const char * mode prend la valeur w. ce qui donne la
déclaration ci-dessous :
-Mon_pointeur_fichier = fopen (nom_fichier_sur_disque, "w");
60
2.9.2 Mode d'ouverture d'un fichier
feof désigne l’abréviation de end of file. Donc cette ligne se traduit par : tant que l’on
n’atteint pas la fin du fichier désigné par Mon_pointeur_fichier
61
2.9.7 Ecrire une chaîne de caractères (string) dans un fichier
La fonction fprintf n’est pas très différent d’un printf. La seule différence est qu’au lieu
d’être écrite sur l’écran, la chaîne nom_chaîne_caractères sera écrite dans le fichier
nom_fichier_sur_disque.
EXEMPLE
#include <stdio.h>
/* Définition de constante */
#define maxligne 100
char ligne [maxligne];
FILE *p_fichier;
int main ()
{
Mon_pointeur_fichier=fopen ("essai.txt","r");
while (! feof (Mon_pointeur_fichier))
{
fgets (ligne, maxligne, Mon_pointeur_fichier);
if (! feof (Mon_pointeur_fichier))
printf ("J'ai lu :%s\n", ligne);
}
fclose (Mon_pointeur_fichier);
return 0;
}
62
EXEMPLE GENERAL SUR LES FICHIERS
01. #include <stdio.h>
02. #include <stdlib.h>
03. int main () {
04. FILE *p_fichier; /* pointeur sur fichier*/
05. char nom_fichier [20], nom_personne [20];
06. int i, nbr_enregistrements;
07. /* 1ère étape : Création et remplissage du fichier */
08. printf ("Quel est le nom du fichier à créer ? ");
09. scanf ("%s", nom_fichier) ;
10.
11. /* w: write r: read a: append*/
12. p_fichier = fopen (nom_fichier, "w");
13. if (p_fichier == NULL) {
14. printf ("Erreur de création du fichier \n");
15. exit (-1); // Abandonner le programme
16. }
17.
18. printf ("Nombre de personnes à stocker ? : ");
19. scanf ("%d", &nbr_enregistrements);
20.
21. for (i = 0; i<nbr_enregistrements; i++) {
22. printf ("Entrez le nom de la personne : ");
23. scanf ("%s", nom_personne);
24. fprintf (p_fichier, "%s\n", nom_personne);
25. }
26. fclose(p_fichier);
27.
28. /* 2ème étape : Lecture et affichage du fichier */
29. p_fichier = fopen (nom_fichier,"r"); /* read */
30. if (p_fichier == NULL) {
31. printf ("\aErreur d'ouverture sur le fichier \n");
32. exit (-2); // Abandonner le programme
33. }
34.
35. while (!feof(p_fichier)) {
36. fscanf (p_fichier, "%s ", nom_personne);
37. printf ("Nom : %s\n", nom_personne);
38. }
39. fclose(p_fichier);
40.
41. return 0;
42. }
2.10 Allocation de mémoire
2.10.1 La directive préprocessor #include
63
2.10.2 L’inclusion des header d’une librairie standard
EXEMPLE
#define HELLO "Bonjour monsieur Dupont, comment allez-vous\?"
64
2.10.1 Fonction sans paramètre
Une fonction sans paramètre d’entrée et sans paramètre de retour se déclare de la manière
suivante :
void MaFonction(void) ; // Fonction sans paramètre
MaData++ ;
}
Remarque :
Une fonction avec des paramètres d’entrée et sans paramètre de retour se déclare
de la manière suivante :
MonParam1++ ;
65
int MaFonction (int MonParam1, int MonParam2)
int MonIntLocal ;
return(MonIntLocal) ;
EXEMPLE
}; //
66
67
EXERCICES FACILES
EXERCICE 1
Écrire un programme qui saisit deux entiers et affiche leur produit. Modifie ensuite le
programme afin de saisir deux réels.
LANGAGE PASCAL LANGAGE C
program Integer_1 ; /* Inclusion de la bibliothèque standard */
/* Déclaration des deux entiers */ # include <stdio.h>
Var x1, x2, x3 : Integer ; /* programme principal */
BEGIN /* Affichage du produit des deux entiers */
/* Lecture du premier entier */ void main ()
READLN (x1) ; {/* Déclaration des deux entiers */
/* Lecture du deuxième entier */ int x1, x2 ;
READLN (x2) ; /* Lecture du premier entier */
/* Calcul du produit des deux entiers au clavier */ printf (" valeur du premier entier : ") ; scanf ("%d", & x1) ;
X3 := x1*x2 ; /* Lecture du deuxième entier */
/* Affichage du produit des deux entiers au clavier */ printf (" valeur du deuxième entier : ") ; scanf ("%d", & x2) ;
WRITELN (‘ le produit de’, ‘’, x1, ‘’, ‘et’, x2, ‘’, ‘est’,’’, x3) ; /* Affichage du produit des deux entiers au clavier */
END. printf (" produit de %d et %d = %d", x1, x2, x1*x2) ;
return 0;
}
LANGAGE C++
cin >> X1 ;
- LANGAGE C
/* Lecture du deuxième entier */ Remplacer int par float
cin >> X2 ;
Dans le scanf remplacer
/* calcul du produit des deux entiers */
X3=X1*X2 ;
"%d" par "%f"
/* Affichage du produit des deux entier */ - LANGAGE C++
cout << X3 << endl ; Remplacer int par float
return 0;
}
68
EXERCICE 2
Ecrire un programme permettant d’échanger deux entiers et de les afficher avant et après l’échange.
LANGAGE
program CHANGE ; PASCAL
/* Affichage du premier entier avant échange */ printf (" valeur du premier entier : ") ; scanf ("%d", & x1) ;
WRITELN (‘ le premier entier avant échange est x1 = ’, ‘’, x1) ; /* Lecture du deuxième entier */
/* Affichage du deuxième entier avant échange */ printf (" valeur du deuxième entier : ") ; scanf ("%d", & x2) ;
WRITELN (‘ le deuxième entier avant échange est x2 = ’, ‘’, x2) ; /* Affichage du premier entier avant échange */
/* Echange des deux entiers */ printf (" premier entier avant est x1= %d ", x1) ;
/* Affichage des deux entiers après échange */ printf (" deuxième entier avant est x2= %d ", x2) ;
WRITELN (‘ après échange ’, ‘’, ‘x1 =’, ‘’, x1, ‘’, ‘et x2 =’, ‘’, x2) ; /* Echange des entiers */
int main ()
NB : L’algorithme de
{int x1, x2, Echange ; changement (inversement)
/* Lecture des entiers x1 et x2 */
cout << " Après échange x1 et x2 sont : " << x1 << " et "<< x2<< endl; étudiants en sciences
return 0;
} 69 informatique.
EXERCICE 3
Ecris un programme qui qui affiche le code ASCII des lettres et des chiffres sous la forme suivante :
Caractère = A code= 65 code hexa= 41 Caractère = 1 code= 49 code hexa= 31
Caractère = B code= 66 code hexa= 42 ……
…… Caractère = 9 code= 57 code hexa= 39
{Afficher le code ASCII de chaque caractère} /* Boucle sur tous les caractères majuscules */
WRITELN (‘ cComt : ‘, ‘’,’code ASCII :’,’’, Ord (cCompt)) ; for (cC = ‘A’ ; cC<=’B’ ; cC++) ;
{Boucle sur tous les caractères numérique de 1 à 9} /* Afficher le code ASCII et hexa de chaque caractère */
for cCompt := ‘1’ to ‘9’ do ; printf ("%c code ascii %d code hexa %x\n", cC, cC, cC) ;
return 0;
}
70
EXERCICE 4
LANGAGE PASCAL
LANGAGE C
program parityy ;
/* Inclusion de la bibliothèque standard */
{Déclaration de l’entier}
# include <stdio.h>
Var parity : Integer ;
/* programme principal */
BEGIN
void main ()
{Saisie de l’entier}
{/* Déclaration de l’entier */
WRITELN (‘Entrez un entier’ ) ; READLN (parity) ;
int parity ;
{Teste de la parité de l’entier}
/* Saisie de l’entier */
If parity mod 2 =0 then
printf (" Entrez un entier") ; scanf ("%d", parity) ;
WRITELN (‘Le nombre saisi est pair’)
/* Si le reste de la division par 2 est nul */
else
if (parity%2)
WRITELN (‘Le nombre saisi est impair’) ;
printf ("entier pair") ;
END.
LANGAGE C++ /* Si le reste de la division par 2 est non nul */
int parity ;
/* Saisie de l’entier */
cout << " Entrez un entier" << endl ; cin >> parity ;
if (parity%2)
else
return 0;
}
71
EXERCICE 5
72
EXERCICE 6
Ecris un programme qui affiche le plus grand et le plus petit d’une suite d’entiers sait.
Les nombres saisis ne sont pas conservés en mémoire la suite se termine avec 0
73
EXERCICE 7
Ecris un programme qui détermine tous les diviseurs d’un entier saisi plus grand que 1
74
EXERCICE 8
Ecris un programme qui stimule une opération de division entière. Entre deux entiers positifs a et b saisis
au clavier. On divise le plus grand par le plus petit sans utiliser l’opérateur /. Affiche le quotient et le reste.
76
EXERCICES SUR LES VARIABLES COMPOSÉES
EXERCICE 10
Ecris un programme qui permet de déclarer et d’initialiser un tableau d’entier de 10, dont certaines valeurs
sont nulles. Le programme doit parcourir le tableau et imprimer les indexes des valeurs nulles (sans utiliser
utiliser une variable de type entier).
80
EXERCICE 14
Ecris un programme qui permet d’écrire dans un fichier texte et de lire le contenu de ce fichier.
81