ch1 Coursexercices
ch1 Coursexercices
ch1 Coursexercices
Séquentialité et variables
1.1 Introduction
Un ordinateur est une machine et en tant que telle, elle ne fait que ce qu’on lui demande. Les
programmeurs ont pour tâche de faire faire à ces machines exactement ce qu’ils veulent qu’elles
fassent et dans le bon ordre ni plus, ni moins, ni autre chose. Donner à un ordinateur une séquence
d’ordres à effectuer, c’est écrire un programme qu’il devra exécuter.
Les problèmes à résoudre étant parfois complexes, la tâche principale est décomposée en plu-
sieurs sous-problèmes plus simples résolus les uns après les autres. En définitive, pour résoudre un
problème, le programmeur conçoit une série d’instructions, chacune donnant un ordre à l’ordina-
teur.
L’instruction cout « 1;, par exemple, correspond à l’ordre donné à l’ordinateur d’afficher 1.
Il s’agit d’un ordre simple, mais qui peut être combiné à d’autres pour produire des résultats (un
peu) plus complexes. Par exemple, cette instruction suivie de cout « 2; forme un programme
avec deux instructions (dans le cercle : les numéros de ligne du programme) :
� �
1 cout << 1; // première instruction
� �
2 cout << 2; // deuxième instruction
� �
Voici l’affichage obtenu :
� �
1 12
Remarque importante !
– Chaque instruction se termine obligatoirement par le caractère ;.
– Toute les lignes qui sont précédées par les deux caractères // représentent des commentaires
qui s’étendent sur une seule ligne (prochain retour chariot). Ce ne sont pas des instructions
destinées à l’ordinateur mais seulement des explications destinées à la lecture du programme
et permettant une plus grande lisibilité de l’algorithme.
Si nous souhaitons séparer les deux affichages par un retour à la ligne il faudra intercaler
entre les deux instructions précédentes une troisième instruction ordonnant le retour à la ligne.
L’algorithme obtenu est le suivant :
5
IUT de Villetaneuse
� �
1 cout << 1;
2
� �
6 cout << 2;
� �
Voici l’affichage obtenu :
1 1
� �
2 2
� �
1 cout << 1<< endl << 2;
Cet exemple est évidemment simpliste et peut paraître très éloigné des programmes utilisés
habituellement. Mais même pour réaliser des applications complexes (animation et rendu 3D, par
exemple), ce sont toujours les mêmes principes simples qui sont à l’œuvre.
Au lieu d’instructions qui se contentent d’afficher un nombre à l’écran, on utilisera des instruc-
tions toujours aussi simples à écrire, mais dont les effets seront plus spectaculaires. Le travail du
� �
programmeur n’est pas plus complexe pour autant. Ainsi, au lieu de
1 cout << 1;
2 cout << endl;
� �
3 cout << 2;
� �
On aura des instructions comme
1 pivoter(0.2); // pour faire tourner une scène 3D de 0.2 degrés
� �
2 afficher(0.1); // pour demander un rendu 3D de la scène en moins de 0.1 seconde
dont l’impact visuel sera bien plus important, mais dont la complexité pour le programmeur reste
comparable.
A retenir ! Construire des programmes informatiques, c’est toujours se demander
quelles instructions exécuter, et dans quel ordre.
3 int main()
� �
4 {
� �
Intro à l’algorithmique et à la programmation �6 � 1ère année
Departement informatique
2. Pour marquer la fin de votre l’algorithme, vous devrez faire terminer votre algorithme par
� �
les instructions suivantes :
1 return 0; // marque la fin de l’algorithme
� �
2 }
� �
suivant :
1 #include "iutv.h"
2
3 int main()
4 {
5 cout << 1;
6 cout << endl;
7 cout << 2;
8
9 return 0;
� �
10 }
1.3 Variables
Les instructions d’un programme permettent de traiter des données (quantité de vie restante,
âge d’un client, nombre de munitions, etc.) qui doivent pouvoir être ajustées au fur et à mesure que
le programme se déroule. L’ordinateur stocke donc chacune de ces informations dans sa mémoire à
un endroit bien identifié, grâce à des variables. On utilise le terme variables parce que ces données
sont susceptibles d’être modifiées, par opposition à des constantes.
Les variables associent un nom à une valeur. Une variable nommée x peut par exemple prendre
la valeur 1. Chaque variable mobilise un espace mémoire accessible par un nom, et qui peut contenir
une valeur. La valeur d’une variable peut être changée au cours de l’exécution d’un programme.
var_1
_var1
prix_artcile
tempCapteur
Important ! Nous venons de voir plus haut qu’une variable permettait de stocker une valeur
pour pouvoir, éventuellement, la modifier plus tard. Une variable possède un nom pour pouvoir,
clairement, l’identifier par la suite. Cependant, avant de pouvoir utiliser une variable, il faudra
d’abord la déclarer en précisant le type d’information (on parle de type de la variable) que
contiendra la variable.
� Sur ce thème : Exercice 1 - TD1, Question 1.3
� �
1ère année �7 � Intro à l’algorithmique et à la programmation
IUT de Villetaneuse
-100
2000
Attention ! Il existe d’autres types permettant de stocker de grands entiers, par exemple, le
type long que vous verrez dans les prochains travaux dirigés et travaux pratiques.
Caractères
Le type char (caractère)permet de représenter un caractère. Un caractère est délimité par des
apostrophes.
Exemple :
’1’
Pour aller plus loin : En réalité chaque caractère est associé à un numéro entier, bien déterminé,
qui est consigné dans une table. Cette table est nommé table ASCII. Ainsi, lorsque vous écrivez
par exemple, ’1’ (ne pas confondre avec le chiffre 1, en effet, c’est un caractère !) ; l’ordinateur
représente ce caractère par le code ASCII y correspondant ; en l’occurrence la valeur 112.
Réels
Le type float (réel ) représente les réels en simple précision ;
Exemple :
12.56
Attention ! Il existe d’autres types permettant de stocker des grands flottants, par exemple,
le type double permet de stocker des flottants en double précision ; vous les rencontrerez dans les
prochains travaux dirigés et travaux pratiques.
Chaînes de caractères
Une chaîne de caractères (string) est une suite d’un nombre quelconque de caractères délimités
par des guillemets ". S’il n’y a pas de caractère, on parle de chaîne vide.
Exemple :
"12.56"
"Cette vache est bien sympathique !"
3 int main()
4 {
5 int compteur, nb;
6 char car;
7 string s;
� �
Intro à l’algorithmique et à la programmation �8 � 1ère année
Departement informatique
9 return 0;
� �
10 }
montre les déclarations de deux variables entières compteur et nb, d’une variable caractère car et
d’une variable s de type chaîne de caractères.
Attention : Lorsque l’on déclare une variable, aucune valeur par défaut n’est affectée à cette
variable. On ne peut absolument pas présager de la valeur d’une variable qui n’a pas
été affectée.
1.3.4 Affectation
L’opération principale mettant en œuvre les variables est l’affectation, qui permet de changer
la valeur d’une variable en utilisant son nom. Une affectation est notée avec le signe « = ». A
gauche du signe « = », on place le nom de la variable dont on veut changer la valeur, et à droite on
définit la valeur que doit prendre la variable. Ce symbole n’est pas du tout l’égalité mathématique.
� �
Par exemple, l’instruction
#include "iutv.h"
int main()
{
int x; // Je déclare d’abord la variable ! x est de type entier
return 0;
� �
}
change la valeur de x. Notez bien que 2=x est incorrect. 2 est un nombre constant et ne change
pas de valeur. Ce n’est pas une variable et on ne peut donc pas le mettre à gauche de
l’opérateur d’affectation.
Dans cet exemple, la nouvelle valeur est directement spécifiée. On aurait également pu placer
� �
à droite du symbole « = » une expression qui représente un calcul, comme par exemple dans
#include "iutv.h"
int main()
{
int x;
x=1+2;
return 0;
� �
}
int main()
{
int x;
x=(1+2)/3;
return 0;
� �
1ère année �9 � Intro à l’algorithmique et à la programmation
IUT de Villetaneuse
� �
}
3 int main()
4 {
5 int x;
6 x=2;
7 int y;
8 y=x*3;
9
10 return 0;
� �
11 }
x vaut 2 et y vaut 6.
Cette évaluation des variables grâce à leur valeur vaut également pour les sorties écran. L’ins-
truction count « 1+2; est correcte, mais count « x+y ; l’est également, et donnera le même
résultat si par exemple x et y valent respectivement 1 et 2 juste avant son exécution.
� �
Intro à l’algorithmique et à la programmation �10 � 1ère année
Departement informatique
Il est important de noter qu’une variable ne peut être utilisée que si elle a été définie plus haut.
� �
Ainsi, le programme suivant est correct :
1 #include "iutv.h"
2
3 int main()
4 {
5 int x;
6 x = 0;
7 int y;
8 y = 2;
9 cout << (x+y)+2 << endl;
10
11 return 0;
� �
12 }
� �
alors que le suivant ne l’est pas
1 #include "iutv.h"
2
3 int main()
4 {
5 int x;
6 x = 1;
7 int z;
8 z = x+y;
9 cout << z << endl;
10
11 return 0;
� �
12 }
parce qu’à l’ instruction 8, la variable y n’avait pas encore été définie. Selon le principe de séquen-
� �
tialité, ajouter la ligne 10 comme dans le le programme suivant :
1 #include "iutv.h"
2
3 int main()
4 {
5 int x = 1; // On déclare et affecte la variable x
6 // en une seule instruction
7 int z = x+y;
8
12 return 0;
� �
13 }
� �
1ère année �11 � Intro à l’algorithmique et à la programmation
IUT de Villetaneuse
Il faut être très vigilant au type des nombres quand on applique les opérateurs ci-dessus : si une
opération implique deux nombres de même type, alors le résultat reste du même type.
Si une opération implique à la fois une valeur de type int et une autre de type float, alors le
résultat sera de type float (float « absorbe » int).
Notons en particulier que le résultat de la division de deux nombres entiers ne donne pas un
float. Typiquement, 3/2 vaut 1 et pas 1.5.
3 int main()
4 {
5 cout << "hello world";
6
7 return 0;
8
� �
9 }
affiche « hello world » à l’écran (sans les guillemets), "hello world" étant une chaîne de caractères
alpha-numériques.
Les valeurs des chaînes de caractères sont définies entre des guillemets quotes « " » . Attention,
chaque caractère compte, ainsi que la casse (majuscules/minuscules). Les chaînes de caractères
suivantes sont donc toutes différentes les unes des autres :
– "HelloWorld"
– "Hello World"
– "hello world"
– "helo world"
– "halo world"
– "halo 1 world 2"
On peut définir des variables de type chaînes de caractères de la même manière que celles de
� �
type numérique. Ainsi, le programme suivant :
1 #include "iutv.h"
2
3 int main()
4 {
5 string str = "hello world";
� �
Intro à l’algorithmique et à la programmation �12 � 1ère année
Departement informatique
8 return 0;
� �
9 }
définit une variable de nom str de type chaîne de caractères, pour ensuite l’afficher.
La chaîne de caractères vide (sans un seul caractère dedans) se note par deux simples guillemets
accolés « "" ».
Par exemple, string str = "" définit une chaîne de caractères et lui donne la valeur d’une
chaîne vide (entre les deux guillemets, il n’y a pas d’espace qui compterait, sinon, pour un carac-
tère !).
Il est possible d’appliquer quelques opérations sur les chaînes de caractères. Ces opérations
sont résumées dans le tableau suivant :
Notez que certaines opérations peuvent être interprétées différemment selon le type des don-
nées auxquelles elles s’appliquent. C’est par exemple le cas de l’opérateur « + ». Ainsi cout «
1+2; affichera 3 (le + étant interprété comme une somme de deux nombres), alors que string s
= "hello"; cout « s + "world"; affichera helloworld (le + étant interprété comme une opé-
ration de concaténation de deux chaînes de caractères ).
Si l’opérateur + peut être utilisé pour des nombres ou des chaînes de caractères, il n’est par
contre pas possible d’utiliser les deux à la fois. En effet, on ne peut pas additionner un nombre
avec une chaîne de caractères.
3 int main()
4 {
5 float c = 3.5;
6 int i;
7
8 i = (int) c;
9
13 return 0;
� �
14 }
Ce programme
1. déclare deux variables : c de type float et i de type entier,
2. la variable c est initialisée à la valeur réelle 3.5,
1. Pas tout à fait exact. Mais simplifions pour commencer !
� �
1ère année �13 � Intro à l’algorithmique et à la programmation
IUT de Villetaneuse
3. puis sa valeur est convertie en entier par un cast, pour être stockée dans la variable i
(de type entier),
4. enfin, les valeurs des deux variables sont affichées.
Le résultat est alors :
c = 3.5
i = 3
On remarque que la variable c n’est pas modifiée par l’opérateur de cast.
Il est possible que lors d’un calcul les opérandes n’aient pas le même type ou que le type du
résultat de l’opération ne soit pas celui des opérandes. Il faut alors expliciter le type désiré
par la syntaxe suivante : (type) expression.
Par exemple, dans le cas de la division entre deux entiers, en C le résultat est le quotient
� �
� �
euclidien (le résultat est arrondi à l’entier inférieur).
1 #include "iutv.h"
1 #include "iutv.h"
2
2
3 int main()
3 int main()
4 {
4 {
5 int i,j;
5 int i,j;
6
6
7 cin >> i;
7 cin >> i;
8 cin >> j;
8 cin >> j;
9
9
10 float nb = (float) i / j;
10 double nb = i / j;
// i est "castée" en float
11
11
12 cout << "nb = " << nb << endl;
12 cout << "nb = " << nb << endl;
13
13
14 return 0;
return 0;
� � 15 }
14
}
� �
15
Il existe également des fonctions d’entrée qui permettent d’entrer des valeurs dans l’ordinateur ;
cette tâche est réalisé, entre autre, simplement 2 , par l’opérateur cin . Par exemple, le programme
suivant demande un nombre entier puis l’affiche ; ensuite, il demande une chaîne de caractères 3 à
� �
l’utilisateur puis l’affiche :
1 #include "iutv.h"
2
3 int main()
4 {
5
16 return 0;
� �
17 }
Remarques importantes !
– L’instruction cin » z permet de saisir au clavier un entier et de l’affecter à la variable z.
– L’opérateur cin, dans le cas de chaîne de caractères, ne permet de saisir que le premier
mot de cette dernière (la séparation des mots est matérialisée par des espaces). Pour saisir
un chaîne de caractères contenant plusieurs mots, il faudra utiliser la fonction getline(cin,
variable) où variable est une variable de type string destinée à contenir la chaîne saisie.
� �
Par exemple :
1 #include "iutv.h"
2
3 int main()
4 {
5 cout << "Entrez une chaîne de caractères"<<endl;
6 string str;
7 getline(cin,str); // Saisie d’une chaîne de caractères pouvant contenir plusieurs mots
8 cout << "La chaîne de caractères que vous avez saisie est " << str << endl;
9
10 return 0;
� �
11 }
� �
1ère année �15 � Intro à l’algorithmique et à la programmation
IUT de Villetaneuse
3 int main()
4 {
5 cout << "Quelle est la longueur du premier côté ?";
6 float cote1;
7 cin >> cote1 ;
8 cout << "Quelle est la longueur du deuxième côté ?";
9 float cote2;
10 cin >> cote2 ;
11
15 return 0;
� �
16 }
L’utilisation de variables pour stocker les longueurs des côtés saisies permet ici d’écrire un pro-
gramme générique permettant de calculer la surface de n’importe quel rectangle.
� Sur ce thème : Exercice 5, TD1
� Sur ce thème : Exercice 6, TD1
� �
Intro à l’algorithmique et à la programmation �16 � 1ère année
Departement informatique
� �
Question 1.2 : [Séquences d’instructions] Qu’affichent les programmes suivants ?
1 cout << 1;
2 cout << 2;
� �
3 cout << 3;
� �
1 cout << 2;
2 cout << 1;
� �
3 cout << 3;
Question 1.3 : [Noms de variables] Parmi ces exemples, seuls certains sont des noms de variable
valides. Lesquels ?
– x
– x1
– X1
– toto
– éric
– _eric
– t_42
– 24_t
� �
Question 1.4 : [Séquences d’instructions] Que fait la séquence suivante ?
1 #include "iutv.h"
2
3 int main()
4 {
5 int x;
6 x = 1;
7 int y;
8 y = 2;
9 cout << x << endl;
10 z = x+y;
11 cout << z << endl;
12
13 return 0;
� �
14 }
Important : Vous prendrez soin de suivre pas à pas l’évolution des variables.
Question 1.5 : [Séquentialité et modifications des valeurs des variables] Qu’affiche le programme
� �
suivant ?
1 #include "iutv.h"
2
3 int main()
4 {
5
6 int toto = 4;
7 cout << toto << endl;
� �
1ère année �17 � Intro à l’algorithmique et à la programmation
IUT de Villetaneuse
8 toto = 5 + 5;
9 cout << toto << endl;
10 int tata = toto + 4;
11 cout << tata << endl;
12 tata = tata + 5;
13 cout << toto << endl;
14 tata = tata + (toto*2);
15 cout << tata << endl;
16
17 return 0;
� �
18 }
Pour répondre à la question, dessiner les cases mémoires à chaque étape de l’exécution du pro-
gramme.
� �
Question 1.6 : [Séquentialité et valeur des variables] Qu’affiche le programme suivant ?
1 #include "iutv.h"
2
3 int main()
4 {
5 int a=1;
6 int b=2;
7 a=b;
8 b=a;
9 cout << a << endl;
10 cout << b << endl;
11
12 return 0;
� �
13 }
� �
Question 1.7 : [Séquentialité et valeur des variables] Qu’affiche le programme suivant ?
1 #include "iutv.h"
2
3 int main()
4 {
5
6 int a=1;
7 int b=2;
8 b=a;
9 a=b;
10 cout << a << endl;
11 cout << b << endl;
12
13 return 0;
� �
14 }
Question 1.8 : [Échange des valeurs de deux variables] Que manque-t-il aux programmes pré-
cédents pour réaliser un échange entre les valeurs des variables a et b ? Écrire un programme qui
réalise un tel échange.
Question 1.9 : [Types numériques] À chaque ligne du programme suivant, complétez les pointillés
� �
avec le type de variable le plus adapté.
1 #include "iutv.h"
2
3 int main()
4 {
5 ....... a = 1.0;
� �
Intro à l’algorithmique et à la programmation �18 � 1ère année
Departement informatique
6 ....... b = 2;
7 ....... c = a + 1;
8 ....... d = b + 3;
9 ....... e = (float) d;
10 ....... f = c / b;
11 ....... g = (int) c / b;
12
13 return 0;
� �
14 }
Question 1.10 : [Concaténation] Qu’est-ce que la concaténation ? A quel type de données s’applique-
t-elle ?
Question 1.11 : [Types et addition] Donnez la valeur des expressions suivantes :
– 3 + 4
– string s = "3"; s + "4"
– 3 + "4"
– "3" + 4
Question 1.12 : [Types et multiplication] Donnez la valeur des expressions suivantes :
– 3 * 4
– "3" * "4"
– 3 * "4"
– "3" * 4
– "3" * 4.0
3 int main()
4 {
5 int cp = 93;
6 string nom = "Seine Saint-Denis";
7 string phrase = ?????;
8 cout << phrase << endl;
9
10 return 0;
� �
11 }
Question 2.1 : Que mettre à la place des ? ? ? ? ? pour que le programme affiche « Le code postal
de la Seine Saint-Denis est 93 » ?
Question 2.2 : Remplacer les instructions des lignes 7 et 8 par une instruction cout permettant
d’obtenir le même résultat.
3 int main()
4 {
5 string a;
6 cin >> a;
7 string b;
8 cin >> b;
9
� �
1ère année �19 � Intro à l’algorithmique et à la programmation
IUT de Villetaneuse
10 string c = a + b;
11 cout << c << endl;
12
13 return 0;
� �
14 }
3 int main()
4 {
5
17 return 0;
� �
18 }
� �
Intro à l’algorithmique et à la programmation �20 � 1ère année
Departement informatique
� �
Intro à l’algorithmique et à la programmation �22 � 1ère année
Departement informatique
3 int main()
4 {
5
6 // simplissime
7 cout << "hello world";
8
20 return 0;
� �
21 }
La somme de 14 et de 11 est 25
La division de 25 par 3 a pour résultat 8.3333333
� �
1ère année �23 � Intro à l’algorithmique et à la programmation
IUT de Villetaneuse
Exercice 15 : Pour allez plus loin : Débogage, mode pas à pas et suivi du
contenu des variables
Dans cette partie, nous allons utiliser le débogueur afin de suivre le contenu de variables.
1. recopiez le programme de l’exercice 6,
2. placez un point d’arrêt à la première instruction correspondant à une affectation,
3. exécuter l’algorithme pour qu’il s’arrête au premier point d’arrêt,
4. puis, exécutez la suite de l’algorithme, en mode pas à pas, en suivant le contenu des variables.
Pour cela, vous vous référerez à la partie débogage du tutoriel fourni.
5. testez les autres modes de débogage en les expliquant.
� �
Intro à l’algorithmique et à la programmation �24 � 1ère année