User Tools

Site Tools


tanszek:oktatas:szamitastechnika:strukturak

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
tanszek:oktatas:szamitastechnika:strukturak [2025/10/27 09:44] – created szabomtanszek:oktatas:szamitastechnika:strukturak [2025/11/18 18:26] (current) knehez
Line 1: Line 1:
 ===== Struktúrák ===== ===== Struktúrák =====
  
-Elmélet: később+**Mi az a struktúra?**
  
-===== Gyakorlás =====+A struktúra (structure) egy felhasználó által definiált adattípus, amely különböző típusú változókat (adatokat) képes egy név alatt összefogni. 
 +Ez hasonló az osztályhoz más nyelvekben, csak egyszerűbb, mert nincs benne metódus. 
 + 
 +Célja: összetett adatok (pl. hallgató, autó, pont, dátum stb.) logikai egységbe foglalása. 
 + 
 +**Struktúra definiálása** 
 + 
 +A struktúra típust a struct kulcsszóval hozzuk létre: 
 + 
 +<sxh c> 
 +struct Szemely { 
 +    char nev[50]; 
 +    int eletkor; 
 +    float magassag; 
 +}; 
 +</sxh> 
 + 
 +Ezután létrehozhatunk belőle változókat: 
 + 
 +<sxh c> 
 +struct Szemely ember1, ember2; 
 +</sxh> 
 + 
 +VAGY egyből definiálhatjuk és példányosíthatjuk: 
 +<sxh c> 
 +struct Szemely { 
 +    char nev[50]; 
 +    int eletkor; 
 +    float magassag; 
 +} ember1, ember2; 
 + 
 +</sxh> 
 + 
 +**Típusnév (typedef)** 
 + 
 +A typedef segítségével egyszerűbb nevet adhatunk a struktúrának: 
 + 
 +<sxh c> 
 +typedef struct { 
 +    char nev[50]; 
 +    int eletkor; 
 +    float magassag; 
 +} Szemely; 
 + 
 +Szemely ember1, ember2; 
 +//Így már nem kell mindenhol struct kulcsszót írni. 
 +</sxh> 
 + 
 +**Struktúratagok elérése** 
 + 
 +A tagokat a pont (.) operátorral érjük el: 
 + 
 +<sxh c> 
 +strcpy(ember1.nev, "Kovacs Bela"); 
 +ember1.eletkor 25; 
 +ember1.magassag 1.82; 
 +</sxh> 
 + 
 +Ha mutatóval dolgozunk, akkor a nyíl (->) operátort használjuk: 
 +<sxh c> 
 +Szemely *ptr &ember1; 
 +printf("%s %d %.2f", ptr->nev, ptr->eletkor, ptr->magassag); 
 +</sxh> 
 + 
 +**Struktúrák átadása függvényeknek** 
 + 
 +Érték szerint: 
 +<sxh c> 
 +void kiir(Szemely s) { 
 +    printf("%s (%d ev)\n", s.nev, s.eletkor); 
 +
 +</sxh> 
 + 
 +Mutatóval (másképpen): 
 +<sxh c> 
 +void kiir(const Szemely *s) { 
 +    printf("%s (%d ev)\n", s->nev, s->eletkor); 
 +
 +</sxh> 
 + 
 + 
 +**Beágyazott struktúrák** 
 + 
 +Egy struktúra tartalmazhat másik struktúrát is: 
 +<sxh c> 
 +typedef struct { 
 +    int ev, honap, nap; 
 +} Datum; 
 + 
 +typedef struct { 
 +    char nev[50]; 
 +    Datum szuletes; 
 +} Hallgato; 
 + 
 +</sxh>
  
 +**Struktúra adatainak bekérése és kiírása:** 
 <sxh c> <sxh c>
 #include <stdio.h> #include <stdio.h>
Line 78: Line 173:
 </sxh> </sxh>
  
-----+===== Gyakorlás =====
  
 +1. Készíts egy struktúrát, ami egy pontot (x, y) tárol, és írja ki a koordinátáit!
 <sxh c> <sxh c>
- //Összetett példa +#include <stdio.h> 
 + 
 +struct Pont { 
 +    int x; 
 +    int y; 
 +}; 
 + 
 +int main() { 
 +    struct Pont p = {3, 7}; 
 +    printf("A pont koordinátai: (%d, %d)\n", p.x, p.y); 
 +    return 0; 
 +
 +</sxh> 
 + 
 +2.Kérj be 3 személy nevét és életkorát, majd írd ki őket! 
 +<sxh c> 
 +#include <stdio.h> 
 + 
 +typedef struct { 
 +    char nev[50]; 
 +    int eletkor; 
 +} Szemely; 
 + 
 +int main() { 
 +    Szemely emberek[3]; 
 +    for (int i = 0; i < 3; i++) { 
 +        printf("%d. szemely neve: ", i+1); 
 +        scanf(" %[^\n]", emberek[i].nev); 
 +        printf("%d. szemely eletkora: ", i+1); 
 +        scanf("%d", &emberek[i].eletkor); 
 +    } 
 + 
 +    printf("\n--- Adatok ---\n"); 
 +    for (int i = 0; i < 3; i++) { 
 +        printf("%s (%d ev)\n", emberek[i].nev, emberek[i].eletkor); 
 +    } 
 +    return 0; 
 +
 + 
 +</sxh> 
 + 
 +3. Írj függvényt, ami egy személy adatait kiírja! 
 +<sxh c> 
 +#include <stdio.h> 
 + 
 +typedef struct { 
 +    char nev[50]; 
 +    int kor; 
 +} Szemely; 
 + 
 +void kiir(const Szemely *s) { 
 +    printf("%s - %d ev\n", s->nev, s->kor); 
 +
 + 
 +int main() { 
 +    Szemely ember = {"Kiss Anna", 22}; 
 +    kiir(&ember); 
 +    return 0; 
 +
 +</sxh> 
 + 
 +4. Készíts struktúrát, ahol egy hallgató neve és születési dátuma van eltárolva! 
 +<sxh c> 
 +#include <stdio.h> 
 + 
 +typedef struct { 
 +    int ev, honap, nap; 
 +} Datum; 
 + 
 +typedef struct { 
 +    char nev[50]; 
 +    Datum szuletes; 
 +} Hallgato; 
 + 
 +int main() { 
 +    Hallgato h = {"Nagy Peter", {2002, 4, 15}}; 
 +    printf("%s szuletett: %d.%02d.%02d\n", 
 +           h.nev, h.szuletes.ev, h.szuletes.honap, h.szuletes.nap); 
 +    return 0; 
 +
 +</sxh> 
 + 
 +5. Adj meg 3 személyt, és írd ki, ki a legidősebb! 
 +<sxh c> 
 +#include <stdio.h> 
 +#include <string.h> 
 + 
 +typedef struct { 
 +    char nev[50]; 
 +    int kor; 
 +} Szemely; 
 + 
 +int main() { 
 +    Szemely emberek[3] = { 
 +        {"Kovacs Bela", 34}, 
 +        {"Kiss Anna", 28}, 
 +        {"Toth Eva", 41} 
 +    }; 
 + 
 +    int maxIndex = 0; 
 +    for (int i = 1; i < 3; i++) { 
 +        if (emberek[i].kor > emberek[maxIndex].kor) 
 +            maxIndex = i; 
 +    } 
 + 
 +    printf("A legidosebb: %s (%d ev)\n", 
 +           emberek[maxIndex].nev, emberek[maxIndex].kor); 
 +    return 0; 
 +
 +</sxh> 
 + 
 +6. Készíts programot, ami 5 diák 3 tantárgyból kapott jegyeit tárolja és minden diáknak kiszámolja az átlagát! 
 +<sxh c> 
 +#include <stdio.h> 
 + 
 +#define N 5 
 +#define M 3 
 + 
 +typedef struct { 
 +    char nev[30]; 
 +    int jegyek[M]; 
 +    float atlag; 
 +} Diak; 
 + 
 +int main() { 
 +    Diak diakok[N] = { 
 +        {"Anna", {4, 5, 5}}, 
 +        {"Bela", {3, 4, 4}}, 
 +        {"Csilla", {5, 5, 5}}, 
 +        {"David", {2, 3, 4}}, 
 +        {"Erika", {4, 4, 3}} 
 +    }; 
 + 
 +    for (int i = 0; i < N; i++) { 
 +        int osszeg = 0; 
 +        for (int j = 0; j < M; j++) 
 +            osszeg += diakok[i].jegyek[j]; 
 +        diakok[i].atlag = (float)osszeg / M; 
 +    } 
 + 
 +    printf("--- Diakok atlaga ---\n"); 
 +    for (int i = 0; i < N; i++) { 
 +        printf("%s: %.2f\n", diakok[i].nev, diakok[i].atlag); 
 +    } 
 + 
 +    return 0; 
 +
 +</sxh> 
 + 
 +7. Definiálj egy Matrix struktúrát, amely tárol egy 3×3-as mátrixot, és készíts függvényt, ami a mátrix transzponáltját számolja ki! 
 +<sxh c> 
 +#include <stdio.h> 
 + 
 +#define SIZE 3 
 + 
 +typedef struct { 
 +    int adat[SIZE][SIZE]; 
 +} Matrix; 
 + 
 +Matrix transzponalt(Matrix m) { 
 +    Matrix t; 
 +    for (int i = 0; i < SIZE; i++) 
 +        for (int j = 0; j < SIZE; j++) 
 +            t.adat[i][j] = m.adat[j][i]; 
 +    return t; 
 +
 + 
 +void kiir(Matrix m) { 
 +    for (int i = 0; i < SIZE; i++) { 
 +        for (int j = 0; j < SIZE; j++) 
 +            printf("%d ", m.adat[i][j]); 
 +        printf("\n"); 
 +    } 
 +
 + 
 +int main() { 
 +    Matrix A = {{{1,2,3}, {4,5,6}, {7,8,9}}}; 
 +    printf("Eredeti mátrix:\n"); 
 +    kiir(A); 
 +    printf("\nTranszponált:\n"); 
 +    Matrix T = transzponalt(A); 
 +    kiir(T); 
 +    return 0; 
 +
 +</sxh> 
 + 
 +8. Tárolj 5 darab 2D pontot egy struktúra tömbben, és határozd meg, melyik két pont van egymástól legmesszebb! 
 +<sxh c> 
 +#include <stdio.h> 
 +#include <math.h> 
 + 
 +#define N 5 
 + 
 +typedef struct { 
 +    float x, y; 
 +} Pont; 
 + 
 +float tav(Pont a, Pont b) { 
 +    return sqrt((a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y)); 
 +
 + 
 +int main() { 
 +    Pont pontok[N] = { 
 +        {0, 0}, {3, 4}, {5, 1}, {2, 8}, {9, 9} 
 +    }; 
 + 
 +    float maxTav = 0; 
 +    int p1 = 0, p2 = 1; 
 + 
 +    for (int i = 0; i < N; i++) { 
 +        for (int j = i + 1; j < N; j++) { 
 +            float d = tav(pontok[i], pontok[j]); 
 +            if (d > maxTav) { 
 +                maxTav = d; 
 +                p1 = i; 
 +                p2 = j; 
 +            } 
 +        } 
 +    } 
 + 
 +    printf("Legnagyobb tavolsag: %.2f a (%g,%g) es (%g,%g) kozott.\n", 
 +           maxTav, pontok[p1].x, pontok[p1].y, pontok[p2].x, pontok[p2].y); 
 + 
 +    return 0; 
 +
 + 
 +</sxh> 
 + 
 +9. Tölts fel 4 diák adatait 4 jeggyel (mátrix formában), majd minden diákhoz írd ki a legjobb és legrosszabb jegyet! 
 +<sxh c> 
 +#include <stdio.h> 
 + 
 +#define N 4 
 +#define M 4 
 + 
 +typedef struct { 
 +    char nev[30]; 
 +    int jegyek[M]; 
 +} Diak; 
 + 
 +int main() { 
 +    Diak diakok[N] = { 
 +        {"Anna", {5, 4, 3, 5}}, 
 +        {"Bela", {2, 3, 4, 4}}, 
 +        {"Csilla", {5, 5, 5, 4}}, 
 +        {"David", {3, 2, 3, 2}} 
 +    }; 
 + 
 +    for (int i = 0; i < N; i++) { 
 +        int min = diakok[i].jegyek[0]; 
 +        int max = diakok[i].jegyek[0]; 
 +        for (int j = 1; j < M; j++) { 
 +            if (diakok[i].jegyek[j] < min) min = diakok[i].jegyek[j]; 
 +            if (diakok[i].jegyek[j] > max) max = diakok[i].jegyek[j]; 
 +        } 
 +        printf("%s: legjobb %d, legrosszabb %d\n", diakok[i].nev, max, min); 
 +    } 
 + 
 +    return 0; 
 +
 +</sxh> 
 + 
 +10. Készíts programot, ami két 3×3-as mátrixot ad össze és kiírja az eredményt. 
 +<sxh c> 
 +#include <stdio.h> 
 + 
 +#define N 3 
 + 
 +typedef struct { 
 +    int adat[N][N]; 
 +} Matrix; 
 + 
 +int main() { 
 +    Matrix A = {{{1,2,3},{4,5,6},{7,8,9}}}; 
 +    Matrix B = {{{9,8,7},{6,5,4},{3,2,1}}}; 
 +    Matrix C; // eredmény mátrix 
 + 
 +    // Mátrixok összeadása 
 +    for (int i = 0; i < N; i++) { 
 +        for (int j = 0; j < N; j++) { 
 +            C.adat[i][j] = A.adat[i][j] + B.adat[i][j]; 
 +        } 
 +    } 
 + 
 +    // Eredmény kiírása 
 +    printf("Eredmeny:\n"); 
 +    for (int i = 0; i < N; i++) { 
 +        for (int j = 0; j < N; j++) { 
 +            printf("%d ", C.adat[i][j]); 
 +        } 
 +        printf("\n"); 
 +    } 
 + 
 +    return 0; 
 +
 </sxh> </sxh>
tanszek/oktatas/szamitastechnika/strukturak.1761558292.txt.gz · Last modified: 2025/10/27 09:44 by szabom