tanszek:oktatas:muszaki_informatika:strukturak_c-ben
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| tanszek:oktatas:muszaki_informatika:strukturak_c-ben [2024/02/13 19:40] – létrehozva knehez | tanszek:oktatas:muszaki_informatika:strukturak_c-ben [2025/03/13 22:47] (current) – [Ellenőrző kérdések] knehez | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ==== Mátrixok használata ==== | + | **1. Feladat**: Olvasson be változó számú Neptun kódokat |
| - | + | ||
| - | **1. feladat:** Adjunk össze két 3x3-as egész számokat tároló mátrix-ot | + | |
| <sxh c> | <sxh c> | ||
| - | #include < | + | # |
| - | + | #include< | |
| - | #define SIZE 3 // a matrix-ok merete | + | |
| - | void readMatrix(int m[][SIZE]) | + | struct Hallgato |
| { | { | ||
| - | | + | |
| - | | + | int jegy; |
| - | for(int oszlop = 0; oszlop < SIZE; oszlop++) | + | }; |
| - | { | + | |
| - | scanf(" | + | |
| - | } | + | |
| - | } | + | |
| - | } | + | |
| int main() | int main() | ||
| { | { | ||
| - | | + | |
| - | int B[SIZE][SIZE]; // Matrix 2 | + | int i, db; |
| - | int C[SIZE][SIZE]; | + | printf(" |
| - | + | | |
| - | printf(" | + | |
| - | | + | |
| - | printf("Kerem az masodik matrix elemeit: \n"); | + | |
| - | | + | for(i = 0; i < db; ++i) |
| - | + | ||
| - | for(int sor = 0; sor < SIZE; sor++) | + | |
| { | { | ||
| - | | + | |
| - | | + | |
| - | C[sor][oszlop] = A[sor][oszlop] + B[sor][oszlop]; | + | |
| - | } | + | |
| } | } | ||
| - | + | ||
| - | + | printf(" | |
| - | printf(" | + | for(i = 0; i < db ; ++i) |
| - | for(int sor = 0; sor < SIZE; sor++) | + | |
| { | { | ||
| - | | + | printf(" |
| - | { | + | |
| - | | + | |
| - | } | + | |
| - | printf(" | + | |
| } | } | ||
| } | } | ||
| </ | </ | ||
| - | **2. feladat:** Az első feladatban a <sxh c> | + | **2. Feladat**: Láncolt lista: készítsünk egy //int szam//-ot tartalmazó struktúrát, |
| - | + | ||
| - | **3. feladat:** Az első feladatban megadott feladatot oldjuk meg pointerekkel is. | + | |
| <sxh c> | <sxh c> | ||
| #include < | #include < | ||
| - | + | struct Elem | |
| - | #define SIZE 3 // a matrix-ok merete | + | |
| - | void readMatrix(int *m) | + | |
| { | { | ||
| - | | + | int szam; |
| - | | + | |
| - | scanf(" | + | }; |
| - | } | + | |
| - | } | + | |
| int main() | int main() | ||
| { | { | ||
| - | int A[SIZE][SIZE]; | ||
| - | int B[SIZE][SIZE]; | ||
| - | printf(" | + | } |
| - | | + | </ |
| - | printf(" | + | |
| - | readMatrix(& | + | |
| - | int C[SIZE][SIZE]; | + | **3. Feladat**: Láncolt lista: az előzőből hozzunk éltre két darabot dinamikusan, |
| - | for(int i = 0; i < SIZE * SIZE; i++) | + | <sxh c> |
| - | { | + | #include < |
| - | | + | #include < |
| - | } | + | struct Elem |
| + | { | ||
| + | int szam; | ||
| + | | ||
| + | }; | ||
| - | printf(" | + | int main() |
| - | | + | { |
| - | | + | |
| - | for(int oszlop | + | |
| - | { | + | // osszekotes első variacio |
| - | printf("%d ", C[sor][oszlop]); | + | |
| - | } | + | |
| - | | + | |
| - | | + | |
| } | } | ||
| </ | </ | ||
| - | **4. feladat:** Ellenőrizzük, hogy a felhasználótól | + | **4. Feladat**: Láncolt lista: Készítsünk egy függvényt, ami kiírja a lista összes elemét. Majd kérjünk be a felhasználótól |
| <sxh c> | <sxh c> | ||
| #include < | #include < | ||
| + | #include < | ||
| - | #define SIZE 3 // a matrix-ok merete | + | typedef struct Elem |
| - | void readMatrix(int m[][SIZE]) | + | |
| { | { | ||
| - | | + | int szam; |
| + | struct Elem *next; // a ' | ||
| + | } Elem; | ||
| + | |||
| + | void printList(Elem * head) | ||
| + | { | ||
| + | Elem * current = head; | ||
| + | |||
| + | while (current != NULL) | ||
| { | { | ||
| - | | + | |
| - | { | + | |
| - | scanf(" | + | |
| - | | + | |
| } | } | ||
| } | } | ||
| Line 114: | Line 97: | ||
| int main() | int main() | ||
| { | { | ||
| - | int A[SIZE][SIZE]; | + | int db; |
| + | printf(" | ||
| + | scanf(" | ||
| - | | + | |
| - | | + | |
| - | + | for(int | |
| - | int felsoHaromszog | + | |
| - | // 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 | + | |
| { | { | ||
| - | | + | |
| + | e-> | ||
| + | if(last != NULL) // ha nem az elsőt töltjük fel | ||
| { | { | ||
| - | | + | |
| - | // a foatlo alatti elemeknek 0-nak kell lenniuk | + | |
| - | // | + | |
| - | if(sor | + | |
| - | { | + | |
| - | felsoHaromszog = 0; | + | |
| - | } | + | |
| } | } | ||
| + | else // ha az elsőt töltjük fel, az elsőt eltároljuk, | ||
| + | { | ||
| + | first = e; | ||
| + | } | ||
| + | printf(" | ||
| + | scanf(" | ||
| + | last = e; // osszekotjuk a ket strukturat | ||
| } | } | ||
| - | | + | |
| - | { | + | |
| - | printf(" | + | |
| - | } | + | |
| - | else | + | |
| - | { | + | |
| - | printf(" | + | |
| - | } | + | |
| } | } | ||
| + | </ | ||
| + | **5. Feladat**: Értsük meg jobban a typedef használatát a _types.h kódrészlete alapján: | ||
| + | |||
| + | <sxh c> | ||
| + | /* sys/ | ||
| + | /* this is machine dependent */ | ||
| + | # | ||
| + | typedef unsigned long | ||
| + | #else | ||
| + | __extension__ | ||
| + | typedef unsigned long long __uint64_t; | ||
| + | #endif | ||
| + | ... | ||
| + | ... | ||
| + | typedef __uint64_t | ||
| </ | </ | ||
| - | **5. feladat:** Írjon C programot, ami meghatározza, | + | A fenti kódpélda az **//unsigned long long//** ot rövidíti |
| - | + | ||
| - | **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. | + | |
| <sxh c> | <sxh c> | ||
| #include < | #include < | ||
| + | #include < | ||
| - | #define SIZE 3 // a matrix-ok merete | + | /* uj tipust hozunk létre Item neven. |
| - | void readMatrix(int m[][SIZE]) | + | A struct elem_t helyett Item-et irhatunk kesobb |
| + | */ | ||
| + | typedef struct elem_t | ||
| { | { | ||
| - | | + | |
| - | | + | int count; |
| - | for(int oszlop = 0; oszlop < SIZE; oszlop++) | + | |
| - | { | + | } Item; |
| - | scanf(" | + | |
| - | } | + | |
| - | } | + | |
| - | } | + | |
| - | int main() | + | /* normal struktura definicio */ |
| + | struct item | ||
| { | { | ||
| - | | + | |
| - | int E[SIZE][SIZE]; | + | int count; |
| - | | + | |
| - | | + | }; |
| - | | + | /* |
| - | // Transzpontalt matrix pelda: | + | * ez valojaban egy nevtelen struktura |
| - | // | + | */ |
| - | // 1 2 3 1 4 7 | + | struct |
| - | // 4 5 6 => 2 5 8 | + | { |
| - | | + | |
| - | // | + | |
| - | // A matrix [i][j] elemét [j][i]-re kell cserelni | + | } nevtelen; |
| - | 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++) | + | int main(void) |
| - | { | + | { |
| - | | + | // mutato a " |
| - | { | + | struct item *pi = (struct item *)malloc(sizeof(struct item));; |
| - | | + | |
| - | } | + | |
| - | | + | // Roviditett hasznalata a "struct item_t"-nek |
| - | | + | Item *iI = (Item *)malloc(sizeof(Item)); |
| + | | ||
| + | | ||
| + | |||
| + | // nevtelen structura | ||
| + | nevtelen.i = 9; | ||
| + | | ||
| } | } | ||
| </ | </ | ||
| - | **7. feladat:** Írjon C programot, ami összeszoroz két mátrixot. | + | **6. Feladat**: A 4. példához készítsünk egy **//Elem* pop()//** függvényt, ami az első elemet eltávolítja a listából |
| <sxh c> | <sxh c> | ||
| - | #include < | + | Elem* pop(Elem *first) |
| - | + | ||
| - | #define MAX_SOR 3 | + | |
| - | #define MAX_OSZLOP 3 | + | |
| - | void readMatrix(int m[][MAX_OSZLOP]) | + | |
| { | { | ||
| - | | + | |
| - | | + | |
| - | for(int oszlop = 0; oszlop < MAX_OSZLOP; oszlop++) | + | |
| - | { | + | |
| - | scanf(" | + | |
| - | } | + | |
| - | | + | |
| } | } | ||
| + | </ | ||
| + | |||
| + | **7. Feladat**: A 4. példához készítsünk egy **//void sort(Elem*)// | ||
| - | int main() | + | <sxh c> |
| + | void sort(Elem *first) | ||
| { | { | ||
| - | | + | |
| - | | + | |
| - | | + | |
| - | printf("Kerem az A matrix elemeit: \n" | + | |
| - | readMatrix(A); | + | |
| - | printf(" | + | |
| - | readMatrix(B); | + | |
| - | + | ||
| - | + | ||
| - | for (int sor = 0; sor < MAX_SOR; sor++) | + | |
| { | { | ||
| - | | + | |
| + | while(e2 != NULL) | ||
| { | { | ||
| - | | + | |
| - | for (int i = 0; i < MAX_OSZLOP; i++) | + | |
| { | { | ||
| - | | + | |
| + | e2->szam = e1-> | ||
| + | e1->szam = tmp; | ||
| } | } | ||
| - | | + | |
| } | } | ||
| + | e1 = e1-> | ||
| } | } | ||
| + | } | ||
| + | </ | ||
| + | ===== Ellenőrző kérdések ===== | ||
| + | ** Mi igaz a struktúrákra az alábbiak közül? ** | ||
| - | for(int sor = 0; sor < MAX_SOR; sor++) | + | A) Egy struktúrában tárolt értékek típusa mindig azonos kell legyen. |
| - | { | + | B) A struktúrákat nem lehet függvényparaméterként átadni. |
| - | | + | C) Egy struktúra különböző típusú adatokat tárolhat. |
| - | { | + | D) Egy struktúrában csak primitív típusokat lehet használni. |
| - | | + | |
| - | } | + | Megoldás: |
| - | | + | |
| - | } | + | ---- |
| - | } | + | ** Melyik állítás hamis a struktúrák kapcsán? ** |
| + | |||
| + | A) A struktúra minden eleme egy külön memóriahelyen tárolódik. | ||
| + | B) Egy struktúra eleme lehet egy másik struktúra. | ||
| + | C) Egy struktúra tartalmazhat saját maga típusát is közvetlenül. | ||
| + | D) Struktúra használható tömbök elemeként is. | ||
| + | |||
| + | Megoldás: C --> saját magát csak pointerként tartalmazhatja, | ||
| + | ---- | ||
| + | |||
| + | **Hogyan kell helyesen deklarálni egy struktúrát, | ||
| + | |||
| + | A) struct Point {int x; int y;}; | ||
| + | B) struct int {x, y}; | ||
| + | C) structure point {int x; int y;}; | ||
| + | |||
| + | Megoldás: A | ||
| + | |||
| + | ---- | ||
| + | **Hogyan lehet inicializálni a Point struktúra típusú változót helyesen?** | ||
| + | |||
| + | <sxh c> | ||
| + | struct Point { int x; int y; }; | ||
| </ | </ | ||
| - | **8. feladat:** Írja át az előző példában | + | A) struct point p = [10, 20]; |
| + | B) struct point p = {10; 20}; | ||
| + | C) struct Point p = {10, 20}; | ||
| + | D) struct p = {10, 20}; | ||
| + | |||
| + | Megoldás: C | ||
| + | |||
| + | ---- | ||
| + | ** Hogyan érhető | ||
| <sxh c> | <sxh c> | ||
| - | sum += A[sor][i] | + | struct Car { int year; }; |
| + | struct Car mycar = {2020}; | ||
| + | struct Car *ptr = &mycar; | ||
| </ | </ | ||
| + | |||
| + | A) *ptr.year | ||
| + | B) ptr-> | ||
| + | C) ptr.year | ||
| + | D) ptr.(*year) | ||
| + | |||
| + | megoldás: C | ||
| + | |||
| + | ---- | ||
| + | |||
| + | **Mi a hiba az alábbi kódban?** | ||
| + | <sxh c> | ||
| + | struct Person { | ||
| + | char name[20]; | ||
| + | int age; | ||
| + | }; | ||
| + | |||
| + | struct Person p; | ||
| + | p.name = " | ||
| + | p.age = 30; | ||
| + | </ | ||
| + | |||
| + | A) p.age rosszul inicializált. | ||
| + | B) A struktúra deklaráció helytelen. | ||
| + | C) Tömbhöz nem rendelhető érték közvetlenül (name). | ||
| + | D) Nincs hiba. | ||
| + | |||
| + | Megoldás: C, mivel sztringet nem lehet tömbhöz így hozzárendelni, | ||
| + | |||
| + | ---- | ||
| + | ** Hogyan adjuk át egy struktúra pointerét paraméterként függvénynek? | ||
| + | |||
| + | A) void f(struct Person &p); | ||
| + | B) void f(struct Person p*); | ||
| + | C) void f(struct Person *p); | ||
| + | D) void f(Person *p); | ||
| + | |||
| + | Megoldás: C | ||
| + | |||
| + | ---- | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
tanszek/oktatas/muszaki_informatika/strukturak_c-ben.1707853256.txt.gz · Last modified: 2024/02/13 19:40 by knehez
