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

Ciao a tutti,
sono un novello programmatore C++, e non riesco a far funzionare le matrici,
perché nei miei tre libri non c'e nessun riferimento diretto. Sarei grato se
qualcuno rispondesse alle mie domande:
1) Questa dichiarazione: "int mat[4,4]" e corretta? Se no, qual'e quella giu
sta?
2) Le matrici, come i vettori partono da 0 o da 1 (ad es.: mat[0,0] e giusto
o no?)?
Grazie a tutti.
Ciao, Rudy

Mi sono risposto da solo (la dic. giusta è"int mat[4][4])"), chissà cosa
faceva il compilatore visto che non mi dava errore. Va bè, comunque avrei
ora un'altra domanda:
E' possibile creare matrici a dimensioni variabili? Se si come?
Grazie ancora e ciao.
Rudy

Rudy wrote:

La gestione di arrays a due dimensioni (quindi matrici propriamente dette)
in
c++ e' un po' ostica se entrambe le dimensioni non sono conosciute. Ti
suggerisco di utilizzare le classi vector e valarray disponibili nella
standard template library (STL), che e`  parte dello standard ANSI C++.
Il tutto diventa  molto piu' semplice (a mio avviso).
Non so che compilatore usi, ma ogni buon compilatore C++ (quindi non
VisualC++, che, nonostante il nome, non e' un compilatore di C++ standard)
supporta perlomeno la classe vector delle STL.

 cosa faceva il compilatore visto che non mi dava errore.
Se sei curioso di sapere in cosa si traduce una dichiarazione come
	int	a[ 3, 2 ];
ti basta sapere che l'espressione (3,2) in C (e C++) è ben formata e viene
valutata 2. Non credo che l'operatore ',' abbia molte applicazioni.
Occasionalmente può risultare comodo nelle istruzioni for.
Max
-- 
"Time flies like an arrow; fruit flies like a banana."

 Sarei grato se qualcuno rispondesse alle mie domande:
Qui trovi alcune possibili risposte:
http://www.cerfnet.com/~mpcline/c++-faq-lite/freestore-mgmt.html


E' possibile creare matrici a dimensioni variabili?
Non direttamente, nel senso che un array non puo` cambiare
dimensione, pero` puoi sempre utilizzare la memoria dinamica e
crearti una classe che quando necessario alloca un nuovo buffer,
copia in questo il contenuto del vecchio buffer che quindi verra 
deallocato....  Oppure usi std::vector che fa gia` tutto questo
e molto di piu`.
Paolo

 o no?)?
Si, è giusto?
EMG

 supporta perlomeno la classe vector delle STL.
Strano e contorto modo di espressione.  Comunque, Visual C++
supporta la classe template std::vector della libreria standard C++,
le cui differenze dalla (proprietaria, SGI) libreria "STL" sono sottili
e minute (e prive di effetti pratici su std::vector).
Le mancanze di Visual C++ rispetto allo standard C++ ci sono,
certo (nessun compilatore, a oggi, rispetta TUTTO lo standard,
come gia` recentemente discusso), ma non toccano molto la
std::vector.
L'implementazione della libreria standard C++ fornita con MSVC++
e` quella di P. J. Plauger (Dinkumware), secondo me oggi la piu`
vicina allo standard (vanno applicati alcuni fix di errori, resi
disponibili al sito Dinkumware).
Alex

 
Perche' dici che e' la piu' vicina allo standard?? 
Ero convinto che fosse quella della Rogue Wave distribuita con 
Borland e HP aC++ (e' una mia opinione nulla di piu').
Fausto

 E' possibile creare matrici a dimensioni variabili? Se si come?
Con l'allocazione dinamica. Ti consiglio di leggere qualcosa al
riguardo. Il newsgroup non può porsi come sostituto dello studio.
EMG

 Si, è giusto?
Scusate, non era una domanda ma un'affermazione.
EMG
PS. Ovviamente il "è giusto" si riferisce al fatto che gli indici
partono da zero e non alla notazione, chiaramente errata, mat[0,0].

 wrote in message
3880E6D9...@freelance.it...

Plauger discute spesso di questi aspetti sulla sua column (e sui
frequenti articoli) sul C/C++ Users' Journal.  Naturalmente, puo`
darsi che tiri l'acqua al suo mulino.  E` pero` anche vero che
egli e` stato al centro del processo di standardizzazione, prima
del C e poi del C++, per vent'anni, ed e` autore di veri e propri
best-seller sull'argomento delle librerie standard.  La sua
libreria fu scritta da zero, con l'UNICO obbiettivo di aderire al
massimo con lo standard; Rogue Wave, invece, prima che la
libreria standard emergesse era il leader del segmento di
mercato "librerie C++", quindi con i soliti vincoli di base
istallata, compatibilita` col passato, eccetera.
Le varie survey di compatibilita` periodicamente fatte dalla
(costosissima ma indispensabile) C++ Report hanno sempre
avuto come risultato una maggior aderenza allo standard
della libreria di Plauger (e notiamo che, qui, l'effetto "acqua
al suo mulino" spingerebbe se mai nell'altro verso: Rogue
Wave fa un mucchio di pubblicita` su C++ Report, Plauger
poca e piccola, e scrive per la concorrenza).
La "tua opinione", invece, su cosa si basa?
Alex

 riguardo. Il newsgroup non può porsi come sostituto dello studio.
Finalmente per queste domande potremo rimandare alle
FAQ cortesemente raccolte da Marotta.  Manca solo un'URL...!
Alex

 La "tua opinione", invece, su cosa si basa?
Sul fatto che due colossi dell'informatica come HP e Borland abbiano 
deciso di integrarla ai propri compilatori che per altro 
dichiarano (quasi) conformi allo standard. E di fatto lo sono. 
Sul fatto che che implementi cose presenti nel documento
dello standard che la libreria di Plauger non le considera.
(vedi il metodo push_back della basic_string non presente
sull'implementazione di Plauger).
Fausto

FAQ cortesemente raccolte da Marotta.  Manca solo un'URL...!
Ho contattato Marco Abis, presumo non ci siano problemi
per 
www.programmazione.it
. Se non ricevo altri commenti
sulle faq le riposto e contemporaneamente le spedisco
a M. Abis.
Intanto ho gia` apportato le correzioni suggerite.
Paolo

 sull'implementazione di Plauger).
E non presente sullo standard pubblicato (eccetto che nella
'sinopsis', e con una strana signature).  Ho sentito dire di
una 'defect resolution' dello standard che fa si` che questo
metodo sia nuovamente previsto (non so con che signature,
spero una sensata), anche se non ho un riferimento ad essa
(altro che una menzione collaterale negli errata della 3a
edizione del testo di Stroustrup); se cosi` e`, naturalmente
non ci vorra` molto per aggiungerla anche alla libreria di
Plauger.
A parte questo difetto nello standard (attualmente, pare,
corretto da una risoluzione separata e successiva), che mai
hai da addebitare alla libreria Dinkumware?
E intanto, l'enfasi Roguewave resta sempre sull'*estendere*
lo standard, sul convincere i loro clienti, ad esempio, ad usare
"piu` facili ed agevoli" rivestimenti (proprietari, naturalmente)
posti dalla RW al di sopra dello standard stesso, invece dello
standard vero e proprio.
"Abbraccia ed Estendi" -- la ricetta fondamentale per chi (come,
spesso, Microsoft) gli standard li usa per aggirarli.  L'enfasi
Dinkum, invece, e` sempre sulla *fedele aderenza* allo
standard: nulla di meno, ma, ANCHE, *nulla di piu`*.
Alex

Scusa Alex (posso chiamarti così?), ma posso permettermi di dare una
mia piccola opinione? Microsoft sarà anche più grossa di Borland e di
HP messe assieme, ma mi pare che le preferenze dei compilatori Borland
siano molto più alte di quelli Microsoft.... Leggevo qualche tempo fa
un articolo che parlava del presunto "monopolio Microsoft" in cui
parlavano dei prodotti validissimi non-MS che sono molto, ma molto
usati nella programmazione: Linux e i compilatori Borland, appunto. Da
quanto sento in rete, dai miei prof all'ITIS, dalle prove che ho fatto
di persona, la Borland sembra essere migliore.
Ovviamente questa è una mia opinione fondata su pareri di persone più
brave di me e sulla mia ristretta esperienza personale come
programmatore.
Inoltre mi pare che Microsoft inizi a far acqua da tutte le parti. Se
uno come me, legato da una vita a Microsoft è passato da un giorno
all'altro a Free Agent (grazie Paolo!) e se riesce a prendersi un HDD
nuovo più grosso si installa Linux... vuol dire che c'è qualcosa che
non va...!
--
Diego "DGP85" Pettenò
daps...@nightmail.com