si4 : base de la...
TRANSCRIPT
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
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
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;
}
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 :
************************************