Vous êtes sur la page 1sur 24

Programmation C / C++:

Partie 2 – Alternatives & Boucles

Licence Pro MECSE


Parcours SESAM
v1.6 – Sept. 2020
Rappel
#include <iostream> Inclusion des fichiers
#include <math.h> d’entête
using namespace std;
Entête de la
fonction principale
int main ( )
Début du corps du {
programme double x,y,res; Déclaration des
variables
cin>>x;
cin>>y;
res=sqrt(x*x+y*y); Instructions

cout<<res;
return 0;
Fin du programme }

2
L’Alternative “si…alors…sinon”
DEBUT Organigramme correspondant

REEL montant Réel : montant


SAISIR(montant)
Saisir le montant
SI (montant>100)
ALORS NON
montant > 100 ?
AFFICHER(« reduction »)
montant←montant-0.1*montant
Afficher
SINON « Réduction » Afficher
AFFICHER(« pas de reduction ») « Pas de
Calculer la Réduction »
FINSI
remise
AFFICHER(montant)
FIN Afficher le montant

3
Opérateurs logiques

• Opérateurs binaires : ET : && OU : ||


unaire : NON : !

• Résultat de l’évaluation : 1 si l’expression est vraie


0 si l’expression est fausse.

• Exemples :
(-1<x) && (x<1) vaut 1 (vrai) si x est compris entre -1 et 1
!(x<0) vaut 1 (vrai) si x positif ou nul

4
Petit casse-tête !

double x=-5,y=2;
if (x==0)
if(y>0)
cout<<”cas”<<endl;
if(x<0)
cout<<”cas 2”<<endl;
else Quels sont les affichages obtenus?
cout<<”cas 3”<<endl;
cout<<”cas 4”<<endl;

5
Et en mieux…

double x=-5,y=2;
if (x==0)
if(y>0) Il faut indenter (et commenter) les
cout<<”cas 1”<<endl; programmes

if(x<0) Il faut des accolades si il y a plusieurs


instructions à réaliser
cout<<”cas 2”<<endl;
L’instruction « else » se rapporte au
else « if » le plus proche
cout<<”cas 3”<<endl;
cout<<”cas 4”<<endl;

6
Cas particulier : “switch()…case”
Exécuter des instructions Exemple
en fonction de la valeur (entière) char operateur;
d’une condition int x=5,y=2,res;
cin>>operateur;
switch (condition) switch (operateur)
{
{ case ’+’: res=x+y;
case constante1: break;
instructions1; case ’-’: res=x-y;
break; break;
case constante2: case ’*’: res=x*y;
instructions2; break;
break; case ’/ ’: res=x/y;
[…] //nb de ‘case’ illimité break;
default: default:
instructions_par_defaut; cout<<”opérateur inconnu”;

} }
cout<<res;

7
Instructions répétitives

Dans de nombreux cas, il est nécessaire d'exécuter plusieurs fois


une instruction ou un bloc d'instructions au sein d'un programme
è Mise en place de boucles permettent de faire ceci sans réécrire
les instructions correspondantes

Le langage C dispose des structures répétitives (boucles) suivantes :

- Boucle “while”

- Boucle “do while”

- Boucle “for”

8
Boucle “do while”

But : répéter une action ... au moins une fois !!


Faire do
instructions { !!
instructions;
Tant Que (condition VRAIE)
} while (condition);

- Le corps de la boucle "do while" est répété tant que la condition


est évaluée comme vraie (différente de 0)
- On exécute le corps de la boucle PUIS on teste la condition pour
un éventuel rebouclage
- Le corps de la boucle est toujours exécuté au moins une fois
même si la condition est fausse !!
9
Exemple 1

Tester les entrées ...

double resistance;
do
{
cout<<’’valeur de la resistance?";
cin>>resistance;
} while (resistance<=0);
// ici la resistance>0
cout<<’’R = ’’<<resistance;

Permet d’être sûr d’avoir une valeur de résistance positive pour


effectuer le reste du programme

10
Exemple 2

Recommencer un programme

char choix;
do
{
[…] // instructions du programme
cout<<’’voulez-vous recommencer?’’;
cin>>choix;
} while (choix==’o’);

Le programme est exécuté une première fois, et on


recommence tant que l’utilisateur le souhaite.

11
La boucle “while”
!!

TantQue (condition VRAIE) while(condition)


Faire {
instructions;
instructions
}

-Le corps de la boucle "while" est répété tant que la condition est
évaluée comme vraie (différente de 0)
-On teste D’ABORD la condition pour une éventuelle exécution du
corps de la boucle et on revient au test
- Si le test est faux dès le départ, le corps de la boucle n’est jamais
exécuté

12
“while” vs “do while”

do … while while

Bloc d’instructions Condition vraie ?

Condition vraie ? Bloc d’instructions

suite du
suite du
programme
programme

13
Exemple 1

Afficher les entiers de 1 à 100


Version 1 « do while" Version 2 « while »

int i=1; int i=1;


do while(i<=100)
{ {
cout<<i<<endl; cout<<i<<endl;
i++;
i++;
}
while(i<=100);
}
suite du programme… suite du programme…

Ici, il n’y a aucune différence entre les 2 versions

14
Exemple 2 => “do….while();”

Tester les entrées ... version 1 « do while »

double resistance;
do
{
cout<<’’valeur de la resistance?";
cin>>resistance;
} while (resistance<=0);
// ici la resistance>0
cout<<’’R = ’’<<resistance;

15
Exemple 2 => “while(){}”

Tester les entrées ... version 2 « while »


double resistance;
while (resistance<=0)

{
cout<<’’valeur de la resistance?";
cin>>resistance;
}

cout<<’’R = ’’<<resistance;

Problème lors du premier passage : On teste “resistance” alors


qu’on n’a pas encore fait de saisie! =>il faut l’initialiser, par exemple
double resistance = 0; pour que le test soit vrai au départ

16
Boucle “for”
L’instruction qui
précède le test
Instruction X

Condition vraie ?
suite du programme

Bloc d’instructions
La dernière instruction
du corps de la boucle

Instruction Y

17
Intérêt de la boucle “for”

Afficher les entiers de 1 à 100

Version 1 « while » Version 2 « for »


int i; int i;

i=1; for(i=1;i<=100;i++)
while(i<=100) {
{ cout<<i<<endl;
cout<<i<<endl; }
i++;
suite du programme…
}
suite du programme…

i est appelé « index » ou « compteur de boucle »

18
Problème…
(t0, t1, ... , tn-1) → n valeurs à traiter

2 solutions :

Ø Définir n variables et les traiter indépendamment

Ø Utiliser un tableau :

o Une seule définition

o Un traitement simplifié
char numero_vol[5]={'A','F','5','3','2'};

19
Propriétés – Déclaration

l Stocker et manipuler des éléments de même type

l Nombre d'éléments fini (nombre d'éléments du tableau)

l Chaque élément est manipulé à l'aide de son indice

type_elements nom[nbr_elements];

Exemples:
Un tableau de 25 notes : float notes[25];

Le relevé des températures en février : float temperatures[28];

Le numéro de vol d’un avion (ex: AF532) : char numero_vol [5];

20
Allocation
Allocation mémoiremémoire

Un tableau occupe un bloc mémoire de taille égale au


nombre d’éléments x taille d'un élément
L’adresse de ce bloc correspond à l’adresse du 1er élément

Exemples :
float notes[25]; 25x4=100 octets
char numero_vol[5]; 5x1=5 octets

numero_vol 0x22FF60 0x22FF64

numero_vol[0] 0 1 2 3 4
numero_vol[1]
numero_vol[2]
numero_vol[3]
numero_vol[4]

21
Initialisation
Initialisation d’un tableau
d’un tableau

Comme pour les variables, par défaut, les éléments d’un


tableau ont des valeurs indéterminées
On peut préciser les valeurs des éléments à la définition

Exemples :
int tab[5]={0,1,-1,2,1};

float temperatures[30]={12,8,7,8.5,11,14,15};

char numero_vol[5]={'A','F','5','3','2'};

Note : Les valeurs non précisées sont alors mises à zéro

22
Accès
Accès aux aux éléments
éléments

→ se fait grâce à l’indice de l’élément :


un tableau de n éléments est indicé de 0 à n-1.
nom_tableau[i] correspond à l’élément i+1 du tableau

Exemples :
char numero_vol[5] = {'A' , 'F' , '5' , '3' , '2' };
numero_vol[0] a pour valeur 'A'
numero_vol[ 4 ] a pour valeur '2'
numero_vol[ 5 ] a pour valeur 0

Remarque : numero_vol contient l’adresse du premier élément, et l’indice


représente le déplacement par rapport à cet élément

23
Initialiser
Parcours un tableau
d’un tableau

Exemple : c’est l’utilisateur qui saisit les valeurs du tableau

Version 1 Version 2
int main() int main()
{ {
int tab[5]; int tab[5];
scanf("%d",&tab[0]); int i;
scanf("%d",&tab[1]); for(i=0;i<5;i++)
scanf("%d",&tab[2]); {
scanf("%d",&tab[3]); scanf("%d",&tab[i]);
scanf("%d",&tab[4]); }
} }

Similaire pour l’affichage d’un tableau en utilisant la fonction printf

24

Vous aimerez peut-être aussi