Matrice quadrata in c++

skeggia18
ho scritto questo codice per creare una matrice in c++:

#include
#include
#include
using namespace std;

#define MAX_RIGHE 10
#define MAX_COLONNE 10

int main() {
// Richiesta delle dimensioni.
int num_righe;
do {
cout << "Numero di righe (max 10): ";
cin >> num_righe;
} while (num_righe < 1 || num_righe > MAX_RIGHE);
int num_colonne;
do {
cout << "Numero di colonne (max 10): ";
cin >> num_colonne;
} while (num_colonne < 1 || num_colonne > MAX_COLONNE);

if (num_colonne != num_righe);
cout <<"errore!";
else {

int mat[num_righe][num_colonne];
// Caricamento della matrice

for (int i = 0; i < num_righe; i++)
for (int j = 0; j < num_colonne; j++) {
cout << "Inserisci l'elemento (" << i << ", " << j << "): ";
cin >> mat[j];
}

// Stampa

for (int i = 0; i < num_righe; i++) {
cout << endl;
for (int j = 0; j < num_colonne; j++)
cout << setw(7) << mat[j];
}

cout << endl;
getch();
return 0;


devo modificarlo affinche la mia matrice sia nxn e assegnare un nome alla matrice, ho provato in mille modi ma c'è sempre qualche errore..
grazie..

Risposte
enigmagame
Quello che vuoi creare è una matrice nxn, non ti serve chiedere all'utente il numero di righe e di colonne, ti basta chiedere la dimensione che la matrice deve avere, poi vai ad allocare una matrice quadrata di queste dimensioni, ad esempio:
int matrice[n][n];

L'altra domanda non l'ho capita, in che senso devi assegnare un nome alla matrice?

skeggia18
ad esempio io inserisco 1 1 1 1
come messaggio di input non deve venire
$((1,1),(1,1))$

ma

A=$((1,1),(1,1))$

enigmagame
"skeggia18":
ad esempio io inserisco 1 1 1 1
come messaggio di input non deve venire
$((1,1),(1,1))$

ma

A=$((1,1),(1,1))$

Non mi è molto chiaro... Il nome della matrice lo passi da input? Potresti creare una nuova struttura chiamata matrice, questa avrà un nome ed un array bidimensionale che conterrà i dati.
Chiedi all'utente il nome e la dimensione della matrice, ed una volta create chiedi all'utente di inserire i valori. In fine stampi prima il nome della matrice e poi i suoi valori.
Non ho capito bene se è questo che intendi però...

skeggia18
un altra cosa, adesso io ho il programma con che mi scrive 2 matric A,B fatto così:
#include

#include

#include



using namespace std;
#define MAX_RIGHE 10

#define MAX_COLONNE 10


int main() {

int n;
int A[n][n];
int num_righe;
int num_colonne;
int B[n][n];
int num_righe2;
int num_colonne2;
do {
do {
cout << "Numero di righe (max 10): ";
cin >> num_righe;
} while (num_righe < 1 || num_righe > MAX_RIGHE);
do { cout << "Numero di colonne (max 10): ";
cin >> num_colonne;
} while (num_colonne < 1 || num_colonne > MAX_COLONNE );
if (num_colonne != num_righe)
{
cout << "Errore numero righe e colonne diverese \n";
}
} while (num_colonne != num_righe);
int mat[num_righe][num_colonne];
for (int i = 0; i < num_righe; i++)

for (int j = 0; j < num_colonne; j++) {

cout << "Inserisci l'elemento (" << i << ", " << j << "): ";

cin >> A [j];

}



// Stampa


for (int i = 0; i < num_righe; i++) {

cout << endl;

for (int j = 0; j < num_colonne; j++)

cout << setw(7) << A[j];

}

cout << endl;

cout<<"ora inserisci la seconda matrice:";


do {
do {
cout << "Numero di righe (max 10): ";
cin >> num_righe2;
} while (num_righe2 < 1 || num_righe2 > MAX_RIGHE);
do { cout << "Numero di colonne (max 10): ";
cin >> num_colonne2;
} while (num_colonne2 < 1 || num_colonne2 > MAX_COLONNE );
if (num_colonne2 != num_righe2)
{
cout << "Errore numero righe e colonne diverese \n";
}
} while (num_colonne2 != num_righe2);

int matB[num_righe2][num_colonne2];
for (int i = 0; i < num_righe2; i++)

for (int j = 0; j < num_colonne2; j++) {

cout << "Inserisci l'elemento (" << i << ", " << j << "): ";

cin >> B [j];

}



// Stampa


for (int i = 0; i < num_righe2; i++) {

cout << endl;

for (int j = 0; j < num_colonne2; j++)

cout << setw(7) << B[j];

}

cout << endl;


char c=getch();
return 0;
}

ora dovrei utilizzare l'algoritmo di strassen per il prodotto di matrici:
matrice moltiplica(matrice A, matrice B) {
matrice C sarà il risultato;
if(dimensioneMatrici == 1) c11 = a11 * b11;
else {
dividi A nelle matrici A11, A12, A21, A22;
dividi B nelle matrici B11, B12, B21, B22;
matrice X1 = moltiplica(A11 + A22, B11 + B22);
matrice X2 = moltiplica(A21 + A22, B11);
... (vedi ad es. dispense di Matematica Discreta)
matrice X7 = moltiplica(A11 - A22, B21 + B22);
C11 = X1 + X4 – X5 + X7;
C12 = X3 + X5;
C21 = X2 + X4;
C22 = X1 + X3 – X2 + X6;
}
return C; }
come posso tradurlo per il c++??

enigmagame
"skeggia18":

come posso tradurlo per il c++??

In che senso? Vuoi realizzare il tutto ad oggetti?

skeggia18
per farlo più semplice l'ho modoficato per matrici 2x2;
praticamente dopo il cout << endl; devo inserire il prodotto di matrici fatto così
P1 = (A11 + A22) · (B11 + B22)
P2 = (A21 + A22) · B11
P3 = A11 · (B12 − B22)
P4 = A22 · (B21 − B11)
P5 = (A11 + A12) · B22
P6 = (A21 − A11) · (B11 + B12)
P7 = (A12 − A22) · (B21 + B22)

C11 = P1 + P4 − P5 + P7
C12 = P3 + P5
C21 = P2 + P4
C22 = P1 + P3 − P2 + P6

come si può fare?

enigmagame
Basta che lo implementi, sono solo una serie di operazioni.
Ma forse non è questo ciò che chiedevi...

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.