Vous êtes sur la page 1sur 20

Chapitre 1

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

qui affichera 1 puis affichera 2 à la suite de 1.

� �
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

3 /* Cette instruction permet d’ordonner à


4 l’ordinateur un retour à la ligne */
5 cout << endl;

� �
6 cout << 2;

� �
Voici l’affichage obtenu :
1 1

� �
2 2

Remarquez que les délimiteurs /* et */ permettent, contrairement au délimiteur //, d’intro-


duire un commentaire s’étendant sur plusieurs lignes.
Pour aller plus loin : Il est possible de combiner ces trois instructions en une seule ligne,
� �
qui contiendra tout de même ces trois instructions !

� �
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.

1.2 Séquences d’instructions


Un programme est une série d’instructions effectuées l’une à la suite de l’autre, de la première
à la dernière, de manière séquentielle. Chaque instruction est un ordre simple donné à l’ordinateur.
Chaque programme commence par exécuter sa première instruction. Ce n’est que lorsqu’elle
est terminée qu’il passe à la seconde. S’il y a une troisième instruction, il attend d’avoir terminé
la deuxième pour l’exécuter.
Remarque importante ! Un algorithme possède un début et une fin. Cela est matérialisé par
un ensemble d’instructions.
1. Pour marquer le début de votre algorithme, vous devrez faire débuter votre algorithme par
� �
les instructions suivantes :
1 #include "iutv.h" // marque le début de l’algorithme
2

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 }

Par exemple, en complétant l’exemple vu précédemment, nous obtenons l’algorithme complet

� �
suivant :
1 #include "iutv.h"
2

3 int main()
4 {
5 cout << 1;
6 cout << endl;
7 cout << 2;
8

9 return 0;

� �
10 }

� Sur ce thème : Exercice 1-TD1, Questions 1.1 et 1.2

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.

1.3.1 Noms de variables


Selon la syntaxe utilisée dans ce cours, le nom d’une variable commence par une lettre minuscule
(a à z) ou majuscule (A à Z), ou bien par le caractère souligné (_). Pour la suite de son nom,
on peut utiliser des lettres minuscules ou majuscules, des soulignés et des chiffres (0 à 9). Le nom
d’une variable ne contient donc pas d’espace.
Exemple de noms de variables valides :

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

1.3.2 Quelques types de variables de base


Entiers
Le type int (integer ) permet de représenter un entier relatif.
Exemple :

-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 !"

1.3.3 Déclaration de variables


Les variables doivent être déclarées avant de pouvoir être utilisées. Pour cela, on doit indiquer
le nom de chaque variable ainsi que son type.
� �
L’exemple
1 #include "iutv.h"
2

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

x=2; // J’affecte la valeur entière 2 à la variable x

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;

� �
}

L’opérateur d’affectation commence toujours par évaluer la valeur à droite du signe « = »


(quelle que soit la complexité du calcul) avant de placer le résultat dans l’espace mémoire réservé
à la variable.
� �
Ainsi, dans l’exemple suivant :
#include "iutv.h"

int main()
{
int x;
x=(1+2)/3;

return 0;

� �
1ère année �9 � Intro à l’algorithmique et à la programmation
IUT de Villetaneuse

� �
}

l’instruction x=(1+2)/3; calcule d’abord la valeur de l’expression (1+2)/3 avant d’affecter le


résultat du calcul à la variable nommée x, qui prend finalement la valeur 1.

1.3.5 Utilisation des variables


Dans l’évaluation d’une expression, un nom de variable est remplacé par sa valeur. Si x vaut
� �
2, par exemple, alors (x*3) vaut 6. Ainsi, à l’issue de l’algorithme suivant :
1 #include "iutv.h"
2

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

9 cout << z << endl;


10 int y = 3;
11

12 return 0;

� �
13 }

n’aurait d’ailleurs pas résolu le problème.


A retenir ! Pour définir une variable, il faut impérativement la déclarer et lui affecter une
valeur.

Une source d’erreurs importante en programmation est la non-maîtrise de la séquentialité


des instructions. Les instructions s’exécutent dans l’ordre où elles sont écrites, les éventuelles
modifications de variables se font dans le même ordre.
� Sur ce thème : Exercice 1-TD1, Questions 1.4 à 1.8

� �
1ère année �11 � Intro à l’algorithmique et à la programmation
IUT de Villetaneuse

1.4 Opérations et conversions


1.4.1 Opérations permises sur les nombres
Le tableau suivant récapitule succinctement les principales opérations possibles sur des nombres :

Expression Résultat, x et y étant des nombres (int ou float)


x + y somme de x et de y
x - y différence de x et de y
x * y produit de x et de y
x / y division de x par y
x % y reste de la division entière de x par y
-x opposé de x
abs(x) valeur absolue de x

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.

1.4.2 Chaînes de caractères et opérations permises


Jusqu’ici, toutes les données saisies, calculées et affichées étaient numériques. Il existe en fait
d’autres types de données comme les chaînes de caractères (« string » en anglais).
� �
Par exemple, le programme
1 #include "iutv.h"
2

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

6 cout << str;


7

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 :

Expression Résultat, s et t étant des chaînes de caractères


s + t concaténation de s et de t (mises bout à bout)
size(s) longueur de s
lower(s) s mis en minuscules
upper(s) s mis en majuscules

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.

1.4.3 Conversion de type de données


– La conversion de type (encore appelée cast) permet de convertir une valeur numérique 1
d’un type en sa représentation dans un autre type (avec perte éventuelle d’informations). La
conversion explicite de type s’effectue en faisant précéder la valeur (ou variable) à convertir
� �
par le type cible entre parenthèses. Par exemple,
1 #include "iutv.h"
2

3 int main()
4 {
5 float c = 3.5;
6 int i;
7

8 i = (int) c;
9

10 cout << c << endl;


11 cout << i << endl;
12

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

affiche 1 si l’utilisateur saisit 3 et 2.


affiche 1.5 si l’utilisateur saisit 3 et 2.
– Il est possible de transformer une chaîne de caractères en un nombre et un nombre en chaîne
de caractères. Ceci se fait à l’aide des quatre opérations de conversion données ci-dessous.
Expression Résultat
string2int(val) val (type string) est transformée en un nombre de type int
string2float(val) val (type string) est transformée en un nombre de type float
int2string(val) val (type int)est transformée en une chaîne de caractères
float2string(val) val (type float) est transformée en une chaîne de caractères
Le tableau suivant indique alors les résultats des opérations de conversion sur une variable
val. La valeur de val avant conversion (et donc son type) est donnée à la première ligne.
valeur de val 10 2.5 "2" "2.5" "12a34"
string2int(val) ERREUR ERREUR 2 2 12
string2float(val) ERREUR ERREUR 2 2.5 12
int2string(val) "10" "2" ERREUR ERREUR ERREUR
float2string(val) "10" "2.5" ERREUR ERREUR ERREUR
Remarques importantes ! :
– Les fonctions string2int(val) et string2float(val) effectuent une conversion à partir
du début de la chaîne et s’arrêtent dès qu’un caractère erroné (ne représentant pas un
chiffre) est détecté.
– La fonction string2int(val) supprime ce qui se trouve après le point si val est de type
float. Ceci revient alors à prendre la partie entière inférieure de val si val est positive
et la partie entière supérieure sinon.
– Les fonctions string2int(val) et string2float(val) génèrent une erreur si val n’est
pas une chaîne de caractères.
– Les fonctions int2string(val) et float2string(val) génèrent une erreur si val n’est
pas un nombre.
� �
Intro à l’algorithmique et à la programmation �14 � 1ère année
Departement informatique

� Sur ce thème : Exercice 1 - TD1, Questions 1.9 à 1.12


� Sur ce thème : Exercice 2, TD1

1.5 Entrées / sorties


L’opérateur cout permet d’afficher une valeur connue à l’écran. Elle permet d’afficher indif-
féremment des nombres ou des chaînes de caractères. C’est un opérateur qui réalise une sortie car
elle fait « sortir » des valeurs de l’ordinateur vers l’utilisateur.

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

6 cout << "Entrez un entier"<<endl;


7 int z;
8 cin >> z;
9 cout << "Le nombre que vous avez saisi est : " << z << endl;
10

11 cout << "Saisir un mot";


12 string mot;
13 cin>>mot;
14 cout << "Le mot que vous avez saisi est " << mot << endl;
15

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 }

2. Surtout pour les nombres


3. Avec la restriction qu’elle ne doit contenir qu’un mot

� �
1ère année �15 � Intro à l’algorithmique et à la programmation
IUT de Villetaneuse

� Sur ce thème : Exercice 3, TD1


� Sur ce thème : Exercice 4, TD1
Le programme suivant permet de demander à l’utilisateur les deux côtés d’un rectangle, et
� �
d’en calculer la surface avant de l’afficher :
1 #include "iutv.h"
2

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

12 float surface = cote1 * cote2;


13 cout << "La surface du rectangle ainsi formé est : " << surface << endl;
14

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

TD1 : Séquentialité et variables

Exercice 1 : Test de compréhension


Question 1.1 : [cout] A quoi sert l’opérateur cout ? Comment l’utilise-t-on ?

� �
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

Exercice 2 : Concaténation de chaînes de caractères


� �
Considérons le programme suivant :
1 #include "iutv.h"
2

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.

Exercice 3 : Saisie de chaînes de caractères au clavier


� �
Qu’affiche le programme suivant, à supposer que l’utilisateur saisisse 123 puis 456 ?
1 #include "iutv.h"
2

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 }

Exercice 4 : Saisie de nombres au clavier


Comment faudrait-il modifier ce programme pour qu’il affiche 579, à supposer que l’utilisateur
saisisse 123 puis 456 ?
Important ! Vous prendrez soin de ne pas modifier le type des variable a et b.
NB : 579 est la somme de 123 et de 456.

Exercice 5 : Adaptation de programmes existants


� �
Que faut-il modifier à ce programme pour que ce soit le périmètre qui soit calculé ?
1 #include "iutv.h"
2

3 int main()
4 {
5

6 cout << "Quelle est la longueur du premier cote ?";


7 float cote1;
8 cin >> cote1;
9

10 cout << "Quelle est la longueur du second cote ?";


11 float cote2;
12 cin >> cote2;
13

14 float surface = cote1 * cote2;


15 cout << "La surface du rectangle ainsi formé est " << surface;
16

17 return 0;

� �
18 }

Exercice 6 : Échange de nombres sans variable intermédiaire


Écrire un programme qui demande à l’utilisateur deux nombres, les affiche, les échange, et
les ré-affiche après échange, mais sans utiliser de variable intermédiaire. On pourra utiliser une
addition et une soustraction pour ne rien perdre.
Note : la méthode d’échange sans variable peut paraître plus intéressante que celle donnée en
cours puisqu’elle n’utilise pas de variable intermédiaire. Cependant, cette méthode nécessite plus
d’opérations (l’ordinateur doit effectuer des additions/soustractions). De plus, elle est moins gé-
nérale car elle suppose que les variables à échanger sont de type numérique : elle ne fonctionnerait
pas sur des chaînes de caractères par exemple. D’une manière générale, il y a souvent plusieurs
manières de résoudre un problème. Le rôle du programmeur consiste à identifier le meilleur al-
gorithme (le meilleur enchaînement d’instructions), compte tenu des hypothèses qu’il lui semble
raisonnable de faire.

� �
Intro à l’algorithmique et à la programmation �20 � 1ère année
Departement informatique

TP1 : Découverte de Code :: Blocks

Exercice 7 : Présentation de Code : :Blocks


Tous les TP de BdP se feront en utilisant le logiciel Code :: Blocks. Ce logiciel est un outil
de développement complet pour le langage de programmation C++. Il dispose d’un certain nombre
d’options que nous n’utiliserons pas :
– Nous nous en tiendrons aux fonctions de base de Code :: Blocks ;
– Nous n’exploiterons qu’une petite partie des possibilités offertes par le langage C++.
– La raison de ces simplifications est la mise en avant de ce qui est fondamental et commun
à la plupart des langages de programmation. Ce cours n’est pas spécifiquement un cours
de C++, mais aborde des notions bien plus générales que celles propres à un langage de
programmation particulier. D’autres enseignements à l’IUT vous permettront d’acquérir des
compétences spécialisées dans telles ou telles techniques.
Question 7.1 : Pour lancer Code :: Blocks, suivez les instructions décrites dans le tutoriel qui
vous est fourni. Vous devriez obtenir une fenêtre ressemblant à celle ci-dessous.
Remarque : Vous choisirez le compilateur GNU GCC Compiler dans la fenêtre qui s’affichera.
Important ! En cas de difficultés, ne pas hésiter à demander de l’aide à votre chargé de tds.

Exercice 8 : Préparation des travaux pratiques


� �
1ère année �21 � Intro à l’algorithmique et à la programmation
IUT de Villetaneuse

1. créer le répertoire bdp dans votre home directory,


Procédure proposée : mkdir ~/bdp
2. placer le fichier iutv.h dans le répertoire bdp. Vous trouverez ce fichier dans le répertoire
TPINFO/M1102_FI/2013_2014/, en utilisant par exemple la commande
Procédure proposée :
cp ~/../TPINFO/M1102\_FI/2013\_2014/iutv.h ~/bdp
3. créer le répertoire tp1 à l’intérieur du répertoire bdp.
Procédure proposée :
cd ~/bdp
mkdir tp1

Exercice 9 : Exécution d’un algorithme ne contenant aucune séquence


En vous aidant du tutoriel fourni :
1. créer un projet tp_exo1
Procédure non exhaustive : File->New Project->Console application,
puis Next->C++,
puis entrez le nom du projet et le nom du répertoire contenant le projet, ici bdp, puis Finish,
2. intégrer le fichier iutv.h à votre projet ; pour cela cliquer avec le bouton droit de la souris
sur le nom de votre projet (panneau project à gauche) et utiliser la commande add File
puis sélectionner le fichier dans la fenêtre qui apparaîtra,
3. créer ou modifier le fichier main.cpp
Procédure non exhaustive : File->New File -> C/C++ Sources
qui contiendra votre algorithme sans aucune séquence c’est à dire ne contenant que les
instructions obligatoires concernant le début et la fin de l’algorithme,
Attention ! Bien écrire pour les travaux pratiques #include "../iutv.h" en première ligne
de votre algorithme ; ceci est une conséquence de la configuration du projet dans le logiciel
Code :: Blocks.
4. exécuter l’algorithme et bien observer les affichages obtenus. Expliquez !
Vous devriez obtenir une fenêtre ressemblant à celle ci-dessous.

� �
Intro à l’algorithmique et à la programmation �22 � 1ère année
Departement informatique

Exercice 10 : Exécution d’un algorithme simple


En vous aidant du tutoriel fourni :
1. créer un projet tp_exo2,
2. recopier l’algorithme complet du cours au paragraphe 1.2,
3. exécuter l’algorithme et bien observer les affichages obtenus. Expliquez !

Exercice 11 : Exécution d’un algorithme simple avec affectation et affi-


chage d’une variable
1. créer un projet tp_exo3,
2. recopier l’algorithme complet du cours au paragraphe 1.3.4,
3. compléter l’algorithme pour afficher le contenu de la variable x,
4. exécuter l’algorithme et bien observer les affichages obtenus. Expliquez !

Exercice 12 : Correction d’erreurs simples


� �
En suivant la même démarche que les questions précédentes, recopier l’algorithme suivant :
1 #include "../iutv.h"
2

3 int main()
4 {
5

6 // simplissime
7 cout << "hello world";
8

9 // avec des variables


10 str1 = "hello"
11

12 cout << str1 << endl;


13

14 string str2 = "world";


15

16 cout << str2 << endl;


17

18 cout << str1 + " " + str2;


19

20 return 0;

� �
21 }

1. essayez d’exécuter l’algorithme ; que constatez-vous ? Interprétez les messages d’erreurs ?


2. corriger méthodiquement l’algorithme et observez les messages affichés.

Exercice 13 : Algorithme simple sur les nombres


Ecrire un algorithme qui permet de saisir trois entiers au clavier ; d’additionner les deux pre-
miers entiers et de diviser la somme obtenue par le troisième entier.
Un exemple d’affichage lors de l’exécution de votre algorithme est décrit ci-dessous :

Donnez le premier entier : 14


Donnez le deuxième entier : 11
Donnez le troisième entier : 3

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

Vous écrirez un algorithme lisible et bien commenté.

Exercice 14 : Algorithme simple sur les chaînes de caractères


Ecrire un algorithme qui permet de saisir une chaîne de caractères et affiche sa taille.
Un exemple d’affichage lors de l’exécution de votre algorithme est décrit ci-dessous :
Donnez une chaîne de caractères :
Une vache se promène dans le près.

La chaîne que vous avez saisi est :


Une vache se promène dans le près

Sa taille est de 34 caractères.


Vous écrirez un algorithme lisible et bien commenté.

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

Vous aimerez peut-être aussi