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