Cours
Cours
Cours
Cours d’Algorithmique et
structures de données
*** (Semestre 01) ***
chapitre 1 : introduction générale
1-Définition d'informatique :
Le mot informatique a été créé en 1962 par Philippe Dreyfus. Il s’agit d’un néologisme de la
langue française fait de la contraction des deux mots « automatique » et « information ».
comme son nom l'indique, permet d'automatiser l'information que nous manipulons. Cette
informatisation permettra de réaliser un gain considérable en temps et en effort.
On peut voir l’informatique selon deux aspects : matériel (hardware) et logiciel (software).
2- Définition d'ordinateur :
Un ordinateur se définit comme une machine de traitement de l’information. Il est
normalement capable d’acquérir et de conserver des informations, d’effectuer des
traitements et restituer les informations stockées.
2- Histoire de l'informatique :
Si l'informatique en tant que telle n'existe que depuis quelques dizaines d'années, ses
origines sont issues de nombreux domaines et remontent pour certaines à très longtemps.
Les ancêtres des ordinateurs reviennent aux machines et instruments purement mécanique
qui aident à faire des calcule tel que :
Pascaline (1642) : crée par Blaise Pascal capable de faire l'addition et la soustraction
amélioré en 1673 par Leibniz afin de faire la multiplication et la soustraction.
Vers 1936, les premiers calculateurs binaires ont apparut : le Bell Labs Relays
Computer de Stibitz (1937), machine qui utilisait des relais électromécaniques, puis le Z1
(1938) de Zuse (en Allemagne), Mark I(1943) d'IBM (pèse 5 tonnes et mesure 17 m de long
et 2,5 m en hauteur).
La fin des années 70, puis les années 80 ont vu un essor particulièrement
remarquable de
Le mot algorithme vient du nom du mathématicien arabe du 9ème siècle Al Khou Warismi.
Son nom, déformé par la latinisation, a fourni le terme « algorithme ».
Son apport en mathématiques fut tel qu’il est également surnommé « le père de l’algèbre »,
En effet, il fut le premier à répertorier de façon systématique des méthodes de résolution
d’équations en classant celles-ci.
Exemples d’algorithmes :
- Universel (Général) : Il doit tenir compte de tous les cas possibles. Il traite le cas général
- Structuré :un algorithme doit être composé de différentes parties facilement identifiables.
• Déterministe : Dans des conditions d’exécution similaires (avec des données identiques), il
Programme exécutable (code binaire) : programme écrit en langage machine (en binaire)
directement exécuté par la machine sans l'intervention d'un autre programme. il suffit de le
lancer.
programmation.
Le compilateur peut indiquer une erreur, qui empêche de finaliser la compilation. Dans
ce cas-là, il n’est pas possible de créer le fichier exécutable correspondant à ce programme. Il
est donc inutile de tenter d’exécuter le programme si la compilation a échoué.
Mots clés : sont des mots prédéfinis et réservés utilisés en programmation qui ont une
signification particulière pour le compilateur. Les mots-clés font partie de la syntaxe et ils ne
peuvent pas être utilisés comme identifiant.
Un identificateur : Un identificateur est un nom utilisé pour nommer (identifier) un élément
ou une entité d' un programme (ou d'un algorithme) que se soit : une variable, une fonction,
un programme, un algorithme. IL ne doit pas être un des mots clés.
Ce nom peut être composé de lettres et chiffres et doit obligatoirement commencer par une
lettre (pas un chiffre), et ne doit pas contenir de lettres de ponctuation, l’espace
en particulier.
Les commentaires :Un commentaire est un texte libre qui peut être étendu sur
un commentaire n’est pas pris en compte à la compilation. Autrement dit, il n’a aucune
influence sur l’exécution de l’algorithme.
a- L’entête : permet de donner un nom (un identificateur) à l’algorithme en utilisant le mot clé
"Algo"
b-La partie déclaration : pour définir (déclarer) tous les éléments nécessaires dont la
machine aura besoin (variables, constantes, modules ...) pour résoudre le problème.
c) Le corps de l’algorithme : contient les actions (les instructions) à exécuter pour résoudre
le problème. il est délimité par les mots clés ‘Debut’ et ‘Fin’
5- les données :
On distingue deux types de données manipulées par un algorithme:
- des objets qui peuvent varier durant le déroulement d'un algorithme : Variables.
Elle associe également ce nom à l'emplacement mémoire bien précis la où on stocke la valeur
de donnée manipulée.
Déclaration :
Toute variable utilisée dans un algorithme doit être déclarée avant le traitement. Ceci
consiste à indiquer son nom et son type pour que l'ordinateur lui réserve une case mémoire.
La déclaration se fait dans la partie déclaration de l'algorithme en utilisant le mot clé Variable
ou VAR.
Remarque : Il n’est pas nécessaire de répéter les mots clés ‘VAR’ pour chaque déclaration.
Exemple1 :
x : réel
lettre : caractère
trouve : booléen
Lorsque plusieurs objets sont de même type, nous pouvons les regrouper dans une même et
seule déclaration comme suit :
Var i, j : entier
n , x, y : réel
les constantes sont utilisées pour simplifier la programmation. Une constante reçoit sa valeur
au moment de sa déclaration et elle n’est pas modifiable. Après compilation d’un programme,
les constantes sont remplacées par leurs valeurs.
Déclaration :
la déclaration se fait dans la partie déclaration de l'algorithme en utilisant le mot clé Constant
ou CONST comme suit :
Exemple
CONST Pi = 3.14
Remarque : il n’est pas nécessaire de répéter les mots clés ‘CONST’ pour chaque
déclaration.
6- type de données:
Un type est un domaine de définition qui détermine l’ensemble des valeurs qu’un objet peut
prendre, sa représentation en mémoire d’un ordinateur ainsi qu’un ensemble d'opérations
pour le manipulé.
types de base :
Type entier :
Le type entier est l’ensemble des entiers relatifs, cependant il faudra signaler que si en
mathématiques cet ensemble est infini, sur un ordinateur les valeurs sont limitées par la
longueur des mots mémoires.
si le mot mémoire est sur 32 bits --> les nombre entiers sont dans l'intervalle[-2(16-1) , 2(16-1)]
Type réel : Le type réel est l’ensemble des nombres ayant une partie fractionnelle.
type caractère :
Les caractères sont un ensemble de symboles pouvant apparaitre dans un texte qui peuvent
être :
la machine ne manipule que des 0 et des 1; Dans les cas des caractères, on doit établir une
correspondance entre les élément de type caractère et une représentation binaire.
Dans ce cadre plusieurs standard de codage ont été proposés ( ASCII, IBM-PC, ISO-xxx, . .. ).
La norme ASCII à cet effet. Dans sa version de base, elle associe un code numérique à
128=27 caractères différents. Il s’agit principalement de lettres majuscules et minuscules,
de chiffres, de signes de ponctuation, et de caractères non-imprimables.
0 1 2 3 4 5 6 7 8 9 A B C D E F
000 NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI
001 DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US
004 @ A B C D E F G H I J K L M N O
005 P Q R S T U V W X Y Z [ \ ] ^ _
006 ` a b c d e f g h i j k l m n o
007 p q r s t u v w x y z { | } ~ DEL
Le type chaîne de caractères sera utilisé pour stocker des séquences finies de
caractères. Le nombre de caractères composant une chaîne de caractères est la
longueur de cette chaîne.
7- Les opérations de base
Un opérateur : est un signe utilisé pour effectuer une opération arithmétique ou logique (+,
- , *...).
Un opérande : est une donnée ou valeur entrant dans une opération (arithmétique ou
logique).
a- Opération unaire : est une opération qui ne nécessite qu'un seul opérande.
Les expressions :Une expression est une suite d’opérandes (variables, constantes,
fonctions) combinées par un ensemble d'opérateurs avec éventuellement un jeux de
Parenthèses ouvrantes et fermantes.
Les opérateurs arithmétiques : sont applicables sur des nombres (entier, réel).
ils sont utilisés pour comparer les valeurs de deux variables. Ils produisent un résultat
booléenne (vrai/faux).
Remarque :
Les entiers et les réels sont comparés selon l'ordre numérique usuel. Les caractères sont
comparés selon l'ordre déni par le code ASCI I : chaque caractère est codé par un entier
compris entre 0 et 255, appelé code ASCI I, et pour comparer deux caractères, on compare
leur code ASCI I. Dans ce code, les chiffres sont inférieurs aux caractères majuscules qui sont
eux-mêmes inférieurs au caractères minuscules.
7-4 Evaluation des expressions : une expression arithmétique ou logique est évaluée
en respectant l’ordre de priorité des opérateurs. La machine effectue un seul calcul à la fois,
de ce fait lorsqu’une expression contient plusieurs opérateurs de même priorité, l’opérateur le
plus à gauche est évalué en premier.
donc :
- Un opérande placé entre 2 opérateurs de priorités différentes sera lié à l’opérateur de priorité
la plus élevée.
- Un opérande placé entre 2 opérateurs de même priorité sera lié à l’opérateur se trouvant à
gauche.
Les parenthèses sont utiliser pour éliminer l’ambiguïté concernant l’ordre de réalisation des
opérations (peut même changer l'ordre d'évaluation).
Les expressions entre parenthèses sont évaluées en premier en commençant par les
parenthèses les plus intérieures.
Les expressions contenues entre parenthèses sont évaluées séparément, puis leur résultat
est traité comme un seul opérande.
Exemple :
variable ← valeur
Exemples :
Exemples :
X ← Y+1
Nombre ← Resultat * 2
permet d’introduire des données, venant de l’extérieur (via le clavier), dans des variables.
Lire (variable) ;
l’utilisateur saisie une valeur au clavier et valide par la touche entré. La valeur saisie est
cette instruction permet de généraliser l’algorithme (traiter le cas générale des données ) et
ces à l'utilisateur finale du programme de spécifier( d'introduire ) à chaque exécution la les
valeurs des données voulus.
permet d'afficher des résultat ou des simple message à l'utilisateur sur un périphérique de
sortie (l'écrans )
Syntaxe :
Ecrire(d)
Tel que: d peut être une constante , une variables, une expression ou une chaine de
caractère.
l’instruction Ecrire peut afficher plusieurs éléments en même temps (séparées par des
virgules) :
Exemple :
Ecrire ('la moyenne est ', moy) affiche le message la moyenne est suivie par la valeur de la
variable moy.
Algo Moyenne
Début
lire (x)
lire (y)
moy ← (x+y) / 2
Fin
9- Représentation d'un algorithme avec un organigramme :
un organigramme (ou algorigramme) permet de représenter graphiquement un algorithme, il
montre l'enchaînement des opérations et des décisions effectuées par un algorithme.
10 - Langage C
C est un langage de programmation impératif, de bas niveau. Inventé au début des années
1970 pour réécrire UNIX, C est devenu un des langages les plus utilisés. il est universel,
rapide et extensible.
[ directives au préprocesseur]
[ fonctions secondaires]
main()
instructions
fonction principale.
Bloc d'instructions : En C les blocs d'instructions sont délimitées par des accolades
- Sur un seul ligne en utilisant le signe // tous ce qui suit ce signe jusqu'à la fin de la ligne est
considérer comme commentaire
- Sur plusieurs lignes en utilisant /* pour exprimer son début et */ pour exprimer son fin
. En C en distingue 4 sous types d'entier: int, long, short, long et long long
ces tailles ne sont pas standardisées, elle dépendent de la machine, du système d’exploitation
et du compilateur. Ces tailles peuvent être trouvées en utilisant l’instruction sizeof(<type>). un
bit est réservé pour coder le signe, les autres bits codent la valeur absolue du nombre.
En C, nous avons le choix entre trois types de réels: float, double et long double
Le type caractère :
Le mot-clef char désigne un objet de type caractère. Un char peut contenir n'importe quel
élément du jeu de caractères de la machine utilisée. La plupart du temps, un objet de type
char est codé sur un octet ; Le jeu de caractères utilisé correspond généralement au codage
ASCII (sur 7 bits).
pression papier.
Remarque : En C il n'existe pas de type spécial pour les variables booléennes. Si l'utilisation
d'une variable booléenne est indispensable, on utilisera une variable de type int. Les
opérations logiques en C retournent toujours des résultats du type int : 0 pour faux et 1 pour
vrai.
Opérateurs Opération
+ Addition
- Soustraction
* Multiplication
/ Division (entière ou rationnel)
% Modulo (reste d'une div entire )
Opérateurs logiques:
Opérateurs Opération
! Négation logique
|| Ou logique
&& Et logique
En C : le type booléen est exprimé par les deux valeur entière 1 et 0 (1 exprime le vrai et 0
pour exprimer le faux).
Opérateurs Signification
== Egale à
!= Différent de
> Supérieur
< inferieur
>= Supérieur ou égale
< Inferieur ou égale
La valeur rendue est de type int (il n'y a pas de type booléen en C); elle vaut 1 si la condition
est vraie, et 0 sinon.
10-5 L'affectation :
l'affectation s'exprime par le signe =
variable = expression ;
exemples i = 5 ; x = a / b;
Exemples :
- il n’existe pas une partie dédiée à la déclaration des variables. Toutefois, toute variable doit
faire l’objet d’une déclaration avant d’être utilisée.
une valeur initiale peut être affectée à une variable lors de sa déclaration.
comme suit :
Exemple : int i = 1;
pour les expressions de la forme: var1 = var1 op (expr2) Il existe une formulation ()
équivalente: expr1 op= expr2
Exemple :
# define pi 3.14
main ( )
...
l' opérateurs ++ (ou --) peut être utilisés sous forme de préfixe (pré-incrémentation ) ou de
suffixe (poste-incrémentation) d'un opérande
Syntaxe : ++operand
l'opérande est incrémenté d'abord de 1 et la valeur résultante de l'opérande est utilisée dans
l'évaluation de l'expression.
Exemple:
i = 3;
j = ++i ; // j = 4
Syntaxe : operand++
la valeur actuelle de l'opérande (l'ancienne valeur) est utilisée dans l'expression, puis la valeur
de l'opérande est incrémentée de 1 .
Exemple :
i = 3;
j = ++i ; // j =4
En C pour lire une variable (introduire sa valeur de l'extérieur en utilisant le clavier) en utilise la
fonction scanf
La fonction scanf lit les caractères à partir de l’entrée standard, les interprète selon les
spécificateurs de conversion dans la chaine de caractère format et sauvegarde les données
d’entrée converties dans les paramètres Pi qui expriment les variables concernées, dont les
noms(les identificateurs des variables) doivent être précédés par le signe &
Exemple :
include <stdio.h>
main () {
int i ; float x;
L'écriture :
- du texte
- des spécificateurs de format ( un spécificateur pour chaque expression) tel que : %d, %f
la fonction prinf() remplace chaque spécificateur de format par la valeur de l'expression (ou
variable) correspondante passée en paramètre en respectant le format précis (exactement à
l'emplacement d'occurrence de la spécificateur de format).
Remarque :
- Il est indispensable d'inclure la bibliothèque stdio.h afin d'utiliser les deux fonctions scanf et
printf.
- il existe d'autres fonctions qui permet de faire la lecture ou l'écriture des caractères ou des
chaines de caractères tel que : getc, putc, get et put.
Chapitre 3
Exemple :
Écrire un algorithme qui demande un entier (A) à l’utilisateur, teste si ce nombre est positif
(A≥ 0) et affiche "positif".
Solution :
algorithme positif ;
debut
var A : entier ;
ecrire ("entrer la valeur de A ") ;
lire (A) ;
si (A ≥ 0) alors
ecrire (" positif ") ;
finsi ;
fin.
1
Les structures conditionnelles
En algorithmique En langage c
si condition alors if (condition)
{
instructions 1 instructions 1;
}
sinon else
{
instructions 2
instructions 2;
finsi ; }
Organigramme correspondant
Exemple :
Écrire un algorithme qui demande un entier (A) à l’utilisateur, teste si ce nombre est positif
(A ≥ 0) ou non, et affiche "positif" ou "négatif".
Solution :
algorithme positif ;
debut
var A : entier ;
ecrire ("entrer la valeur de A ") ;
lire (A) ;
si (A ≥ 0) alors
ecrire ("positif ") ;
sinon
ecrire ("négatif ") ;
finsi ;
fin.
2
Les structures conditionnelles
En algorithmique En langage c
si (condition) alors if (condition)
{
instructions 1 ;
instructions 1 ;
sinon }
si (condition 2) alors else
instructions 2 ; if (condition2)
sinon {
instructions 2 ;
}
Organigramme correspondant
Exemple :
Écrire un algorithme qui demande un entier à l’utilisateur, teste si ce nombre est strictement
positif, nul ou strictement négatif, et affiche ce résultat.
3
Les structures conditionnelles
Solution :
algorithme positif ;
var A : entier ;
ecrire ("entrer la valeur de A") ;
Lire (A) ;
si (A ≥ 0) alors
ecrire ("positif") ;
sinon
si (A = 0) alors
ecrire ("nul" ) ;
sinon
ecrire ("négatif" ) ;
finsi ;
finsi ;
fin.
Remarques :
- Le sélecteur doit être de type entier ou caractère et doit avoir une valeur avant d’être impliqué
dans le Selonque.
- Selecteur et valeur1, valeur2, …, valeurN doivent être du même type.
- Les instructions relatives aux valeurs peuvent comporter également d’autres structures
conditionnelles.
- Valeuri peut être un ensemble des valeurs qui seront séparées par des virgules ou intervalle
des valeurs (borne_inf .. borne_sup).
- Si expression n'est égale à aucune des valeurs allant de valeur1 à valeurN, c'est le bloc Sinon
qui est exécuté. Ce bloc est optionnel.
4
Les structures conditionnelles
Exécution du selonque
On suppose que la valeur du sélecteur est connue avant de commencer le Selonque (soit par
une lecture, soit par une affectation). À partir de cette valeur, on va s’aiguiller directement au
traitement (instructions) correspondant à cette valeur puis l’exécuter. À la fin de l’exécution,
on continuera la suite de l’exécution du programme à partir de la 1ère instruction qui vient après
finselonque. Dans le cas où la valeur du sélecteur n’existe pas parmi les choix possibles, on
exécutera le traitement Sinon du Selonque.
Organigramme correspondant
En algorithmique En langage c :
aller à <etiq> goto <etiq>;
<etiq> : <etiq> :
. .
. .
5
Les structures conditionnelles
Exemple :
algorithme branchement ;
var a, b: entier ;
debut
lire (a) ;
1 : b a ;
si b mod 2 = 0 alors
aller à 2 ; // branchement conditionnel (branchement appartenant au bloc si)
finsi ;
a a+1 ;
aller à 1 ; // branchement inconditionnel (branchement n’appartenant pas au bloc si)
2 : ecrire ("c’est pair") ;
Fin.
Remarque :
Un branchement en lui-même n’est pas très intéressant. La pratique des informations a montré
que l’utilisation des goto donne souvent des programmes non maintenables (impossible à
corriger ou modifier). Les problèmes qu’ils posent ont amené les programmeurs expérimentés
à ne s’en servir qu’exceptionnellement.
6
chapitre 4: Structures itératives (les boucles )
1- Introduction :
Pour résoudre un problème, Il est souvent nécessaire de répéter plusieurs fois le même
traitement. Par exemple en délibération le calcule de la moyenne se répète pour chaque
étudiant.
Une boucle permet d’exécuter plusieurs fois consécutives un ou plusieurs instructions (bloc
d'instruction).
On désigne par le mot Itération : la réalisation d'un cycle complet de la boucle; en d'autre
terme elle indique qu’on exécute une fois le bloc d'instructions de la boucle(le traitement à
répéter).
2- La boucle Tantque :
La boucle Tantque permet de répéter l’exécution d’un bloc d’instructions tant qu’une
condition est vraie. La condition est exprimée par une expression logique ou booléenne.
Syntaxe en Algorithmique :
instructions
finTantque
Syntaxe en C :
while (condition)
instructions
}
Principe de fonctionnement (Déroulement) :
1- évaluation de la condition;
La boucle Tantque est très utile lorsque le nombre d’itération n’est pas connu à l’avance.
Exemple : Soit l’exemple d’algorithme suivant, qui demande un nombre entier. Si ça valeur
est inférieur de 100 alors on double ça valeur. à la fin en affiche ça valeur finale.
En algorithmique En C
Algo Double #include <stdio.h>
Var n: entier Main()
Début {
lire(n) int n;
Tantque (n < 100 ) Faire scanf ("%d", &n);
n ←i * 2 while(n < 100)
FinTantque {
Ecrire (n) n = n * 2;
Fin }
Printf ("%d", n );
}
Supposant que l'utilisateur à introduire la valeur 40 dans ce cas l'algorithme exécute deux
itérations. On peut pas faire la troisième itération car la condition est non satisfaite(160 >100)
Le bloc d'instructions est exécuté au moins une fois contrairement à la boucle Tanque dont
on peut ne pas exécuter sa bloc d'instruction (si la condition dès le début est non satisfaite).
Syntaxe En Algorithmique :
Répéter
instructions
jusqua (condition)
Principe de fonctionnement :
la condition testée à la fin c'est une condition pour sortir de la boucle (on répète le traitement
jusqu' ce que la condition est satisfaite) (même principe en Pascal et en Basic).
Syntaxe En C :
do
instructions
} while (conditions);
Principe de fonctionnement en C :
le même principe est appliqué sauf que la condition testée à la fin c'est une condition de
continuité de la boucle en d'autre terme si la condition est satisfaite on ré-exécute le bloc
d'instructions. c'est le même principe appliqué en plusieurs langage de programmation telque
Java, PHP, ...
Exemple :
Soit l'algorithme suivant permettant de calculer la somme d’une suite de nombre saisis au
clavier(en doit introduire au moins un nombre), la saisie s’arrête lorsque l’utilisateur saisie la
valeur 0.
En algorithmique En C
Algo SommeSuite #include <stdio.h>
Var n,som : réel Main()
Début {
som ←0; float n, som ;
Repeter som = 0;
Lire (n) do {
som ← som + n; scanf ("%f", &n);
Jusqua (n = 0) som = som + n ;
Ecrire ('la somme est ,som ) } while (n != 0)
Fin Printf ("la somme est %f", som );
}
4- La boucle Pour :
Elle permet de répéter l’exécution d’un bloc d’instructions un certain nombre de fois connu à
l’avance.
Une variable Dite compteur de type entier est utilisée pour contrôler le nombre d’itérations de
la boucle (généralement en utilise les identificateur i, j, k, l.... comme nom des conteurs ).
Syntaxe en Algorithmique :
instructions;
finpour;
Par défaut, le pas d'incrémentation est 1. Donc dans ce cas la on peut ne pas le mettre.
principe de fonctionnement :
• incrémenter le compteur par son pas (par défaut on l'incrémente par 1);
• recommencer à l'étape 2 ;
4.Si le test est faux alors sortir de la boucle et exécuter l’action qui suit la fin du bloc pour (le
reste de l'algorithme).
Il ne faut surtout pas modifier la valeur du compteur de la boucle dans sa bloc d'instructions .
En effet, sa modification est intégrée à l’instruction Pour elle même.
instructions ;
En effet, le mot-clé for, qui précède le bloc, est suivi de trois expressions séparées par des
points-virgules :
- La première permet d’effectuer l’initialisation : elle est exécutée une seule fois, au
début de la boucle ;
- La troisième est la modification : elle est exécuté à la fin de chaque itération (généralement
elle est utilisée pour incrémenter la variable du compteur de la boucle).
À noter qu’il est possible d’initialiser/modifier plusieurs variables de boucle en même temps
en utilisant des virgules dans les expressions ex: for(x=1,y=10; x=y; x++,y--) {//....}
2- évaluer la condition;
4- si la condition n'est pas satisfaite alors on sortir de la boucle et exécuter l’action qui suit la
fin du bloc d'instructions pour (le reste de l'algorithme).
Exemple :
En Algorithmique En C
Algo Afichage #include <stdio.h>
Var i : entier Main()
Pour (i de 1 à 30 ) Faire {
Ecrire (i) int i ;
FinPour for(i =1; i<=30; i++)
Fin {
Printf ("%d", i );
}
En algorithmique En C
Algo Afichage #include <stdio.h>
Var i : entier Main()
i ←1; {
Tantque (i < 30 ) Faire Int i = 1;
Ecrire (i) while(i < 30)
i ←i+1; {
FinTantque Printf ("%d", i );
Fin i= i+1; // ou bien i++;
}
}
Remarques :
- La boucle Tantque suffit pour exprimer tous les traitements itératifs (en peut exprimer les
deux autre forme de boucle en utilisant la boucle Tantque ).
- Une boucle peut contenir une autre structure de contrôle (conditionnelle ou itérative).
si en prend l'exemple des notes des étudiants il est indispensables de déclarer pour chaque
étudiant une variables sinon on perd la trace de ces données.
L'un des solutions proposées est d'utiliser la structure de donnée tableau qui permet de les
regrouper et de faciliter sa manipulation en utilisant une seule variable(identificateur).
Un tableau donné peut contenir des éléments de n’importe quel type, mais d’un seul type à la
fois. On peut accéder à chaque élément en utilisant un ou plusieurs indices.
on distingue deux type de tableau : les tableau d'une dimension et les tableaux multi
dimensionnel.
Taille d’un tableau : nombre d’éléments maximal que le tableau peut contenir.
Indice d'un tableau : est une variable entière qui permet d’accéder aux éléments d’un
tableau. elle indique le rang (la position) (numéro de la case) d'un élément.
On peut déduire la taille du tableau en calculant la déférence entre les deux bornes de l'indice.
Une fois qu’un tableau a été déclaré, on ne peut plus changer sa taille.
Exemple :
Remarque : on peut déclarer un tableau d'une autre manière en définissant tout d'abord un
nouveau type ensuite on déclare une variable de ce type comme suit :
Exemple :
Var T: Notes
Syntaxe de déclaration en C :
Exemple :
float T[5];
Utilisation des tableaux :
identificateur_du_tableau [indice_de_élément]
pour affecter à une case (un élément du tableau) une valeur en écrit comme suit :
On peut par exemple récupérer dans une variable n la valeur du case à la position 3 comme
suit : n ← T[3]
On peut aussi affecter à cette dernière la valeur 50.6 comme suit : T[3] ← 50.6
Remarque :
Une erreur est engendrer si on tente d'accéder à des éléments situés hors du tableau (indice
> borne_sup ou indice < borne_inf), on appelle ça Débordement de tableau.
pour lire ou écrire les élément d'un tableau il faut le faire élément par élément
par exemple : lire (T(0)), lire (T(1)), lire (T(2))..... lire (T(n))
Pour éviter la répétition, nous utilisons une des structures itératives(Pour, Tanque ou Répéter).
En Algorithmique En C
Algo lecture #include <stdio.h>
Var T : tableau [0..4] de réel Main ()
I : entier {
Début float T [5]
Pour (i allant de 0 à 4 ) alors int i ;
Lire (T[i]) for (i=0; i<= 4 ; i++ )
FinPour scanf("%f", &T[i]);
}
Fin
Remarque : Un tableau peut-être totalement ou partiellement lu. Ce n’est pas obligatoire
d'utiliser toutes les composantes du tableau, pour cela on déclare une variable entière N qui
représente la taille du tableau à utiliser. La valeur de cette variable sera introduite au cours de
l'exécution (par lecture). elle doit être supérieur du borne_inf et inferieur ou égale à born_sup.
Algo Lecture
N, pos : entier
Début
Repeter
Lire (N) ;
Lire (T[i]) ;
FinPour
Fin
algorithme recherche_valeur
Trouve : booleen
Debut
Lire (T[i])
FinPour
Lire (Val)
i ← 0;
Trouve ← Faux ;
Trouve ← Vrai
pos ← i
FinSi
i←i+1;
FinTantque ;
Sinon
FinSi
Fin.
Notons que l’élément d’une matrice, noté A[i, j], est repéré par deux indices; le premier indique
la ième ligne et le second indique la jème colonne.
12.3 8 -9 2
30 55 7.66 100
-88 62 46 87
Déclaration d'une matrice :
en garde les mêmes principes mais cette fois ci on utilise deux indice.
En Algorithmique :
.. dernier_indice_colonne] de type_des_éléments
En langage C :
float A [3][4]
Chaque élément de la matrice est repéré par deux indices; le premier indique la ième ligne et
le second indique la jème colonne. en utilisant la syntaxe suivante :
Exemple : Dans l'exemple précédent A[1,3] signifie l'élément de ligne numéro 1 et la colonne
numéro 3.
pour lire ou écrire une matrice en applique le même principe du vecteur mais cette fois ci en
utilisant deux boucle imbriquées; l'une pour parcourir les ligne et l'autre pour parcourir les
colonnes en d'autre terme on fait le parcours des ligne; pour chaque ligne parcourue on fait le
parcours de ses colonnes.
Exemple :
Algo lire_matrice;
i, j : entier
Debut
Lire (A[i,j])
FinPour
FinPour
Fin.
Une chaîne de longueur nulle ne comprend aucun caractère : c’est la chaîne vide.
En algorithmique, une chaîne de caractères est encadrée par des guillemets simples '
(apostrophe )
En C, une chaîne de caractères est encadrée par par des doubles guillemets "
Exemple :
Déclaration en Algorithmique :
ou bien
s2: chaine
Déclaration en C :
Il n'existe pas de type spécial pour les chaînes de caractères en langage C. Une
chaîne de caractères est déclarée comme un tableau à une dimension de char (vecteur de
caractères) dont la fin est indiquée par le caractère '\0'. La taille de la chaîne est égale à la
longueur maximale de la chaine plus un pour qu’on puisse stocker le caractère '\0' dénotant la
fin.
Pour initialiser une chaîne de caractères, nous déclarons la variable chaîne et affectons sa
valeur initiale.
En Algorithmique :
s ← 'Bonjour' ;
En langage C :
En C on peut initialiser directement une variable de type chaine de caractères que dans sa
déclaration de deux façons :
L'accès à un élément d'une chaîne de caractères peut se faire de la même façon que l'accès à
un élément d'un tableau. en utilisant s[2]
En algorithmique, une chaîne de caractères est lue (affichée) globalement (d'un seul coup) et
En algorithmique :
On peut lire ou écrire la totalité d'une chaine caractères en utilisant lire et Ecrire.
Exemple :
La différence entre scanf et gets est que scanf amène uniquement le texte introduit
avant le premier blanc (espace) dans la variable à lire. gets amène tout le texte introduit
jusqu'au retour chariot (retour à la ligne) dans la variable à lire.
Comme pour les caractères, la comparaison des chaînes de caractères se base sur l’ordre
des codes internes des caractères. Pour comparer deux chaînes de caractères, on compare
tous d'abord les deux premiers caractère S'ils sont égaux on passe aux deux caractère du
rang suivant et ainsi de suite. jusqu'au on trouve deux caractères du même rang qui sont
différent.
Le résultat de comparaison des deux chaines est celle de la dernières comparaison faite.
Exemples :
• 'bonjour' < 'salut' car le code ASCII de b vaut 98 est inférieur au code 's' vaut 115.
• "bonjour" < "bonsoir" : les trois premiers caractères sont les mêmes donc en compare le j et
le s (j < s car le code ASCII de 'j' (106) est inferieur au code ASCII de 's'(110)).
plusieurs fonctions et procédure sont définies pour manipuler les chaine de caractères
(recherche, concaténation, insertion....)
Exemple :
Dans ce cadre plusieurs types sont proposés (les tableaux, les énumération, les
enregistrements, les ensembles, les intervalles...).
2- Enumération :
Définition :
une énumération appelé aussi type énuméré permettant la définition d’une liste homogène fini
et ordonnée de constantes (aux maximum 256). Dont les variables associées à ce type ne
peut prendre qu'un des valeur énuméré dans cette dernière. L’ordre par défaut est celui dans
lequel les identificateurs ont été énumérés en commençant par 0.
Exemples :
- les jours de la semaine : (samedi, dimanche, lundi, mardi, mercredi, jeudi, vendredi).
Déclaration En algorithmique :
avant de déclarer une variable d'une énumération il faut d'abord définir le type d'énumération.
Exemple :
e: Etat_Etuds
couleur : Couleurs
la variable déclarée peut être utilisé par la suite en l'affectant par exemple une valeur parmi les
valeur citées (énumérées ) dans sa définition : j ← JEUDI
Déclaration En C :
avant de déclarer une variable d'une énumération il faut d'abord définir le type d'énumération
en utilisant le mot clé enum.
Exemple :
Jours j;
Etat_Etuds e;
Couleurs couleur;
j = Vert;
Remarques :
- En C les objets de type énumération sont considérés (représentés par) comme des int. Donc
la valeur de premiers constant vaut 0 et ainsi de suite.
les champs de l'enregistrement peuvent être de n'importe quel types (simple ou composé).
Exemples :
x
y
- un nombre complexe est constitué de :
partie réel
partie imaginaire
- un compte bancaire constitué de :
numéro de compte
solde
- un étudiant est définit par un ensemble de renseignements :
son numéro séquentiel
son nom
son prénom
sa date naissance
sa moyenne...
Déclaration d'un enregistrement :
Avant de déclarer une variable de type enregistrement, on doit tous d'abord déclarer le type
enregistrement en définissant ses champs comme suit :
En Algorithmique En C
}
en peut par la suite déclarer une variable de ce type comme suit :
En Algorithmique En C
Nom_type_enregistrement nom_Variable
Var nom_Variable : Nom_type_enregistrement
Exemple :
En Algorithmique En C
struct Point {
Type Point = Enregistrement flaot x;
X : réel float y;
Y : réel }
FinEnregistrement Point a;
Var a : Point
pour accéder (utiliser) un champs d'une variable de type enregistrement en utilise le nom de la
variable suivi par un point '.' suivi par le nom du champ: (nom_Variable.nom_champ).
Exemple :
pour affecter 3 au champs x de la variable a (exemple précédent )
En Algorithmique En C
a.x ← 3 a.x = 3
on peut pas lire ou écrire une variable de type enregistrement d'un seul coup; car elle
composée. on peut le lire (ou l'écrire) partiellement en utilisant ses champs.
Exemple : pour introduire la valeur du point a (3,2) on doit introduire la valeur de x ensuite la
valeur y comme suit :
En Algorithmique En C
En peut aussi les crées en utilisant les notions d'ensemble, union, intervalle...
On peut crées des nouveaux types en combinant les techniques de création de type : en peut
par exemple crée un tableau d'enregistrement qui contient un champs de type énumération...
En algorithme toute définition d'un nouveau type doit être dans la section de déclaration des
types en utilisant le mot clé Type.
exmple : typedef int entier ; permet de crées le type entier (donner un autre nom au type int ).