20
SIO SI4 : Base de la programmation Chapitre 1 : Les algorithmes Les algorithmes

SI4 : Base de la programmationguillaume.petit.hit-production13.com/.../C3_Structures_repetitives.pdf · En C++, la boucle est réalisée par l’instruction for for ... Structure

Embed Size (px)

Citation preview

SIOSI4 : Base de la programmation

Chapitre 1 :

Les algorithmesLes algorithmes

Décompte

Problème

Écrire un programme qui saisit deux bornespuis affiche tous les nombres pairs entre ces bornes.

Mais on s’arrête quand ?

Déclarer les entiers deb et fin Lire deb, fin

Si deb /2 = 0

Alors afficher deb

Incrémenter deb

Si deb >fin

Fin du programme

Si deb /2 = 0

Alors afficher deb

Incrémenter deb

Si deb >fin

Fin du programme

Si deb /2 = 0

Alors

Problème

Si on connaissait les bornes au moment de coder, on pourrait peut-être s’en sortir, en répétant le même code n fois.

Par exemple :

DEBUTDéclarer les entiers deb et fin deb = 1, fin =5Si deb / 2 = 0Alors afficher debIncrémenter debSi deb > finFin du programmeSi deb / 2 = 0Alors afficher debIncrémenter debSi deb > finFin du programmeSi deb / 2 = 0Alors afficher debIncrémenter debSi deb > finFin du programmeSi deb / 2 = 0Alors afficher debIncrémenter debSi deb > finFin du programmeSi deb / 2 = 0Alors afficher debIncrémenter debSi deb > finFin du programme

FIN

Que faire ?

Si l’intervalle est grand,

par exemple si fin - deb = 52683

il faudra répéter la structure...

52683 fois

Comment faire...

...si on ne connaît pas l’intervalle à l’avance ?

Lorsque le code se répète

On constate ici que des parties du code se répètent à l’identique

Déclarer les entiers deb et fin Lire deb, fin

Si deb /2 = 0

Alors afficher deb

Incrémenter deb

Si deb >fin

Fin du programme

Si deb /2 = 0

Alors afficher deb

Incrémenter deb

Si deb >fin

Fin du programme

Si deb /2 = 0

Alors

On l’insère dans une boucle

DEBUT

Déclarer les entiers deb, fin, compteurLire deb, fin

Pour compteur de deb à fin

Si compteur / 2 = 0

Alors afficher compteur

Incrémenter compteur

FinPour

FIN

C’est super économique !

← On compare compteur à fin : si la condition (compteur ≤ fin) est vraie← on passe dans cette branche← ←← à la fin , on remonte faire le test

Exercice

Écrivez l’algorithme pour afficher les cent premiers chiffres impairs

Codage

En C++, la boucle est réalisée par l’instruction for

for(compteur=1 ; compteur <= fin ; compteur++)

{ if (compteur / 2 <> 0)

{

COUT << compteur << endl ;

}

}

Syntaxe de for

For( initialisations ; expression conditionnelle ; itération)

{ }

Initialisations : ce qui doit être effectué au début de la première passe

Expression conditionnelle : la ou les conditions pour passer dans la boucle

Itération : ce qui doit être effectué à l’issue de chaque passe

Exercice majuscule

Écrire le code pour afficher les lettres majuscules de l’alphabet

Alphabet majuscule

Une proposition :

#include <iostream>

using namespace std;

int main()

{

for(char lettre='A'; lettre <='Z'; lettre++)

{

cout << lettre <<" soit " << int(lettre) <<endl;

}

return 0;

}

Exercice minuscule

Afficher les minuscules de l’alphabet en ordre inverse

Structure Tant que

Le nombre de passe n’est pas forcément connu à l’entrée de la boucle. On utilise alors une structure Tant qui permet d’utiliser une valeur de condition dynamique.

long dividende, diviseur, compteur = 0;cout << "Ce programme affiche le résultat de la division entière d'un dividende par un diviseur (sans

les opérateurs / et %)\n";cout << "Entrez le dividende :";cin >> dividende;cout << "Entrez le diviseur";cin >> diviseur;

while(dividende >= diviseur){

dividende = dividende - diviseur;compteur++;

}cout <<"Le résultat est : " << compteur;

Structure Tant que

Pour repérer les erreurs de fonctionnement, on pose des traces pour évaluer le fonctionnement de la bouclepas à pas

long dividende, diviseur, compteur = 0;cout << "Ce programme affiche le résultat de la division entière d'un dividende par un diviseur (sans

les opérateurs / et %)\n";cout << "Entrez le dividende :";cin >> dividende;cout << "Entrez le diviseur";cin >> diviseur;

while(dividende >= diviseur){

dividende = dividende - diviseur;compteur = compteur+1;cout << "\t dividende="<< dividende <<" Résultat="<<compteur<<endl;

}cout <<"Le résultat est : " << compteur;

Exercice cube

Écrire le code qui permet d’afficher le cube d’un nombre entré au clavier jusqu’à ce que le nombre soit 0 (zéro)

Boucle 1, N

While est une boucle de 0 à N : on peut ne jamais rencontrer les conditions de passage.

Il existe une boucle de 1 à N, qui fait qu’on aura toujours au moins un passageparce que le test est effectué à l’issue de premier passage

do

{ code ;

}

while (condition)

Boucle 1, N

Code pour afficher le nombre de lancer pour obtenir « 3 »

long nombreDeLancers , nombreAleatoire , nombreTire;

srand((unsigned)time(NULL)); // initialisation du générateur de nombres aléatoires

NombreDeLancers=0; // initialisation à zero du nb de lancers

do

{

nombreDeLancers++; //incrémentation du nb de lancer de dé

nombreAleatoire=rand(); //tirage au hasard d'un réel de l'intervalle [0 .. 1 [

nombreTire=nombreAleatoire%6 +1; //tirage entre [1..6]

}

while (nombreTire!=3); // tant que le nb tiré est différent de 3

cout<<"Pour tirer le chiffre 3 il a fallut : "<<nombreDeLancers<<" lancers du dé"<<endl;

Rectangle

Écrire le programme pour afficher un rectangle de 3 * 4 étoiles

Illustration :

************

Triangle

Écrire le programme pour afficher un triangle de hauteur 8 et de base 8

Illustration :

************************************

tableMult

Écrire le programme pour afficher la table de multiplication de 1 à 10 d’un nombre quelconque saisi par l’utilisateur