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

Both sides previous revisionPrevious revision
Next revision
Previous revision
tanszek:oktatas:szamitastechnika:strukturak [2025/10/29 07:54] – [Struktúrák] szabomtanszek:oktatas:szamitastechnika:strukturak [2025/11/18 18:26] (current) knehez
Line 1: Line 1:
 ===== Struktúrák ===== ===== Struktúrák =====
  
-**Mi az a struktúra? +**Mi az a struktúra?** 
-**+
 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. 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. Ez hasonló az osztályhoz más nyelvekben, csak egyszerűbb, mert nincs benne metódus.
Line 13: Line 13:
  
 <sxh c> <sxh c>
 +struct Szemely {
 +    char nev[50];
 +    int eletkor;
 +    float magassag;
 +};
 +</sxh>
  
 +Ezután létrehozhatunk belőle változókat:
  
-===== Gyakorlás =====+<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 90: 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.1761724459.txt.gz · Last modified: 2025/10/29 07:54 by szabom