Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-05-2006, 16:08   #1
riemann_01
Member
 
Iscritto dal: May 2006
Messaggi: 38
[C++] espressioni logiche

[Modificato]

Buongiorno a tutti! Questo e' il mio primo post! Mi chiamo Francesco ed ho quattordici anni.

Da qualche giorno ho iniziato a studiare il linguaggio di programmazione C++ e sto scoprendo lentamente un mondo nuovo per me affascinante.

Durante lo svolgimento di alcuni esercizi di riepilogo a fine capitolo, contenuti nel libro che ho acquistato, ho incontrato le prime difficolta'.

Il programma che segue, da me scritto, effettua una semplice conversione tra scale di temperatura.
Codice:
// temp.cc - temperature converter, integer value

#include <iostream>
using namespace std;

void convert(int temp, char c)
{
	int x;
	
	switch(c) {
		case 'f':
			x = static_cast<int>(5.0  / 9.0 * (temp - 32.0));
			cout << "Tc = " << x << endl;
			break;
		case 'c':
			x = static_cast<int>(9.0 / 5.0 * temp + 32.0); 
			cout << "Tf = " << x << endl;
			break;
		default:
			cout << "an error occured!";
	}
}

int main()
{
	int t;
	char ch;
	
	cout << "Temperature converter - °F ~ °C\n";
	do {
		cout << "Scale? (c/f): ";
		cin >> ch;
	} while(ch != 'f' && ch != 'c');
	cout << "Valore: ";
	cin >> t;
	convert(t,ch);
}
Per quale motivo l'espressione di controllo dell'istruzione do while funziona esclusivamente con un AND?

Ragionando sulla condizione questa non dovrebbe essere del tipo "finquando il carattere digitato non e' uguale a f o c riproponi l'input?".
Se cosi fosse perche' non puo' essere codificata con un OR? (loop!)
Codice:
do {
   cout << "Scala? (c/f): ";
   cin >> ch;
} while(ch != 'f' || ch != 'c');
Chi puo' darmi delucidazioni a riguardo?

Ultima modifica di riemann_01 : 29-05-2006 alle 14:54.
riemann_01 è offline   Rispondi citando il messaggio o parte di esso
Old 26-05-2006, 16:43   #2
scorpion89
Senior Member
 
L'Avatar di scorpion89
 
Iscritto dal: Mar 2006
Città: Bottegone (PT)
Messaggi: 978
Molto semplicemente xkè le condizioni sono invertite.
Cioè il do... while si può tradurre in un esci dal ciclo quando ch=='f' or ch=='c'
ma visto ke la condizione da scrivere è quella opposta viene fuori la condizione negata e
quindi
ch!='f' && ch!='c'

Scusa se mi sono spiegato male!!

Ciao
__________________
[ Gentoo && Debian && OpenBSD ] Rulez
[irc.rizon.net #linux-world ] [ irc.pocoserio.net #poco-serio ]
TC FUCKKKKKKKKKKKKKKKKKKKKKK | Pronto per il prossimo raduno, Oh YEAHHHH
scorpion89 è offline   Rispondi citando il messaggio o parte di esso
Old 26-05-2006, 17:50   #3
riemann_01
Member
 
Iscritto dal: May 2006
Messaggi: 38
La tua spiegazione e' leggermente oscura! LOL

Credo comunque di aver capito l'errore.
Ho analizzato in modo piu' approfondito la questione.

La condizione deve essere interpretata come: "esegui queste istruzioni finquando il carattere digitato e' diverso da c ed f".

In ogni caso, grazie per la risposta!
riemann_01 è offline   Rispondi citando il messaggio o parte di esso
Old 26-05-2006, 18:13   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da riemann_01
La condizione deve essere interpretata come: "esegui queste istruzioni finquando il carattere digitato e' diverso da c ed f".
Esatto, la condizione nel while deve essere vera affinché il ciclo do-while si ripeta.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 26-05-2006, 18:46   #5
scorpion89
Senior Member
 
L'Avatar di scorpion89
 
Iscritto dal: Mar 2006
Città: Bottegone (PT)
Messaggi: 978
scusa ma l'italiano nn è il mio forte


Ciao
__________________
[ Gentoo && Debian && OpenBSD ] Rulez
[irc.rizon.net #linux-world ] [ irc.pocoserio.net #poco-serio ]
TC FUCKKKKKKKKKKKKKKKKKKKKKK | Pronto per il prossimo raduno, Oh YEAHHHH
scorpion89 è offline   Rispondi citando il messaggio o parte di esso
Old 26-05-2006, 23:56   #6
mr_hyde
Senior Member
 
Iscritto dal: Nov 2005
Città: Genova
Messaggi: 937
Riemann: visto che sei agli inizi mi permetto di darti un piccolo consiglio.
Nella tua funzione "convert" hai usato il passaggio di parametri con il reference (& dopo il tipo del parametro).
Pero' la tua funzione NON modifica i due parametri. In questo caso NON devi quindi usare & per il passaggio di parametri.

"&" va usato solo quando i parametri devono essere modifcati e restituiti modificati al chiamante.

Ad esempio:

void funzione_che_cambia(int& i)
{
i = 3;
}

void funzione_che_non_cambia(int i)
{
i = 3;
}

int main()
{
int a = 1;
std::cout << "Inizio con il valore " << a << std::endl;

// ora chiamo la funzione che NON cambia il valore
funzione_che_non_cambia(a);

std::cout << "Dopo la chiamata ho il valore " << a << std::endl;

// ora chiamo la funzione che CAMBIA il valore
funzione_che_cambia(a);

std::cout << "Dopo la chiamata ho il valore " << a << std::endl;

return 0;
}

La differenza e' molto importante e lo diventera' ancora di piu' quando inizierai a scrivere classi e metodi e le cose si complicheranno un pochino...

Se queste cose le sai gia'... allora chiedo scusa!

Ciao,
Mr Hyde
__________________
MacMini Late 2009/MacMini 2018
mr_hyde è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2006, 22:06   #7
riemann_01
Member
 
Iscritto dal: May 2006
Messaggi: 38
Grazie per il consiglio mr_hyde!

Conosco la differenza fra call-by-value e call-by-reference.

Scrivendo la procedura convert ho pensato che si potesse operare una forma "banale" di ottimizzazione evitando l'uso di due variabili locali.

Utilizzare questo metodo viola, in qualche modo, i concetti di programmazione modulare (procedurale)? Oppure e' un semplice "errore" semantico?
riemann_01 è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2006, 23:16   #8
mr_hyde
Senior Member
 
Iscritto dal: Nov 2005
Città: Genova
Messaggi: 937
Quote:
Originariamente inviato da riemann_01
Grazie per il consiglio mr_hyde!

Conosco la differenza fra call-by-value e call-by-reference.

Scrivendo la procedura convert ho pensato che si potesse operare una forma "banale" di ottimizzazione evitando l'uso di due variabili locali.

Utilizzare questo metodo viola, in qualche modo, i concetti di programmazione modulare (procedurale)? Oppure e' un semplice "errore" semantico?
Be', l'esempio e' un po' scarno per parlare di violazione di programmazione modulare...

Ad ogni modo e' vero, qualche volta capita di passare reference per motivi di ottimizzazione, ma generalmente si fa con oggetti "grossi".
E comunque, un tempo, qualcuno diceva che invece che passare un reference, per motivi prestazionali, era meglio passare un puntatore all'oggetto, ma si parla di anni fa e nel frattempo i compilatori sono migliorati.

Se proprio vuoi usare i reference allora usa la forma con il const quando vuoi comunque impedire la modifica, ovvero:

int the_function(const int& nonLoCambio, float& loCambio)

Ciao,
Mr Hyde
__________________
MacMini Late 2009/MacMini 2018
mr_hyde è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2006, 14:52   #9
riemann_01
Member
 
Iscritto dal: May 2006
Messaggi: 38
Ti ringrazio per la disponibilita'.
A presto!
riemann_01 è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2006, 15:43   #10
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Scusa la domanda: mi aspetterei che il tuo programma, nel caso 'f', ti stampi sempre zero. E' cosi?

High Flying
Sottovento
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 29-05-2006, 15:01   #11
riemann_01
Member
 
Iscritto dal: May 2006
Messaggi: 38
Codice:
riemann@home:~$ ./convert
Temperature converter - °F ~ °C
Scala? (c/f): c
Valore: 26
Tf = 78
riemann@home:~$ ./convert
Temperature converter - °F ~ °C
Scala? (c/f): f
Valore: 100
Tc = 37
riemann_01 è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2006, 02:45   #12
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da riemann_01
Codice:
riemann@home:~$ ./convert
Temperature converter - °F ~ °C
Scala? (c/f): c
Valore: 26
Tf = 78
riemann@home:~$ ./convert
Temperature converter - °F ~ °C
Scala? (c/f): f
Valore: 100
Tc = 37
Beh, la versione 2.0 sembra funzionare decisamente meglio. Evidentemente la 1.0 stampava sempre zero...

High Flying
Sottovento
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2006, 12:11   #13
riemann_01
Member
 
Iscritto dal: May 2006
Messaggi: 38
Stampava zero poiche' in convert si utilizzava l'aritmetica di tipo intero.
5 / 9 * (temp - 32) = 0 * (temp - 32)
riemann_01 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
La capsula SpaceX Dragon CRS-33 ha acces...
La NASA è sempre più vicin...
Crisi delle memorie: ASUS torna al passa...
Le console next-generation potrebbero es...
Gemini cresce ancora: la quota di mercat...
Samsung sfida TSMC: la capacità produtti...
Iliad alza il prezzo della fibra ottica ...
Il prossimo low cost di POCO sarà il più...
The Elder Scrolls VI: ecco le ultime sul...
Ecco i saldi di fine anno Amazon, 34 off...
iPhone Fold: scorte limitate al lancio m...
OpenAI porterà la pubblicità in ChatGPT ...
TSMC aumenterà ancora i prezzi: nel 2026...
Marvel pubblica anche il secondo teaser ...
Nuovo accordo tra xAI e il Pentagono: l'...
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: 03:09.


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