Chapitre 2
Chapitre 2
Chapitre 2
A) Le traitement de l'information
1) Catégorie d'information
Dans notre vie quotidienne, nos noms et prénoms nous permettent de nous
identifier, de nous différencier d'une autre personne. C'est la même chose en
programmation : un identificateur est un nom qui permet d'identifier une
information.
Un identificateur est une suite de caractères formés par des lettres et/ou des
chiffres et qui commence par une lettre. La plupart des compilateurs acceptent
aussi le caractère "souligné" pour donner plus de lisibilité à un identificateur.
3) Type de l'information
Durant les deux premières semaines de cours, on travaille surtout avec les types
entiers (int), réels (float) et caractères (char). Le type logique (booléen) sera abordé
vers la troisième semaine. Les autres types seront présentés plus tard dans le cours.
Exemple 1
sexe : une variable de type caractère ('f' pour féminin, 'm' pour masculin)
taille et poids : deux variables de type réel
age : une variable de type entier
Solution
char sexe;
float taille, poids;
int age;
Exemple 2
sexe et poste : deux variables de type caractère ('f' pour féminin, 'm' pour
masculin; 'a' pour analyste, 'p' pour programmeur, 'o' pour
opérateur)
numero : numéro de l'employé (un entier, exemple : 5478)
anciennete : le nombre d'années d'ancienneté (un entier)
Salaire hebdomadaire : un réel
Solution
Écrire les déclarations des variables représentant les informations suivantes d'un
étudiant du cours IFT 1810 :
son groupe, son numéro d'inscription, sa note du premier travail pratique, son
statut social (célibataire, marié, séparé, divorcé, veuf).
les valeurs inchangées d'un problème à traiter : pour notre cours, les
barèmes sont les mêmes pour tous les étudiants. Cependant, il est
possible qu'on ait d'autres barèmes pour un autre cours ou qu'on
change les barèmes d'un cours.
Méthode 1 : utiliser
Exemples :
Exemples :
Une variable est une information dont la valeur peut changer (varier) au cours
de l'exécution du programme.
Exemples :
int age;
float taille, poids, salHebdo;
char sexe, poste;
5) Affectation
Un des moyens pour donner une valeur à une variable est d'affecter (déposer) à
cette variable soit une constante, soit le résultat d'un calcul, soit la valeur d'une autre
variable, etc .
L'opérateur d'affectation est le symbole "=" en langage C :
variable = .....;
Exemples :
int age;
float taille1, taille2;
age = 18;
age = 3 * 12 - 5;
taille1 = (5 + 7 / 12.0) * 0.3048;
taille2 = taille1 + 0.17;
6) Commentaires
On utilise des commentaires pour décrire le but d'un programme, pour expliquer
certaines déclarations ou quelques parties d'un programme.
Exemples :
7) Opérateurs de base
Les opérateurs arithmétiques permettent de faire des calculs entre des valeurs
numériques :
entre des réels et/ou des entiers : +, -, * (la multiplication), / (la division
entière ou réelle selon le type des opérandes)
entre deux entiers : % (le reste d'une division)
Exemples :
17 / 5 * 4 + 2
------
3
-------
12
--------
14
Pour IFT 1810, on utilise souvent l'opérateur % dans les travaux et aussi dans
les questions d'examen.
Pour assurer une priorité absolue, on met des parenthèses :
17 / (5 * 4) + 2
------
20
---------
0
------------
2
Dans le cours, on utilise assez souvent l'opérateur "%" qui donne le reste dans
une division pour plusieurs exemples, notamment :
16 est un multiple de 4 car le reste dans la division de 16 par 4 vaut zéro : ainsi
il est vrai d'écrire 16 % 4 == 0
< inférieur à
<= inférieur ou égal à
> supérieur à
>= supérieur ou égal à
== égale à (notez que le symbole "=" est utilisé pour l'affectation)
!= différent de
17 < 23 vaut 1
'c' != 'C' vaut 1
17 % 5 == 4 vaut 0 ( 17 % 5 donne 2, 2 == 4 est faux )
Exemples
1. printf désigne l'écriture (print : imprimer, ici dans le sens d'afficher, f vient du mot
format (de présentation)).
Dans le format, on rencontre très souvent les caractères "\n" qui provoquent un
changement de ligne (new line).
Exemples
age = 23;
nbCafe = 3;
taille = 1.72;
sexe = 'M';
fait afficher :
- sexe : ^^^^M
- age : ^^^23 ans
- taille : ^1.72 metre
- Nb. cafe : ^^^^3 tasse(s)
Attention :
Voici comment on répartit une longue instruction qui contient un long message sur plus
d'une ligne :
Nous utilisons l'opérateur "&" (adresse de) qui sera présenté en détail au prochain
chapitre. Pour les deux premières semaines de cours, on interprète une saisie de
donnée :
comme ceci :
un facteur peut livrer une lettre chez-nous s'il connaît notre adresse;
(un compilateur peut déposer une valeur lue dans une variable s'il connaît son
adresse).
Exemples
Après le message d'incitation "Entrez l'age de la personne : ", l'usager peut taper
l'âge (avec ou sans espaces) suivi de la touche <Entrée> :
Par contre :
Entrez f, F, m ou M pour le sexe :^f
sexe vaut ' ' (caractère espace)
1) Instruction simple
Une seule instruction qui réalise un traitement : une lecture, une écriture, une
affectation, etc . On doit terminer une instruction simple par le point virgule " ;".
Exemples
2) Instruction composée
un bloc d'instructions qui sont séparées les unes des autres (très souvent)
par un point virgule et qui sont délimitées par { (début) et } (fin)
on utilise souvent une instruction composée quand on décide de faire
deux ou plusieurs actions sous une condition (vrai ou faux).
Exemple
. . .
if (sexe == 'F' || sexe == 'f'){
printf("C'est une femme");
nbFemmes = nbFemmes + 1 ;
} else {
printf("C'est un homme");
taille = (nbPieds + nbPouces / 12.0) * 0.3048;
nbHommes = nbHommes + 1;
}
a) Syntaxe
if (condition) if (condition)
instruction 1 o instruction 1
else u
instruction 2
b) Fonctionnement
c) Remarques
d) Exemples
if (poste == 'A'){
bonus = 123.45;
printf("analyste\n");
} else if (poste == 'P'){
nbProgrammeur = nbProgrammeur + 1;
printf("programmeur\n");
totSalProg = totSalProg + salHebdo;
} else
printf("Autre poste\n");
e) Exercices
int age;
char sexe;
Solution :
Solution :
Enfant de 7 ans
sexe : masculin
Solution :
Solution :
if (age < 12)
printf("Enfant ");
else if (age < 18)
printf("Adolescent ");
else
printf("Adulte ");
La donnée du problème est la variable rang (de type entier) tandis que le résultat est
un message qui dépend de la valeur de rang (voir ci-dessus)
Cheminement :
Lire rang
Le code en langage C
#include <stdio.h>
int main() {
int rang; /* le rang d'une journée (1 : dimanche, 2 : lundi, ...,
7 : samedi)*/
/* Saisir le rang */
printf("Entrez le rang d'une journee (entre 1 et 7) : ");
scanf("%d", &rang);
printf("\n\n");
system("pause");
return 0;
}
/* Exécution:
Entrez le rang d'une journee (entre 1 et 7) : 5
On travaille tres fort!
a) Syntaxe : cette instruction est semblable à Select Case ... en Visual Basic.
Exemple :
char poste;
float bonus;
.....
switch (toupper(poste)){ /* suivant que le poste vaut */
case 'A': bonus = 235.50;
printf("analyste\n");
break;
case 'O':
case 'P': bonus = 175.00;
break;
case 'S': bonus = 150.75;
printf("Secretaire\n");
break;
default: printf("poste errone\n");
on cherche dans le bloc s'il existe une étiquette de la forme "case x" où x
est la valeur de l'expression :
o si oui :
o si non :
c) Remarques
Pour sortir de switch, après avoir effectué des instructions voulues, ne pas
oublier de terminer avec un "break". Si oublié, toutes les suites d'intructions
suivantes seront exécutées jusqu'à la rencontre d'un break ou la fin de
switch.
int rang;
printf("Entrez le rang d'une journée (entre 1 et 7) :");
scanf("%d", &rang);
switch (rang){
/* du lundi à jeudi : */
case 2:
case 3:
case 4:
case 5: printf("On travaille tres fort!\n");
break;
/* le vendredi : */
case 6: printf("La fin de semaine s'en vient\n");
break ;
/* samedi ou dimanche : */
case 7:
case 1: printf("Youpi! C'est la fin de semaine\n");
break ;
/* autrement : */
default: printf("Rang invalide!\n");
}
Exemple 2
#include <stdio.h>
#include <ctype.h> /* pour la conversion en majuscule :
toupper(...) : to (en) upper (majus)*/
void main()
{
char poste;
float bonus, salHebdo;
poste = toupper(poste);
printf("C'est un ");
switch (poste){
case 'A': bonus = BONUS_A;
printf("analyste ");
break;
case 'O':
case 'P': bonus = BONUS_OP;
if (poste == 'O')
printf("operateur ");
else
printf("programmeur ");
break;
case 'S': bonus = BONUS_S;
printf("secretaire ");
}
Dans le cas d'un cercle, le programme saisit son rayon. Il effectue les calculs et
affiche les résultats à l'écran :
le périmètre (2 x PI x rayon) et
la surface (PI x (rayon au carré))
Dans le cas d'un carré, le programme saisit le côté. Il effectue les calculs et
affiche les résultats à l'écran :
le périmètre (4 x côté)
la surface (côté au carré)
Notez que :
Soit An les deux derniers chiffres d'une année (An vaut 99 pour Annee
valant 1999 ==> An = Annee % 100). Soit Siecle les deux premiers
chiffres (Siecle vaut 19 pour Annee valant 1999 ==> Siecle = Annee /
100).
Annee est bissextile (29 jours en février) <===> (An est différent de zéro
ET An est un multiple de 4) OU (An est zéro ET Siecle est un multiple de
4)
int main()
{
int rang; /* le rang du mois */
int annee, /* exemple 1996 */
an, /* 2 derniers chiffres de l'année, exemple 96 */
siecle; /* 2 premiers chiffres de l'année, exemple 19 */
/* saisir le rang */
printf("Entrez le rang d'un mois (entre 1 et 12) : ");
scanf("%d", &rang);
an = annee % 100;
siecle = annee / 100;
if ((an != 0 && an % 4 == 0) ||
(an == 0 && siecle % 4 == 0))
printf("On a 29 jours en fevrier %d", annee);
else
printf("L'annee %d a un mois de fevrier de 28 jours", annee);
} else
printf("n'existe pas!");
printf("\n\n");
an = annee % 100;
siecle = annee / 100;
if ((an != 0 && an % 4 == 0) ||
(an == 0 && siecle % 4 == 0))
printf("On a 29 jours en fevrier %d", annee);
else
printf("L'annee %d a 1 mois de fevrier de 28 jours",
annee);
break;
default : printf("Rang %d est invalide", rang);
}
printf("\n\n");
system("pause");
return 0;
}
/* Exécution:
Entrez le rang d'un mois (entre 1 et 12) : 2
Exemples :
affectation multiple :
nbFem = 0;
nbHom = 0;
Nb_Pers= 0;
peut aussi s'écrire ainsi: nbFem = nbHom = Nb_Pers = 0;
Avec :
printf("%d", 27 > 12); le langage C affiche 1.
printf("%d", 12 > 45); le langage C affiche 0.
Ainsi, une condition qui est VRAI vaut un et une condition qui est FAUX vaut
zéro.
Le bloc :
char sexe;
int valide;
Une variable a un nom (son identificateur), un type et une valeur. Avec la déclaration
suivante :
age est le nom d'une variable de type entier dont la valeur est 23. Dépendant du
type de la variable, le compilateur réserve un nombre d'octets (bytes) pour
mémoriser l'information. L'opérateur "sizeof" (taille de ..., nombre d'octets de ...)
permet de calculer le nombre d'octets nécessaires pour mémoriser une variable ou
une information d'un type donné. Dans notre environnement Windows XP, et sous
Microsoft Visual C++ :
Adresse
Chapitre 2 : Éléments de base de la programmation 52
Préparé par Le Van N. pour IFT 1810
1245033
1245032
1245031
1245030
#include <stdio.h>
int a = 5, b = 23;
float x = 123.4;
char d = 'V';
int c = 100;
double taille = 1.72;
int main()
{
printf("Nom Type Nb. octets Adresse Valeur\n");
printf("------ ----- ---------- ------- ------\n");
printf(" a int %d %u %d\n", sizeof(a), &a, a);
printf(" b int %d %u %d\n", sizeof(b), &b, b);
printf(" x float %d %u %6.2f\n",sizeof(x), &x,
x);
printf(" d char %d %u %c\n",sizeof(char), &d,
d);
printf(" c int %d %u %d\n", sizeof(int), &c,
c);
printf(" taille double %d %u %6.2f\n", sizeof(taille),
&taille, taille);
printf("\n\n");
system("pause");
return 0;
}
/* Exécution :
Nom Type Nb. octets Adresse Valeur
------ ----- ---------- ------- ------
a int 4 4202496 5
b int 4 4202500 23
x float 4 4202504 123.40
d char 1 4202508 V
c int 4 4202512 100
taille double 8 4202520 1.72
Schéma d'explication
b
23
4202500 adresse de b
x
123.4
4202504 adresse de x
Chapitre 2 : Éléments de base de la programmation 54
Préparé par Le Van N. pour IFT 1810
d ‘V’
INUTILISÉ
INUTILISÉ
INUTILISÉ 4202508 adresse de d
c
100
4202512 adresse de c
taille
1.72
Veuillez noter que ces informations ne sont pas à évaluer pour IFT 1810.
Elles vous permettent d’avoir une petite idée sur la notion de l’adresse
et plus tard, dans certains autres cours, la notion de pointeur.
Lire la valeur tapée et déposer cette valeur à l'adresse 1245048 (l'adresse de b) ===> b
vaut la valeur saisie.
Exercice 1
Écrire les déclarations qui rendent valide les instructions suivantes :
Solution :
#include <ctype.h> /* pour appeler toupper to upper : en majuscule */
. . .
char poste;
Exercice 2
Que fait afficher la suite d'instructions ci-dessous?
Solution :