Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Nel Formula 1 Technology and Media Centre di Biggin Hill, la velocità delle monoposto si trasforma in dati, immagini e decisioni in tempo reale grazie all’infrastruttura Lenovo che gestisce centinaia di terabyte ogni weekend di gara e collega 820 milioni di spettatori nel mondo
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
Il nuovo gimbal mobile DJI evolve il concetto di tracciamento automatico con tre modalità diverse, un modulo multifunzionale con illuminazione integrata e controlli gestuali avanzati. Nel gimbal è anche presente un'asta telescopica da 215 mm con treppiede integrato, per un prodotto completo per content creator di ogni livello
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce
Abbiamo provato il nuovo HUAWEI Pura 80 Pro. Parliamo di uno smartphone che è un vero capolavoro di fotografia mobile, grazie ad un comparto completo in tutto e per tutto, In questa colorazione ci è piaciuto molto, ma i limiti hardware e software, seppur in netto miglioramento, ci sono ancora. Ma HUAWEI ha fatto davvero passi da gigante per questa nuova serie Pura 80. Buona anche l'autonomia e soprattutto la ricarica rapida sia cablata che wireless, velocissima.
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


Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce Recensione Pura 80 Pro: HUAWEI torna a stupire c...
Opera Neon: il browser AI agentico di nuova generazione Opera Neon: il browser AI agentico di nuova gene...
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi Wind Tre 'accende' il 5G Standalone in Italia: s...
PlayStation Portal: arriva lo Streaming ...
iPad Air 13'' (M2) in offerta: sconto di...
Schiaffo al copyright: utilizzare materi...
realme GT 8 Pro porta le fotocamere inte...
JBL Clip 5 a soli 39€ su Amazon: lo spea...
Apple pronta a pagare 1 miliardo l'anno ...
Apple non dimentica gli iPhone più...
Nintendo si prepara a dare il benservito...
Arriva la Canon R6 Mark III con un obiet...
Una famiglia ha ridotto un conto ospedal...
Le carte collezionabili dell'INPS conqui...
Football Manager 26 debutta su Steam con...
A 189,99€ con coupon: il NAS UGREEN che ...
Arm cresce ancora: ricavi oltre 1 miliar...
Xiaomi Redmi Note 14 5G ora a soli 179€:...
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: 11:58.


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