Salve a tutti, ho un problema con le matrici. Sto studiando da poco programmazione e ho pensato di creare un programma che invertisse le righe con le colonne in una matrice, non solo quadrata.
Ora, per accedere ad una matrice bidimensionale, devo passare alla mia matrice delle "coordinate" ad esempio matrix[0][1], in questo modo avrò accesso al dato contenuto in quella cella di memoria di "cooridinata" 0 1 . Correggetemi se sbaglio...
Inoltre, da quello che ho capito, la prima cella ha "coordinate" [0][0] proprio come nei vettori dove la prima posizione è 0.
Quindi non capisco come mai alcune volte ho bisogno di incrementare le righe e le colonne di una matrice (o posizioni di un vettore) ad esempio,voglio introdurre 4 interi,
due sulla riga 0 e due sulla riga 1 se dichiarassi una matrice 1x1 ,secondo la teoria, sarebbe sufficiente per questi dati, purtroppo spesso il programma in questo modo non funziona, devo dichiarare una matrice 2x2 però "riempirla" come fosse una 1x1 per non avere errori.
infatti spesso mi ritrovo a fare cose del genere:
R++;
C++;
int matrix[R][C];
R--;
C--;
E di seguito tutti i vari cicli for per le lettura e scrittura.
Altrimenti succede una cosa del genere:
Input prima riga: 1 2
Input seconda riga : 3 4
Output finale : 1 3
3 4
Una cosa simile sta succedendo con questo programma...che ora vi posto:
#include <cstdlib>
#include <stdio.h>
#include <iostream>
using namespace std;
/*
*
*/
int main(int argc, char** argv) {
int R,C;
cout << " Definire il numero di righe: ";
cin >> R;
cout << " Definire il numero di colonne: ";
cin >> C;
int matrix[R][C];
cout << endl;
cout << " Compila la matrice... "<< endl;
for(int r=0; r<=R; r++){
cout << " Inizio valori sulla riga "<< r << endl;
for(int c=0; c<=C; c++){
cout << " Inserici un valore nella posizione " << c << " : ";
cin >> matrix[r][c];
}
cout << " Fine dei valori sulla riga " << r << endl;
}
cout << " La matrice immessa e': " << endl;
for(int r=0; r<=R; r++){
for(int c=0; c<=C; c++){
cout << " " << matrix[r][c] << " ";
}
cout << endl;
}
//Inizio dei controlli per lo scambio
int var_appoggio,scambio;
if ( R > C){
var_appoggio = C;
C = R;
matrix[R][C];
for(int c = 0; c <= R; c++ ){
for(int r=c; r<=R; r++){ // la faccio diventare quadrata e mi muovo sulla diagonale.
scambio = matrix[c][r];
matrix[c][r] = matrix[r][c];
matrix[r][c] = scambio;
}
}
R = var_appoggio - (R-C); // tolgo le righe in piu che ho aggiunto
matrix[R][C];
cout << " La matrice inversa e': " << endl;
for(int r=0; r<=R; r++){
for(int c=0; c<=C; c++){
cout << " " << matrix[r][c] << " ";
}
cout << endl;
}
}
system("pause");
return 0;
}
Ovviamente non ho continuato con gli ultimi due casi perchè vorrei prima che funzionasse questo...
L'output è il seguente:
Definire il numero di righe: 4
Definire il numero di colonne: 3
Compila la matrice...
Inizio valori sulla riga 0
Inserici un valore nella posizione 0 : 23
Inserici un valore nella posizione 1 : 34
Inserici un valore nella posizione 2 : 45
Inserici un valore nella posizione 3 : 66
Fine dei valori sulla riga 0
Inizio valori sulla riga 1
Inserici un valore nella posizione 0 : 33
Inserici un valore nella posizione 1 : 45
Inserici un valore nella posizione 2 : 43
Inserici un valore nella posizione 3 : 54
Fine dei valori sulla riga 1
Inizio valori sulla riga 2
Inserici un valore nella posizione 0 : 65
Inserici un valore nella posizione 1 : 42
Inserici un valore nella posizione 2 : 67
Inserici un valore nella posizione 3 : 36
Fine dei valori sulla riga 2
Inizio valori sulla riga 3
Inserici un valore nella posizione 0 : 64
Inserici un valore nella posizione 1 : 24
Inserici un valore nella posizione 2 : 13
Inserici un valore nella posizione 3 : 90
Fine dei valori sulla riga 3
Inizio valori sulla riga 4
Inserici un valore nella posizione 0 : 35
Inserici un valore nella posizione 1 : 43
Inserici un valore nella posizione 2 : 23
Inserici un valore nella posizione 3 : 61
Fine dei valori sulla riga 4
La matrice immessa e':
23 34 45 33
33 45 43 65
65 42 67 64
64 24 13 35
35 43 23 61
La matrice inversa e':
23 33 65 64 35
64 35 42 24 43
24 43 67 13 23
13 23 34 45 61
Premere un tasto per continuare . . .
Qualcuno saprebbe darmi qualche dritta? Perchè succede che alla fine della riga al posto dell'ultimo valore mi viene stampato il primo valore della riga successiva?
Scusate per la lunga introduzione al problema...grazie a tutti per le eventuali risposte!