==== Mátrixok használata ====
**1. feladat:** Adjunk össze két 3x3-as egész számokat tároló mátrix-ot és tároljunk le egy harmadikban az eredményt. Használjunk függvényt a mátrix elemeinek bekéréséhez.
#include
#define SIZE 3 // a matrix-ok merete
void readMatrix(int m[][SIZE])
{
for(int sor = 0; sor < SIZE; sor++)
{
for(int oszlop = 0; oszlop < SIZE; oszlop++)
{
scanf("%d", &m[sor][oszlop]);
}
}
}
int main()
{
int A[SIZE][SIZE]; // Matrix 1
int B[SIZE][SIZE]; // Matrix 2
int C[SIZE][SIZE]; // eredmeny Matrix
printf("Kerem az elso matrix elemeit: \n");
readMatrix(A);
printf("Kerem az masodik matrix elemeit: \n");
readMatrix(B);
for(int sor = 0; sor < SIZE; sor++)
{
for(int oszlop = 0; oszlop < SIZE; oszlop++)
{
C[sor][oszlop] = A[sor][oszlop] + B[sor][oszlop];
}
}
printf("\nMatrixok osszege: A+B = \n");
for(int sor = 0; sor < SIZE; sor++)
{
for(int oszlop = 0; oszlop < SIZE; oszlop++)
{
printf("%d ", C[sor][oszlop]);
}
printf("\n"); // soronkent uj sor
}
}
**2. feladat:** Az első feladatban a readMatrix() függvényt cseréljük le: void readMatrix(int ** m) -ra és próbáljuk meg mi történik és magyarázzuk meg miért?
**3. feladat:** Az első feladatban megadott feladatot oldjuk meg pointerekkel is.
#include
#define SIZE 3 // a matrix-ok merete
void readMatrix(int *m)
{
for(int i = 0; i < SIZE * SIZE; i++)
{
scanf("%d", (m + i));
}
}
int main()
{
int A[SIZE][SIZE]; // Matrix 1
int B[SIZE][SIZE]; // Matrix 2
printf("Kerem az elso matrix elemeit: \n");
readMatrix(&A[0][0]);
printf("Kerem az masodik matrix elemeit: \n");
readMatrix(&B[0][0]);
int C[SIZE][SIZE]; // eredmeny Matrix
for(int i = 0; i < SIZE * SIZE; i++)
{
*(&C[0][0] + i) = *(&A[0][0] + i) + *(&B[0][0] + i);
}
printf("\nMatrixok osszege: A+B = \n");
for(int sor = 0; sor < SIZE; sor++)
{
for(int oszlop = 0; oszlop < SIZE; oszlop++)
{
printf("%d ", C[sor][oszlop]);
}
printf("\n"); // soronkent uj sor
}
}
**4. feladat:** Ellenőrizzük, hogy a felhasználótól bekért 3x3-as mátrix felső háromszög típusú-e?
#include
#define SIZE 3 // a matrix-ok merete
void readMatrix(int m[][SIZE])
{
for(int sor = 0; sor < SIZE; sor++)
{
for(int oszlop = 0; oszlop < SIZE; oszlop++)
{
scanf("%d", &m[sor][oszlop]);
}
}
}
int main()
{
int A[SIZE][SIZE];
printf("Kerem a matrix elemeit: \n");
readMatrix(A);
int felsoHaromszog = 1;
// Hogyan jovunk ra a megoldasra?
//
// 1 2 3 [0,0] [0,1] [0,2]
// 0 4 5 =>[1,0] [1,1] [1,2]
// 0 0 6 [2,0] [2,1] [2,2]
//
// Mi a közös a három 0 érték indexeiben?
// - az hogy a sor index erteke mindig nagyobb mint
// az oszlop index!!
//
for(int sor = 0; sor < SIZE; sor++)
{
for(int oszlop = 0; oszlop < SIZE; oszlop++)
{
//
// a foatlo alatti elemeknek 0-nak kell lenniuk
//
if(sor > oszlop && A[sor][oszlop]!=0)
{
felsoHaromszog = 0;
}
}
}
if(felsoHaromszog)
{
printf("felso haromszog matrix");
}
else
{
printf("nem felso haromszog");
}
}
**5. feladat:** Írjon C programot, ami meghatározza, hogy egy mátrix ritka mátrix-e? Egy ritka mátrix olyan mártix aminek legalább elemeinek a fele 0.
**6. feladat:** Írjon C programot, ami bekér a felhasználótól egy 3x3-as mátrixot és kiírja a transzponáltját.
#include
#define SIZE 3 // a matrix-ok merete
void readMatrix(int m[][SIZE])
{
for(int sor = 0; sor < SIZE; sor++)
{
for(int oszlop = 0; oszlop < SIZE; oszlop++)
{
scanf("%d", &m[sor][oszlop]);
}
}
}
int main()
{
int A[SIZE][SIZE];
int E[SIZE][SIZE];
printf("Kerem a matrix elemeit: \n");
readMatrix(A);
// Hogyan jovunk ra a megoldasra?
// Transzpontalt matrix pelda:
//
// 1 2 3 1 4 7
// 4 5 6 => 2 5 8
// 7 8 9 3 6 9
//
// A matrix [i][j] elemét [j][i]-re kell cserelni
for(int sor = 0; sor < SIZE; sor++)
{
for(int oszlop = 0; oszlop < SIZE; oszlop++)
{
E[sor][oszlop] = A[oszlop][sor];
}
}
for(int sor = 0; sor < SIZE; sor++)
{
for(int oszlop = 0; oszlop < SIZE; oszlop++)
{
printf("%d ", E[sor][oszlop]);
}
printf("\n");
}
}
**7. feladat:** Írjon C programot, ami összeszoroz két mátrixot.
#include
#define MAX_SOR 3
#define MAX_OSZLOP 3
void readMatrix(int m[][MAX_OSZLOP])
{
for(int sor = 0; sor < MAX_SOR; sor++)
{
for(int oszlop = 0; oszlop < MAX_OSZLOP; oszlop++)
{
scanf("%d", &m[sor][oszlop]);
}
}
}
int main()
{
int A[MAX_SOR][MAX_OSZLOP];
int B[MAX_SOR][MAX_OSZLOP];
int C[MAX_SOR][MAX_OSZLOP];
printf("Kerem az A matrix elemeit: \n");
readMatrix(A);
printf("Kerem a B matrix elemeit: \n");
readMatrix(B);
for (int sor = 0; sor < MAX_SOR; sor++)
{
for (int oszlop = 0; oszlop < MAX_OSZLOP; oszlop++)
{
int sum = 0;
for (int i = 0; i < MAX_OSZLOP; i++)
{
sum += (*(*(A + sor) + i)) * (*(*(B + i) + oszlop));
}
*(*(C + sor) + oszlop) = sum;
}
}
for(int sor = 0; sor < MAX_SOR; sor++)
{
for(int oszlop = 0; oszlop < MAX_OSZLOP; oszlop++)
{
printf("%d ", C[sor][oszlop]);
}
printf("\n");
}
}
**8. feladat:** Írja át az előző példában a sum += (*(*A + sor .... -t az egyszerűbb indexes A[i][j]- alakra!
sum += A[sor][i] * B[i][oszlop];