Les Boucles en Dart
-
Présentation
- Dans les langages de programmation, les boucles permettent à un bloc de code d’être exécuté à plusieurs fois.
- Une boucle est définie comme un segment de code qui s’exécute plusieurs fois.
- L’itération fait référence au processus dans lequel le segment de code est exécuté une fois. Une itération fait référence à l’exécution unique d’une boucle. Une boucle peut subir plusieurs itérations.
- Le langage Dart fournit les types de boucles suivants :
-
La boucle
for
en Dart - Comme dans la plupart des les langages, la boucle
for
dans le langage Dart, permet de répéter une expression un certain nombre de fois. - Cette boucle est utilisée pour exécuter un bloc de code à un nombre déterminé de fois. D’où, elle est classée parmi les boucles dit « précises », car on sait d’avance combien de fois elle répètera les instructions contenues dans la partie corps de la boucle.
- La boucle
For
dans Dart est similaire à celle de Java et le flux d’exécution est également le même que celui de Java - La boucle
for
est une boucle à pré-condition. Cela veut dire la condition est évaluée avant l’exécution de l’expression. Si cette condition est vraie, la portion de code est exécutée sinon toute la boucle est terminée et le programme continue. -
Syntaxe et interprétation du boucle
for
. - La syntaxe de la partie déclaration de contrôle est composé de 3 grandes parties : une initialisation, une condition et une incrémentation ou un décrémentation.
- initialisation :
- Spécifie l’initialisation de la boucle. Il permet d’initialiser un compteur qui sera ensuite utilisé dans la boucle.
- Dans la boucle for, l’initialisation se produit d’abord et une seule fois, ce qui signifie que la partie d’initialisation de la boucle for ne s’exécute qu’une seule fois.
- condition :
- Si l’expression est vraie true, l’ expression est exécutée puis l’itération est évaluée (s’il en existe une). Si la condition est omise elle est considérée comme vrai true. Si la condition est fausse false , l’instruction for se termine et le contrôle passe à l’instruction suivante du programme.
- La condition dans la boucle for est évaluée à chaque itération, si la condition est vraie, les instructions à l’intérieur du corps de la boucle for sont exécutées.
- Une fois que la condition renvoie false, les instructions de la boucle for ne s’exécutent pas et le contrôle est transféré à l’instruction suivante du programme après la boucle
for
. - itération :
- est une expression qui s’ exécute à chaque itération de la boucle après l’ exécution de la portion de code de la boucle. L’ itération est généralement une incrémention ou une décrémentation.
- Après chaque exécution du corps de la boucle for, la partie incrémentation/décrémentation de la boucle for s’exécute et met à jour le compteur de boucle.
-
Exemple
-
Application
- Afficher les nombres de 1 à 10 à l'aide de la boucle
for
- Afficher les nombres de 10 à 1 à l'aide de la boucle
for
for (initialisation; condition; itération ){
expression
}
for (var compteur = 1; compteur <= 3 ; compteur++){
print("la valeur du compteur est $compteur");
}
/* Output
la valeur du compteur est 1
la valeur du compteur est 2
la valeur du compteur est 3*/
void main() {
for (int i = 1; i <= 10; i++) {
print(i);
}
}
void main() {
for (int i = 10; i >= 1; i--) {
print(i);
}
}
La boucle for..in
- La boucle
For…in
dans Dart prend une expression ou un objet comme itérateur. Il est similaire à celui de Java et son flux d’exécution est également le même que celui de Java.
Cette boucle permet de faire parcourir les éléments d'une collection telle qu'une liste (List), une carte (Map), un ensemble (Set), ou d'autres types de données itérables. la boucle
for .. in
est une boucle de parcours . C'est à dire que la boucle est exécutée sur chacun des éléments d'une collection.
-
Syntaxe et interprétation du boucle
for..in
. - La syntaxe de la partie déclaration de contrôle est composé simplement : d’une variable du type des éléments de la collection puis in et de la collection de référence.
- element est une variable temporaire qui prend la valeur de chaque élément de la collection à chaque itération.
- iterable est la collection que vous souhaitez parcourir.
-
Exemples
- Voici quelques exemples d'utilisation de la boucle for..in dans Dart :
-
Exemple 1 : Parcours d'une liste
-
Exemple 2 : Parcours d'une carte (Map)
-
Exemple 3 : Parcours d'un ensemble (Set)
- La boucle
for..in
est pratique pour simplifier la traversée des éléments d'une collection sans nécessiter de gestion manuelle des indices. Elle est souvent utilisée pour des opérations de lecture, de traitement, ou de filtrage sur les éléments de la collection.
for (var element in iterable) {
// Traitement à effectuer sur chaque élément
}
List nombres = [1, 2, 3, 4, 5];
for (var nombre in nombres) {
print(nombre); // Affiche chaque nombre de la liste.
}
Map scores = {
'Alice': 95,
'Bob': 89,
'Charlie': 78,
};
for (var nom in scores.keys) {
print('$nom a obtenu un score de ${scores[nom]}');
}
Set villes = {'New York', 'Los Angeles', 'Chicago', 'Miami'};
for (var ville in villes) {
print('Ville : $ville');
}
La boucle while
- Le mot
while
se traduit par tant que. Alors cette boucle s'exécute tant que sa condition est vraie. - La boucle
while
en Dart est une structure de contrôle de flux qui permet d'exécuter un bloc de code tant qu'une condition donnée est vraie. La condition est évaluée avant chaque itération, et si elle est vraie, le code à l'intérieur du bloc while est exécuté. Si la condition devient fausse, l'exécution de la boucle s'arrête. - La boucle
while
est une boucle àpré-condition
. Cela veut dire que la condition est évaluée avant l' exécution de l'expression.
Cette boucle est utilisée pour exécuter un bloc de code tant qu'une condition est vraie. Ce qui revient à dire qu'on n'a pas une idée fixe de combien de fois l'itération sera exécutée, d'où son classement parmi les boucles dit "indéterminée".
-
Syntaxe et interprétation du boucle
While
. - condition est une expression booléenne. Tant que cette condition est vraie, la boucle continuera à s'exécuter.
-
Exemples
-
Exemple 01
-
Exemple 02: Calcul de la somme des entiers de 1 à 100
- Écrivez un programme Dart pour calculer la somme des entiers de 1 à 100 (Utiliser une boucle while).
-
Exemple 3 : Saisie utilisateur jusqu'à ce qu'une condition soit satisfaite
- Écrivez un programme en Dart qui permet à l'utilisateur de décider s'il veut continuer une action. L'action sera décrite par un verbe à l'infinitif. L'utilisateur devra entrer le verbe à l'infinitif pour indiquer s'il souhaite continuer ou non. La boucle doit se répéter tant que l'utilisateur choisit de continuer.
- Le programme doit continuer de demander des verbes à l'infinitif tant que l'utilisateur ne saisit pas "arrêter" comme verbe. Une fois que l'utilisateur entre "arrêter," le programme doit s'arrêter.
- Ce programme utilise une boucle while pour demander à l'utilisateur s'il souhaite continuer. La boucle continue jusqu'à ce que l'utilisateur réponde "non".
-
Exemple 4 : Génération de nombres aléatoires inférieurs à 10
- Écrivez un programme en Dart qui génère de manière aléatoire des nombres entiers inférieurs à un nombre choisi par l'utilisateur, à condition que ce nombre soit supérieur à 1 et inférieur à 100. Le programme doit également redemander à l'utilisateur de saisir le nombre s'il ne respecte pas ces critères.
- Une fois que l'utilisateur a saisi un nombre valide, le programme doit générer un certain nombre de valeurs aléatoires (par exemple, 10 valeurs) inférieures au nombre saisi, puis afficher ces valeurs à l'écran. Enfin, le programme doit calculer et afficher la somme de ces nombres aléatoires.
- Demandez à l'utilisateur de saisir un nombre (supérieur à 1 et inférieur à 100) et assurez-vous que la saisie est correcte.
- Utilisez une boucle pour générer le nombre souhaité de valeurs aléatoires inférieures au nombre saisi.
- Utilisez la fonction
Random()
de Dart pour générer des nombres aléatoires. - Assurez-vous que les nombres générés sont inférieurs au nombre saisi par l'utilisateur.
- Affichez les nombres générés à l'écran.
- Calculez la somme de ces nombres aléatoires et affichez-la.
-
Boucle
Do-While
dans Dart - La boucle
do..while
répète une séquence d'instructions tant que la condition est vraie. - La boucle
do..while
exécute d'abord les instructions, puis vérifie la condition. Si la condition est vraie, elle continuera à s'exécuter et si la condition est fausse, la boucle se terminera. -
Syntaxe et interprétation du boucle
Do-While
. -
Exemple
- Résultat
-
Les Instructions de contrôle de boucle
- Ici, nous ne sommes pas dans une des catégories de boucles, mais nous parlerons sous ce point des instructions qui nous permettent de contrôler les boucles dans leur itération.
- En Dart, nous en comptons 3 :
-
L'instruction
break
- Déjà rencontré précédemment dans la structure conditionnelle switch , ici aussi il joue le même rôle, celui de nous faire quitter de l’itération (les instructions) d’une boucle, autrement dit faire arrêter la boucle (comme veut dire ses sens “casser, rompre, arrêter, …”), et de passer à la suite du programme.
-
Exemple d'une boucle for avec l'instruction break
-
L’instruction
continue
- L’instruction continue, quant à elle, est utilisée pour passer à l’itération suivante d’une boucle ou de sauter le reste du code dans l’itération en cours et de continuer avec l’itération suivante.
-
Exemple : Un programme qui affiche seulement les nombres impairs inférieurs à 10.
- Notons ici que le signe % est dit modulo, c’est une opération qui calcul la division et retient le reste de cette division.
- C’est ainsi que notre condition dit que si le reste de la division entre l’index i et 2 est égale à 0 passer (continuer), parce que c’est un nombre pair, sinon afficher “$i est impair.”
-
Les "
label
" - Les labels sont des instructions appelé identifiants suivies par deux points (:), qui s’appliquent à une déclaration ou à un bloc de code, permettant de pointer à un endroit particulier une instruction ou un bloc d’instructions du programme.
- Elles peuvent être utilisées avec break ou continue pour une grande précision sur le bloc d’instruction à quitter ou à continuer.
-
Exemple d'un bloc de code contrôler par un label avec un break
-
Exemple d'un bloc de code contrôler par un label avec un continue
-
Différences entre les boucles
for
,for..in
,while
, etdo..while
- Utilisée pour des boucles à nombre fixe d'itérations.
- Permet d'utiliser un compteur de boucle.
- Simplifie le parcours d'une collection sans utiliser d'index.
- Plus lisible pour itérer sur des collections.
- Utilisée pour des boucles conditionnelles sans nombre fixe d'itérations.
- Peut conduire à des boucles infinies si la condition n'est jamais fausse.
- Garantie que le bloc de code est exécuté au moins une fois.
- Utilisée lorsque l'itération doit se produire au moins une fois.
-
Applications
-
App01
- Écrire un programme Dart qui vérifie si un nombre saisie par l'utilisateur est premier ou non
- Le programme doit afficher un message pour les deux cas.
-
App02
- Écrire un programme Dart qui permet d'afficher la liste de tous les nombres premiers inférieurs 100.
-
App03
- Écrire un programme Dart qui permet de rechercher la liste de tous les nombres premiers inférieurs à un nombre donné (saisie par l'utilisateur)
-
App04
- Écrire un programme en langage Dart qui affiche les 100 premiers nombres entiers sur la même ligne.
- Le résultat doit correspondre au schéma suivant:
- Afficher la somme des nombres pairs, impairs et premiers
-
App05
- Écrire un programme Dart qui demande à l'utilisateur un nombre compris entre 1 et 3 jusqu’à ce que la réponse convienne.
-
App06
- Écrire un programme Dart qui demande un nombre compris entre 10 et 20, jusqu’à ce que la réponse convienne.
- En cas de réponse supérieure à 20, on fera apparaître un message : "Plus petit ! ", et inversement, " Plus grand !" si le nombre est inférieur à 10.
- En cas de réponse juste le programme affiche le nombre des essaies total et les essaies "Plus petit ! " et " Plus grand !
-
App07
- Écrire un programme Dart avec une boucle
do..while
qui compte de 3 à 22 selon le modèle suivant :3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
-
App08
- Écrire un programme Dart qui affiche "apcpedagogie est cool." 5 fois avec toutes les boucles.
-
App09
- Écrire un programme Dart qui affiche une liste incrémenté des nombres inférieurs à nbr à l'aide de la boucle
for
- Le nombre nbr est donnée par l'utilisateur
- Afficher la somme des nombres affichés.
while (condition) {
// Code à exécuter tant que la condition est vraie
}
void main() {
int i = 0;
while (i < 5) {
print("index : $i");
i += 1; // i=i+1
}
}
/* Output
index : 0
index : 1
index : 2
index : 3
index : 4*/
Solution
void main() {
int somme = 0;
int n = 1;
while (n <= 100) {
somme += n;
n++;
}
print("La somme des entiers de 1 à 100 est : $somme");
}
Voulez-vous poursuivre (entrer un verbe à l'infinitif) ? manger
Voulez-vous poursuivre (entrer un verbe à l'infinitif) ? courir
Voulez-vous poursuivre (entrer un verbe à l'infinitif) ? nager
Voulez-vous poursuivre (entrer un verbe à l'infinitif) ? arrêter
Arrêt du programme.
Solution
import 'dart:io';
void main() {
String verbe;
while (true) {
stdout.write("Voulez-vous poursuivre (entrez un verbe à l'infinitif) ? ");
verbe = stdin.readLineSync()!.toLowerCase();
if (verbe == 'arrêter') {
print("Arrêt du programme.");
break;
}
}
}
Instructions :
Solution
import 'dart:io';
import 'dart:math';
void nbrAleatoire() {
int nombreSaisi;
Random random = Random();
while (true) {
stdout.write("Veuillez saisir un nombre (supérieur à 1 et inférieur à 100) : ");
String saisie = stdin.readLineSync()!;
try {
nombreSaisi = int.parse(saisie);
if (nombreSaisi > 1 && nombreSaisi < 100) {
break;
} else {
print("Le nombre saisi doit être supérieur à 1 et inférieur à 100. Réessayez.");
}
} catch (e) {
print("Saisie invalide. Veuillez entrer un nombre valide.");
}
}
List nombresAleatoires = [];
int somme = 0;
for (int i = 0; i < nombreSaisi; i++) {
int nombreAleatoire = random.nextInt(nombreSaisi);
nombresAleatoires.add(nombreAleatoire);
somme += nombreAleatoire;
}
print("Nombres aléatoires inférieurs à $nombreSaisi :");
for (int i = 0; i < nombresAleatoires.length; i++) {
stdout.write("${nombresAleatoires[i]}");
if (i < nombresAleatoires.length - 1) {
stdout.write(", ");
}
}
stdout.write("\n");
print("Somme des nombres aléatoires : $somme");
}
Cette boucle est semblable à celle de while mais la différence est qu'elle exécute un bloc de code au moins une fois avant la condition d’arrêt, puis de manière répétée tant qu’une condition est vraie.
do {
// ...
Bloc d'instructions
// ...
}
while (condition);
/*L'entrée de la boucle n'est pas conditionnée, ce qui veut dire que
la boucle commence par exécuté une première fois le bloc de code de
l'itération, puis continue à tourner tant que la condition retrouvée
à la sortie de la boucle n'est pas vérifiée*/
void main() {
int i = 4;
int j = 0;
do {
print("index : $j");
j += 1;
} while (j <= i);
}
/* Output
index : 0
index : 1
index : 2
index : 3
index : 4*/
//Ce code s'arrête ou on quitte l'itération dès que i sera égal à 5
for (int i = 0; i < 10; i++) {
if (i == 5) {
break;
}
print("i est égal à $i");
}
//Exemple d'une itération avec l'instruction continue
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue;
}
print("$i est impair.");
}
maBoucleExterne:
for (int i = 0; i < 3; i++) {
//maBoucleInterne:
for (int j = 0; j < 3; j++){
print("$i $j");
if (i == 2 && j == 2) {
//Ce break permettrant d'arrêter directement la boucle externe
//Mais si il n'est pas là seule, la boucle interne sera arrêter
break maBoucleExterne;
}
}
}
maBoucleExterne:
for (int i = 0; i < 3; i++) {
//maBoucleInterne:
for (int j = 0; j < 3; j++){
print("$i $j");
if (i == 2 && j == 2) {
continue maBoucleExterne;
}
}
}
/*Vous pouvez joueur avec le label de la boucle externe
et interne pour voir le changement*/
Boucle | Quand l'utiliser ? | Condition de test | Caractéristiques |
---|---|---|---|
for | Lorsque le nombre d'itérations est connu à l'avance. | La condition est vérifiée avant chaque itération (pré-test). |
|
for..in | Pour parcourir directement les éléments d'une collection (liste, ensemble, etc.). | La condition est implicite, la boucle continue tant qu'il y a des éléments à parcourir. |
|
while | Lorsque le nombre d'itérations n'est pas connu à l'avance et que vous devez vérifier une condition avant chaque itération. | La condition est vérifiée avant chaque itération (pré-test). |
|
do..while | Lorsque vous devez exécuter la boucle au moins une fois avant de vérifier la condition. | La condition est vérifiée après chaque itération (post-test). |
|
Solution
import 'dart:io';
import 'dart:math';
void main() {
print('Veuillez saisir un nombre pour vérifier s\'il est premier ou non');
int? nbr = int.parse(stdin.readLineSync()!);
print('$nbr');
if (verifierPremier(nbr)) {
print('$nbr est un nombre premier');
} else {
print('$nbr n\'est pas premier');
}
}
bool verifierPremier(int nbr) {
if (nbr <= 1) {
return false;
}
for (int i = 2; i <= sqrt(nbr); i++) {
if (nbr % i == 0) {
return false;
}
}
return true;
}
-
Un nombre premier est un entier naturel qui admet exactement deux diviseurs distincts entiers et positifs. Ces deux diviseurs sont 1 et le nombre considéré, puisque tout nombre a pour diviseurs 1 et lui-même comme le montre l’égalité les nombres premiers étant ceux qui n’en possèdent aucun autre.
Solution
void main() {
print("Liste des nombres premiers inférieurs 100:");
print('----------------------------');
for (int i = 2; i <= 100; i++) {
verifierPremier(i);
}
}
void verifierPremier(int nbrPremiers) {
int i, j = 0;
bool nbrTrouve = false;
j = nbrPremiers ~/ 2;
//print("La valeur de j est :$j");
for (i = 2; i <= j; i++) {
if (nbrPremiers % i == 0) {
nbrTrouve = true;
break;
}
}
if (nbrTrouve == false) {
print('$nbrPremiers');
}
}
Solution
import 'dart:io';
void main() {
print(
"Les nombres premiers inférieurs à un nombre saisie par l'utilisateur:");
print('Veuillez saisir un nombre entier positif');
int? nbr = int.parse(stdin.readLineSync()!);
print("Liste des nombres premiers inférures à $nbr");
print('----------------------------');
for (int i = 2; i <= nbr; i++) {
verifierPremier(i);
}
}
void verifierPremier(int nbrPremiers) {
int i, j = 0;
bool nbrTrouve = false;
j = nbrPremiers ~/ 2;
//print("La valeur de j est :$j");
for (i = 2; i <= j; i++) {
if (nbrPremiers % i == 0) {
nbrTrouve = true;
break;
}
}
if (nbrTrouve == false) {
print('$nbrPremiers');
}
}
Solution
import 'dart:io';
void main() {
int sommePair = 0, sommeImpair = 0, sommePremiers = 0;
for (int i = 2; i <= 100; i++) {
if (i % 2 == 0) {
sommePair += i;
} else {
sommeImpair += i;
}
if (verifierPremier(i)) {
sommePremiers += i;
}
if (i != 100) {
stdout.write("$i, ");
} else {
stdout.write(i);
}
}
print("\nLa somme des nombres pairs est: $sommePair");
print("La somme des nombres impairs est: $sommeImpair");
print("La somme des nombres premiers est: $sommePremiers");
}
bool verifierPremier(int num) {
int j = 0;
if (num <= 1) {
return false;
}
j = num ~/ 2;
for (int i = 2; i <= j; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
Solution
import 'dart:convert';
import 'dart:io';
void main() {
int nbr = 0;
int i = 1;
print("Veuillez saisir un nombre entre 1 et 3");
do {
print(
'Essaie de saisie numéro: $i est: ${nbr = int.parse(stdin.readLineSync()!)}');
i += 1;
} while (nbr < 1 || nbr > 3);
print("--------------------Fin du programme-------------------------------");
}
Solution
import 'dart:io';
void main() {
int nbr = 0;
int i = 1;
int nbrPlusPetit = 0, nbrPlusGrand = 0;
print("Veuillez saisir un nombre entre 10 et 20");
do {
print(
'Essaie de saisie numéro: $i est: ${nbr = int.parse(stdin.readLineSync()!)}');
if (nbr < 10) {
print("Plus petit !");
nbrPlusPetit += 1;
} else if (nbr > 20) {
print("Plus grand !");
nbrPlusGrand += 1;
}
i += 1;
} while (nbr < 10 || nbr > 20);
print("Nombre des essaies 'Plus grand !' est: $nbrPlusGrand");
print("Nombre des essaies 'Plus petit !' est : $nbrPlusPetit");
print("Nombre total des essaies est : ${i - 1}");
print("--------------------Fin du programme-------------------------------");
}
Solution
import 'dart:io';
void main() {
int i = 3;
do {
stdout.write("$i ");
i += 1;
} while (i < 23);
}
Solution
void main() {
// Boucle for
for (var m = 0; m < 5; m++) {
print("apcpedagogie est cool.");
}
// Boucle While
var i = 0;
while (i != 5) {
print("apcpedagogie est cool.");
i++;
}
// Boucle DoWhile
var x = 0;
do {
print("apcpedagogie est cool.");
x++;
} while (x != 5);
}
Solution
import 'dart:io';
void main() {
print('Veuillez saisir un nombre');
int? nbr = int.parse(stdin.readLineSync()!);
int somme = 0;
for (int i = nbr; i >= 1; i--) {
somme += i;
stdout.write("$i ");
}
print("\nLa somme des nombres est: $somme");
}