Académique Documents
Professionnel Documents
Culture Documents
Progression
1.7.Les tableaux
1.7.1. le tableau à une dimension
1.7.2. tri d’un tableau à une dimension
1.7.3. le tableau à deux dimensions
1.9.les fichiers
1.9.1. introduction
1.9.2. définition et déclaration
1.9.3. codage des informations dans le fichier
1.9.4. méthode d’accès
1.9.5. manipulation des fichiers
1.1. Introduction
L'ordinateur effectue des traitements sur des données. Mais celui-ci ne serait capable de rien si quelqu'un (le
programmeur en l'occurrence) ne lui avait fourni la liste des actions à exécuter. Cette description doit être faite
de manière non ambigüe. Le programmeur se sert de l’algorithmique pour décomposer un problème en
problèmes plus simples afin de les résoudre en les adaptant au langage de son Choix.
En d’autre terme un algorithme est l’énoncé d’une suite d’opérations permettant de donner la réponse à un
problème.
Le programme ne sera que la traduction de l'algorithme dans un langage de programmation, un langage plus
simple que le français dans sa syntaxe, sans ambiguïtés, que la machine peut utiliser et transformer pour
exécuter les actions qu'il peut décrire : Pascal, C, Java, Visual Basic sont des langages de programmation.
Le mot algorithme provient du nom d'un célèbre mathématicien arabe de la première moitié du IXe siècle:
Muhammad ibn Musa al Khuwarizmi et défini par l’encyclopédie universelle comme suit :
" Un algorithme est une suite finie de règles à appliquer dans un ordre déterminé à un nombre fini de données
pour arriver, en un nombre fini d'étapes, à un certain résultat, et cela indépendamment des données. "
Cependant en informatique un algorithme est donc une séquence d’étapes de calcul qui transforment l’entrée
en sortie.
La résolution d'un problème passe par toute une suite d'étapes :
Énoncé du problème
Niveau de
l’homme Algorithme
L’algorithme peut se redéfinir comme une machine logique développant des actions, admettant des données
en entrée et fournissant des résultats en sortie.
Problème
Analyse Algorithme
Traduction Programme
Exécution Résultat
et est définie comme des séquences d’instructions qui permettent de donner des ordres à un ordinateur.
Elle sert à développer des applications, à effectuer des calculs complexes, à automatiser des tâches
récurrentes.
Exemple :
Algorithme salutation
Début { Affiche Bonjour à l'écran }
Ecrire ('bonjour tout le monde')
Fin.
2.2.2. La constante
Certaines données sont fixes tout au long du problème. Ce sont les caractéristiques statiques du problème
ou encore des constantes.
Les constantes seront précédées du mot CONST afin de les distinguer des variables.
La déclaration d’une constante doit être suivie de son affectation :
Syntaxe :
CONST TYPE :nomconstante valeurdelaconstante
Exemple :
CONST Reel : Pie 3,14
2.2.3. Variable
Les variables sont des objets manipulés ( modifiables) par les algorithmes.
Elles possèdent 3 caractéristiques de base: son nom (identificateur), son type et sa valeur
Exemple :
entier : nombre
réel : nombrereel (déclaration de variables)
caractere : A, B, C
Chaine de caractere : nom, prenom, ville
réel : g = 9.81 (déclaration de constante)
Remarque :
Pour utiliser une variable ou une constante, il faut d’abord la déclarer.
il est possible d’attribuer une valeur initiale à une variable au moment de sa déclaration.
Remarque :
Un identificateur est une suite de caractère commentant par un caractère alphabétique ;
Tous les caractères ont le même niveau d’écriture (pas d’indice ni d’exposant) ;
Choisir des identificateurs significatifs ;
Choisir des identificateurs facilement prononçables ;
Eviter les abréviations non courantes.
3.1. Lecture
Nous pouvons transmettre des informations (données) à notre programme en faisant appel à des
instructions de lecture utilisant des périphériques de communication (le clavier).
Ces instructions permettent à l’utilisateur de rentrer des valeurs au clavier lesquelles seront utilisées par le
programme. Cette opération est la lecture.
Instruction lire (A) ou saisir A signifie mettre dans la case A la valeur présente sur l’organe d’entrée de
la machine c'est-à-dire affecter à la variable A la valeur tapée au clavier.
Au moment de l’exécution, il faudrait fournir à la machine la valeur de A
syntaxe :
lire variable
Exemple :
Algorithme lecture
Reel : x1, x2
Debutalgo
Ecrire( 'donner le premier réel')
Lire ( x1)
Ecrire 'donner ledeuxième réel'
Lire ( x2)
Ecrire ('deux réels fournis sont :', x1et x2)
Finalgo
4. Quelques primitives
4.1. L’affectation
L’affectation est l’opération consistant à ranger ou à attribuer une valeur à une variable (un objet).
Syntaxe :
Variable valeur
On lit « variable reçoit valeur » et qui signifie que l’on mémorise la valeur à un endroit nommé variable.
Exemple :
somme 500
somme somme+500
5.1.1. La séquence
5.1.2. L’alternative
L'alternative est une structure qui permet l'exécution d'une action ou d'une séquence d'actions à partir du
moment où une condition est vérifiée c’est à dire si une certaine condition est réunie.
5.1.2.1. condition SI
Le test si est la forme d'alternative la plus simple: si condition est vérifié on exécute action. Si la condition
n’est pas vérifiée alors action n’est pas exécutée.
Syntaxe :
SI condition Alors action FINSI
Exemple :
Algorithme valeur_absolue
(* Ce programme calcule la valeur absolue d'un nombre donne par un utilisateur. On utilise deux conditionnelles.*)
Reel : nombre, valeurabsolue
Debutalgo
Ecrire ('De quel nombre voulez-vous la valeur absolue ?')
nombre’
Si (nombre >= 0) alors valeurabsolue nombre
Si (nombre < 0) alors valeurabsolue - nombre
Ecrire ('La valeur absolue de ',nombre,' est ',valeurabsolue)
Finalgo
Chacune des séquences d'instructions d'un SI condition Alors action FINSI peut contenir des
SI condition Alors action FINSI. On dit alors que les structures sont imbriquées.
Si la condition est vraie, les instructions dans action1 sont exécutées. Dans le cas contraire, ce sont les
instructions dans action2 qui sont exécutées.
Le mot SINON indique où se termine la première séquence d'instructions et où commence la seconde.
KOFFI K Yves Professeur à l’INP-HB Page 11
Cours d’algo
Exemple :
Un client achète un article dans un surper marché. Après saisie du prix à payer et de la somme versée par le
client, afficher la monnaie à rendre au client si celle-ci est positive.
Algorithme monnaie_à_rendre
Entier : prix, sompayée, monnaie déclaration de variables
Debutalgo
ecrire (‘Saisir le prix de l’article ’ )
lire (prix)
ecrire (‘saisir la somme à payer ’ ) saisie
lire (sompayée )
monnaie sompayée – prix syntaxe de décrémentation
si monnaie >=0 alors
debut
ecrire (‘La somme à rendre est’ , monnaie)
fin syntaxe de l’instructuin +affichage
sinon
debut
ecrire (‘ La somme payée est insuffisante ’ )
fin
finalgo
Remarque : la partie sinon n'est pas obligatoire. Quand elle n'existe pas et que la condition n'est pas vérifiée,
aucun traitement n'est réalisé. Dans ce cas on a :
Syntaxe
SI condition alors
action1
FINSI
Exemple :
Algorithme test_nombre
Entier : nombre déclaration de variables
Debutalgo
ecrire(‘’Donnez un entier positif : ’’) ;
lire nombre ;
si nombre>=0 alors
selonque nombre
debut
0 : ecrire(‘’le nombre saisie est nul’’)
1 : ecrire(‘’le nombre saisie est un’’)
2 : ecrire(‘’le nombre saisie est deux’’)
sinon
ecrire( ‘’Le nombre saisi est supérieur à deux’’)
finselonque
finalgo
Exemple :
Ecrire un algorithme qui permet de saisir l’âge d’un individu au clavier puis l’afficher à l’écran en précisant
les messages selon les tranches d’âge suivant :
Moins de 17 ans, tu es encore mineur,
à 18 ans « tu as atteint la majorité ». Entre 60 et 99 ans « vous êtes du troisième âge » et dans un autre cas
autre que les âges précités, « vous êtes d’un autre âge ».
Algorithme selonque1
Entier: age
Debutalgo
Ecrire ('Entrez votre âge : ')
Lire (Age)
selonque age
0..17 : Ecrire ('Tu es encore mineur...')
18 : Ecrire('La majorité atteinte !');
18..59 : ecrire (‘Vous être maintenant adulte’)
60..99 : Ecrire ('Vous êtes du troisième âge !!!')
Defaut : { en option }
Ecrire('Vous êtes d''un autre âge...')
Finselonque
finalgo.
Exemple :
Ecrire l’algorithme permettant la saisie par l’utilisateur la somme de nombres N(20)premiers entiers
positifs.
Algorithme somme_premierentier
Entier : nombre, som , i déclaration de variables
Debutalgo affectation
som 0
ecrire (‘Calcul de la somme des N premiers entiers positifs ‘) syntaxe de l’instruction
ecrire (‘saisier le nombre positif ’ ) écriture et de lecture
lire (nombre)
pour i de 1 à nombre faire
debut syntaxe de l’instruction
som som + i pour
finpour
ecrire (‘ somme= ’ , som) affichage
finalgo
Si la condition est vraie, les instructions dans actions sont exécutées. Puis, on retourne tester une nouvelle
condition. Dans le cas contraire (condition bascule à faux), l'itération est terminée.
On dit alors que l'on sort de la boucle. La condition est toujours évaluée avant de faire le traitement (la
condition est d’abord testée). Donc, si la condition n'est jamais vraie, le traitement n'est jamais effectué.
Syntaxe :
TANT QUE condition
actions
FINTANT QUE
Exemple:
Ecrire l’algorithme permettant la saisie par l’utilisateur d’une série de nombres entiers positifs en utilisant
la structure répéter. La saisie prend fin lorsque la somme des nombres devient supérieure ou égale à 100.
algorithme somme
Entier : nombre, som déclaration de variables
Debutalgo affectation
som 0
repeter
debut
repeter
ecrire (‘saisier un nombre entier’) syntaxe de l’instruction
lire (nombre)
jusqu’à (nombre >= 0)
som som + nombre
jusqu’ à (som >=100)
fin
ecrire ‘ somme= ’ , som affichage
finalgo
Les fonctions
Le corps du programme s’appelle alors la procédure principale, et ces groupes d’instructions auxquels on a
recours s’appellent des fonctions et des sous procédures. Le programme qui utilise un sous-programme est
appelé programme appelant.
Les écritures de procédures et de fonctions ont principalement deux avantages.
Elles permettent de rendre les algorithmes plus lisibles, et donc plus faciles à comprendre, à corriger, à
modifier. Le programme devient modulaire et il suffit de faire une seule modification au bon endroit, pour que
cette modification prenne effet dans la totalité de l’application.
Ces programmes ajoutent la notion de passage de paramètres.
On appelle paramètre formel ou paramètre réel, les données identifiées lors de la déclaration de la procédure
(fonction). Il est une variable locale particulière.
On appelle paramètre effectif ou argument, les données passées lors de l’activation (exécution) de la
procédure (fonction). Il peut varier d’un appel à l’autre. Ils doivent être le même nombre de paramètre, de
même type et rangés dans le même ordre que les paramètres formels.
Écrire un programme qui permet d’échanger deux x et y à l’aide d’une procédure qui fait l’échange de ces
nombres.
Exemple:
algorithme echanger;
entier : x, y, tampon
procedure Echange { Déclaration de la procédure Echange }
debut {début du corps de la procédure }
tampon x;
x y;
y tampon;
fin
debutalgo {Programme principal }
x 3;
y 4;
ecrire (‘Les deux nombres sont :’, x, ' ', y);
Echange; {1er appel de la procedure }
ecrire (‘Les deux nombres sont :’, x, ' ', y);
Echange; {2eme appel de la procedure }
ecrire (‘Les deux nombres sont :’ , x, ' ', y);
finalgo.
On peut aussi créer des procédures paramétrées c'est-à-dire qu’elles reçoivent des variables comme
paramètres.
Ces paramètres sont de deux types.
Les paramètres de type VALEUR : ils contiennent une valeur qui sera utilisée dans la procédure.
Passage par valeur : à l'appel, le paramètre est une variable ou une expression.
C'est la valeur qui est transmise, elle sert à initialiser la variable correspondante dans la procédure.
Syntaxe :
algorithme nom_de_l’algorithme
Procedure nom_de_procedure ( noms_de_variables : types )
debut
...
fin
debutalgo
nom_de_procedure ( noms_d_autres_variables_ou_valeurs )
finalgo.
Exemple :
algorithme echanger;
reel: a, b
Procedure echange ( x , y : réel)
: reel: tampon
debut
tampon x
x y
y tampon
fin
debutalgo {Programme principal }
a 3
b 4
echange(4,8) {1er appel de la procédure}
ecrire (‘Les deux nombres sont :’, a, ' ',b)
echange(a, b) {2eme appel de la procédure}
ecrire (‘Les deux nombres sont :’ , a, ' ',b)
finalgo
Exemple:
algorithme echanger
reel; a, b
Procedure echange (var x, y : reel)
reel; tampon
debut
tampon x
x y
y tampon
fin
debutalgo {Programme principal }
ecrire('donner deux réels');
lire(a,b)
ecrire(‘Les deux reels sont’, a, b) {affichage avant échange}
echange(a,b
ecrire(‘Les deux reels échangés sont’, a, b) {affichageaprèst échange }
finalgo.
Syntaxe :
algorithme nom_procedure
type fonction nom_fonction { déclaration de variables locales }
debut
...
nom_fonction une_valeur; { valeur de retour de la fonction }
fin
Exemple :
algorithme classer ;
reel: a, b, c
reel fonction max (x, y : reel) { définition de la fonction }
debut
si x >= y alors
max x { valeur de retour }
else
max =y
fin
debutalgo
ecrire('Entrez deux valeurs : ');
lire(a,b);
c max(a,b); { appel de la fonction }
ecrire('Le plus grand est ',c)
finalgo
Exemple:2
fonction factorielle (k : entier) : entier
fact : entier
debutalgo
si k= 0 alors fact 1
sinon fact factorielle(k-1)* k
finsi
retourner fact
finalgo
Exemple :
Réel : noteetudiant [0..9] ; /* déclaration du nom du tableau permettant le stockage de 10 nombres réels */
Ou
Syntaxe2
NomTableau : Tableau [indice] de type
Exemple :
Tab : Tableau [0..n] de caractères ; /*déclaration des tableaux*/
noteetudiant : Tableau [1..10] de réels ;
Remarque :
L'indice maximum indique le nombre maximum d'éléments. Dépasser ce nombre provoque une erreur. Tous
les éléments ont toujours le même type.
KOFFI K Yves Professeur à l’INP-HB Page 22
Cours d’algo
En langage C, l’indice commence toujours par 0 mais dans d’autres langages tel que Pascal on peut
commencer par 1.
Exemple1 :
Ecrire un programme qui lit une liste de 6 notes à l’aide d’n tableau et affiche les notes saisies.
algorithme tableau
Entier : i ; {déclarations des variables}
note : tableau [1..6] de réel {déclaration du tableau}
debutalgo
repeter
pour i de 1 à 6 faire
debut
ecrire('saisir les 6 notes ')
lire(note[i])
finPour
jusqu’à (nbre compris entre 0 et 20)
pour i de 1 à 6 faire
debut
ecrire('les 6 notes saisies sont : ')
ecrire(note[i])
finPour
finalgo
exemple2 :
Ecrire un programme qui lit une suite de N notes (10 au maximum), calcule la moyenne puis affiche les notes
et la moyenne à l’aide d’n tableau.
algorithme moyenne
Entier : nbre, i, somme {déclaration des variables}
Reel :, moy,
note : tableau [1..10] de réel {déclaration du tableau}
debutalgo
repeter
ecrire ('Saisir le nombre de notes (10 maxi)?')
lire(nbre)
jusqu’à (nbre compris entre 0 et 20)
{saisie des notes et calcul de la somme}
somme 0
pour i de 1 à nbre faire
debut
ecrire(i,'è note ')
lire(note[i])
{ calcul de la somme}
somme somme + note[i]
fin
{ affichage des6 notes}
pour i de 1 à nbre faire
debut
ecrire('les 6 notes saisies ')
ecrire(note[i])
finpour
{calcul et affichage de la moyenne}
moy somme / nbre
ecrire('Moyenne est: ',moy)
finalgo.
8 1 7 5
1 8 7 5
1 5 7 8
1 5 7 8
Exemple :
Ecrire un programme qui affecte des valeurs entières saisies au clavier à un tableau de 8 entiers, trie le tableau
par ordre croissant et l'affiche par la méthode de tri de sélection.
algorithme tri_selection
Entier : i ,j; déclaration de variables
val : tableau[1..8] d’entiers; /* 8 valeur à trier */
Entier : tampon ; /* pour l’échange de 2 valeurs */
Debutalgo
ecrire ‘Donner 8 valeurs entières ‘
pour i de 1 à 8 faire /* lecture des valeurs*/
debut
lire val[i ]
finpour
pour i de 1 à 7 faire /* passe toutes les valeurs sauf le dernier */
debut
pour j de i +1 à 8 faire /*comparaison de val[i ] avec tous ses suivants*/
debut
si (val[i ] > val[j] ) alors
debut
tampon val[i ]
val[i ] val[j ]
val[j] tampon
Finsi
finpour
finpour
ecrire ‘Voici nos valeurs triées par ordre décroissent ‘
pour i de 1 à 8 faire
debut
ecrire (val[i ] ) /* affichage*/
finpour
finalgo
Ecriture de l’algorithme :
On suppose qu’on a un tableau de n +1éléments (n>=1)
Algorithme tri_bulle
Entier : i, temp /*indice de parcours*/
Tab : tableau[1..8] d’entiers
Booleen : yatrie
Debutalgo
yatrie vrai
Tant Que yatrie =vrai
yatrie faux
Pour i0 à n-1 faire
Si tab[i] >tab[i+1] alors
temp tab[i]
tab[i] tab[i+1]
tab[i+1] temp
Yatrie vrai
finsi
finpour
fintantque
finalgo
Exemple :
matrice1[0..10, 0..10] de bytes
matrice1[2..5, 1..10] d’entiers
Algorithme tableau_des_notes
Entier : i ,j ;
note = tableau [1..4,1..3] d’entiers /* déclaration de variable* /
Debutalgo
pour i de 1 à 4 faire
debut
pour j de 1 à 3 faire
debut
ecrire ("Saisir la note " , i, " ; ", j )
lire note[ i,j] /* lecture */
finpour
finpour
pour i de 1 à 4 faire
debut
pour j de 1 à 3 faire
debut
ecrire ‘Saisir la note ‘ , note[i, j] /* écriture*/
finpour
finour
finalgo
8. Enregistrements
Une structure d’enregistrement est une structure de données ou une collection d’objet de types différents.
Les objets sont appelés les champs de la structure. L’intérêt des structures est de regrouper des variables qui
peuvent être de types différents sous un seul nom pour les manipuler facilement.
8.1. Déclarations
On déclare une catégorie de variable : un type d’enregistrements ou structure d’enregistrements puis on
utilise ce type pour déclarer les variables de la structure.
Syntaxe
identifiant_du_type = enregistrement
type_premier_champ : identifiant_premier_champ
type_deuxième_champ : identifiant_deuxième_champ
........
Finenregistrement
exemple:
Type Produit = enregistrement
Entier : Numero
Entier : quantite / * déclaration de type d’enregistrement contenant des
Reel : prix champs de différents types */
Finenregistrement
Une fois le type d’enregistrement déclaré, on peut déclarer les variables de ce type.
Lire ou écrire un enregistrement consiste à lire ou écrire chaque variable de champ qui le compose.
L'accès aux champs se fait avec un point.
Pour accéder à un champ de la variable enregistrement, nous utiliserons l'expression ci-dessous.
Syntaxe :
KOFFI K Yves Professeur à l’INP-HB Page 29
Cours d’algo
identifiant_variable.identifiant_champ
Exemple:
Ecrire ‘ Saisir le nom de la personne’
Lire etudiant.Nom
Ecrire ‘ Saisir le prenoms de la personne’
Lire etudiant.Prenoms
Ecrire ‘ Saisir le l’age de la personne’
Lire etudiant.Age
Ecrire ‘ Saisir la fonction de la personne’
Lire etudiant.Fonction
Exemple :
Nous souhaitons implémenter l’enregistrement de type rationnel. Pour cela, nous allons utiliser un type
enregistrement composé de deux champs de type entier : numérateur et dénominateur.
Algorithme nombre_rationnel
Type rationnel = enregistrement
entier : numerateur /* déclaration de type d’enregistrement et les champs*/
entier : denominateur
finenregistrement
entier : a, b
rationnel : nouveauRationnel /* déclaration de la variable enregistrement*/
Debutalgo
si b=0 alors
debut
ecrire ’le dénominateur ne peut être nul’
finsi
sinon
debut
nouveauRationnel.numerateur ← a
nouveauRationnel.denominateur ← b
finsinon
ecrire’ Le nombre rationnel saisi est :’, a / b /* affichage */
finalgo