[C++]E' possibile dare un segno matematico casuale?

di il
5 risposte

[C++]E' possibile dare un segno matematico casuale?

Mi spiego, mi è stato richiesto di fare questo compito:
Generare due numeri casuali con segno matematico casuale. Per esempio: eseguo il programma, 5+7, chiudo il programma. Apro di nuovo il programma 4*4.

Io ho fatto questo, ma il segno è sempre più:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main ()
{

    srand((unsigned int)time(0));
    int num=rand()%9, num2=rand()%9;
	int risp, tot, i=1;
	if (num==1)
        cout<<"Uno + ";
    else {
        if (num==2)
            cout<<"Due + ";
        else {
            if (num==3)
                cout<<"Tre + ";
            else {
                if (num==4)
                    cout<<"Quattro + ";
                else {
                    if (num==5)
                        cout<<"Cinque + ";
                    else {
                        if (num==6)
                            cout<<"Sei + ";
                        else {
                            if (num==7)
                                cout<<"Sette + ";
                            else {
                                if (num==8)
                                    cout<<"Otto + ";
                                else {
                                    if (num==9)
                                        cout<<"Nove + ";
                                    else {
                                        if (num==0)
                                            cout<<"Zero + ";
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    	if (num2==1)
        cout<<"Uno = ";
    else {
        if (num2==2)
            cout<<"Due = ";
        else {
            if (num2==3)
                cout<<"Tre = ";
            else {
                if (num2==4)
                    cout<<"Quattro = ";
                else {
                    if (num2==5)
                        cout<<"Cinque = ";
                    else {
                        if (num2==6)
                            cout<<"Sei = ";
                        else {
                            if (num2==7)
                                cout<<"Sette = ";
                            else {
                                if (num2==8)
                                    cout<<"Otto = ";
                                else {
                                    if (num2==9)
                                        cout<<"Nove = ";
                                    else {
                                        if (num2==0)
                                            cout<<"Zero = ";
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    cin>>risp;
    tot=num+num2;
    while (tot!=risp && i<=3){
        cout<<"Accesso negato. Dopo tre tentativi errati il programma si ferma. Riprova: ";
        cin>>risp;
        i++;
        }

    if (tot==risp)
        cout<<"Accesso confermato. ";

    return 0;
}
E' possibile generare anche il segno casualmente?

5 Risposte

  • Re: [C++]E' possibile dare un segno matematico casuale?

    Non so se devi utilizzare delle cose obbligatorie ma non potresti, come per i numeri, generarne un altro da 0 a 3 che rappresenta l''operazione?

    Del genere:
    
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    
    using namespace std;
    
    int main ()
    {
        srand((unsigned int)time(0));
        int num=rand()%9, num2=rand()%9;
        int num3 = rand()%4;
        char segno;
    
        if(num3 == 0)
        {
            segno = '+';
        }
        if(num3 == 1)
        {
            segno = '-';
        }
        if(num3 == 2)
        {
            segno = '*';
        }
        if(num3 == 3)
        {
            segno = '/';
        }
    
        cout << num << segno << num2 << endl;
    }
    
  • Re: [C++]E' possibile dare un segno matematico casuale?

    Eduadie ha scritto:


    Non so se devi utilizzare delle cose obbligatorie ma non potresti, come per i numeri, generarne un altro da 0 a 3 che rappresenta l''operazione?

    Del genere:
    
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    
    using namespace std;
    
    int main ()
    {
        srand((unsigned int)time(0));
        int num=rand()%9, num2=rand()%9;
        int num3 = rand()%4;
        char segno;
    
        if(num3 == 0)
        {
            segno = '+';
        }
        if(num3 == 1)
        {
            segno = '-';
        }
        if(num3 == 2)
        {
            segno = '*';
        }
        if(num3 == 3)
        {
            segno = '/';
        }
    
        cout << num << segno << num2 << endl;
    }
    
    Ho provato così ma mi da o+=..
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    using namespace std;
    
    int main ()
    {
        srand((unsigned int)time(0));
        int num=rand()%9, num2=rand()%9;
        string a;
        string b;
    	int risp, tot, i=1;
    	int num3 = rand()%4;
        char segno;
    
        if(num3 == 0)
        {
            segno = '+';
        }
        if(num3 == 1)
        {
            segno = '-';
        }
        if(num3 == 2)
        {
            segno = '*';
        }
        if(num3 == 3)
        {
            segno = '/';
        }
    
    
    	if (num==1)
            a='Uno';
        else {
            if (num==2)
                a='Due';
            else {
                if (num==3)
                    a='Tre';
                else {
                    if (num==4)
                        a='Quattro';
                    else {
                        if (num==5)
                            a='Cinque';
                        else {
                            if (num==6)
                                a='Sei';
                            else {
                                if (num==7)
                                    a='Sette';
                                else {
                                    if (num==8)
                                        a='Otto';
                                    else {
                                        if (num==9)
                                            a='Nove';
                                        else {
                                            if (num==0)
                                                a='Zero';
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        	if (num2==1)
            b='Uno=';
        else {
            if (num2==2)
                b='Due=';
            else {
                if (num2==3)
                    b='Tre=';
                else {
                    if (num2==4)
                        b='Quattro=';
                    else {
                        if (num2==5)
                            b='Cinque=';
                        else {
                            if (num2==6)
                                b='Sei=';
                            else {
                                if (num2==7)
                                    b='Sette=';
                                else {
                                    if (num2==8)
                                        b='Otto=';
                                    else {
                                        if (num2==9)
                                            b='Nove=';
                                        else {
                                            if (num2==0)
                                                b='Zero=';
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    
        cout << a << segno << b << endl;
        cin>>risp;
        tot=num+num2;
        while (tot!=risp && i<=3){
            cout<<"Accesso negato. Dopo tre tentativi errati il programma si ferma. Riprova: ";
            cin>>risp;
            i++;
            }
    
        if (tot==risp)
            cout<<"Accesso confermato. ";
    
        return 0;
    }
  • Re: [C++]E' possibile dare un segno matematico casuale?

    Non riesco a capire perchè insisti con tutti quei if che inoltre possono essere scritti sottoforma di switch poichè num è una condizione numerica...

    Comunque basta aggiungere una ulteriore assegnazione negli if del segno ed il gioco è fatto
    
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    
    using namespace std;
    
    int main ()
    {
        srand((unsigned int)time(0));
        int num=rand()%9, num2=rand()%9;
        int num3 = rand()%4;
        int risp;
        double risultato;
        char segno;
    
        if(num3 == 0)
        {
            segno = '+';
            risultato = num + num2;
        }
        if(num3 == 1)
        {
            segno = '-';
            risultato = num - num2;
        }
        if(num3 == 2)
        {
            segno = '*';
            risultato = num * num2;
        }
        if(num3 == 3)
        {
            segno = '/';
            risultato = num / 2;
        }
    
        cout << num << segno << num2 << endl;
        cin >> risp;
    
        if(risp == risultato)
        {
            cout << "Risposta Esatta!" << endl;
        } else
        {
            cout << "Risposta Errata!" << endl;
        }
    }
    
    
  • Re: [C++]E' possibile dare un segno matematico casuale?

    Eduadie ha scritto:


    Non riesco a capire perchè insisti con tutti quei if che inoltre possono essere scritti sottoforma di switch poichè num è una condizione numerica...

    Comunque basta aggiungere una ulteriore assegnazione negli if del segno ed il gioco è fatto
    
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    
    using namespace std;
    
    int main ()
    {
        srand((unsigned int)time(0));
        int num=rand()%9, num2=rand()%9;
        int num3 = rand()%4;
        int risp;
        double risultato;
        char segno;
    
        if(num3 == 0)
        {
            segno = '+';
            risultato = num + num2;
        }
        if(num3 == 1)
        {
            segno = '-';
            risultato = num - num2;
        }
        if(num3 == 2)
        {
            segno = '*';
            risultato = num * num2;
        }
        if(num3 == 3)
        {
            segno = '/';
            risultato = num / 2;
        }
    
        cout << num << segno << num2 << endl;
        cin >> risp;
    
        if(risp == risultato)
        {
            cout << "Risposta Esatta!" << endl;
        } else
        {
            cout << "Risposta Errata!" << endl;
        }
    }
    
    
    Perché i due numeri devono risultare come stringa
    nel senso
    i numeri sono 5 e 7
    nello schermo deve apparire cinque + sette
  • Re: [C++]E' possibile dare un segno matematico casuale?

    Ah ora si...Bhè allora conviene creare una funzione che ti ritorna la stringa di un certo numero attraverso uno switch e poi effettuare tutto ciò che ti serve:
    
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    using namespace std;
    
    string creaStringa (int num) {
        switch(num)
        {
        case 0:
            return "Zero";
            break;
        case 1:
            return "Uno";
            break;
        case 2:
            return "Due";
            break;
        case 3:
            return "Tre";
            break;
        case 4:
            return "Quattro";
            break;
        case 5:
            return "Cinque";
            break;
        case 6:
            return "Sei";
            break;
        case 7:
            return "Sette";
            break;
        case 8:
            return "Otto";
            break;
        case 9:
            return "Nove";
            break;
        default:
            return "ERRORE";
        }
    }
    
    int main ()
    {
        srand((unsigned int)time(0));
        int num=rand()%10, num2=rand()%10;
        string a;
        string b;
       int risp, tot, i=1;
       int num3 = rand()%4;
        char segno;
    
        if(num3 == 0)
        {
            segno = '+';
            tot = num + num2;
        }
        if(num3 == 1)
        {
            segno = '-';
            tot = num - num2;
        }
        if(num3 == 2)
        {
            segno = '*';
            tot = num * num2;
        }
        if(num3 == 3)
        {
            segno = '/';
            tot = num / num2;
        }
    
        a = creaStringa(num);
        b = creaStringa(num2);
    
        cout << a << segno << b << endl;
        cin >> risp;
        while (tot!=risp && i<=3){
            cout<<"Accesso negato. Dopo tre tentativi errati il programma si ferma. Riprova: ";
            cin>>risp;
            i++;
            }
    
        if (tot==risp)
            cout<<"Accesso confermato. ";
    
        return 0;
    }
    
    PS...se vuoi anche il numero 9 devi fare %10...con %9 prendi l'intervallo 0/8
Devi accedere o registrarti per scrivere nel forum
5 risposte