Newsgroup: it.comp.lang.c++
Titolo: Problemino ...

Vi sarei grato del vostro aiuto,.. risolvere un compitino che non funzia,
un programmino che fà i capricci , ma non capisco quale sia il problema,...
vi copio il listato ...
#include <iostream.h>
main()
{
double myarray[5];
double sum=0;
int i;
for (i=0 ; i<5 ; i++);
{
cout << "\nEnter the number: ";
cin >> myarray[i];
}
for (i=5;i>=0;--i);
{
cout << "\nYour numbers: " << myarray[i];
}
for (i=0;i<=5;i++);
{
sum += myarray[i];
}
cout << "\nThe summmer of your numbers is: " << sum;
 return 0;
}
Ecco tutto ,
grazie per il vostro aiuto e ciao.

 }
L'intestazione di un ciclo 'for' non si chiude con il ';'. Chiudendo con il
';' indichi che il ciclo non ha corpo; in questo modo, il blocco che tu
credevi di iterare, viene in realtà eseguito solo quando la variabile 'i'
raggiunge il valore 5, che, puntando oltre il limite dell'array, genera un
errore di protezione.
Rimuovi il ';' (anche negli altri cicli) e tutto funzionerà a dovere.
Stefano.

grazie per il vostro aiuto e ciao.
Niente di speciale...
Saluti,
Paolo
----------------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
  e-mail: 
mar...@cli.di.unipi.it
 
----------------------------------------------------------

 cout << "\nThe summmer of your numbers is: " << sum;
Summer, con due 'm' sole, in inglese vuol dire Estate che non credo
fosse quello che volevi dire. :-)
EMG

fosse quello che volevi dire. :-)
..emh....  scusate questo è un'errore dettato dalla fretta di scrivere il
codice..   :-\
grazie a tutti per avermi chiarito le idee!
P.S. Domanda del giorno: "Riuscirò prima o poi ad imparare il C++ come si
deve ??"  :-(

vanno da myarray[0] a myarray[4].
.. ma scusa, io avevo messo apposta l'operatore  "--" ad  "i" in modo che
scalasse subito di uno prima di iniziare il ciclo, quindi come se fosse 4
.......
(i=5; i >= 0 ; --i)                   =====>  i diventerebbe 4
o no??

 o no??
No!
la terza espressione del costrutto for(;;) viene valutata alla fine di ogni
ciclo, non importa se usi --i o i--.
Ad esempio se fai :
for ( i=5; i>=0 ; cout << --i << endl )
{
   cout << i;
}
ottieni :
5 4
4 3 
3 2
2 1
1 0
0 -1
mentre da
for ( i=5; i>=0 ; cout << i-- << endl )
{
   cout << i;
}
ottieni :
5 5
4 4 
3 3
2 2
1 1
0 0
In ogni caso il ciclo viene eseguito 6 volte.
la differenza e' che nel primo caso la variabile i viene 
decrementata prima di essere stampata e nel secondo caso dopo.
In effetti al posto delle tre espressioni del costrutto for() puoi
mettere qualsiasi cosa. La prima delle tre viene valutata una volta sola,
la seconda funge da guardia, e viene valutata all'inizio di ogni ciclo
la terza viene valutata comunque alla fine di ogni ciclo.
Un modo (in realta' un po' contorto) per ottenere quello che credevi, 
sarebbe stato
for (i=5; --i >= 0; )
Fabio
-- 
Parkinson's Fourth Law:
	The number of people in any working group tends to increase
	regardless of the amount of work to be done.

 o no??
No. La terza espressione del loop viene eseguita solo alla fine della
singola iterazione. In quel contesto, utilizzare ++i o i++ è
semanticamente equivalente (anche se ci sono dei casi in cui la prima
forma è più efficiente).
EMG


In quali situazioni? Il problema mi era noto gia` da tempo (e difatti io per
abitudine uso la prima forma), ma era un problema su compilatori
poco capaci di ottimizzazioni. Oggi non dovrebbe piu` essere un problema.
Mi sfugge qualcosa?


Mi sfugge qualcosa?
Dipende dal tipo di i.  Per tipi builtin, o comunque noti al
compilatore, quest'ultimo, se non totalmente incapace,
puo` ottimizzare la forma i++ nella intrinsecamente piu`
efficiente ++i se puo` determinare che il risultato viene
ignorato.  In generale, pero`, e` meglio abituarsi a scrivere
++i, a parita` di altri fattori, perche` prima o poi capita
di scriverlo su un qualche tipo (iteratore) NON noto al
compilatore, e per il quale dunque l'ottimizzazione non
e` possibile.
Alex

 Mi sfugge qualcosa?
No. La differenza può sorgere solo se le variabili soggette
all'operatore ++ sono oggetti. Ad esempio, nella definizione di
iterator& operator++(int);
c'è una variabile temporanea che nella definizione di
iterator& operator++();
manca.
EMG