Studente del liceo alle prime armi if else

di il
15 risposte

Studente del liceo alle prime armi if else

Scusate, avrei bisogno di aiuto. L'esercizio è dati i lati stabilire che tipo di triangolo. Ho fatti altri esrcizi e funzionano ma questo, non mi da errore nel compilarlo ma mi stampa solo il triangolo è equilatero in tutti i casi, non capisco dove sbaglio. grazie in anticipo

#include <iostream>
using namespace std;
main () {
float a;
cout<<"inserisci a:";
cin>>a;
float b;
cout<<"inserisci b:";
cin>>b;
float c;
cout<<"inserisci c:";
cin>>c;
if ((a==b) && (b==c) && (c==a))
 cout<<"il triangolo e equilatero ";
else
if ((a!=b) && (b!=c) && (a!=c))
 cout<<"il triangolo e scaleno";
else
 if ((a==b) ^ (b==c)^ (a==c))
 cout<<"il triangolo e isoscele ";

system ("PAUSE");
}

15 Risposte

  • Re: Studente del liceo alle prime armi if else

    Leggiti BENE quali sono gli operato booleani. 

    Attento che sono simili ma NON SONO la stessa cosa degli operato binari. 

    A esempio lo XOR’ binario NON E' la stessa cosa dell' OR booleano o quello binario. 

    (in tempo zero dovresti aver capito ;-)) 

  • Re: Studente del liceo alle prime armi if else

    Questa è una versione con le graffe. Se non ho capito male l'operatore && dovrebbe rendere vera l'espressione se tutte e tre le condizioni sono vere, ed è quello che mi serve  nel caso del triangolo equilatero e dello scaleno, mentre lo xor (or esclusivo) ^ rende vera l'espressione se solo una delle condizioni è vera, ed è quello che mi serve per il triangolo isoscele. L'operatore || or inclusivo non mi va bene perchè mi darebbe vera anche nel caso di un equilatero, che è si isoscele, ma rientra nel primo caso. Qualunque valore metto ai lati mi stampa sempre  “il triangolo è equilatero e non capisco dove sbaglio. Dovrebbe essere se a=b è vera allora passa a valutare b=c se è vera passa a valutare c=a se è vera pure quella stampa ”il triangolo è equilatero" e questo vale anche per lo scaleno. Mentre per l'ultima dovrebbe dare vero solo se solo una delle tre è vera.

    #include <iostream>
    using namespace std;
    main () {
    float a;
    cout<<"inserisci a:";
    cin>>a;
    float b;
    cout<<"inserisci b:";
    cin>>b;
    float c;
    cout<<"inserisci c:";
    cin>>c;
    if ((a==b) && (b==c) && (c==a)){
    cout<<"il triangolo e equilatero ";
    }else if ((a!=b) && (b!=c) && (a!=c)){
    cout<<"il triangolo e scaleno";
    } else if ((a==b) ^ (b==c) ^ (a==c)){
    cout<<"il triangolo e isoscele ";
    }
    system ("PAUSE");
    }

    Ho fatto anche questo esercizio e questo funziona 

    #include <iostream>
    using namespace std;
    main () {
    int voto;
    cout <<"inserire voto:";
    cin >> voto;

    if ((voto<1) || (voto>10)){
     cout <<"valore errato:";
    }
    else if (voto>6){
     cout<<"sufficiente:";
    }
    else if ((voto>4) && (voto<6)){
     cout <<"insufficiente:";
    }
    else if (voto<=4){
     cout <<"gravemente insufficiente:";
    }
    system ("pause");
    }

  • Re: Studente del liceo alle prime armi if else

    Il secondo FUNZIONA PERCHE' hai scritto GIUSTO gli operatori booleani

    Il primo NON FUNZIONA PERCHE' hai scritto SBAGLIATO l'operatore booleano OR

    LEGGI BENE la mia precedente risposta e QUESTA!!

    Ho anche scirtto COSA guardare ;-)

    Ci arrivi anche da solo, e' BANALE.

  • Re: Studente del liceo alle prime armi if else

    Avevo già provato a scriverlo così ma non funziona uguale, non l'avevo utilizzato il || perchè solo una delle tre le condizioni deve essere vera.

    #include <iostream>
    using namespace std;
    main () {
    float a;
    cout<<"inserisci a:";
    cin>>a;
    float b;
    cout<<"inserisci b:";
    cin>>b;
    float c;
    cout<<"inserisci c:";
    cin>>c;
    if ((a==b) && (b==c) && (c==a))
    cout<<"il triangolo e equilatero ";
    else
    if ((a!=b) && (b!=c) && (a!=c))
    cout<<"il triangolo e scaleno";
    else
    if ((a==b) || (b==c) || (a==c))
    cout<<"il triangolo e isoscele ";

    system ("PAUSE");
    }

  • Re: Studente del liceo alle prime armi if else

    Ok, allora scrivi un'espressione BOOLEANA piu' complicata.

    di sicuro mescolare operatori booleani e binari, se non fatto con ‘cognizione di causa’ , non dara' il risultato richiesto in modo ‘miracoloso’.

    sara' una cosa del tipo:

    a==b && … || …

    Gli operatori booleani si possono combinare,, ovviamente.

    Bisogna stare attenti all'ORDINE DI VALUTAZIONE: prima l'AND oppure l'OR?

    Oppure ci si mettono le parentesi.

    queste cose sono scritte nel manuale del linguaggio, che va consultato SEMPRE quando non si e' sicuri di qualcosa 

    Non ti ho scritto tutto perche', come dicevo, e' BANALE.

    Ci arrivi con uno sforzo minuscolo ;-)

  • Re: Studente del liceo alle prime armi if else

    Ho provato anche a scriverlo così, come suggeritomi da un'altro utente del forum, ma non va pure questo, mi da sempre e solo una risposta.

    #include <iostream>
    using namespace std;
    main () {
    float a;
    cout<<"inserisci a:";
    cin>>a;
    float b;
    cout<<"inserisci b:";
    cin>>b;
    float c;
    cout<<"inserisci c:";
    cin>>c;
    if (a!=b && b!=c && c!=a){
    cout <<"il triangolo e scaleno";
    }
    else if (a==b && b==c) {
    cout <<"il triangolo e equilatero";
    }
    else {
    cout << "il triangolo è isoscele";
    }

    }

  • Re: Studente del liceo alle prime armi if else

    Adesso e' pure peggio di prima!

  • Re: Studente del liceo alle prime armi if else

    Come fa a darti una risposta sbagliata?

    https://onlinegdb.com/m-PprRpx4

    dà tre risposte diverse e corrette

  • Re: Studente del liceo alle prime armi if else

    @weierstrass, attento: un triangolo e' equilatero quando TUTTI E TRE i lati sono uguali, NON solo 2, come implementatio nell'ultima versione del codice.
    Osserva bene il codice: e' il classico “funziona per sbaglio” ;-)

    D'altra parte,

    1. se sono TUTTI diversi, e' scaleno

    2. se sono TUTTI uguali e' equilatero

    3. cosa succede se ci sono DUE uguali e UNO diverso?

    4. cosa succede se c'e' UNO uguale e DUE diversi?

    (a buon intenditor poche parole ;-))

  • Re: Studente del liceo alle prime armi if else

    21/02/2023 - migliorabile ha scritto:


    @weierstrass, attento: un triangolo e' equilatero quando TUTTI E TRE i lati sono uguali, NON solo 2, come implementatio nell'ultima versione del codice.
    Osserva bene il codice: e' il classico “funziona per sbaglio” ;-)

    Nelle relazioni di equivalenza vale la proprietà transitiva, quindi se a è uguale a b e b è uguale a c, allora a è uguale a c

  • Re: Studente del liceo alle prime armi if else

    21/02/2023 - Weierstrass ha scritto:


    Come fa a darti una risposta sbagliata?

    https://onlinegdb.com/m-PprRpx4

    dà tre risposte diverse e corrette

    Non so, io uso dev+ , l'ho scritto come l'ho postato faccio compila e poi esegui, ma in tutti i casi con tutti questi questi codici  mi restituisce sempre “triangolo equilatero” anche se i lati non sono uguali o  se sono due uguali. Il mio codice, dal punto di vista concettuale mi sembrava corretto al di la del || o ^ . Forse c'è qualcosa nella sintassi che non va bene.

  • Re: Studente del liceo alle prime armi if else

    21/02/2023 - Weierstrass ha scritto:


    Come fa a darti una risposta sbagliata?

    https://onlinegdb.com/m-PprRpx4

    dà tre risposte diverse e corrette

    Ho provato a riscriverlo bene bene e adesso funziona, grazie mille, probabilmente prima c'era un errore. Grazie mille. 

  • Re: Studente del liceo alle prime armi if else

    Puzzola, sono “andato”!
    Meno ML e piu' “cervello”!

    L'ho letto n-mila volte come ‘a==b && a==c’ !

  • Re: Studente del liceo alle prime armi if else

    Ho provato di corsa e direi che funzione, al posto dell'operatore or ho messo la somma. Ho modificato solo quello.

    Per rendere l'esercizio migliore, troverei se è rettangolo, poi calcolare perimetro ed area. Magari la coerenza della lunghezza dei lati.

    #include <iostream>
    
    main ()
    {
     float a,b,c; /* sono allergico alle dichiarazioni in mezzo al codice */
    
     cout<<"inserisci a:";
     cin>>a;
     cout<<"inserisci b:";
     cin>>b;
     cout<<"inserisci c:";
     cin>>c;
    
     if ((a==b) && (b==c) && (c==a)) cout<<"il triangolo e equilatero ";
     else if ((a!=b) && (b!=c) && (a!=c)) cout<<"il triangolo e scaleno";
     else if ((a==b) + (b==c) + (a==c)) cout<<"il triangolo e isoscele ";
    
     cin>>c; /* attesa finale */
     
     return 0; 
    }
Devi accedere o registrarti per scrivere nel forum
15 risposte