Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Pannello QD-OLED da 32 pollici con risoluzione 4K, frequenza di aggiornamento a 240Hz e tempi di risposta rapidissimi: il Gigabyte MO32U24 evolve il progetto del suo predecessore MO32U e alza ulteriormente l'asticella delle prestazioni. È ancora una volta un monitor indirizzato ai giocatori più esigenti
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
realme 16 5G è un nuovo smartphone con sensore Sony IMX 852 da 50MP sul retro e uno specchio selfie fisico integrato nella camera bar, una prima nel segmento di mercato. Batteria da 6550mAh in un corpo da 8,1mm e 183g, certificazione IP69K e ricarica da 45W completano un pacchetto aggressivo per la fascia media, per uno dei prodotti più interessanti del produttore sul piano commerciale
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni
Sono ormai definitive le nuove norme del Codice della Strada per i monopattini elettrici. Non solo targa e assicurazione, le regole sono tante e riguardano diversi aspetti, vi spieghiamo come evitare sanzioni che possono essere salate
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-03-2019, 17:01   #1
Gwynbleidd19
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.
Gwynbleidd19 è offline   Rispondi citando il messaggio o parte di esso
Old 24-03-2019, 17:41   #2
DelusoDaTiscali
Senior Member
 
L'Avatar di DelusoDaTiscali
 
Iscritto dal: Aug 2005
Messaggi: 3570
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:
finché (a+b+c) <> 180
.....acquisisci a, b, c
....fine-finché

Se a=b E b=c
...segnala "il triangolo è equilatero"
altrimenti
....se a<>c E b<>c E a<>c
........segnala "il triangolo è scaleno"
....altrimenti
........segnala "il triangolo è isoscele"
....fine-se
fine-se
Non conoscendo c++ ignoro se vi siano altri errori di codifica.
__________________
[Ora di nuovo cliente Tiscali, altri gestori mi hanno deluso... di più! ]

Ultima modifica di DelusoDaTiscali : 25-03-2019 alle 06:29.
DelusoDaTiscali è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2019, 07:30   #3
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3301
Quote:
Originariamente inviato da Gwynbleidd19 Guarda i messaggi
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;
}
Sono mezzo addormentato ma credo che il problema sia in un errore di logica.
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 è.
Kaya è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2019, 08:55   #4
-MiStO-
Senior Member
 
Iscritto dal: May 2005
Città: Trieste
Messaggi: 2287
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...

-MiStO- è offline   Rispondi citando il messaggio o parte di esso
Old 17-04-2019, 21:09   #5
Lampo89
Member
 
L'Avatar di Lampo89
 
Iscritto dal: Dec 2006
Messaggi: 33
Quote:
Originariamente inviato da Gwynbleidd19 Guarda i messaggi
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;
}
a == b == c

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.
Lampo89 è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2019, 07:38   #6
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3301
Quote:
Originariamente inviato da Lampo89 Guarda i messaggi
a == b == c

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.
Come giustamente fatto notare, sarebbe meglio modificare così:
Codice:
if (a == b && b == c )
Kaya è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2019, 20:44   #7
xsandrox
Junior Member
 
L'Avatar di xsandrox
 
Iscritto dal: Feb 2009
Messaggi: 24
Quote:
Originariamente inviato da Gwynbleidd19 Guarda i messaggi
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;
}
Il ciclo WHILE viene eseguito fino a quando la condizione è vera, stessa cosa per il DO...WHILE.
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.
xsandrox è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming Gigabyte MO32U24 OLED: il 4K a 240Hz su un panne...
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh Recensione realme 16 5G: lo smartphone con Selfi...
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni Come rispettare tutte le nuove regole per i mono...
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta DLSS 4.5: con Dynamic Frame Generation e MFG 6X ...
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere) Plaud NotePin S, il registratore IA si fa indoss...
FTX, la Corte d'Appello conferma la cond...
OnePlus anticipa l'arrivo di nuove cuffi...
YouTube da record con 2,7 miliardi di ut...
Samsung Galaxy Watch Ultra 2, l'autonomi...
Deezer ha rilasciato un tool gratuito pe...
AMD Ryzen 9 7950X3D danneggiato: approva...
I Mac con chip Apple Silicon hanno meno ...
Scandalo nel Regno Unito: agente sotto i...
TOP 15 offerte Amazon del weekend: 10 tu...
DJI Neo Fly More Combo a 245€: il mini d...
JBL Live Beam 3 a 129€ invece di 199€ su...
L'FBI ha costruito una città segr...
AMD usa il MacBook Neo come bersaglio in...
Intel prepara 'Raptor Lake Next'? Nel 20...
Una telefonata del CEO di Amazon dietro ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:46.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v