Newsgroup: it.comp.lang.c++
Titolo: un aiuto

Salve ragazzi ho un problema
ho scritto un programma che costruisce
la funzione di ordinamento di array
Maerge Sort
 Nel programma main() per non costruirmi il mio array
ho inserito nel ciclo for il seguente codice
int N=1000;
int A[N];
for (int i = 0; i<N; i++)
A[i]= rand()%100;
e quando compilo mi da errore sulla funzione rand()
dicendomi che ne faccio un uso implicito ma non riesco a risolvere il
problema
qualcuno puo' aiutarmi?
grazie anticipatamente a tutti coloro che risponderanno.
__________________________________________________________________ siddharta
ICQ#: 173325742 Current ICQ status: + More ways to contact me
__________________________________________________________________

 me __________________________________________________________________
Ciao

 problema
Hai importato <stdlib>? La funzione rand č definita lě.
Non č esattamente (eufemismo) standard dichiarare un array con il numero
degli elementi int. Dovresti usare const int N = 1000...
Ciao ciao,
    Rony
P.S. ma stai lavorando in C++ o C?
--
======================================================
Rony Cesana
Sistemi Informativi srl - Gruppo Liberologico
via F. Goya 2 - 56010 loc. Ghezzano - Pisa Italy
tel.: 
+39 050 877088
 - fax: 
+39 050 8755498
pers.: 
+39 347 2582666
e-mail: 
r.ce...@liberologico.com
www.liberologico.com
======================================================

 degli elementi int. Dovresti usare const int N = 1000...
E chi ha detto che un int possa contenere le dimensioni di un array?
Se la mettiamo cosi', qui serve un const size_t.  E, visto che ci
siamo, perche' rand() e non std::rand() ?
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Dept. of Physics, Univ. of Padova, Italy              ROT13: 
ybe...@cq.vasa.vg

 siamo, perche' rand() e non std::rand() ?
E perché non utilizzare la funzione standard che già fa il sort?
E perché non "templatizzare" il sort?
Ho solo suggerito
a) la soluzione più vicino a quella dell'OP.
b) una soluzione che viene compilata sicuramente ovunque. (a tal proposito,
se questa affermazione è falsa, bacchettatemi pure. Comunque sia, il mio
compilatore quella dell'OP non la compila sicuramente, anche se so che gcc
lo fa, per esempio).
Mi ricordi di chiederLe delucidazioni sul concetto di resistività la
prossima volta che il tostapane non funziona perché non l'ho attaccato alla
presa. :)
--
"Computer science is not about computers any more than astronomy
is about telescopes." -- EW Dijkstra

 attaccato alla presa. :)
Le daro' spiegazioni su tutto cio' che Lei mi chiedera', se la mia
esperienza mi mostrera' di sapere qualcosa in piu' di Lei.  Intanto
controlli il voltaggio della presa in cui vuole infilare la spina,
prima di farlo.  E non mi dica che sono pignolo; in questo momento mi
trovo in Illinois, dove queste cose sono importanti.  Lei puo' pensare
agli States come all'equivalente geopolitico di una macchina con
interi di 16 bits, se lo ritiene valido.


Chissa' perche' hanno perso tutto quel tempo.
Gli unsigned in size() sollevano pero' una questione
abbastanza pelosa. In C++ scrivere
   for (int i=0; i<v.size()-1; i++)
     ...
e' una bomba ad orologeria, proprio perche' gli stessi
tipi tanto furbi hanno implicitamente deciso se v.size()
e' incidentalmente zero allora v.size()-1 e' un numero
esagerato e questo loop scrive a vanvera in memoria.
Nella mia esperienza questa regola e' stata fonte
di molti piu' problemi che di vantaggi.
Fra l'altro l'idea di usare unsigned per guadagnare un bit
di precisione la trovo risibile.... se nel tuo algoritmo
32767 sono pochi allora molto probabilmente anche 65535
non ti cambiano la vita (in fondo e' solo il doppio, mica
sessantamila volte tanto).
Gli unsigned sono molto comodi per la garanzia dell'aritmetica
modulo 2^N che devono fornire in modo portabile, ma questa
caratteristica con v.size() centra proprio pochino.
E' vero che sono anche valori sempre non negativi (cosa che
in teoria ben si addice a un "size"), questo purtroppo pero'
non implica che vengono trovati piu' errori, ma che questi
errori vengono invece *nascosti*. Se ad esempio scrivi
   v.resize(n-12);
e n vale 11 l'aver usato un unsigned *nasconde* un problema
(la richiesta di un resize con numero di elementi negativo)
trasformandola in una esagerata (ma non illegale) richiesta
di un numero positivo di elementi e il tuo programma invece
di piantarsi per una assert sulla logicita' di una richiesta
si pianta perche' non ha abbastanza memoria (o molto peggio
prova ad andare avanti cercando di combattere con questa
apparente limitazione di risorse).
Secondo me e' verissimo che per programmare e' richiesta
la massima attenzione, ma e' anche vero che purtroppo ci
sono parti del C++ in cui il linguaggio e' *inutilmente*
tagliente e fonte di problemi.
Andrea

 tagliente e fonte di problemi.
Queste sono le regole del gioco :-)  O impari quali sono quelle parti
e come maneggiarle senza tagliarti, o eviti il C++.


grazie a tutti problema rispolto
Rony in C++

 Vedi, programmare e' un'arte dove devi stare sulla difensiva
concordo con il resto del post, ma questa frase mi pare un po' eccessiva; 
IMHO e` piu` appropriata "programmare *in C++* e` un arte dove devi 
stare sulla difensiva".
Purtroppo piu` vado avanti piu` mi rendo conto che forse il C++ e` piu` 
complesso di quanto non dovrebbe essere; probabilmente tale complessita` 
e` figlia della compatibilita` con il C e dell'evoluzione storica del 
linguaggio.
Basta leggere i vari (More) Exceptional/Effective C++/STL (wow, sembra 
quasi una regexp ;-) di Meyers e Sutter per rendersene conto: IMHO se 
per un linguaggio ci sono 5 libri pieni di pitfall e dark corner nei 
quali e` facile imbattersi e sbagliare c'e` qualcosa che non va; tanto 
per fare un esempio penso che neppure inventandosi falsi problemi si 
riuscirebbero a riempire 5 libri di pitfall di python.
Forse questo e` il prezzo da pagare per avere al tempo stesso un 
linguaggio efficiente e che consente di gestire grossi progetti; ma 
davvero abbiamo bisogno di prestazioni super nel 100% del codice di un 
grosso progetto?
ciao Anto
