Newsgroup: it.comp.lang.c++
Titolo: [neofita] Differenza tra "For" e "While"

Mi e' sembrato di capire che,  il "For" e il "While" sono
equivalenti , pero', si preferisce l'uso del "For" quando già
conosciamo il numero di volte che devono essere eseguite determinate
istruzioni all'intero del "For".
 
E' corretto?
 
Ci sono altri casi in cui e' preferibile usare il "For" invece del
"While"?
 
Ciao e grazie mille!

 "While"?
 
I casi sono molti. P.e.
 
char *p,*q;
for ( p=q; *p=*q; p++, q++)

 for ( p=q; *p=*q; p++, q++)
 
Purtroppo NON avendo ancora molta dimestichezza con i puntatori  NON
riesco a capire il tuo esempio.
 
Ciao e grazie milleeeee!

 riesco a capire il tuo esempio.
 
 
Ci avrei giurato.
 

 riesco a capire il tuo esempio.
 
per:
 
1) p uguale a q ;
2) fino a quando l'oggetto cui punta p è uguale 
all'oggetto cui punta q
[esegui le istruzioni]
3) incrementa p e incrementa q
 


... provero' a riprendere il tuo esempio quando saro' piu' preparato
sull'argomento..cmq
 
p=q; // assegni (come iniz. del for) a p l'indirizzo di memoria di q
 
*p=*q // la condizione e' che assegni a *p il  valore puntato da *q
 
 
Giusto?
 
 
Ciao e grazie mille!

 all'oggetto cui punta q
 
 Sì 'nu strunzo

 for ( p=q; *p=*q; p++, q++)
 
lol, ricordo le sintassi che inorgoglivano i C-isti
 
p=q;
while (*p++=*q++;);
 
ho un po' di nostalgia !
 
-- 
1) Resistere, resistere, resistere.
2) Se tutti pagano le tasse, le tasse le pagano tutti
Soviet_Mario - (aka Gatto_Vizzato)
 


LOL. Per questo ho infierito con
while (*p++=*q++);


 
 
Sinceramente ancora scrivo cose del genere quando sono così ovvie da risultare
più leggibili di un ciclo con condizioni esplicite (come in questo caso).
 
Ciao!

 Giusto?
 
Quasi giusto.
 
In C (ma anche in C++) non c'è l'istruzione di assegnamento ma c'è
l'operatore di assegnamento (capito? *OPERATORE* di assegnamento)
e quindi sono possibili alcune cose simpatiche come gli assegnamenti 
multipli nel bel messo di un'espressione.:
 
a=(b=c++ * sin(z=d=(e+pi/4)));
 
Quindi:
 
*p=*q copia l'oggetto puntato da q all'oggetto puntato da p e poi produce
un valore. Quale sia questo valore è facile scoprirlo.
 
PS: in C non esiste il tipo booleano quindi il valore logico falso è...
 
 


 
boh...
 

 Ciao e grazie mille!


Il 07/04/2013 13:14, neonano ha scritto:

minchia una svista può scappare eh ...


 while (*p++=*q++);
 
Si ma Osvald ha chiesto un esempio di for non di while ;-)


 
quale svista mi è scappata? :O
 


 
 


 while...do,
 
Un lapsus. Ovviamente intendevo "do ... while"

 minchia una svista può scappare eh ...
 
No. Come sottolineato dal buon Massei 
 
while ( *p++=*q++ ); è una espressione idiomatica del C, 
(anche se io ho usato il for per i vincoli imposti dall'OP)
una delle cose che caratterizzano il C, una delle cose che 
stanno scritte in tutti i libri sul C; chi non la conosce è un 
principiante, chi la sbaglia è bocciato.
 
 

 ...
 
 
Insisto. Il C non ha istruzioni di assegnamento ma ha un 
operatore di assegnamento.`=' e un operatore di uguaglianza
logica `==' e molti operatori di confronto `>',`<', `>=',  `<=', 
`==' e  `!='.
 
Quindi giusto che `*p==*q' è una espressione di confronto ma
`*p=*q' è una espressione di assegnamento. 
 
 


vero, vista
 


 
 
vero vero vero vero... me ne sono accorto poco dopo aver
postato :D
 
 

 "While"?
 
In c++11 esiste un "secondo tipo" di costrutto for che, per quanto 
assimilabile al primo, è fondamentalmente differente come semantica.
 
http://en.wikipedia.org/wiki/Foreach_loop#C.2B.2B
 
 
prova a vedere questo.
 
 
-- 
ZeD


 
 


 una variabile (in genere i,j o index) incrementata ad ogni esecuzione.
 
Quello che scrivi, credo sia in linea con quanto evidenziavo in questo
thread:
 
 "pero', si preferisce l'uso del "for" (  ;-) ) quando già
 conosciamo il numero di volte che devono essere eseguite determinate
".
 
Giusto?
 
Ciao e grazie milleee!


 ritorno.
 
Fai attenzione che stiamo parlando di linguaggi quindi devi 
distinguere tra semantica, sintassi e grammatica; la nostra 
discussione tratta della semantica, cioè di cosa fanno le 
istruzioni. 
 
Poi in fondo siamo dicendo la stessa cosa: l'istruzione: 
 
y=(a*x+b)*x+c;
 
a livello pratico è una istruzione di  assegnamento, 
a livello concettuale è una istruzione che calcola una espressione,
il valore di un polinomio di secondo grado, che ha l'effetto collaterale 
di provocare l'assegnamento della variabile y.
 
 
 

 
http://en.wikipedia.org/wiki/Foreach_loop#C.2B.2B
 
 
Credo sia un poco fuori tema e abbastanza fuorviante; sintatticamente 
simile, concettualmente e praticamente sono due cose totalmente diverse.
E non c'entra con la domanda dell'OP.

 E non c'entra con la domanda dell'OP.
 
Personalmente sono molto favorevole all'utilizzo, dove ragionevole, del 
nuovo costrutto.
 
Normalmente non si effettuano loop "un numero prefissato di volte", ma si 
effettua una certa operazione "per ogni elemento di un container".
 
Da questo punto di vista i cicli for "classici" ``for (int i=0; i<n; i++)`` 
altro non sono che un "mezzo meccanico" per poter accedere ai vari elementi 
di un array (con o vari possibili buffer overflow).
 
Per poter far attecchire un costrutto, specie se così nuovo, però, è 
necessario che sia conosciuto. Anche per questo motivo l'ho mostrato come 
(IMHO decisamente valida) alternativa agli altri due costrutti di cui l'OP 
era evidentemente già a conoscenza.
 
 
-- 
ZeD

 PS: in C non esiste il tipo booleano quindi il valore logico falso è...
 
In C99 è stato aggiunto, però gli operatori logici non convertono gli 
operanti in _Bool.
 
 
 
Ciao  Manlio

 [...]
 
Ciao  MAnlio

 Ciao  MAnlio


 [...]
 
 
Ciao  Manlio

 (anche se io ho usato il for per i vincoli imposti dall'OP)
 
Per vincoli imposti dall'OP intendo:
 
Calma, spieghiamo una cosa alla volta altrimenti il ragazzo si confonde.

Addì  domenica 7 aprile 2013 19:36 Manlio Perillo scrisse:

È un indizio non una spiegazione.
 
Io non dò risposte ma suggerimenti perché non devo dimostrare che
io conosco; Se tu spieghi una cosa lo studente la capisce e la impara,
ma se invece dai suggerimenti lo studente capisce lo stesso e impara
quella cosa e altre cento che tu non hai detto. E magari lo studente 
impara anche a cavarsela da solo senza il papà che lo toglie dai guai. 

 }
 
 
Ma viene copiato il terminatore?

     }
 
 
Ma  sicuro che nel test ci vuole un puntatore?
Non sarebbe meglio *q?

 for ( p=q; *p=*q; p++, q++)
 
Nessuno ha notato che l'inizializzazione p=q non ci vuole?
 
Ringraziato il debug.

 Ciao  Manlio
 
 


 Ringraziato il debug.
