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...
Grazie a GLIMPSE-17775 il telescopio spa...
Samsung Galaxy A27 5G è ufficiale...
TCL aggiorna la sua gamma di monitor per...
Anche OPPO avrà uno smartphone co...
La Radeon RX 9070 XT appare su Steam e m...
L'America si ribella ai datacenter: bloc...
'Artificial General Engineer': l'IA di J...
Il drone NASA Dragonfly, che voler&agrav...
Stop immediato a Fable 5 e Mythos 5: il ...
"Prime Day Amazon il 23-26 giugno": sì e...
Oggi 2 super MacBook Pro M5 e M5 Pro, 24...
Tineco Floor One Station S9 Artist: il s...
Raggiunte nuove altitudine e velocit&agr...
Apple Watch Series 11 GPS a 339€ su Amaz...
Come un MacBook, ma con la RTX 5070: MSI...
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: 21:18.


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