2 votes

C++ : Faire répéter une boucle do while

Je suis désolé pour cette question de débutant, mais je n'arrive pas à comprendre comment on peut faire une boucle qui se répète. J'ai transformé une boucle while en une boucle do while et maintenant je ne sais pas comment faire pour qu'elle demande "voulez-vous répéter Y ou N ?", une explication ?

J'ai lu plusieurs articles qui proposent une répétition de la boucle do while, mais cela n'a pas de sens pour moi. Est-ce que je vais essentiellement envelopper ce code dans une autre boucle do while ? Est-ce que je déplace l'expression booléenne avant le while ?

#include <iostream>
using namespace std;
int main(void)
{
    int x;
    int count = 0;
    int N;
    double sum = 0; 
    double average;
    char ans;

    {
        cout << "Enter number of values, N, to be read in <Enter>:" << endl;
        cin >> N;
        do
        {
            cout << "\n Enter a grade <Enter>: ";
            cin >> x;
            sum = sum + x;
            count++; // 
        } while (count < N);

        if (N == 0)
            cout << "You have entered 0 numbers. No average will be computed. Bye! \n";
        else {
            average = average = sum / N;
            cout << "The average of these " << N << " grades is " << average << endl;
        }

         cout << "Would you like to enter more values to calculate your grade average?\n";

        system("pause");
        return 0;
    }
}

0voto

Gimhani Points 728

C'est peut-être ce qu'il vous faut, avec des chars. YorN vous vous demandez s'il faut poursuivre ou interrompre la procédure interne. do-while .

#include <iostream>
using namespace std;
int main(void)
{
    int x;
    int count = 0;
    int N;
    double sum = 0; 
    double average;
    char ans;
    char YorN;

    do{
        cout << "Enter number of values, N, to be read in <Enter>:" << endl;
        cin >> N;
        do
        {
            cout << "\n Enter a grade <Enter>: ";
            cin >> x;
            sum = sum + x;
            count++; // 
        } while (count < N);

        if (N == 0)
            cout << "You have entered 0 numbers. No average will be computed. Bye! \n";
        else {
            average = average = sum / N;
            cout << "The average of these " << N << " grades is " << average << endl;
        }

        cout << "Would you like to enter more values to calculate your grade average?\n";
        cin>>YorN;

    } while (YorN=='Y');
    return 0;
}

0voto

Peut le faire :

 char repeat='y'; 
 cout << "Enter number of values, N, to be read in <Enter>:" << endl;
 cin >> N;

 do
    {
        for(int i=0;i<n;i++){
            cout << "\n Enter a grade <Enter>: ";
            cin >> x;
            sum = sum + x;
            count++; // 
        }

    if (N == 0)
        cout << "You have entered 0 numbers. No average will be computed. Bye! \n";
    else {
        average = average = sum / N;
        cout << "The average of these " << N << " grades is " << average << endl;
    }

     cout << "Would you like to enter more values to calculate your grade average?\n";
     cin>>repeat;

 }while(repeat=='y');

0voto

GKE Points 704

Bien qu'il y ait des tas de façons de faire mieux, ce code me permet d'expliquer ce qui se passe. Les boucles Do-While sont vraiment très délicates. Cependant, n'oubliez pas qu'une boucle do-while est conçue pour s'exécuter au moins une fois .

Dans le cas de notre code, nous mettons en place if pour tester le code en cours d'exécution lorsque cela n'est pas approprié.

Regardez comment la toute première if est N > 0 La déclaration if s'exécute, ne l'oubliez pas. Une fois de plus pour mettre l'accent sur ce point, les if s'exécute, mais le résultat est faux.

Ceci étant dit, vous utilisez une boucle do-while lorsque vous voulez que votre bloc de code s'exécute AU MOINS une fois. Remarquez que notre while La déclaration comporte deux éléments que nous testons, le premier étant la réponse 'Y' de l'utilisateur pour continuer, et si c'est le cas, la nouvelle entrée est-elle N est-elle supérieure à 0 ?

Vous vous demandez peut-être si l'instruction if la plus interne s'exécute au moins une fois. La réponse est que cela dépend du résultat de l'instruction if précédente. if(N > 0) y if(count == N && N != 0) s'exécutent toutes deux une fois à chaque fois que le while reste vraie. Cependant, cette boucle imbriquée if dépend du résultat de son parent.

J'espère que cela vous a éclairé sur les boucles "do-while".

#include <iostream>
using namespace std;
int main(void)
{
    int x;
    int count = 0;
    int N;
    double sum = 0;
    double average;
    char ans = 'Y';

        cout << "Enter number of values, N, to be read in <Enter>:" << endl;
        cin >> N;

        do
        {
            if(N > 0){ //THIS IF STATEMENT WILL ALWAYS RUN AT LEAST ONCE
            cout << "\n Enter a grade <Enter>: ";
            cin >> x;
            sum = sum + x;
            count++;
            }

            if(count == N && N != 0) {//THIS IF STATEMENT WILL ALSO ALWAYS RUN AT LEAST ONCE
                average = average = sum / N;
                cout << "The average of these " << N << " grades is " << average << endl;
                cout << "Would you like to enter more values to calculate your grade average?\n";
                    cin>>ans;
                    if(ans == 'Y') {//This one depends on it's parents result.
                        x = 0;
                        N = 0;
                        sum = 0;
                        count = 0;
                        cout << "Enter number of values, N, to be read in <Enter>:" << endl;
                        cin >> N;
                    }
            }

        } while (ans == 'Y' && N != 0);

        if (N == 0)
            cout << "You have entered 0 numbers. No average will be computed. Bye! \n";

        system("pause");
        return 0;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X