Algo Prog
Algo Prog
Algo Prog
ALGORITHME-PROGRAMMATION
LANGAGE C
Licence 1 AGROTIC
2022-2023
Bassirou DIENE
[email protected]
A Introduction à l'algorithmique
A Concepts de base de l'algorithmique
A Les structures de contrôle
A Les types énumérés et les tableaux
A Les sous programmes
1
q L’algorithmique est une science très
ancienne
3
q Un nombre fini d’étapes
q Un nombre fini d’opérations par étape
q Fournit un résultat (décidabilité)
q Chaque opération est
ü non ambiguë
ü effective
q Un algorithme doit être indépendant du langage de
programmation utilisé
q Un programme est un algorithme exprimé dans un
langage de programmation capable d’être exécuté
par un ordinateur
4
5
Spécifications
algorithmiques
Problème
réel
analyse
Traduction
Algorithme
codage
Exécution
Programme
Résultats
7
q Conception: décomposition du programme en sous
problème (définition des modules du programme)
ainsi que le développement des algorithmes
nécessaires au fonctionnement du programme. La
conception des algorithmes s’appuiera sur l’analyse
et la spécification du problème
9
Soit l'équation mathématique “ ax2 + bx + c = 0 ”.
Écrire un algorithme qui nous fait passer à une
situation finale acceptable si notre situation initiale est
acceptable
q Analyse
q Description des situations initiales acceptables :
• a, b et c sont des valeurs réelles bien définies et
contenus dans des variables de même nom
• delta contient la valeur de l'expression
mathématique “ b*b - 4*a*c ”
10
10
11
11
q Un algorithme peut être spécifié par:
ü un organigramme
ü un pseudo-code
12
12
13
A Formalisme utilisé en algorithme
A Notion de variable
A Notion de type de données
A Notion d’expression
A Affectation en algorithme
A Entrées/sorties en algorithme
14
14
15
ALGORITHME nom de l’algorithme
CONSTANTE
déclaration de constantes
En-tête TYPE
définition de types
VARIABLE
déclaration de variables
DÉFINITION DE SOUS-PROGRAMMES
DÉBUT
Corps instructions du programme
FIN
16
16
ALGORITHME addition_2_nombres
VARIABLE
a, b, c: entier
DÉBUT
c ß a+b
FIN
17
17
q Une variable est une entité qui contient une
information
ü une variable possède un nom appelé
identifiant
ü une variable possède une valeur
ü une variable possède un type qui caractérise
l'ensemble des valeurs que peut prendre la
variable
18
19
19
q Le type d'une variable caractérise
ü l'ensemble des valeurs que peut prendre la variable
ü l'ensemble des actions que l'on peut effectuer sur une
variable
q Lorsqu'une variable apparaît dans l'entête d'un
algorithme on lui associe un type en utilisant la syntaxe
suivante:
identifiant_ de_ la_variable : type de données
Exemple :
age : Naturel
nom : Chaîne de Caractères
20
20
21
21
q Il y a deux grandes catégories de type:
22
22
23
23
q BOOLÉEN, les variables ne peuvent prendre que les valeurs
VRAI ou FAUX
q INTERVALLE, les variables ne peuvent prendre que les valeurs
entières définies dans cet intervalle, par exemple 1..10
q ÉNUMÉRÉ, les variables ne peuvent prendre que les valeurs
explicitées, par exemple les jours de la semaine (du lundi au
dimanche)
üCe sont les seuls types simples qui peuvent être définis par
l'informaticien
q CARACTÈRES
Exemples
Ø masculin : booléen
Ø mois : 1..12
Ø jour : JoursDeLaSemaine
24
24
Exemples:
üage : naturel
ü taille : réel
ü nom : chaîne de caractères
25
25
q Un opérateur est un symbole d'opération qui permet
d'agir sur des variables ou de faire des calculs
26
26
27
27
q Un opérateur peut être unaire ou binaire :
ü Unaire s'il n'admet qu'une seule opérande, par exemple
l'opérateur non
ü Binaire s'il admet deux opérandes, par exemple l'opérateur +
q Un opérateur est associé à un type de donnée et ne peut
être utilisé qu'avec des variables, des constantes, ou des
expressions de ce type
ü Par exemple l'opérateur + ne peut être utilisé qu'avec les types arithmétiques
(naturel, entier et réel) ou (exclusif) le type chaîne de caractères
ü Impossible d’additionner un entier et un caractère
ü Toutefois exceptionnellement dans certains cas on accepte d'utiliser un
opérateur avec deux opérandes de types différents, c'est par exemple le cas
avec les types arithmétiques (2+3.5)
28
28
ü 2+3 vaut 5
ü"bonjour" + " tout le monde" vaut "bonjour tout le monde"
29
29
q Pour
les booléens nous avons les opérateurs NON,
ET, OU, OU EXCLUSIF
ü NON
ü ET
30
30
ü OU
ü OU EXCLUSIF
31
31
q On retrouve +, -, /, *
q div : calcul d’une division entière
q modulo : calcul le reste d’une division
entière
Exemple:
ü11 div 2 vaut 5
ü11 modulo 2 vaut 1
32
32
q Opérateur d'égalité
ü C'est l'opérateur que l'on retrouve chez tous les types
simples qui permet de savoir si les deux opérandes
sont égales
ü Cet opérateur est représenté par le caractère =
ü Une expression contenant cet opérateur est un
booléen
q Opérateur d'inégalité !=
q Pour les types possédant un ordre les
opérateurs de comparaison <, >, <=, >=
33
33
q Tout comme en arithmétique les opérateurs
ont des priorités
ü* et / sont prioritaires sur + et –
34
35
q L'expression c ß a + b se décompose de la
façon suivante:
ü la valeur contenue dans la variable a est
prise
ü la valeur contenue dans la variable b est
prise
ü On additionne ces deux valeurs
ü On met ce résultat dans la variable c
ü Si c avait auparavant une valeur, cette
dernière est perdue
36
36
37
Écrire un algorithme appelé echange qui permet
d’échanger les valeurs de deux variables entières
saisies au clavier.
38
38
Algorithme echange
/* Déclarations */
variable
x , y : entier
tmp : entier
/* Corps du programme */
Début
afficher("Donner la valeur de l'entier x:")
saisir(x)
afficher("Donner la valeur de l'entier y:")
saisir(y)
afficher("Avant échange: x vaut ",x, "et y vaut ",y)
tmp ß x
xßy
y ß tmp
afficher("Après échange: x vaut ",x, "et y vaut ",y)
Fin
39
39
40
/*
Mon premier programme C
*/
#include<stdio.h>
int main(void)
{
printf("Bonjour tout le monde\n");
return 0;
}
41
41
q Cette directive permet l'inclusion de librairies dont
les éléments seront utilisés dans le programme source
q Le compilateur C fournit un ensemble de librairies
mais le programmeur peut aussi créer ses propres
librairies
q Syntaxe
42
43
q Enlangage C, chaque variable doit être associée à un
type, qui permet de spécifier la taille de l’espace occupé
en mémoire (nombre d’octets)
type taille Valeurs possibles Format
int 2 ou 4 de -32768 à 32767 %d
de -2147483648 à 2147483647
44
44
q Exemples:
ü\n retour chariot avec saut de ligne
ü\r retour chariot sans saut de ligne
ü\t tabulation horizontale
ü\v tabulation verticale
45
45
q En C, toute variable doit être déclarée avant sa première
utilisation
q La syntaxe de déclaration d’une variable est:
type identificateur;
q Exemple:
int a ;
q Cette instruction permet de réserver un emplacement mémoire
pour le stockage d’un entier (type int) qui sera nommé a dans la
suite du programme.
q Une déclaration peut se faire seule, ou accompagnée d’une
initialisation (première valeur),
int b=3;
46
46
q Possibilité
d’utiliser la directive de compilation #define
pour définir une constante selon la syntaxe suivante:
#define identificateur valeur
q Dans ce cas, il n’y a pas de réservation d’emplacement
mémoire.
47
47
q Si par exemple on additionne un int et un float, il y a
une conversion implicite de l'int en float
q Si le résultat est stocké dans un int, il y a aussi une
conversion avec un risque d'altération du résultat
q Une conversion explicite est faite de la façon suivante :
(nouveau_type) variable
q Exemple de conversion :
int a = 3, b = 6; float c;
c = (float) a * (float) b;
48
48
int i,j,k;
i=1; j=2 ;
k= i++ + j ; /* i=2, j=2, k=3 */
k= i + ++j ; /* i=2, j=3, k=5 */
k= i++ + ++j ; /* i=3, j=4, k=6 */
49
49
q + Addition
q - Soustraction
q * Multiplication
50
q Exemple
51
! NON (Négation)
== Egalité
!= Différence
=, >, >=, <, <= Relations d’ordre
&& ET logique
|| OU Logique
Attention :
q Il ne faut pas confondre et cela arrive très fréquemment, les
opérateurs : Le test d’égalité (= =) avec l’affectation (=).
52
52
q Il
n’y a pas de type BOOLEAN en C
q Le langage C évalue la validité de toute expression
ou comparaison.
q Par convention le résultat de l’évaluation est :
Ø0 si la comparaison est « fausse » ou si l’expression
évaluée est égale a 0
Ø1 si la comparaison est « vraie » ou si l’expression
évaluée est différente de 0
q Attention: L’évaluation renvoie une expression de
type entier qui peut être utilisée ultérieurement dans
des calculs.
53
53
q Cette instruction permet de donner la valeur de
l’expression de droite à la variable de gauche
54
54
q Exemple
printf ("la valeur de x est %d et celle de y est %d", x, y );
55
55
q L’instruction scanf permet au programme de lire des
informations saisies au clavier par l’utilisateur
Syntaxe
scanf ( " chaîne de formatage " , &variable1 , &variable2, . . . )
q Cette fonction, également contenue dans la
bibliothèque standard stdio.h, attend comme premier
paramètre la chaîne décrivant les formats de lecture
des variables à lire au clavier. Les paramètres
suivants sont, dans l’ordre, l’adresse des variables
dont on souhaite lire la valeur.
ØExemple : scanf(" %d %d",&x, &y) ;
56
56
57
58
AStructure conditionnelle: Si
AStructure alternative: Si…Sinon
AStructure répétitive: Tant que…. Faire
59
59
q Dans la vie, on a souvent besoin de décider du
déroulement des choses en fonction de certaines
conditions
q Par exemple: "s’il pleut, je prends mon parapluie"
(ceci n'a d'ailleurs de sens que si je souhaite sortir!).
q De même, en algorithme, il est possible de décider de
n'exécuter une action que si une condition particulière
est remplie.
60
q Elle s’écrit
Si Condition Alors
instructions
Fin si
61
61
q L’intérêt de l’instruction conditionnelle Si est
qu’il n’y a pas d’instruction à exécuter dans le
cas où la condition est fausse
Remarque:
Ø La condition d’un Si peut être multiple
Ø Les instructions conditionnelles peuvent être
imbriquées
Ø Pour faciliter la lecture, n’oubliez pas l’indentation
(décalage) des instructions
62
62
Algorithme afficheResultat
Variable
moyenne: réel
Début
Afficher(" Entrez la moyenne obtenue")
saisir(moyenne)
Si moyenne >= 10 alors
Afficher (" Semestre validé ")
Fin si
Fin
63
63
q Elle s’écrit: Si Condition alors
Instructions « Alors »
Sinon
Instructions « Sinon »
Fin si
64
64
Algorithme afficheResultat2
Variable
moyenne: réel
Début
Afficher(" Entrez la moyenne obtenue")
saisir(moyenne)
Si moyenne >= 10 alors
Afficher (" Semestre validé ")
Sinon
Afficher (" Semestre non validé ")
Fin si
Fin
65
65
Algorithme afficheResultat3
Variable
moyenne: réel
Début
Afficher(" Entrez la moyenne obtenue")
saisir(moyenne)
Si moyenne >= 10 alors
Afficher (" Semestre validé ")
Sinon
Si moyenne >= 9,5 alors
Afficher (" Admis au repêchage ")
Sinon
Afficher (" Semestre non validé ")
Fin si
Fin si
Fin
66
66
q Ce qui se traduit par: Tant que la condition est vraie, exécuter les
instructions.
q Cette fois-ci, il s’agit d’une instruction de répétition, appelée
également une boucle. Le programme va tester avant chaque tour
de boucle si la condition est vraie
q Dans l’affirmative il exécute les instructions jusqu’au Fin Tant
que, puis il revient au test de la condition.
q Lorsque la condition devient fausse, la boucle Tant que Faire se
termine et le programme continue normalement son exécution
après l’instruction qui suit le Fin Tant que.
67
67
q Saisie d’une valeur positive par l’utilisateur
Algorithme saisirValeurPositif
Variable
val: Entier
Début
Afficher(" Entrez une valeur numérique positive")
saisir(val)
/* Boucler tant que la valeur lue n’est pas correcte */
Tant que val < 0 Faire
Afficher (" Erreur: Entrez une valeur positive ")
saisir(val)
Fin Tant que
Afficher(" la valeur saisie est ", val)
Fin
68
68
Attention
q pour le bon fonctionnement d’une boucle:
Ø Il faut vérifier qu’à un moment on peut entrer dans
la boucle pour y exécuter les instructions, ceci afin
d’éviter les boucles inutiles
Ø Il faut vérifier également qu’à un moment on sort
de cette boucle. Ceci pour éviter les boucles
infinies.
69
69
q Elle s’écrit:
Faire
instructions
Tant que Condition
70
Algorithme saisirValeurPositif2
Variable
val: Entier
Début
Faire
Afficher (" Entrez une valeur positive ")
saisir(val)
Tant que val < 0
Afficher(" la valeur saisie est ", val)
Fin
71
71
q Lorsque la condition devient fausse, la boucle
Faire Tant que se termine et le programme
continue normalement son exécution après
l’instruction Tant que Condition.
q Cette instruction de contrôle évite de devoir
mettre en place une ou plusieurs instructions
préliminaires assurant l’entrée dans la boucle un
jour
72
72
q Elle s’écrit:
Répéter
Instructions
Jusqu’à condition
q Ce qui se traduit par: Exécuter les instructions jusqu’à ce que la
condition soit VRAIE.
q Les instructions sont exécutées une première fois puis le test de la
condition est effectué pour éventuellement reprendre l’exécution
des instructions.
q Lorsque la condition devient vraie, la boucle Répéter jusqu’à se
termine et le programme continue son exécution après
l’instruction Jusqu’à condition.
q C’est le contraire de la boucle faire tant que
73
73
q Saisie d’une valeur positive par l’utilisateur
Algorithme saisirValeurPositif2
Variable
val: Entier
Début
Répéter
Afficher (" Entrez une valeur positive ")
saisir(val)
jusqu’à val > 0
Afficher(" la valeur saisie est ", val)
Fin
74
74
75
75
q Elle s’écrit:
Pour VariableDeBoucle valDébut à valFin pas de valPas faire
Instructions
Fin Pour
q Ce qui se traduit par: Pour une variable de boucle dont
le contenu varie de valDébut à valFin par pas de valPas
exécuter les instructions.
q L’instruction de contrôle Pour permet d’exécuter les
instructions un nombre déterminé de fois. Ce nombre
est connu avant de commencer à exécuter le Pour.
q La boucle ne s’arrête que lorsque le nombre de
répétition des instructions demandé a été réalisé
76
76
77
77
q Une instruction Pour est en fait une réécriture
simplifiée d’une instruction Tant que
q Il est possible de réécrire une boucle Pour à
l’aide d’une boucle Tant que
Pour i 1 à 10 faire i 1
afficher (i*10) Tant que i <= 10 Faire
Fin Pour afficher ( i*10)
i i+1
Fin Tant que
78
78
q Elle s’écrit:
Selon ExpressionDeTest Faire
cas Expression: Instructions
cas Expression: instructions
cas Expression: Instructions
………………………………….
………………………………….
cas Sinon: Instructions
Fin Selon
79
q La structure Selon permet de choisir le traitement à
effectuer en fonction de la valeur d'une variable ou
d'une expression.
q Cette structure permet parfois de remplacer
avantageusement une structure Si
q L’expression est évaluée, puis sa valeur est
successivement comparée à chacune des valeurs
q Dès qu’il y a correspondance, les comparaisons sont
arrêtées et le traitement associé est exécuté. Si aucune
valeur ne correspond à la valeur de l’expression, alors
le traitement associé au Sinon, s’il existe, est exécuté
80
80
Algorithme afficherJour
Variable
jour:entier
afficher("Donner le numéro du jour")
saisir(jour)
Selon (jour) Faire
1 : afficher("Lundi")
2 : afficher("Mardi")
3 : afficher( "Mercredi")
4 : afficher("Jeudi")
5 : afficher( "Vendredi")
6 : afficher("Samedi")
7 : afficher("Dimanche")
Sinon afficher("Un numéro de jour doit être compris entre 1 et 7")
Fin Selon
81
81
82
if (condition1) {
traitement1;
}
else if (condition2) {
traitement2;
}
else if (conditionN) {
traitementN;
}
else{
traitement;
}
83
#include <stdio.h>
int main() {
int val1,val2, res;
printf(" Donnez une valeur");
scanf("%d ",&val1);
printf("Donnez une autre valeur");
scanf("%d",&val2);
if(val1<val2) {
res=val2-val1;
else
res=val1-val2;
}
printf("la différence est de %d ",res);
return 0;
}
84
84
while (condition) {
traitement;
}
85
85
q Elle s’écrit:
do {
traitement;
} while (Condition);
q Les conditions doivent être entre parenthèses
q L’instruction du while se termine par un point
virgule (;)
86
86
q Elle s’écrit
for(instruction1;condition;instruction2)
{
traitement;
}
q Le déroulement se fait ainsi:
Øinstruction1 est exécutée une seule fois
ØPuis il y a l'enchaînement suivant:
ü La condition est évaluée
ü Si elle est fausse, on sort de la boucle.
ü Si elle est vraie, le traitement de la boucle est exécuté, puis
instruction2 est exécutée et on recommence en évaluant à nouveau la
condition, etc …
87
87
q En général
Ø instruction1 permet d'initialiser une variable compteur
Ø instruction2 permet d'incrémenter ou de décrémenter une
variable compteur
q Exemple
88
88
switch (expression)
{ …
case valeur1 : traitement1; printf("Donner le numéro du jour")
break; scanf("%d", &jour)
case valeur2 : traitement1; switch (jour)
break; {
... case 1 : printf(“Lundi"); break;
case valeurN : traitementN; case 2 : printf(“Mardi"); break;
break; ...
default : traitement; case 7 : printf("Dimanche"); break;
} default : printf("Un numéro de jour doit
être compris entre 1 et 7"); break;
}
...
89
89
q L'instruction break peut être employée à
l'intérieur de n'importe quelle boucle. Elle
permet d'interrompre le déroulement de la
boucle, et passe à la première instruction qui
suit la boucle. En cas de boucles imbriquées,
break fait sortir de la boucle la plus interne.
90
90
91
91
LES TABLEAUX
92
LES TABLEAUX
q Un tableau est un outil qui permet de regrouper
sous le même nom un ensemble de variables de
même type
q On appelle tableau une variable composée de
données de même type, stockée de manière
contiguë en mémoire (les unes à la suite des autres)
q Un tableau est donc une suite de cases (espace
mémoire) de même taille.
q La taille de chacune des cases est conditionnée par
le type de donnée que le tableau contient
93
93
TABLEAUX UNIDIMENSIONNELS
94
94
95
95
DÉCLARATION TABLEAU UNIDIMENSIONNEL
96
97
ACCÉS AUX ÉLÉMENTS D’UN TABLEAU
q Un élément particulier du tableau est désigné en
précisant son indice (son numéro)
q Le premier élément du tableau correspond à l’indice 0
et est désigné par nom_tableau[0]
q Le deuxième élément du tableau correspond à l’indice
1 et est désigné par nom_tableau[1]
q Le dernier élément du tableau correspond à l’indice N-
1 et est désigné nom_tableau[N-1]
q Quelque soit sa forme, la valeur de l'indice doit être
entière et comprise entre les valeurs minimale et
maximale déterminées à la déclaration du tableau
98
98
MANIPULATION TABLEAU
UNIDIMENSIONNEL
q Les éléments d'un tableau sont des variables appelées
variables indicées qui s'utilisent exactement comme
n'importe quelle autre variable classique
ü Elles peuvent faire l'objet d'une affectation
99
99
EXEMPLE
Algorithme saisiAfficheTab
i,n:entier
tab: tableau[20] d’entier
debut
faire
afficher("Donner le nombre d'elements du tableau ")
saisir(n)
tant que ((n<0)||(n>20))
//Saisi des élements du tableau
pour i 0 à n-1 faire
afficher("Donner l'element” ,i+1, “du tableau")
saisir(tab[i])
fin pour
//Affichage des éléments du tableau
pour i 0 à n-1 faire
afficher(tab[i],’’ ‘’)
fin pour
fin
100
100
LES TABLEAUX EN C
q En C, la syntaxe de la déclaration d'une variable tableau est la
suivante:
type nom_tableau [ N ];
ü nom_tableau est l’identificateur du tableau
ü N est la taille du tableau et doit être une constante entière et
positive.
q Exemple :
ü int tab[10] ; //déclare une variable tableau de 10 entiers appelée tab.
ü tab[0] désigne le premier élément du tableau tab
ü tab[9] désigne le dernier élément du tableau tab
101
101
EXEMPLE
#include <stdio.h>
#include <stdlib.h>
int i,n;
int tab[20];
int main(void) {
do {
printf("Donner le nombre d'elements du tableau \n");
scanf("%d",&n);
}while((n<0)||(n>20));
//Saisi des élements du tableau
for(i=0;i<n;i++){
printf("Donner l'element %d du tableau \n",i+1);
scanf("%d", &tab[i]); }
//Affichage des éléments du tableau
for(i=0;i<n;i++){
printf("%7d" ,tab[i]); }
return 0;
}
102
102
103
CAS DES TABLEAUX DE CARACTÈRES
q Un tableau de caractères peut être initialisé par une liste
de constantes caractères.
ü Exemple : char ch[3] = {'a', 'b', 'c'}; C'est évidemment une
méthode très lourde.
q Un tableau de caractères peut être initialisé par une chaîne
littérale
ü char ch[8] = "exemple";
q Le compilateur complète toute chaîne littérale avec un
caractère null
q Il faut donc que le tableau ait au moins un élément de plus
que le nombre de caractères de la chaîne littérale
104
104
105
105
FONCTIONS DE MANIPULATION DE
CHAÎNES
q La bibliothèque standard string.h fournit des fonctions de
manipulations des chaînes de caractères
q Après la déclaration, l’affectation d’une chaîne se fera par la fonction
STRCPY
ü Exemple : strcpy(ch, ''hello'') ;
q La longueur (le nombre de caractères) d’une chaîne est donnée par la
fonction STRLEN
q Cette fonction ne prend pas en compte le caractère \0.
ü Exemple : strlen(''bonjour'') retourne 7.
q La concaténation de deux chaînes se fait par la fonction STRCAT
ü Exemple : strcat(ch, '' world'') ; la chaîne contient alors
''hello world''
106
106
FONCTIONS DE MANIPULATION DE
CHAÎNES
q La comparaison de deux chaînes se fait par la
fonction STRCMP.
ü Exemple : n = strcmp(ch1, ch2) ;
n vaudra :
ü un nombre négatif si ch1 < ch2 au sens syntaxique
ü 0 si ch1 et ch2 sont identiques
ü un nombre positif si ch1 > ch2
107
107
TABLEAUX MULTIDIMENSIONNELS
a b c d
e f g h
i j k l
108
108
LES TABLEAUX EN C
q En C, la syntaxe de la déclaration d'une variable tableau est la
suivante:
type nom_tableau [N][M];
ü nom_tableau est l’identificateur du tableau
ü N est le nombre de lignes du tableau et doit être une constante
entière et positive.
ü M est le nombre de colonnes du tableau et doit être une constante
entière et positive.
q Exemple :
ü int tab[3] [4] ; //déclare une matrice de 3 lignes et 4 colonnes appelée tab.
ü tab[0] [0] désigne la première case de la matrice tab
ü tab[1] [1] désigne le cinqième case de la matrice tab
109
109
TABLEAUX MULTIDIMENSIONNELS
q L’accèsà un élément se fait en précisant un
indice entre crochets pour chaque
dimension
110
EXEMPLE
#include <stdio.h> printf("*** Matrice B ***\n");
main() for (i=0; i<n; i++)
{ int A[50][50]; /* matrice dénommée A */ for (j=0; j<m; j++){
int B[50][50]; /* matrice dénommée B */ printf("Element[%d][%d] : ",i,j);
int n, m; /* dimensions des matrices scanf("%d", &B[i][j]);
*/ }
int i, j; /* variables de boucles */ /* Affichage des matrices */
/* Saisie des donnÈes */ printf("Matrice A :\n");
printf("Nombre de lignes (max.50) : "); for (i=0; i<n; i++) {
scanf("%d", &n ); for (j=0; j<m; j++)
printf("Nombre de colonnes (max.50) : printf("%7d", A[i][j]);
"); printf("\n");
scanf("%d", &m); }
printf("*** Matrice A ***\n"); printf("Matrice B :\n");
for (i=0; i<n; i++) for (i=0; i<n; i++){
for (j=0; j<m; j++) for (j=0; j<m; j++)
{
printf("%7d", B[i][j]);
printf("Element[%d][%d] : ",i,j); printf("\n");
scanf("%d", &A[i][j]);
}
} }
111
111
LES ENUMERATIONS
112
LES ÉNUMÉRATIONS
q Une énumération est un type de données dont les valeurs
sont des constantes nommées
q Elles permettant de définir un ensemble de constantes,
parmi lesquelles les variables de ce type prendront leur
valeur
q La syntaxe de définition d’un type énuméré est la
suivante :
TYPE
nom_type = { constante1, constante2, …, constanteN }
ü nom_type est l’identificateur du nouveau type
ü et constante1, constante2, …, constanteN est une liste
d’identificateurs donnant l’ensemble des valeurs de ce type
11
3
113
LES ÉNUMÉRATIONS
q Exemple:
TYPE
// définition du type couleur
couleur = {bleu, blanc, rouge, vert, jaune, noir}
// définition du type jour
jour = {lundi, mardi, mercredi, jeudi, vendredi, samedi,
dimanche}
11
4
114
115
EXEMPLE
Algorithme jourEnumeration
Type
jour={Lundi=1,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche}
Variable
un_jour: jour
Début
afficher("Donnez un numéro de jour entre 1 et 7")
saisir(un_jour)
selon(un_jour ) faire
Lundi : afficher("C’est Lundi")
Mardi : afficher("C’est Mardi")
Mercredi : afficher("C’est Mercredi")
sinon : afficher("Ce n’est ni Lundi ni Mardi ni Mercredi")
fin selon
fin
11
6
116
LES ÉNUMÉRATIONS EN C
q En C, on définit un type énuméré en utilisant le
mot-clé enum selon la syntaxe suivante :
ENUM nom_énumération { nom1, nom2 ... };
q Exemple
117
LES ÉNUMÉRATIONS EN C
q Chaque constante est associée à un entier (son numéro d’ordre
en partant de 0 pour le premier)
q Possibilité aussi de spécifier la valeur associée
Exemple:
enum jour
{Lundi=1,Mardi,Mercredi=5,Jeudi,Vendredi,Samedi,Dimanche};
üMardi prend la valeur 2, Jeudi la valeur 6,…
ü Les valeurs associées aux constantes ne sont pas
modifiables dans le programme.
q Après avoir défini un type énuméré, on peut l'utiliser pour
déclarer une ou plusieurs variables de ce type
ü enum jour j1;
ü enum jour j2 = Mardi;
11
8
118
EXEMPLE
#include <stdio.h>
#include <conio.h>
enum jour
{Lundi=1,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche};
void main() {
enum jour un_jour;
printf("Donnez un numéro de jour entre 1 et 7") ;
scanf("%d", &un_jour) ;
switch(un_jour ) {
case Lundi : printf("C’est Lundi"); break ;
case Mardi : printf("C’est Mardi"); break ;
case Mercredi : printf("C’est Mercredi"); break ;
default : printf("Ce n’est ni Lundi ni Mardi ni Mercredi");
}
getch();
}
11
9
119
120
121
121
q Un enregistrement est un type structuré formé
d’un ou de plusieurs éléments pouvant être de
types différents
q Chaque enregistrement est désigné par un
identificateur (son nom)
q Chacun des éléments de l’enregistrement
occupe un emplacement appelé champ
désigné à son tour par un identificateur et
caractérisé par un type
q Une information représente la valeur du
champ
122
122
123
123
q Définition d’un type d’enregistrement
TYPE
identifiant_enr = ENREGISTREMENT
Champ1 : type de données
Champ2 : type de données
…
Champn : type de données
FIN
124
Exemple:
TYPE
etudiant= ENREGISTREMENT
nom: chaine de caractères
prenoms: chaine de caractères
dateNaiss : chaine de caractères
adresse : chaine de caractères
numeroCarte : entier
FIN
125
125
Remarque :
126
126
127
127
Exemple:
Variable
voiture : ENREGISTREMENT
marque : chaine
date_fabrication : chaine
immat :chaine
nbreplace : entier
fin
128
128
129
129
q Accés aux champs d’un enregistrement: nom composé
afficher("Donner le numéro de carte :")
saisir(etud.numeroCarte)
afficher("Donner le nom :")
saisir(etud.nom)
afficher("Donner le prénoms :")
saisir(etud.prenoms)
afficher("Date de naissance:" )
saisir(etud.dateNaiss)
afficher("Adresse :")
saisir(etud.adresse) 130
130
struct nom_enregistrement{
Type1 nom_champ1;
...
TypeN nom_champN;
};
ü nom_enregistrement est l’identificateur du nouveau type
ü type1, …, typeN sont les types respectifs des champs champ1,
…, champN
131
131
DÉCLARATION D’UN TYPE STRUCTURE
struct date{
int jour;
char mois[10];
int annee;
};
struct complexe
{
float reelle;
float imaginaire;
};
132
132
133
133
EXEMPLE
VARIABLES
134
134
EXEMPLE
#include <stdio.h>
#include <stdlib.h>
struct complexe{
float reel;
float ima;
};
main(){
struct complexe c1, c2;
printf("Donnez la partie réelle puis la partie imaginaire du premier complexe\n");
scanf("%f%f",&(c1.reel),&(c1.ima));
printf("Donnez la partie réelle puis la partie imaginaire du second complexe\n");
scanf("%f%f",&(c2.reel),&(c2.ima));
printf("La somme de C1 = %f + i%f et C2 = %f + i%f est le complexe Z1 = %f +
i%f\n", c1.reel,c1.ima,c2.reel,c2.ima,(c1.reel+c2.reel),(c1.ima+c2.ima));
}
135
135