Matrice quadrata in c++
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..
#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
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:
L'altra domanda non l'ho capita, in che senso devi assegnare un nome alla matrice?
int matrice[n][n];
L'altra domanda non l'ho capita, in che senso devi assegnare un nome alla matrice?
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))$
come messaggio di input non deve venire
$((1,1),(1,1))$
ma
A=$((1,1),(1,1))$
"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ò...
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++??
#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++??
"skeggia18":
come posso tradurlo per il c++??
In che senso? Vuoi realizzare il tutto ad oggetti?
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?
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?
Basta che lo implementi, sono solo una serie di operazioni.
Ma forse non è questo ciò che chiedevi...
Ma forse non è questo ciò che chiedevi...