C ++ - Stopping condition in repetition structure

4

How to place this code in a repeat structure so that after the calculation the "Type S to exit or C to continue" option is shown?

#include <iostream>
#include <string.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>

using namespace std;

int main(){
setlocale (LC_ALL, "portuguese");

float soma, div, raiz, sub, escolha, numero1, numero2, pot, multi, loga;
cout << "Digite a operação desejada" << endl;
cout << "(1) Soma| X + Y" << endl;
cout << "(2) Divisão| X / Y" << endl;
cout << "(3) Raiz| RAIZ (X)" << endl;
cout << "(4) Subtração| X - Y" << endl;
cout << "(5) Potência| X^Y" << endl;
cout << "(6) Multiplicação| X * Y" << endl;
cout << "(7) Logaritmo| LOG10(X)" << endl;
cin >> escolha;




if (escolha == 1){
cout << "Digite o valor de 'X': ";
cin >> numero1;
cout << "Digite o valor de 'Y': ";
cin >> numero2;
soma = (numero1 + numero2);
cout << "X + Y = " << soma;
}else if (escolha == 2){
cout << "Digite o valor de 'X': ";
cin >> numero1;
cout << "Digite o valor de 'Y': ";
cin >> numero2;
div = numero1 / numero2;
cout << "X / Y = " << div;
}else if (escolha == 3){
cout << "Digite o valor de 'X': ";
cin >> numero1;
raiz = sqrt(numero1);
cout << "Raiz de (X) = " << raiz;
}else if (escolha == 4){
cout << "Digite o valor de 'X': ";
cin >> numero1;
cout << "Digite o valor de 'Y': ";
cin >> numero2;
sub = numero1 - numero2;
cout << "X - Y = " << sub;
}else if (escolha == 5) {
cout << "Digite o valor de 'X': ";
cin >> numero1;
cout << "Digite o valor de 'Y': ";
cin >> numero2;
pot = pow(numero1, numero2);
cout << "X^Y = " << pot;
}else if (escolha == 6){
cout << "Digite o valor de 'X': ";
cin >> numero1;
cout << "Digite o valor de 'Y': ";
cin >> numero2;
multi = numero1 * numero2;
cout << "X * y = " << multi;
}else if (escolha == 7){
cout << "Digite o valor de 'X': ";
cin >> numero1;
loga = log10(numero1);
cout << "LOG10(X) = " << loga;
}else if (escolha >7){
cout << "Você não escolheu nenhum valor";

}

cout << "\n\n";
cin.get();
system ("PAUSE");
return 0;
}

    
asked by anonymous 11.09.2015 / 10:05

2 answers

5

Another alternative would be to do this, as while :

#include <iostream>
#include <string.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>

using namespace std;

int main(){
    setlocale (LC_ALL, "portuguese");

    float soma, div, raiz, sub, numero1, numero2, pot, multi, loga;
    int escolha = 0; // o case não aceita float/double/strings

    while (escolha >= 0 && escolha <= 7) {
        cout << "Digite a operação desejada" << endl;
        cout << "(1) Soma| X + Y" << endl;
        cout << "(2) Divisão| X / Y" << endl;
        cout << "(3) Raiz| RAIZ (X)" << endl;
        cout << "(4) Subtração| X - Y" << endl;
        cout << "(5) Potência| X^Y" << endl;
        cout << "(6) Multiplicação| X * Y" << endl;
        cout << "(7) Logaritmo| LOG10(X)" << endl;
        cout << "(0) Continuar" << endl;
        cout << "(?) Digite outro número para sair" << endl;
        cout << endl;
        cout << "Digite sua escolha: ";
        cin >> escolha;

        switch (escolha) {
            case 1:
                cout << "Digite o valor de 'X': ";
                cin >> numero1;
                cout << "Digite o valor de 'Y': ";
                cin >> numero2;
                soma = (numero1 + numero2);
                cout << "X + Y = " << soma;
                break;
            case 2:
                cout << "Digite o valor de 'X': ";
                cin >> numero1;
                cout << "Digite o valor de 'Y': ";
                cin >> numero2;
                div = numero1 / numero2;
                cout << "X / Y = " << div;
                break;
            case 3:
                cout << "Digite o valor de 'X': ";
                cin >> numero1;
                raiz = sqrt(numero1);
                cout << "Raiz de (X) = " << raiz;
                break;
            case 4:
                cout << "Digite o valor de 'X': ";
                cin >> numero1;
                cout << "Digite o valor de 'Y': ";
                cin >> numero2;
                sub = numero1 - numero2;
                cout << "X - Y = " << sub;  
                break;
            case 5:
                cout << "Digite o valor de 'X': ";
                cin >> numero1;
                cout << "Digite o valor de 'Y': ";
                cin >> numero2;
                pot = pow(numero1, numero2);
                cout << "X^Y = " << pot;
                break;
            case 6:
                cout << "Digite o valor de 'X': ";
                cin >> numero1;
                cout << "Digite o valor de 'Y': ";
                cin >> numero2;
                multi = numero1 * numero2;
                cout << "X * y = " << multi;
                break;
            case 7:
                cout << "Digite o valor de 'X': ";
                cin >> numero1;
                loga = log10(numero1);
                cout << "LOG10(X) = " << loga;
                break;
            default:
                // nada, deixa que passe para a próxima iteração para que a condição seja verificada novamente.
                break;
        }
        cout << "\n\n";
    }

    cout << "Digite qualquer tecla para sair...";
    cin.get();
    system ("PAUSE");
    return 0;
}

So you would not need to declare another variable. Also notice that I initialized choice with zero so that execution enters the loop the first time. It seems to me that you do not yet master repetitive structures, so I advise you to study a bit about later.

Explaining, the code works like this: the code inside while will run whenever the loop condition is true (at the end of the block, the execution returns to the condition, it is evaluated, if it is true, it execute the block again); the case are very suggestive, so "if the number is 1, do it", "if it is 2, do that".

An important observation is that case can only be used with literal types, ie values expressed in the same code, except strings ( [?] Required references ), then some of the values% accept% include 'a', 1, and so on. Note that I have modified your code by putting the var choice as int , because the switch does not accept float / double numbers, only integers.

Another thing is case s at the end of every block of break , you need them; otherwise, the case would be executed, it indicates the end of the code of each case . And finally case is like default of else , which is executed when the value is none of the previous ones.

Just one more thing, if it is to compile on a linux you should remove the inclusion of if .

I hope I have been clear and helped.

    
11.09.2015 / 13:19
3

In this case the most desirable structure is {} while(); , because you avoid a check that is unnecessary before the first code execution, since the program has a menu and it will be displayed on the screen in the first iteration of your loop repetition. To address your problem exactly the way you posted you can create a variable to store the user's "response" and test it on the loopback condition:

#include <iostream>
#include <string.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>

using namespace std;

int main()
{
    setlocale (LC_ALL, "portuguese");

    float soma, div, raiz, sub, escolha, numero1, numero2, pot, multi, loga;
    char saida;

    do
    {
        cout << "Digite a operação desejada" << endl;
        cout << "(1) Soma| X + Y" << endl;
        cout << "(2) Divisão| X / Y" << endl;
        cout << "(3) Raiz| RAIZ (X)" << endl;
        cout << "(4) Subtração| X - Y" << endl;
        cout << "(5) Potência| X^Y" << endl;
        cout << "(6) Multiplicação| X * Y" << endl;
        cout << "(7) Logaritmo| LOG10(X)" << endl;
        cin >> escolha;




        if (escolha == 1)
        {
            cout << "Digite o valor de 'X': ";
            cin >> numero1;
            cout << "Digite o valor de 'Y': ";
            cin >> numero2;
            soma = (numero1 + numero2);
            cout << "X + Y = " << soma;
        }
        else if (escolha == 2)
        {
            cout << "Digite o valor de 'X': ";
            cin >> numero1;
            cout << "Digite o valor de 'Y': ";
            cin >> numero2;
            div = numero1 / numero2;
            cout << "X / Y = " << div;
        }
        else if (escolha == 3)
        {
            cout << "Digite o valor de 'X': ";
            cin >> numero1;
            raiz = sqrt(numero1);
            cout << "Raiz de (X) = " << raiz;
        }
        else if (escolha == 4)
        {
            cout << "Digite o valor de 'X': ";
            cin >> numero1;
            cout << "Digite o valor de 'Y': ";
            cin >> numero2;
            sub = numero1 - numero2;
            cout << "X - Y = " << sub;
        }
        else if (escolha == 5) 
        {
            cout << "Digite o valor de 'X': ";
            cin >> numero1;
            cout << "Digite o valor de 'Y': ";
            cin >> numero2;
            pot = pow(numero1, numero2);
            cout << "X^Y = " << pot;
        }
        else if (escolha == 6)
        {
            cout << "Digite o valor de 'X': ";
            cin >> numero1;
            cout << "Digite o valor de 'Y': ";
            cin >> numero2;
            multi = numero1 * numero2;
            cout << "X * y = " << multi;
        }
        else if (escolha == 7)
        {
            cout << "Digite o valor de 'X': ";
            cin >> numero1;
            loga = log10(numero1);
            cout << "LOG10(X) = " << loga;
        }
        else if (escolha >7)
        {
            cout << "Você não escolheu nenhum valor";
        }

        cout << "Digite S para sair e C para continuar";
        cin >> saida;

    }while((saida != "S")||(saida != "s"));

    cout << "\n\n";
    cin.get();
    system ("PAUSE");
    return 0;
}
    
11.09.2015 / 13:02