|
|
|
|
Strumenti |
24-03-2019, 17:01 | #1 |
Junior Member
Iscritto dal: Mar 2019
Messaggi: 3
|
Problema da principiante C++
Salve a tutti, premetto che sono nuovo su questo forum.
Sto riscontrando dei problemi di codice con un programma in c++ che riceve 3 numeri dall'utente (che sono gli angoli di un triangolo), se la somma di essi è uguale a 180 poi il programma va a definire se il triangolo è isoscele, scaleno ed equilatero. Il problema è che quando inserisco apposta dei numeri la cui somma non è 180, invece di ritornare alla sezione di input, il programma è come se saltasse per andare sull'if. Spero in un vostro aiuto, grazie in anticipo. Questo è il codice: Codice:
#include <iostream> using namespace std; int main () { int a, b, c, d; do { cout<<"Digita il primo numero:"<<endl; cin>>a; cout<<"Digita il secondo numero:"<<endl; cin>>b; cout<<"Digita il terzo numero:"<<endl; cin>>c; d = a + b +c; } while (d==180); if (a==b==c) { cout<<"Il triangolo e' equilatero."<<endl; } else { if (a!=b!=c) { cout<<"Il triangolo e' scaleno."<<endl; } else { cout<<"Il triangolo e' equilatero."<<endl; } } system ("pause"); return 0; } Ultima modifica di Gwynbleidd19 : 24-03-2019 alle 17:02. Motivo: Miglior comprensione del testo. |
24-03-2019, 17:41 | #2 | |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2778
|
Non conosco il C++, anche se riesco a leggere questi pochi statement. Il predicato WHILE innesca un loop delle successive istruzioni finché (while) la condizione indicata è vera
cfr https://www.tutorialspoint.com/cplus...while_loop.htm Una possibile soluzione in pseudo-code: Quote:
__________________
[Ora di nuovo cliente Tiscali, altri gestori mi hanno deluso... di più! ] Ultima modifica di DelusoDaTiscali : 25-03-2019 alle 06:29. |
|
25-03-2019, 07:30 | #3 | |
Senior Member
Iscritto dal: Apr 2005
Messaggi: 2990
|
Quote:
tu devi eseguire il loop (while) finchè d è DIVERSO da 180. Deve uscire dal loop quando la somma dei 3 valori è 180, e non restare dentro finchè lo è. |
|
25-03-2019, 08:55 | #4 |
Senior Member
Iscritto dal: May 2005
Città: Trieste
Messaggi: 2275
|
piccolo consiglio: installati un ide che abbia un buon debugger in tempo reale (io raccomanderò sempre e comunque Visual Studio community ed. che è quanto di più completo puoi trovare ma a te la scelta), e metti un paio di break point per vedere cosa succede durante l'esecuzione...bug come questi, di pura "logica / algoritmica" li becchi in un attimo
__________________
neo mini v2 / asus strix z490i / 10600k@? / uh12s / rx6700xt / 32gb ddr4@3200 / sandisk 250 + asenno 1tb / lenovo g34w
trattative concluse : tante... |
17-04-2019, 21:09 | #5 | |
Member
Iscritto dal: Dec 2006
Messaggi: 33
|
Quote:
occhio a conversioni implicite ad int in agguato nel caso di un triangolo davvero equilatero! a == b valuta a true, ma true viene convertito implicitamente a 1 nel confronto successivo. Il codice non riesce a rilevare triangoli equilateri con lato diverso da 1. |
|
18-04-2019, 07:38 | #6 | |
Senior Member
Iscritto dal: Apr 2005
Messaggi: 2990
|
Quote:
Codice:
if (a == b && b == c ) |
|
21-04-2019, 20:44 | #7 | |
Junior Member
Iscritto dal: Feb 2009
Messaggi: 24
|
Quote:
Quindi il tuo ciclo iniziando con il DO non verifica subito la condizione e ti fa inserire i dati. Quando arriva a WHILE(d==180) se d vale 180, ripete il ciclo altrimenti esce. Per fare quello che scrivi, ripetere l'inserimento se la somma non è 180, la condizione di verifica deve essere WHILE(d!=180). Inoltre c'è anche un errore sull'ultimo controllo IF perche, nel caso che a==b!=c viene la scritta "triangolo equilatero"... che inv ece non è. poi, per i confronti io userei queste forme a==b && a==c. |
|
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:24.