Académique Documents
Professionnel Documents
Culture Documents
Pr. G. Mangoub
Parcours MIP
Semestre 3
Algorithme et programmation 1
Chapitre 2
Chap.2 les éléments de base d’un algorithme et leur représentation en langage C
A. U : 2019-2020
Algorithmique et programmation 1
Pr. G. Mangoub
Pour le cas d’un commentaire qui porte sur plusieurs lignes, on le commence par le signe /*
et on le ferme par le signe */.
Exemple
/* Ceci est un autre
Commentaire
Sur plusieurs lignes
*/
b) Les commentaires qui apparaissent à l’étape d’exécution
On les met entre deux guillemets, on les verra après les ordres d’entrée sortie.
A-1 Types de bases
3 types élémentaires
Les entiers
Courts(short int), normaux(int), long(long int)
Exemple :
a : entier
a, b :entiers courts
Les réels
Courts(float)(32 bits)(6 chiffres significatifs), long(double)(64 bits)(16 chiffres),très long(long
double)(80 bits)
Algorithmique et programmation 1
Pr. G. Mangoub
Exemple :
a : réel
a, b :réels longs
Les caractères
Char
Exemple : char a,b,c ;
Un algorithme qui ne satisfait pas à ces deux conditions n’a pas de justification et par
conséquent n’existe pas. Les données traitées par l’algorithme sont de deux types : variable ou
constante. Chaque variable et constante doit être déclarée avant d’être utilisé : nom + type.
Cette déclaration consiste en une réservation en mémoire de la place nécessaire et suffisante à
l’hébergement de la valeur.
A-2-1) Notion de constante : une constante porte un nom qu’on appelle identificateur et
garde la même valeur. On la déclare de la façon suivante :
Const type identificateur = valeur_de_la_constante
Exemple :
Const entier N = 10 ;
C’est à dire qu’on déclare que N est une constante entière qui a pour valeur 10.
A-2-2) Notion de variable : Une variable est un endroit en mémoire permettant de stocker
une valeur. Une variable est caractérisée par un nom appelé un identificateur, par un type
(l’ensemble dans lequel elle prend ses valeurs) et par une valeur.
Exemple : si notre variable est la masse alors pour identificateur on peut choisir m, pour le
type c’est un réel et pour la valeur 30Kg.
La syntaxe de la déclaration est la suivante :
identificateur : type
Algorithmique et programmation 1
Pr. G. Mangoub
Exemple1 : a : entier
Pour déclarer la variable dont le nom est l’identificateur a comme entier qui peut être positif
ou négatif.
Exemple2 : X,Y,Z : réels
Pour déclarer les 3 variables dont les noms respectifs sont les identificateurs X,Y et Z comme
réels qui peuvent être positifs ou négatifs.
Exemple3 : c : boelien
Pour déclarer la variable dont le nom est l’identificateur c comme boolienne. C’est à dire une
expression logique qui ne peut avoir que deux valeurs soit vrai soit faux.
Exemple4 : a,b,c : char
Pour déclarer les 3 variables dont les noms respectifs sont les identificateurs a, b et c comme
caractères.
En ce qui concerne l’identificateur, il peut être constitué de plusieurs lettres, chiffres et mots
dans ce derniers cas les différents mots sont séparés par un signe souligné c’est à dire « _
«
Exemple : X_a : entier ;
Y_b : réel;
Quelques notions utiles:
1) L’identificateur ne doit pas commencer par un chiffre. Il doit être en rapport avec ce que
contient la variable. Il ne doit pas contenir d’espaces ni contenir le caractère -. En général un
identificateur doit refléter la variable qu’il contient
Exemple : si notre variable est la masse d’un premier objet, on peut choisir comme
identificateur : masse_objet1
2) On peut copier directement une variable initialement déclarée comme entier dans une
variable initialement déclarée comme double.
Exemple a :entier ;
X :réel;
X=a ;
Alors que pour copier une variable initialement déclarée comme double dans une variable
initialement déclarée comme entier, il faut d’abord transformer la variable réelle en une
variable entière .
Algorithmique et programmation 1
Pr. G. Mangoub
A-4 Expressions
Une expression peut être une instruction ou une suite d’instructions séparées par l’un des
opérateurs suivants :
Opérateurs d'assignation
Opérateur logiques
OU : ||
ET : &&
Algorithmique et programmation 1
Pr. G. Mangoub
NON :!
Exercice1
Ecrire un algorithme qui lit trois variables réelles A, B et C et qui calcule :
X= A+B
Y= (A*B)-C
W=A+C
On utilisera les commentaires autant que possible
Solution de l’Exercice1
Introduction au langage C
C’est un langage de haut niveau qui permet la manipulation de bits, d’opérations
arithmétiques et logiques
Sous programme : fonction
Programmation modulaire
La définition des types de base dépend de la machine( mac, ….)
Possibilité d’introduire des commentaires. On utilise alors le
Signe // s’il s’agit d’un commentaire sur une seule ligne.
Pour le cas d’un commentaire qui porte sur plusieurs lignes, on le commence par le signe /*
et on le ferme par le signe */.
Exemple1
// Ceci est un commentaire sur une seule ligne
Exemple2
/* Ceci est un autre
Commentaire
Sur plusieurs lignes
*/
Plusieurs inconvénients
Les entiers
Courts(short int), normaux(int), long(long int)
Exemple :
int a ;
short int a, b ;
Les réels
Algorithmique et programmation 1
Pr. G. Mangoub
Exemple :
float a ;
double a, b ;
Les caractères
Char
Exemple : char a,b,c ;
Un algorithme qui ne satisfait pas à ces deux conditions n’a pas de justification et par
conséquent n’existe pas. Les données traitées par l’algorithme sont de deux types : variable ou
constante. Chaque variable et constante doit être déclarée avant d’être utilisé : nom + type.
Cette déclaration consiste en une réservation en mémoire de la place nécessaire et suffisante à
l’hébergement de la valeur.
B-2-1) Notion de constante : une constante porte un nom qu’on appelle identificateur et
garde la même valeur dans tout le programme. On la déclare de la façon suivante :
const type identificateur = valeur_de_la_constante ;
Exemple :
Const int N = 10 ;
C’est à dire qu’on déclare que N est une constante entière qui a pour valeur 10.
On peut aussi déclarer une constante de la manière suivante :
#define nom valeur ;
Exemple : #define N 10
Algorithmique et programmation 1
Pr. G. Mangoub
B-2-2) Notion de variable : Une variable est un endroit en mémoire permettant de stocker
une donnée modifiable. Une variable est caractérisée par un nom appelé un identificateur, par
un type (l’ensemble dans lequel elle prend ses valeurs) et par une valeur.
Exemple : si notre variable est la masse alors pour identificateur on peut choisir m, pour le
type c’est un réel et pour la valeur 30Kg.
La syntaxe de la déclaration est la suivante :
Type identificateur ;
Exemple1 : int a ;
Pour déclarer la variable dont le nom est l’identificateur « a » et dont le type est entier qui
peut être positif ou négatif.
Exemple2 : double X,Y,Z ;
Pour déclarer les 3 variables dont les noms respectifs sont les identificateurs X,Y et Z comme
réels qui peuvent être positifs ou négatifs.
Exemple3 : bool c ;
Pour déclarer la variable dont le nom est l’identificateur c comme boolienne. C’est à dire une
expression logique qui ne peut avoir que deux valeurs soit vrai soit faux.
Exemple4 : char a,b,c ;
Pour déclarer les 3 variables dont les noms respectifs sont les identificateurs a, b et c comme
caractères.
En ce qui concerne l’identificateur, il peut être constitué de plusieurs lettres, chiffres et mots
dans ce derniers cas les différents mots sont séparés par un signe souligné c’est à dire « _
«
Exemple : int X_a ;
Float Y_b ;
On peu aussi déclarer et initialiser une variable en même temps, exemple : int C=2 ;
float X=4.2 ;
Quelques notions utiles:
1) L’identificateur ne doit pas commencer par un chiffre. Il doit être en rapport avec ce que
contient la variable. Il ne doit pas contenir d’espaces ni contenir le caractère -. En général un
identificateur doit refléter la variable qu’il contient
Exemple : si notre variable est la masse d’un premier objet, on peut choisir comme
identificateur : masse_objet1
Algorithmique et programmation 1
Pr. G. Mangoub
2) On peut copier directement une variable initialement déclarée comme int dans une
variable initialement déclarée comme double.
Exemple int a ;
double X ;
X=a ;
Alors que pour copier une variable initialement déclarée comme double dans une variable
initialement déclarée comme int, il faut d’abord transformer la variable réelle en une variable
entière .
Exemple int a ;
double X ;
a=(int)X;
3)Tous les caractères sont repérés dans un système de représentation appelé le code ASCII.
Dans ce code, à chaque caractère correspond un entier allant de 0 à 127. En C++, pour
récupérer le code ASCII d’un caractère donné, il suffit de mettre le caractère dans un entier de
la manière suivante :
Char a ; int x ;
On lit le caractère en question, puis on le met dans l’entier x de la façon suivante : x=a ;
Donc on peut comprendre que lorsqu’on compare des caractères, c’est en faite leur code
ASCII qu’on compare.
4)On peut aussi transformer un caractère qui est une lettre majuscule (minuscule) en un
caractère qui est une lettre minuscule(majuscule) pour cela, il suffit de lui ajouter ‘a’-‘A’ de la
manière suivante :
Char a, b ;
On lis une lettre majuscule et on la place dans a
On transforme cette lettre en celle qui lui correspond en minuscule en plaçant le résultat dans
b de la manière suivante :
B= a+(‘a’ – ‘A’) ;
1) Si on a un caractère qui correspond à l’un des chiffres allant de 0 à 9, on peut
transformer ce caractère en un entier de la manière suivante :
Char a ; int x ;
On lit le caractère a
Algorithmique et programmation 1
Pr. G. Mangoub
Les délimiteurs
Ils constituent la ponctuation du langage
Le délimiteur Utilité
Les accolades { } elle contiennent le corps du programme.
Le point virgule ; La fin d’une ligne est marquée par un ; et
nom par un retour à la ligne. Donc sur une
même ligne de l’écran on peut avoir
plusieurs lignes du programme. Ces lignes se
terminent par un point virgule.
B= B+A ;
Le résultat pour B est 7
B-4 Expressions
Une expression peut être une instruction ou une suite d’instructions séparées par l’un des
opérateurs suivants :
Opérateurs d'assignation
Incrémentation : ++
Décrémentation : - -
Opérateur logiques
OU : ||
ET : &&
NON :!
Exercice
Ecrire un programme en C qui lit trois variables réelles A, B et C et qui calcule :
X= A+B
Y= (A*B)-C
W=A+C
On utilisera les commentaires autant que possible
Pour cet exercice, il nous paraît plus pédagogique de donner le programme en C même si on
n’a pas encore vu la traduction de tout ce qu’on a vu dans la partie algorithmique. On essayera
par la suite de comprendre l’utilité de tout ce qui apparait dans ce programme et de le détailler
dans la section intitulée structure d’un programme en C.
Algorithmique et programmation 1
Pr. G. Mangoub
//traitement
X= A+B ; /* calcul de X*/
Y= (A*B)-C ; /* calcul de Y */
W=A+C ; /* calcul de W */
Z=(A-B)/(A+C) ; /* si W est non nul on calcule puis on affiche Z */
//Edition des résultats
printf("Z=: %4.2f\n", Z);
printf("FIN");
La structure d’un programme C est proche de celle d’un algorithme. Le fichier contenant le
programme doit avoir l’extension .c. Un programme source C se présente sous forme d’une
ou plusieurs fonctions. Chacune d’elles comporte un ou plusieurs blocs d’instructions pour
réaliser une tâche précise. Chaque fonction peut faire appel à une autre fonction du
programme. La fonction principale de tout programme C s’appelle main().
Au début du programme doivent apparaître le nom des auteurs du programme, la version ou
la date de réalisation et l’objectif du programme. Ces éléments sont mis dans des
commentaires et sont donc ignorés par le compilateur.
Les #include correspondent à des directives qui indiquent au compilateur (en fait au
préprocesseur) d’inclure les fichiers nommés stdio.h et stdlib.h. Ces fichiers font parties de la
bibliothèque standard du C et donne accès à des fonctions déjà définies. Par exemple les
fonctions d’affichage (printf) et de lecture (scanf) sont définies dans stdio.h.
La fonction scanf est une fonction de saisie qui fonctionne avec un format décrivant la nature
de l’information à lire et donc la conversion à effectuer. La fonction scanf s’utilise de la
manière suivante :
scanf("%c", &un_caractere);
scanf("%d", &un_entier);
scanf("%f", &un_reel);
Algorithmique et programmation 1
Pr. G. Mangoub
scanf("%lf", &un_double);
scanf("%c%d%lf", &un_caractere, &un_entier, &un_double);
Chaque % rencontré dans le format est suivi d’un caractère indiquant la nature de
l’information à lire (c pour caractère, d pour entier, etc.). Les variables à lire sont séparées par
des virgules et sont précédées du signe & qui indique que l’on donne l’adresse de la variable
ce qui permet à scanf de changer la valeur de la variable.
La fonction printf est une fonction de saisie qui, comme scanf, fonctionne avec un format
décrivant la nature de l’information à écrire et donc la conversion à effectuer. La fonction
printf s’utilise de la manière suivante :
printf("%c\n", un_caractere);
printf("%d\n", un_entier);
printf("%f\n", un_reel);
printf("%f\n", un_double);
printf("2 * %d = %d\n", un_entier, un_entier * 2);
printf("c = %c et nb = %f\n", un_caractère, un_double);
printf("texte = %s \n", une chaine de caractères);
Finalement, les déclarations et instructions sont regroupées entre les accolades qui suivent int
main(), d’abord les déclarations, puis les instructions. main est la fonction principale, c’est à-
dire que c’est elle qui est exécutée quand le programme sera lancé. Les instructions sont les
mêmes que celles présentées dans l’algorithme.
/************************************
* présentation du programme et des auteurs ainsi que la date
*
**********************************/
#include <stdio.h>
#include <stdlib.h>
int main()
{
Déclaration des variables, constante ….etc ;
//lecture des données
//traitement
//Edition des résultats
Exécution
On peut améliorer l’affichage sur cet écran d’exécution en ajoutant des lignes blanches de la
manière suivantes :
/**********************************************************************
2 * Auteur : G. Mangoub
3 * Titre : Utilisation des opérations arithmétiques.
4
5 Septembre 2014 ***********************/
#include <stdio.h>
#include <stdlib.h>
//Déclaration
int main()
{
float A,B,C,X,Y,Z,W ;
//lecture des données
printf("donner trois reels A,B et C \n "); /* ici */
scanf("%f%f%f", &A,&B,&C);
//traitement
X= A+B ; /* calcul de X*/
Y= (A*B)-C ; /* calcul de Y */
W=A+C ; /* calcul de W */
Z=(A-B)/(A+C) ; /* calcul de Z */
//Edition des résultats
printf("Z=: %4.2f\n", Z);
printf("FIN \n"); /* et ici */
//
}
Exécution
On peut aussi améliorer le programme afin qu’il ne calcule Z que si W est non nul, soit :
/**********************************************************************
2 * Auteur : G. Mangoub
3 * Titre : Utilisation des opérations arithmétiques.
4
5 Septembre 2014 ***********************/
#include <stdio.h>
#include <stdlib.h>
//Déclaration
int main()
{
float A,B,C,X,Y,Z,W ;
//lecture des données
printf("donner trois reels A,B et C \n ");
scanf("%f%f%f", &A,&B,&C);
//traitement
X= A+B ; /* calcul de X*/
Y= (A*B)-C ; /* calcul de Y */
W=A+C ; /* calcul de W */
if (W !=0) /* on teste la valeur de W */
{
Z=(A-B)/(A+C) ; /* si W est non nul on calcule puis on affiche Z */
printf("Z=: %4.2f\n", Z);/* écrit la valeur de Z sur un nombre de caractères égal à 4, avec 2
chiffres aprés la virgule */
}
if (W ==0) /* on teste si la valeur de W est nule */
printf("Votre denominateur est nul \n");
//Edition des résultats
printf("FIN \n");
FIN
Appuyez sur une touche pour continuer...
Exercice 2
Ecrire un programme en C qui Transforme un réel AF en un entier AI
Solution de l’Exercice 2
/**********************************************************************
2 * Auteur : G. Mangoub
3 * Titre : Transformation d'un réel en entier
4
5
6 Septembre 2014 ***********************/
#include <stdio.h>
#include <stdlib.h>
//Déclaration
int main()
{
int AI ;
float AF;
/*1)Transforme un réel AF en entier AI */
// lecture des données
printf("donner un reel AF \n ");
scanf("%f", &AF);
// traitement
AI=(int)(AF);
//Edition des résultats
printf("Votre résultat est le suivant \n");
printf("AI= %d\n", AI);
printf("FIN \n");
Algorithmique et programmation 1
Pr. G. Mangoub
}
Exécution
donner un reel AF
3.14
Votre resultat est le suivant
AI= 3
FIN
Appuyez sur une touche pour continuer...
Exercice 3
Ecrire un programme en C qui donne le code ASCII des caractères 1, a et Z
Solution de l’Exercice 3
/**********************************************************************
2 * Auteur : G. Mangoub
3 * Titre : code ASCII d'un caractère donné
4
5
6 Septembre 2014 ***********************/
#include <stdio.h>
#include <stdlib.h>
//Déclaration
int main()
{
char x,y,z;
int X,Y,Z;
x='1';
y='a';
z='Z';
Algorithmique et programmation 1
Pr. G. Mangoub
// traitement
X=x;
Y=y;
Z=z;
//Edition des résultats
printf("le code ASCII du caractere 1 est: %d\n", X);
printf("le code ASCII du caractere a est: %d\n", Y);
printf("le code ASCII du caractere Z est: %d\n", Z);
printf("FIN \n");
Exécution
le code ASCII du caractere 1 est: 49
le code ASCII du caractere a est: 97
le code ASCII du caractere Z est: 90
FIN
Appuyez sur une touche pour continuer...
Exercice 4
Ecrire un programme en C qui Transforme les lettres minuscules a, c et e en Majuscule
Solution de l’Exercice 4
/**********************************************************************
2 * Auteur : G. Mangoub
3 * Titre : transformation d'une lettre minuscule en majuscule
4
5
6 Septembre 2014 ***********************/
#include <stdio.h>
#include <stdlib.h>
Algorithmique et programmation 1
Pr. G. Mangoub
//Déclaration
int main()
{
char x,y,z;
char X,Y,Z;
x='a';
y='c';
z='e';
// traitement
X=x+( 'A'- 'a');
Y=y+('A'-'a');
Z=z+('A'-'a');
+
//Edition des résultats
printf("le majuscule de a est: %c\n" , X);
printf("le majuscule de c est: %c\n", Y);
printf("le majuscule de e est: %c\n", Z);
printf("FIN \n");
Exécution
le majuscule de a est: A
le majuscule de c est: C
le majuscule de e est: E
FIN
Appuyez sur une touche pour continuer...
Exercice 5
Ecrire un programme en C qui transforme les lettres majuscules B, D et Z en minuscule.
Algorithmique et programmation 1
Pr. G. Mangoub
Solution de l’Exercice 5
/**********************************************************************
2 * Auteur : G. Mangoub
3 * Titre : transformation d'une lettre majuscule en minuscule
4
5
6 Septembre 2014 ***********************/
#include <stdio.h>
#include <stdlib.h>
//Déclaration
int main()
{
char x,y,z;
char X,Y,Z;
X='B';
Y='D';
Z='Z';
// traitement
x=X+( 'a' -'A');
y=Y+('a'-'A');
z=Z+('a'-'A');
//Edition des résultats
printf("le minuscule de B est: %c\n" , x);
printf("le minuscule de D est: %c\n", y);
printf("le minuscule de Z est: %c\n", z);
printf("FIN \n");
Exécution
le minuscule de B est: b
le minuscule de D est: d
le minuscule de Z est: z
FIN
Appuyez sur une touche pour continuer...
Remarque :
En plus de <stdio.h>, <stdlib.h> il existe d’autres bibliothèques. Nous les introduirons
lorsque nous en aurons besoin. Ainsi par exemple pour pouvoir utiliser des fonction
prédéfinie en maths(valeur absolue, racine carrée, sinus, tangente, etc…), il faut introduire le
module <math.h>,
<stdbool.h>pour manipuler les type bool et <string.h> pour manipuler les chaines de
caractères( on peut par exemple compter le nombre de caractères d’une chaine en utilisant la
fonction strlen prédéfinie dans ce module).
Algorithmique et programmation 1
Pr. G. Mangoub
Exercice 6
Ecrire un programme en C qui :
1) Lit un réel A et calcule sa valeur absolue
2) Calcule la racine de la valeur absolue de A
3) Lit une chaine de dix caractère et l’affiche
4) Compte le nombre de caractères de la chaine
Solution de l’Exercice 6
/**********************************************************************
2 * Auteur : G. Mangoub
3 * Titre : test de quelques modules bibliothèque C
4
5 Septembre 2014 ***********************/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
//Déclaration
int main()
{
float A,B,C ;
int n;
char texte[10];
//lecture des données
printf("donner un reel A \n ");
scanf("%f", &A);
printf("donner un texte de dix caracteres au plus \n ");
scanf("%s", &texte);
n=strlen(texte);
//traitement
B= fabs(A) ; /* calcul de la valeur absolue de A*/
C= sqrt(B) ; /* calcul de la racine carrée de B */
//Edition des résultats
printf("B=: %4.2f\n", B);
printf("C=: %4.2f\n", C);
printf("Voici votre texte\n");
printf("%s\n", texte);
printf(" le nombre de caracteres de votre texte est: n=%d\n",n);
printf("FIN \n");
}
Exécution
Algorithmique et programmation 1
Pr. G. Mangoub
donner un reel A
-16
donner un texte de dix caracteres au plus
abcdefghij
B=: 16.00
C=: 4.00
Voici votre texte
abcdefghij
le nombre de caracteres de votre texte est: n=10
FIN
Appuyez sur une touche pour continuer...