tanszek:oktatas:muszaki_informatika:matrixok_kezelese
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
tanszek:oktatas:muszaki_informatika:matrixok_kezelese [2024/02/13 19:38] – létrehozva knehez | tanszek:oktatas:muszaki_informatika:matrixok_kezelese [2025/03/13 22:32] (current) – [Ellenőrző kérdések] knehez | ||
---|---|---|---|
Line 243: | Line 243: | ||
for (int i = 0; i < MAX_OSZLOP; i++) | for (int i = 0; i < MAX_OSZLOP; i++) | ||
{ | { | ||
- | sum += (*(*(A + sor) + i)) * (*(*(B + i) + oszlop)); | + | sum += A[sor][i] * B[i][oszlop]; |
} | } | ||
- | | + | C[sor][oszlop] = sum; |
} | } | ||
} | } | ||
Line 262: | Line 262: | ||
</ | </ | ||
- | **8. feladat: | + | **8. feladat: ** Oldjuk meg nem négyzetes mátrixokkal is a mátrix összeadós feladatot, valamint dinamikus memória kezeléssel: |
<sxh c> | <sxh c> | ||
- | sum += A[sor][i] * B[i][oszlop]; | + | #include < |
+ | #include < | ||
+ | |||
+ | // Dinamikus mátrix létrehozás | ||
+ | int **allocateMatrix(int rows, int cols) { | ||
+ | int **matrix = (int **)malloc(rows * sizeof(int *)); | ||
+ | |||
+ | for (int i = 0; i < rows; i++) { | ||
+ | matrix[i] | ||
+ | } | ||
+ | |||
+ | return matrix; | ||
+ | } | ||
+ | |||
+ | // Mátrix felszabadítás | ||
+ | void freeMatrix(int **matrix, int rows) { | ||
+ | for (int i = 0; i < rows; i++) { | ||
+ | free(matrix[i]); | ||
+ | } | ||
+ | free(matrix); | ||
+ | } | ||
+ | |||
+ | // Mátrix beolvasás | ||
+ | void readMatrix(int **m, int rows, int cols) { | ||
+ | printf(" | ||
+ | for (int sor = 0; sor < rows; sor++) { | ||
+ | for (int oszlop = 0; oszlop < cols; oszlop++) { | ||
+ | scanf(" | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // Mátrixok összeadása | ||
+ | void addMatrices(int **A, int **B, int **C, int rows, int cols) { | ||
+ | for (int sor = 0; sor < rows; sor++) { | ||
+ | for (int oszlop = 0; oszlop < cols; oszlop++) { | ||
+ | C[sor][oszlop] | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void printMatrix(int **matrix, int rows, int cols) { | ||
+ | printf(" | ||
+ | for (int sor = 0; sor < rows; sor++) { | ||
+ | for (int oszlop = 0; oszlop < cols; oszlop++) { | ||
+ | printf(" | ||
+ | } | ||
+ | printf(" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | int main() { | ||
+ | int rows, cols; | ||
+ | |||
+ | printf(" | ||
+ | scanf(" | ||
+ | |||
+ | int **A, **B, **C; | ||
+ | |||
+ | // Mátrixok allokálása a megadott méret szerint | ||
+ | A = allocateMatrix(rows, | ||
+ | B = allocateMatrix(rows, | ||
+ | C = allocateMatrix(rows, | ||
+ | |||
+ | // Mátrixok beolvasása | ||
+ | printf(" | ||
+ | readMatrix(A, | ||
+ | |||
+ | printf(" | ||
+ | readMatrix(B, | ||
+ | |||
+ | // Összeadás | ||
+ | addMatrices(A, | ||
+ | |||
+ | printf(" | ||
+ | printMatrix(C, | ||
+ | |||
+ | // Memória felszabadítása | ||
+ | freeMatrix(A, | ||
+ | freeMatrix(B, | ||
+ | freeMatrix(C, | ||
+ | |||
+ | return 0; | ||
+ | } | ||
</ | </ | ||
+ | |||
+ | ** 9. feladat **: vizsgáljuk meg a llama chat model c implementációját: | ||
+ | |||
+ | ===== Ellenőrző kérdések ===== | ||
+ | |||
+ | **Mi a helyes deklaráció egy 3×3-as egész mátrix létrehozására C-ben?** | ||
+ | |||
+ | A) int matrix[3][3]; | ||
+ | B) int matrix[9]; | ||
+ | C) int matrix[3, | ||
+ | D) matrix int[3][3]; | ||
+ | |||
+ | Megoldás: A | ||
+ | |||
+ | ---- | ||
+ | **Mi lesz a következő kódrészlet eredménye? | ||
+ | |||
+ | <sxh c> | ||
+ | int matrix[2][2] = {{1,2}, {3,4}}; | ||
+ | printf(" | ||
+ | </ | ||
+ | |||
+ | A) 1 | ||
+ | B) 2 | ||
+ | C) 3 | ||
+ | D) 4 | ||
+ | |||
+ | Megoldás: C (az első sor nulladik eleme, ami a 3, hiszen a sorok is 0-tól indulnak. | ||
+ | |||
+ | ---- | ||
+ | **Milyen ciklusszerkezet alkalmas egy kétdimenziós mátrix minden elemének bejárására? | ||
+ | |||
+ | A) Egyetlen for-ciklus | ||
+ | B) Egymásba ágyazott for-ciklusok | ||
+ | C) while ciklus, egyetlen feltétellel | ||
+ | D) Nincs szükség ciklusra | ||
+ | |||
+ | Megoldás: B | ||
+ | |||
+ | ---- | ||
+ | **Mi lesz a kód eredménye? | ||
+ | <sxh c> | ||
+ | int arr[3][3] = {{1, | ||
+ | printf(" | ||
+ | </ | ||
+ | |||
+ | A) 2 | ||
+ | B) 4 | ||
+ | C) 6 | ||
+ | D) 8 | ||
+ | |||
+ | Megoldás: C --> 2. sor 3. eleme, ami a 6-os. | ||
+ | |||
+ | ---- | ||
+ | **Melyik állítás igaz az alábbiak közül?** | ||
+ | |||
+ | A) A C-ben a mátrix sorainak száma opcionális deklarációkor. | ||
+ | B) Mátrixokat nem lehet paraméterként átadni függvényeknek. | ||
+ | C) Mátrix elemei mindig ugyanazt a típust tárolják. | ||
+ | |||
+ | Megoldás: C | ||
+ | |||
+ | ---- | ||
+ | **Hogyan adunk át egy mátrixot paraméterként egy függvénynek C-ben helyesen?** | ||
+ | |||
+ | A) void fuggveny(int matrix[][]) | ||
+ | B) void fuggveny(int **matrix) | ||
+ | C) void fuggveny(int matrix[][3]) | ||
+ | D) void fuggveny(matrix int[3][3]) | ||
+ | |||
+ | Megoldás: C --> második dimenzió méretét kötelező megadni | ||
+ | |||
+ | ---- | ||
+ | **Hogyan érhető el az alábbi mátrix legutolsó eleme (9) az alábbi deklarációból? | ||
+ | |||
+ | <sxh c> | ||
+ | int mat[3][3] = {{1, | ||
+ | </ | ||
+ | |||
+ | A) mat[9] | ||
+ | B) mat[3][3] | ||
+ | C) mat[2][2] | ||
+ | D) mat[3][2] | ||
+ | |||
+ | Megoldás: C --> mivel az indexelés 0-tól indul | ||
+ | |||
+ | ---- | ||
+ | **Mit csinál az alábbi kód?** | ||
+ | |||
+ | <sxh c> | ||
+ | int mat[3][3] = {0}; | ||
+ | </ | ||
+ | |||
+ | A) Lefoglal egy 3x3-as mátrixot véletlenszerű értékekkel. | ||
+ | B) Lefoglal egy 3x3-as mátrixot nullákkal feltöltve. | ||
+ | C) Csak a mátrix első elemét inicializálja 0-ra. | ||
+ | D) Csak a mátrix első sorát tölti fel nullával. | ||
+ | |||
+ | Megoldás: B -> a modern c-ben ezzel a szintaktikával lehet nullákkal feltölteni egy mátrixot. | ||
+ | |||
+ | ---- | ||
+ | ** Hogyan lehet helyesen dinamikusan lefoglalni egy 5×5-ös mátrixot? ** | ||
+ | |||
+ | A) int mat[5][5] = malloc(25 * sizeof(int)); | ||
+ | B) | ||
+ | <sxh c> | ||
+ | int **mat = malloc(5 * sizeof(int *)); | ||
+ | for(int i = 0; i < 5; i++) | ||
+ | mat[i] = malloc(5 * sizeof(int)); | ||
+ | </ | ||
+ | C) int *mat[5] = malloc(sizeof(int) * 25); | ||
+ | D) int mat[][] = malloc(5*5*sizeof(int)); | ||
+ | |||
+ | Megoldás: B | ||
+ | |||
+ | ---- | ||
+ | **Hogyan kell helyesen felszabadítani a memóriát egy dinamikusan foglalt kétdimenziós mátrix esetén?** | ||
+ | |||
+ | A) free(mat); | ||
+ | B) | ||
+ | <sxh c> | ||
+ | for (int i = 0; i < sorok; i++) | ||
+ | free(mat[i]); | ||
+ | free(mat); | ||
+ | </ | ||
+ | C) free(mat[][]); | ||
+ | D) free(mat); | ||
+ | | ||
+ | Megoldás: B | ||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
tanszek/oktatas/muszaki_informatika/matrixok_kezelese.1707853084.txt.gz · Last modified: 2024/02/13 19:38 by knehez