View Full Version : [c++] Aiuto programmino matrici
ciao a tutti
il prof ci ha assegnato un programmino non troppo complesso che data una matrice qualsiasi quadrata dovrebbe calcolare la somma di tutte le diagonali, anche quelle minori, ovviamente o quelle in questa direzione \ o quelle in questa /
io ho fatto in questo modo
#include <iostream>
using namespace std;
int main() {
	int numrighecolonne,
		n, // numero totale elementi array diagonale
		i, //contatore diagonale
		righe, // contatore righe
		colonne = 1; //contatore colonne
	
	cout << "Inserire il numero di righe e colonne della matrice";
	cin >> numrighecolonne;
	
	n = (numrighecolonne * 2) - 1; // assegna il numero delle diagonali per il tipo di matrice scelta
	i = n;
	
	double	totdiagonale[n+1]; //dichiara array che contiene la somma degli elementi delle diagonali
	
	double matrice[numrighecolonne] [numrighecolonne]; // array matrice 
		
		 // Inserisce tutti i valori per la matrice 
		
		for(int r = 1, r <= numrighecolonne, r++ ) {
			for(int c = 1, c <= numrighecolonne, c++) {
				cin >> matrice[r][c];
			}
		}
		
// somma gli elementi di matrici e li assegna all'array
	for(int r = numrighecolonne, r <= 1, r-- ) {
		righe = r;
		while(righe <= numrighecolonne) {
			totdiagonale[i] += matrice[righe][colonne]
			righe++;
			colonne++;
			i--;
		}	
	}
	
// stampa l'array
	for(i = n, i > (n + 1)/2, i--)
		cout << "Somma " << i << "° Diagonale" << endl;
	
	return 0;
}
questo codice dovrebbe stampare le prime diagonali, a partire da quella di sotto in su, fino a quella principale, poi quelle di sopra dovrebbero essere facili da ottenere per la simmetria della matrice...
in pratica ho pensato di fare un cin di tutti gli elementi della matrice e di metterli in un array doppio, e di creare un altro array normale che contenesse le varie somme delle diagonali... poi per quanto riguarda la matrice ho ragionato in questo modo: parto dal primo elemento dell'ultima colonna che non ha una diagonale e salgo con un ciclo for diminuendo gli indicatori di riga, poi con un altro ciclo nidificato sommo in un elemento di un array gli elementi della diagonale, ottenuti aumentando di uno gli indicatori di righe e colonne fin quando l'indicatore di righe non supera il numero prestabilito(cioe quello totale di righe/colonne)
il programma non funziona perchè mi da errori di sintassi nei cicli for
main.cpp:47:2: warning: no newline at end of file
main.cpp: In function ‘int main()’:
main.cpp:26: error: expected initializer before ‘<=’ token
main.cpp:32: error: expected primary-expression before ‘for’
main.cpp:32: error: expected `;' before ‘for’
main.cpp:32: error: expected primary-expression before ‘for’
main.cpp:32: error: expected `)' before ‘for’
main.cpp:32: error: expected initializer before ‘<=’ token
main.cpp:42: error: expected primary-expression before ‘for’
main.cpp:42: error: expected `;' before ‘for’
main.cpp:42: error: expected primary-expression before ‘for’
main.cpp:42: error: expected `)' before ‘for’
main.cpp:42: error: expected `;' before ‘)’ token
main.cpp:45: error: expected primary-expression before ‘return’
main.cpp:45: error: expected `;' before ‘return’
main.cpp:45: error: expected primary-expression before ‘return’
main.cpp:45: error: expected `)' before ‘return’
e tra l'altro provando a fare anche programmi stupidissimi con il for mi da piu o meno gli stessi errori, quindi ne deduco che oltre agli eventuali(e molti presumo :asd:) errori logici, ne ho fatto anche qualcuno stupidissimo di sintassi :asd:
mi affido alla vostra enorme saggezza :O
wingman87
28-11-2007, 20:06
Devi usare i ; invece delle virgole dentro alle parentesi dei for, esempio:
for(int i=0;i<10;i++)
Devi usare i ; invece delle virgole dentro alle parentesi dei for, esempio:
for(int i=0;i<10;i++)
ma che demente che sono :sofico: 
ora non da piu nessun errore, solo dopo l'inserimento che funziona bene degli elementi della matrice il programma di chiude...
al momento il codice è questo
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
	int numrighecolonne,
		n, // numero totale elementi array diagonale
		i, //contatore diagonale
		righe, // contatore righe
		colonne = 1; //contatore colonne
	
	cout << "Inserire il numero di righe e colonne della matrice" << endl;
	cin >> numrighecolonne;
	
	n = (numrighecolonne * 2) - 1;
	i = n;
	
	double	totdiagonale[n+1];
	
	double matrice[numrighecolonne] [numrighecolonne];
		
		 // Inserisce tutti i valori per la matrice 
		
		for(int r = 1; r <= numrighecolonne; r++ ) {
			for(int c = 1; c <= numrighecolonne; c++) {
				cout << "Inserisci elemento " << r << c << endl;
				cin >> matrice[r][c];
			}
		}
		
	for(int r = numrighecolonne; r >= 1; r-- ) {
		righe = r;
		while(righe <= numrighecolonne) {
			totdiagonale[i] += matrice[righe][colonne];
			righe++;
			colonne++;
			i--;
		}	
	}
	
	for(i = n; i > (n + 1)/2; i--)
		cout << "Somma " << i << "° Diagonale" << endl;
	
	return 0;
system("PAUSE");
}
wingman87
28-11-2007, 20:30
Prova a mettere un cin a vuoto alla fine oppure un system("pause");
Prova a mettere un cin a vuoto alla fine oppure un system("pause");
non è quello il problema purtroppo, continua a crashare, quindi devo aver fatto un errore logico :(
wingman87
28-11-2007, 20:46
Ma il System("pause"); l'hai messo dopo il return quindi non verrà mai eseguito...
Ma ti da un errore oppure non dice proprio nulla?
Maverick18
28-11-2007, 21:23
Occhio che le matrici e vettori hanno indici che partono da zero non da uno. Nei for devi partire da 0 e terminare il for un ciclo prima.(fino a numrighecolonne-1  quindi r<numrighecolonne)
Ma il System("pause"); l'hai messo dopo il return quindi non verrà mai eseguito...
Ma ti da un errore oppure non dice proprio nulla?
si scusa, non me ne ero accorto e non sono abituato a metterlo perchè sto raramente su windows
con il system pause mi dice: 
Somma 5 Diagonale
Somma 4 Diagonale
con scritto niente
ho provato anche a sostituire nel secondo ciclo for(il primo che assegna i valori alle matrici penso sia corretto perchè funziona) il while nidificato con un altro for nidificato, che mi sembra piu elegante, in questo modo
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
	int numrighecolonne,
		n, // numero totale elementi array diagonale
		i, //contatore diagonale
		colonne = 1; //contatore colonne
	
	cout << "Inserire il numero di righe e colonne della matrice" << endl;
	cin >> numrighecolonne;
	
	n = (numrighecolonne * 2) - 1;
	i = n;
	
	double	totdiagonale[n+1];
	
	double matrice[numrighecolonne] [numrighecolonne];
		
		 // Inserisce tutti i valori per la matrice 
		
		for(int r = 1; r <= numrighecolonne; r++ ) {
			for(int c = 1; c <= numrighecolonne; c++) {
				cout << "Inserisci elemento " << r << " - " << c << endl;
				cin >> matrice[r][c];
			}
		}
		
	for(int r = numrighecolonne; r >= 1; r-- ) {
		for(int righe = r; righe <= numrighecolonne; righe++) {
			totdiagonale[i] += matrice[righe][colonne];
			colonne++;
			i--;
		}	
	}
		
	/*	while(righe <= numrighecolonne) {
			totdiagonale[i] += matrice[righe][colonne];
			righe++;
			colonne++;
			i--;
		}
	*/	
	
	for(i = n; i > (n + 1)/2; i--)
		cout << "Somma " << i << "° Diagonale" << endl;
	
	system("PAUSE");
	return 0;
}
wingman87
28-11-2007, 23:44
Ed è normale visto che hai scritto:
cout << "Somma " << i << "° Diagonale" << endl;
Hai dimenticato un pezzo...
Che io sappia non è lecito fare così:
double matrice[numrighecolonne] [numrighecolonne];
dovresti utilizzare l'allocazione dinamica.
Maverick18
29-11-2007, 12:46
Che io sappia non è lecito fare così:
double matrice[numrighecolonne] [numrighecolonne];
dovresti utilizzare l'allocazione dinamica.
Vero, numrighecolonne non è una costante.
trallallero
29-11-2007, 17:01
hai il logo Ubuntu ed usi system("PAUSE") ? 
qualcosa non mi quadra :wtf:
Ed è normale visto che hai scritto:
cout << "Somma " << i << "° Diagonale" << endl;
Hai dimenticato un pezzo...
:doh: ma perchè faccio questi stupidissimi errori di distrazione :doh: 
Che io sappia non è lecito fare così:
double matrice[numrighecolonne] [numrighecolonne];
dovresti utilizzare l'allocazione dinamica.
Vero, numrighecolonne non è una costante.
mmm 
però nel primo for mi sembra che funzioni, intendo in quello dell'inserimento dei valori... puo darsi in effetti che pero non memorizzi le variabili...
comunque nel caso noi sapessimo gia il numero di righe e colonne della matrice e quindi non ci fosse di mezzo l'allocazione dinamica(che penso si faccia in programmazione) l'algoritmo è giusto?
hai il logo Ubuntu ed usi system("PAUSE") ? 
qualcosa non mi quadra :wtf:
infatti me l'hanno chiesto di metterlo, non l'avevo messo proprio per questo motivo: pur stando in quel momento su windows non sono abituato a metterlo perchè sto quasi sempre su linux
ragazzi sto provando a riscrivere il programma con il template vector(anche se non l'abbiamo fatto)
#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
int main() {
	int numrighecolonne,
	n, // numero totale elementi array diagonale
	i, //contatore diagonale
	colonne = 1; //contatore colonne
	
	cout << "Inserire il numero di righe e colonne della matrice" << endl;
	cin >> numrighecolonne;
	
	n = (numrighecolonne * 2) - 1;
		
	void inputVector(vector< double > &);
	void outputVector(vector< double > &);
	
	vector<double> mat(( numrighecolonne ), (numrighecolonne )); //vettore elementi matrice
	vector<double> diag( n ); //vettore somma diagonali
	
	cout << "Inserisci gli elementi della Matrice separati da uno spazio" << endl;
	inputVector( mat );
	
	i = diag.size();
	
	for(int r = mat.size(); r >= 0; r-- ) {
		for(unsigned int righe = r; righe <= mat.size(); righe++) {
			diag[i] += mat[righe][colonne];
			colonne++;
			i--;
		}	
	}
	cout << "Le somme delle diagonali sono:" << endl;
	outputVector( diag );
	
	system("PAUSE");
	
	return 0;
}
ma mi da errore alla riga evidenziata, precisamente questo errore:
invalid types 'double[int]' for array subscript
suggerimenti? :D
ragazzi sto provando a riscrivere il programma con il template vector(anche se non l'abbiamo fatto)
#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
int main() {
	int numrighecolonne,
	n, // numero totale elementi array diagonale
	i, //contatore diagonale
	colonne = 1; //contatore colonne
	
	cout << "Inserire il numero di righe e colonne della matrice" << endl;
	cin >> numrighecolonne;
	
	n = (numrighecolonne * 2) - 1;
		
	void inputVector(vector< double > &);
	void outputVector(vector< double > &);
	
	vector<double> mat(( numrighecolonne ), (numrighecolonne )); //vettore elementi matrice
	vector<double> diag( n ); //vettore somma diagonali
	
	cout << "Inserisci gli elementi della Matrice separati da uno spazio" << endl;
	inputVector( mat );
	
	i = diag.size();
	
	for(int r = mat.size(); r >= 0; r-- ) {
		for(unsigned int righe = r; righe <= mat.size(); righe++) {
			diag[i] += mat[righe][colonne];
			colonne++;
			i--;
		}	
	}
	
	outputVector( diag );
	
	system("PAUSE");
	
	return 0;
}
ma mi da errore alla riga evidenziata, precisamente questo errore:
invalid types 'double[int]' for array subscript
suggerimenti? :D
Cos'è la roba che ho evidenziato ??? Dichiarazioni di funzioni nel mezzo del codice ?
Cos'è la roba che ho evidenziato ??? Dichiarazioni di funzioni nel mezzo del codice ?
si, le ho trovate sul libro(deitel&deitel) dove le consiglia di mettere e poi mi sono dimenticato di farle... comunque il codice completo è questo
#include <iostream>
#include <cstdlib>
#include <vector>
#include <iomanip>
using namespace std;
int main() {
	int numrighecolonne,
	n, // numero totale elementi array diagonale
	i, //contatore diagonale
	colonne = 1; //contatore colonne
	
	cout << "Inserire il numero di righe e colonne della matrice" << endl;
	cin >> numrighecolonne;
	
	n = (numrighecolonne * 2) - 1;
		
	void inputVector(vector< double > &);
	void outputVector(vector< double > &);
	
	vector<double> mat(( numrighecolonne ), (numrighecolonne )); //vettore elementi matrice
	vector<double> diag( n ); //vettore somma diagonali
	
	cout << "Inserisci gli elementi della Matrice separati da uno spazio" << endl;
	inputVector( mat );
	
	i = diag.size();
	
	for(int r = mat.size(); r >= 0; r-- ) {
		for(unsigned int righe = r; righe <= mat.size(); righe++) {
			diag[i] += mat[righe][colonne];
			colonne++;
			i--;
		}	
	}
	
	cout << "Le somme delle diagonali sono:" << endl;
	outputVector( diag );
	
	system("PAUSE");
	
	return 0;
}
void outputVector(vector<double> &array)
{
	size_t j;
		
	for( j = 0; j < array.size(); j++) {
		cout << setw( 12 ) << array[j];
			
		if(( j + 1 ) % 4 == 0)
			cout << endl;
			
	}
}
void inputVector( vector<double> &array )
{
	for(unsigned int r = 1; r <= array.size(); r++ ) {
		for(unsigned int c = 1; c <= array.size(); c++) {
			cout << "Inserisci elemento " << r << " - " << c << endl;
			cin >> array[r][c];
		}
	}
}
ora aggiungendo le funzioni mi da errore anche nell'altra parte in grassetto...
sempre lo stesso ossia: invalid types 'double[int]' for array subscript
poi non sono molto sicuro di come si dichiari un vector bidimensionale, o in generale multidimensionale, ed ho messo in rosso come l'ho dichiarato io in rosso... ma sul libro non è spiegato e quindi sono andato per intuizione diciamo :asd: ed anche sull'array.size finale, perchè essendo l'array bidimensionale come faccio a dirgli si prendere la "seconda" o la "prima" dimensione?
ps: inputVector è fatta dal libro e copiata da me, outputVector l'ho fatta io perchè mi serviva per un vector bidimensionale
grazie per l'estrema pazienza :stordita:
wizard1993
30-11-2007, 15:06
da quel che so io non credo si possano dichiarare vettori multidimensionali, ma un semplice array non funziona?
da quel che so io non credo si possano dichiarare vettori multidimensionali, ma un semplice array non funziona?
mi hanno detto(e ricordo ci sia scritto anche sul deitel) che un array deve avere sempre come dimensione un valore costante. io il valore lo devo inserire con cin, e poi creare un array con per dimensione l'intero inserito in cin.
C'è l'allocazione dinamica per questo...in alternativa i vector vanno bene, ma per gestire una matrice con i vector devi lavorare con un solo indice (o creare un vector di vector) e ridimensionare il vector in ogni caso.
Ad esempio:
#include <vector>
#include <iostream>
using namespace std;
int main()
{
   int rows = 6, columns = 6;
   vector<double> v;
   v.resize(rows * columns, 0.0);
   for(int r = 0; r < rows; ++r)
   {
      for(int c = 0; c < columns; ++c)
         cout << v[r * columns + c] << " ";
      cout << endl;
   }
}
wizard1993
30-11-2007, 16:52
mi hanno detto(e ricordo ci sia scritto anche sul deitel) che un array deve avere sempre come dimensione un valore costante. io il valore lo devo inserire con cin, e poi creare un array con per dimensione l'intero inserito in cin.
la soluzione si chiama puntatori; come ha già detto cionci
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/buttarazzi/lezionisvolte/CPP3/CPP3.HTM
ma utilizza stdio.h :confused: 
grazie ancora di tutto, dopo di questa mi tolgo dalle scatole :D
int righe = 6;
int colonne = 3;
double *matrice = new double[righe * colonne];
Per accedere all'elemento (r,c): matrice[r * colonne + c]
marko.fatto
30-11-2007, 18:32
int righe = 6;
int colonne = 3;
double *matrice = new double[righe * colonne];
Per accedere all'elemento (r,c): matrice[r * colonne + c]
Scusa la nubbiaggine ma così non è un vettore!? :mbe: :stordita:
wizard1993
30-11-2007, 18:38
no, è un array ad allocazione tramite puntatore
marko.fatto
30-11-2007, 18:46
no, è un array ad allocazione tramite puntatore
ma comunque un array monodimensionale... è possibile allocare dinamicamente un array multidimensionale senza ricorrere a quel "trucchetto"?
edit: sempre usando un puntatore...
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];
marko.fatto
30-11-2007, 19:10
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];
E per accederci? :fagiano:
grande! sono riuscito a fare il programma finalmente :D 
#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;
		
}
funziona :D 
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
double **m = new double * [righe];
for(int i = 0; i < righe; ++i)
m[i] = new double[colonne];
funziona benissimo, ma non ho capito bene il ragionamento che c'è sotto :D
Maverick18
30-11-2007, 21:47
double **m = new double * [righe];
for(int i = 0; i < righe; ++i)
m[i] = new double[colonne];
[/code]
funziona benissimo, ma non ho capito bene il ragionamento che c'è sotto :D
Se non sbaglio alloca un vettore di puntatori double e lo fa puntare da m.
Poi alloca un vettore double per ogni puntatore double puntato da m.
banryu79
01-12-2007, 13:40
Anche se cionci e Maverick18 ti hanno già risposto ho pensato che poteva esserti di ulteriore aiuto uno schema visivo:
double **m = new double * [righe];
for(int i = 0; i < righe; ++i)
m[i] = new double[colonne];
a) double **m = new double * [righe];
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 :)
Grazie per la spiegazione esaustiva :D 
ho trovato anche il modo per farlo con vector di vector
vector<int> m( matsize );
vector<vector<int> >  matrice( matsize,m );
per accederci basta il solito matrice[i][j]
potrebbe essere utile a qualcuno :)
Grazie per la spiegazione esaustiva :D 
ho trovato anche il modo per farlo con vector di vector
vector<int> m( matsize );
vector<vector<int> >  matrice( matsize,m );
per accederci basta il solito matrice[i][j]
potrebbe essere utile a qualcuno :)
Non ci sono quei costruttori ;) In ogni caso dopo vanno ridimensionati i singoli vector.
Non ci sono quei costruttori ;) In ogni caso dopo vanno ridimensionati i singoli vector.
cioè?
comunque ho fatto vedere oggi il programma al professore, mi ha quasi insultato dicendo che devo risolvere i problemi con gli strumenti che abbiamo :rolleyes: 
bah, ma che modi :rolleyes: 
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 :banned: tutto sommato poi dichiarando la dimensione della matrice come int funziona senza allocazione dinamica...
#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;
}
mi ha detto anche che non posso calcolare il numero di diagonali algebricamente perchè non funziona poi, ma funziona lo stesso :fagiano:
cioè?
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:
vector< vector<int> > m;
m.resize(R);
for(int i = 0; i < R; ++i)
   m[i].resize(C, 0);
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:
vector< vector<int> > m;
m.resize(R);
for(int i = 0; i < R; ++i)
   m[i].resize(C, 0);
nono, con i vector come l'avevo fatto io funziona bene :D 
ho letto la guida qui su come creare vector di vector
http://www.dcs.bbk.ac.uk/~roger/cpp/week7.htm
Azzz...avevo letto male...non avevo visto che m era il vettore sopra.
in effetti così va bene.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.