Torna indietro   Hardware Upgrade Forum > Software > Programmazione

 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco
MiniLED di fascia media con local dimming a 192 zone, 144 Hz nativi e audio firmato Devialet. La prova strumentale riscontra colori affidabili e gaming reattivo, per un prodotto molto accessibile e convincente. Ma la soundbar aggiuntiva è quasi d'obbligo
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Amazon porta i colori sul suo Kindle da scrittura più grande: schermo Colorsoft a 11 pollici, processore quad-core, penna premium più reattiva e strumenti IA per le note, sono le note salienti. Il salto di prezzo rispetto al modello in bianco e nero si fa sentire, anche se la percezione è quella di trovarsi di fronte a un prodotto di fascia altissima, per veri appassionati
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
Abbiamo intervistato Sumit Dhawan, CEO di Proofpoint, per capire come stia cambiando il mondo della sicurezza con l'avvento dell'intelligenza artificiale e con il ritmo sempre più serrato a cui vengono trovate vulnerabilità nel software. Un problema significativo, che richiederà del tempo per essere risolto (o quantomeno arginato)
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-07-2006, 13:18   #1
swarm
Senior Member
 
L'Avatar di swarm
 
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
[C++]Una sciocchezza sul ciclo for

Salve a tutti

mi trovo a scomodarvi per una sciocchezza, ma non trovo qualcosa che mi spieghi nel dettaglio come funziona il ciclo for e quindi lo chiedo a voi.

for(<inizializzazione>;<condizione>;<avanzamento>)

in pratica volevo sapere come fare questo; ipotizzando un ciclo for di questo tipo:

Codice:
	for (indice=0; indice<5 && <condizione>; indice++)
	{
		
	}
se, ad esempio, la <condizione> non vale più quando sono alla terza iterazione (indice = 3), entro nel for, la condizione non è verificata, ma indice viene comunque incrementato a 4.

come fare per lasciarlo = 3?

spero di essere stato chiaro (cosa che spesso non mi riesce )

scusate per la banalità

vi ringrazio

PS: in pratica vorrei evitare di dover scrivere, per quello che mi serve,

indice = indice - 1

fuori dal for
__________________
ho fatto affari con: na decina di anime

Ultima modifica di swarm : 18-07-2006 alle 13:20.
swarm è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 13:27   #2
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
nella seconda sezione del for hai la cosiddetta 'condizione di permanenza' o meglio di ingresso: nel senso che se quella condizione non è verificata il ciclo si interrompe SENZA eseguire la terza sezione , nella quale potresti anche non mettere niente tra l'altro. quindi il tuo incremento non viene eseguito se la condizione non è vera e infatti gli indici incrementati vengono poi utilizzati per capire a che punto il ciclo si è interrotto. la condizione di permanenza deve essere letta come un valore booleano per il compilatore quindi deve essere scritta tra parentesi

for (;(varbool&&(pippo==5)&&(!file.leggicarattere==eof))
;

tanto per fare un esempio stupido

nota che scritto così, col ; subito dopo senza alcuna istruzione, apparentemente il ciclo non fa nulla, in realtà ad ogni iterazione in cui controlla se file.leggicarattere non ha letto un carattere nullo, lo sta di fatto eseguendo e quindi avanza nel file.

Ultima modifica di Black imp : 18-07-2006 alle 13:30.
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 13:30   #3
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da swarm
se, ad esempio, la <condizione> non vale più quando sono alla terza iterazione (indice = 3), entro nel for, la condizione non è verificata, ma indice viene comunque incrementato a 4.
Non è così. "indice" non viene più toccato se la condizione diventa falsa.

Prova:

for (i=0; 0; i++) { }

e vedrai che i alla fine vale 0, non 1.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 13:37   #4
il_luridone
Member
 
L'Avatar di il_luridone
 
Iscritto dal: Oct 2004
Città: Bologna
Messaggi: 50
Quote:
Originariamente inviato da swarm
for(<inizializzazione>;<condizione>;<avanzamento>)
il ciclo for ha questa semantica:

Codice:
1. <inizializzazione>
2. se <condizione>
3.    <istruzione>
4.    <avanzamento>
5.    goto 2
L'unico modo per non far eseguire l'avanzamento che non ti piace è togliere la condizione aggiuntiva dalla guardia e usare un break dentro al ciclo for.

Codice:
for (i = 0; i < 5; i++) {
   // ...
   if (<condizione>)
      break;
   // ...
}
Non è esattamente programmazione strutturata, molti i break e i continue non li vogliono usare.

Decidi tu in base alla situazione se è meglio un index-- o un break.
__________________
And the salad is frightful!
I have an important message to deliver to all the cute people all over the world. If you're out there and you're cute, maybe you're beautiful. I just want to tell you something: there's more of us ugly mother-fuckers than you are, hey-y, so watch out.
il_luridone è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 13:38   #5
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da Black imp
deve essere letta come un valore booleano per il compilatore quindi deve essere scritta tra parentesi

for (;(varbool&&(pippo==5)&&(!file.leggicarattere==eof)); )
;
E dove sta scritto??

Semmai se leggicarattere è un metodo, si deve scrive allora:

for (; varbool && pippo==5 && !(file.leggicarattere()==eof); )
;
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 13:45   #6
swarm
Senior Member
 
L'Avatar di swarm
 
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
Quote:
Originariamente inviato da ilsensine
Non è così. "indice" non viene più toccato se la condizione diventa falsa.

Prova:

for (i=0; 0; i++) { }

e vedrai che i alla fine vale 0, non 1.
infatti, devo controllare meglio, non capisco perchè si incrementa...

nel mio caso, indice è un iteratore di un list<>, e quando esco dal for me lo trovo cmq avanzato.....

ecco che faccio

Codice:
list<classe>:: iterator it;
bool bRet;
bRet = false;

for (it = getFile().begin(); it != getFile().end() && bRet == false; it++)
{

}
all'interno del for, ad un certo punto, io trovo l'elemento di interesse, e pongo bRet = true, quindi dovrei uscire dal for.

quando subito dopo, vado a prendermi l'elemento trovato, mi ritrovo il successivo.....
__________________
ho fatto affari con: na decina di anime
swarm è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 13:58   #7
il_luridone
Member
 
L'Avatar di il_luridone
 
Iscritto dal: Oct 2004
Città: Bologna
Messaggi: 50
Quote:
Originariamente inviato da swarm
infatti, devo controllare meglio, non capisco perchè si incrementa...
Si incrementa perchè all'inizio bRet è falso, quindi la guardia è falsa ed entra nel corpo del ciclo.

Non è che se la variabile bRet diventa vera il for esce istantaneamente. Il corpo del for continua ad essere eseguito e con esso l'avanzamento (che viene fatto alla fine), poi alla successiva iterazione la guardia viene ricontrollata e risulta falsa: il for esce.

Again: se vuoi che schizzi fuori dal ciclo, appena bRet diventa vera mettici un break.
__________________
And the salad is frightful!
I have an important message to deliver to all the cute people all over the world. If you're out there and you're cute, maybe you're beautiful. I just want to tell you something: there's more of us ugly mother-fuckers than you are, hey-y, so watch out.
il_luridone è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 14:10   #8
swarm
Senior Member
 
L'Avatar di swarm
 
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
Quote:
Originariamente inviato da il_luridone
Si incrementa perchè all'inizio bRet è falso, quindi la guardia è falsa ed entra nel corpo del ciclo.

Non è che se la variabile bRet diventa vera il for esce istantaneamente. Il corpo del for continua ad essere eseguito e con esso l'avanzamento (che viene fatto alla fine), poi alla successiva iterazione la guardia viene ricontrollata e risulta falsa: il for esce.

Again: se vuoi che schizzi fuori dal ciclo, appena bRet diventa vera mettici un break.
infatti....

alla fine mi resta decrementare quando esco, poichè i break, se non sbaglio (poi ricontrollo) mi sono "proibiti" dalle specifiche sul codice
__________________
ho fatto affari con: na decina di anime
swarm è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 14:18   #9
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da swarm
se non sbaglio (poi ricontrollo) mi sono "proibiti" dalle specifiche sul codice
Allora puoi fare:
for (it = getFile().begin(); it != getFile().end() && bRet == false; bRet == false ? it++ : 1)
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 14:23   #10
il_luridone
Member
 
L'Avatar di il_luridone
 
Iscritto dal: Oct 2004
Città: Bologna
Messaggi: 50
và che finezza ti snocciola andbin.
__________________
And the salad is frightful!
I have an important message to deliver to all the cute people all over the world. If you're out there and you're cute, maybe you're beautiful. I just want to tell you something: there's more of us ugly mother-fuckers than you are, hey-y, so watch out.
il_luridone è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 14:26   #11
swarm
Senior Member
 
L'Avatar di swarm
 
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
Quote:
Originariamente inviato da andbin
Allora puoi fare:
for (it = getFile().begin(); it != getFile().end() && bRet == false; bRet == false ? it++ : 1)
che tu sei un grande non c'è bisogno che te lo dica io...

ma la vuoi sapere l'ultima?

mi è impedito l'uso dell'operatore condizionale ? (perchè "poco leggibile")

e allora gli metto

it--;

alla fine del for e vaff.....

alla faccia del bello stile
__________________
ho fatto affari con: na decina di anime
swarm è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 14:40   #12
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da swarm
mi è impedito l'uso dell'operatore condizionale ? (perchè "poco leggibile")
Poco leggibile??? Peccato comunque.
In questo momento non mi viene in mente altro.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 14:45   #13
swarm
Senior Member
 
L'Avatar di swarm
 
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
Quote:
Originariamente inviato da andbin
Poco leggibile??? Peccato comunque.
In questo momento non mi viene in mente altro.
figurati, sei stato gentilisssssssssssssssssssssssssssssssssssimo

grazie a te e agli altri

byez
__________________
ho fatto affari con: na decina di anime
swarm è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 15:11   #14
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
Quote:
Originariamente inviato da andbin
E dove sta scritto??

Semmai se leggicarattere è un metodo, si deve scrive allora:

for (; varbool && pippo==5 && !(file.leggicarattere()==eof); )
;
a me diverse volte ha dato errore
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 15:23   #15
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da Black imp
a me diverse volte ha dato errore
Ma proprio errore in compilazione?? O un comportamento a run-time "diverso" da quanto aspettato?? (nel secondo caso, spesso è dovuto alla questione della precedenza degli operatori).
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 15:30   #16
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
Quote:
Originariamente inviato da andbin
Ma proprio errore in compilazione?? O un comportamento a run-time "diverso" da quanto aspettato?? (nel secondo caso, spesso è dovuto alla questione della precedenza degli operatori).

no no dico in compilazione. adesso non dico proprio questo caso specifico però spesso quando bello baldanzoso tolgo le parentesi dopo gli if per es. mi cazzia subito: cioè scrivo magari if (pippo&& pluto==4) e non gli piace che il pluto==4 non sia tra parentesi - era questo che in realtà volevo dire, quando c'è una espressione di questo tipo -. forse il ciclo for non le richiede e le ho sempre messe per precauzione... proverò...
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 15:31   #17
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da swarm
mi è impedito l'uso dell'operatore condizionale ? (perchè "poco leggibile")
???
e magari ti é permesso il goto
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 15:51   #18
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da Black imp
cioè scrivo magari if (pippo&& pluto==4) e non gli piace che il pluto==4 non sia tra parentesi
Strano ... l'espressione if (pippo&& pluto==4) è corretta dal punto di vista della sintassi. Bisognerebbe poi vedere cosa sono pippo e pluto ma comunque non dovrebbe affatto dare errori in compilazione.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 16:03   #19
Black imp
Senior Member
 
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
Quote:
Originariamente inviato da andbin
Strano ... l'espressione if (pippo&& pluto==4) è corretta dal punto di vista della sintassi. Bisognerebbe poi vedere cosa sono pippo e pluto ma comunque non dovrebbe affatto dare errori in compilazione.

fa conto che pippo sia boolean e pluto un int. sotto java sono sicurissimo che mi rompeva le balle ma java l'ho eliminato dalla mia vita. sotto c e c++ anche ma non ricordo se solo col gcc o anche col visual c++... ma onestamente anche sui libri sui quali ho studiato ho visto mettere meno parentesi di quelle che poi i compilatori mi chiedevano
Black imp è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 20:53   #20
Qu@ker
Member
 
Iscritto dal: Apr 2004
Messaggi: 130
Ho letto in fretta e potrei non aver capito nulla, ma voglio comunque dire la mia...

Codice:
for (it = getFile().begin(); 
      it != getFile().end() && bRet == false;
      it += (bRet == false))
Qu@ker è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto Kindle Scribe Colorsoft: riduce le cornici e div...
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
Steam Machine costa troppo? Non per i ba...
AWS e Azure sono gatekeeper e vanno rego...
Huawei presenta una nuova infrastruttura...
Logitech G e Activision uniscono le forz...
Snapdragon Summit 2026: ecco quando sara...
Sardegna, debutta il primo treno a idrog...
CXMT non ci salverà dai prezzi de...
Tidal contro la musica creata con l'inte...
Videproiettore compatto XGIMI MoGo 2 Pro...
Narwal rilancia su Amazon per il post-Pr...
Il regista di 47 Ronin ha frodato Netfli...
ChatGPT usato in massa per superare l'es...
Apple colpita da un mega-leak: presunto ...
Due nuovi superconduttori scoperti grazi...
La funzione 'Prendi appunti per me' di G...
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: 16:00.


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