Boucles Et Tableaux

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
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

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy