|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 |
|
Senior Member
Iscritto dal: Mar 2006
Messaggi: 2516
|
mmm, ho visto un po' il programma del corso e vector non si fa, mentre invece l'allocazione dinamica è in programma... potreste farmi un esempio semplice di allocazione di memoria di una variabile,messa poi in un array? tipo abbiamo una variabile k che viene immessa da tastiera con cin e successivamente la variabile k è usata come indice di un array: array[k]
ho googlato un po' e la cosa che piu si avvicina a quello che devo fare che ho trovato è questa http://www.disp.uniroma2.it/users/bu.../CPP3/CPP3.HTM ma utilizza stdio.h grazie ancora di tutto, dopo di questa mi tolgo dalle scatole |
|
|
|
|
|
#22 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
int righe = 6;
int colonne = 3; double *matrice = new double[righe * colonne]; Per accedere all'elemento (r,c): matrice[r * colonne + c] |
|
|
|
|
|
#23 | |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 499
|
Quote:
__________________
|
|
|
|
|
|
|
#24 |
|
Senior Member
Iscritto dal: Apr 2006
Messaggi: 22462
|
no, è un array ad allocazione tramite puntatore
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza |
|
|
|
|
|
#25 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 499
|
ma comunque un array monodimensionale... è possibile allocare dinamicamente un array multidimensionale senza ricorrere a quel "trucchetto"?
edit: sempre usando un puntatore...
__________________
|
|
|
|
|
|
#26 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì, ma c'è da lavorare un pochetto
Lo facevo per farglielo più semplice... double **m = new double * [righe]; for(int i = 0; i < righe; ++i) m[i] = new double[colonne]; |
|
|
|
|
|
#27 | |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 499
|
Quote:
__________________
|
|
|
|
|
|
|
#28 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
m[i][j]
|
|
|
|
|
|
#29 |
|
Senior Member
Iscritto dal: Mar 2006
Messaggi: 2516
|
grande! sono riuscito a fare il programma finalmente
Codice:
#include <iostream>
#include <vector>
using namespace std;
int main() {
int righe,
colonne,
diagsize;
cout << "Inserire il numero di vettori della matrice quadrata" << endl;
cin >> righe;
colonne = righe;
diagsize = ( ( 2 * righe ) - 1 );
double **matrice = new double * [righe];
vector< double > diagonale( diagsize );
for(int i = 0; i < righe; ++i)
matrice[i] = new double[colonne];
for(int i = 0; i < righe; i++)
for(int j = 0; j < colonne; j++) {
cout << "Inserisci Elemento" << (i+1) <<" " << (j+1) << endl;
cin >> matrice[i][j];
}
for(int i = 0; i < righe; i++)
for(int j = 0; j < colonne; j++)
diagonale[righe-i+j] += matrice[i][j];
for(int i = 1; i <= diagsize; i++)
cout << "La somma della " << (i+1) << " diagonale e': " << diagonale[i] << endl;
system("PAUSE");
return 0;
}
solo l'array monodimensionale per le somme delle diagonali non lo riuscivo a fare con l'allocazione, quindi ho fatto un vector... potresti spiegarmi questo codice Codice:
double **m = new double * [righe]; for(int i = 0; i < righe; ++i) m[i] = new double[colonne]; |
|
|
|
|
|
#30 | |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2020
|
Quote:
Poi alloca un vettore double per ogni puntatore double puntato da m. |
|
|
|
|
|
|
#31 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non sbagli.
|
|
|
|
|
|
#32 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Anche se cionci e Maverick18 ti hanno già risposto ho pensato che poteva esserti di ulteriore aiuto uno schema visivo:
Codice:
double **m = new double * [righe]; for(int i = 0; i < righe; ++i) m[i] = new double[colonne]; l'dentificatore "m" viene definito come una variabile di tipo "Puntatore a puntatore a double", quindi viene inizializzato con l'allocazione dinamica di un array contenente un numero pari a "righe" di "Puntatori a double". ----------------------------------------------------------------- Puntatore a puntatore a double.....Puntatore a double..........Double ----------------------------------------------------------------- double **m ..............................double *(unnamed)..........double ----------------------------------------------------------------- m ------------------------------> righe1 -------------> (double) | | -------------------------------> righe2 -------------> (double) | | -------------------------------> righeN -------------> (double) b) m[i] = new double[colonne]; Sappiamo che "m" (Puntatore di puntatore a double) adesso punta ad un array di elementi Puntatore a double Viene quindi utilizzato un ciclo per assegnare ad ognuno di quei Puntatori a double un array di double. m----->righe1..........righe2........righeN ...........|................|..............|. ...........|................|..............|. ...........V................V.............V. .............................................. ...........double[]......double[]......double[] Spero ti sia utile, Ciao Ultima modifica di banryu79 : 01-12-2007 alle 13:57. |
|
|
|
|
|
#33 |
|
Senior Member
Iscritto dal: Mar 2006
Messaggi: 2516
|
Grazie per la spiegazione esaustiva
ho trovato anche il modo per farlo con vector di vector Codice:
vector<int> m( matsize ); vector<vector<int> > matrice( matsize,m ); potrebbe essere utile a qualcuno |
|
|
|
|
|
#34 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#35 | |
|
Senior Member
Iscritto dal: Mar 2006
Messaggi: 2516
|
Quote:
comunque ho fatto vedere oggi il programma al professore, mi ha quasi insultato dicendo che devo risolvere i problemi con gli strumenti che abbiamo bah, ma che modi mi ha detto che lo stesso programma si poteva fare senza allocazione o vector, dichiarando i valori delle diagonali come const int. tralasciando la sua ignoranza(e soprattutto quella del suo assistente, un ingegnere che non sa come imporre l'esistenza di un triangolo e non conosce getchar) sul fatto che non posso dichiarare(almeno con i nostri strumenti) un const int senza inizializzarlo e peggio ancora poi inserirlo da cin tutto sommato poi dichiarando la dimensione della matrice come int funziona senza allocazione dinamica...Codice:
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
int matsize, // Dimensione della Matrice quadrata
diagsize; // Numero di diagonali della matrice
cout << "Inserire il numero di vettori della matrice quadrata" << endl;
cin >> matsize;
diagsize = ( 2 * matsize )-1;
double matrice[matsize] [matsize];
double diagonale[diagsize];
// Inserisce gli elementi
for(int i = 0; i < matsize; i++)
for(int j = 0; j < matsize; j++) {
cout << "Inserisci Elemento " << (i+1) <<" " << (j+1) << endl;
cin >> matrice[i][j];
}
// Calcola le Somme della matrice
for(int i = 0; i < matsize; i++)
for(int j = 0; j < matsize; j++)
diagonale[matsize-i+j] += matrice[i][j];
// Stampa il risultato
for(int i = 1; i <= diagsize; i++)
cout << "La somma della " << (i+1) << " diagonale e': " << diagonale[i] << endl;
system("PAUSE");
return 0;
}
|
|
|
|
|
|
|
#36 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Cioè il codice che hai scritto non funziona perché non esistono costruttori di vector che prendono in ingresso quei parametri.
Puoi fare però così per creare una matrice R x C: Codice:
vector< vector<int> > m; m.resize(R); for(int i = 0; i < R; ++i) m[i].resize(C, 0); |
|
|
|
|
|
#37 | |
|
Senior Member
Iscritto dal: Mar 2006
Messaggi: 2516
|
Quote:
ho letto la guida qui su come creare vector di vector http://www.dcs.bbk.ac.uk/~roger/cpp/week7.htm |
|
|
|
|
|
|
#38 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Azzz...avevo letto male...non avevo visto che m era il vettore sopra.
in effetti così va bene. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:54.












tutto sommato poi dichiarando la dimensione della matrice come int funziona senza allocazione dinamica...








