Felhasználói eszközök

Eszközök a webhelyen


tanszek:oktatas:muszaki_informatika:strukturak_c-ben

Különbségek

A kiválasztott változat és az aktuális verzió közötti különbségek a következők.

Összehasonlító nézet linkje

tanszek:oktatas:muszaki_informatika:strukturak_c-ben [2024/02/13 19:40]
knehez létrehozva
tanszek:oktatas:muszaki_informatika:strukturak_c-ben [2024/02/13 19:41] (aktuális)
knehez
Sor 1: Sor 1:
-==== Mátrixok használata ==== +**1. Feladat**: Olvasson be változó számú neveket ​és érdemjegyeket ​egy struktúrába és írassa ki az eredményt.
- +
-**1. feladat:** Adjunk össze két 3x3-as egész számokat tároló mátrix-ot ​és tároljunk le egy harmadikban ​az eredményt. Használjunk függvényt a mátrix elemeinek bekéréséhez+
  
 <sxh c> <sxh c>
-#include <​stdio.h>​+#​include<​stdio.h> ​ // printf() és scanf() miatt kell 
 +#​include<​stdlib.h>​ // malloc() miatt kell
  
-#define SIZE 3 // a matrix-ok merete +struct Kurzus
-void readMatrix(int m[][SIZE])+
 { {
-    ​for(int sor = 0sor < SIZE; sor++) +    ​char nev[30]
-    ​+    int jegy
-        for(int oszlop = 0oszlop < SIZE; oszlop++) +};
-        { +
-            scanf("​%d",​ &​m[sor][oszlop]); +
-        } +
-    } +
-}+
  
 int main() int main()
 { {
-    ​int A[SIZE][SIZE]// Matrix 1 +    ​struct Kurzus *ptr
-    int B[SIZE][SIZE]// Matrix 2 +    int i, db
-    ​int C[SIZE][SIZE]// eredmeny Matrix+    ​printf("​Hany hallgato van? "); 
 +    scanf("​%d",​ &db);
  
-    ​printf("Kerem az elso matrix elemeit: \n")+    ​ptr = (struct Kurzus*malloc ​(db * sizeof(struct Kurzus));
-    readMatrix(A); +
-    printf("Kerem az masodik matrix elemeit: \n")+
-    readMatrix(B);+
  
-    for(int sor = 0; sor SIZEsor++)+    for(= 0; db; ++i)
     {     {
-        ​for(int oszlop = 0oszlop < SIZE; oszlop++) +        ​printf("Kerem a nevet es a jegyet:​\n"​)
-        ​+        ​scanf("​%s %d", (ptr i)->nev, &ptr[i].jegy);
-            C[sor][oszlop] = A[sor][oszlop] ​B[sor][oszlop]; +
-        }+
     }     }
  
- +    ​printf("​Osszesen:​\n"​);​ 
-    ​printf("​\nMatrixok osszegeA+B = \n"​);​ +    for(= 0; db ; ++i)
-    for(int sor = 0; sor SIZEsor++)+
     {     {
-        ​for(int oszlop = 0; oszlop < SIZE; oszlop++) +        printf("​%s\t%d\n", ​ptr[i].nev, (ptr + i)->jegy);        ​
-        { +
-            ​printf("​%d ", ​C[sor][oszlop]); +
-        +
-        printf("​\n"​); ​ // soronkent uj sor+
     }     }
 } }
 </​sxh>​ </​sxh>​
  
-**2. feladat:** Az első feladatban a <sxh c>​readMatrix()<​/sxh> függvényt cseréljük le: <sxh c>void readMatrix(int ** m)</sxh> ​-ra és próbáljuk meg mi történik és magyarázzuk meg miért?  +**2. Feladat**: Láncolt lista: készítsünk egy //int szam//-ot tartalmazó struktúrát,​ ami tartalmaz egy mutatót egy önmagával megegyező típusra //next// néven.
- +
-**3. feladat:** Az első feladatban megadott feladatot oldjuk meg pointerekkel is.+
  
 <sxh c> <sxh c>
 #include <​stdio.h>​ #include <​stdio.h>​
- +struct Elem
-#define SIZE 3 // a matrix-ok merete +
-void readMatrix(int *m)+
 { {
-    ​for(int i = 0i < SIZE * SIZE; i++) +    int szam
-    ​+    ​struct Elem *next
-        scanf("​%d",​ (m + i)); +};
-    } +
-}+
  
 int main() int main()
 { {
-    int A[SIZE][SIZE];​ // Matrix 1 
-    int B[SIZE][SIZE];​ // Matrix 2 
  
-    printf("​Kerem az elso matrix elemeit: \n"); +} 
-    ​readMatrix(&​A[0][0]);​ +</​sxh>​
-    printf("​Kerem az masodik matrix elemeit: \n"​);​ +
-    readMatrix(&​B[0][0]);​+
  
-    int C[SIZE][SIZE];​ // eredmeny Matrix+**3. Feladat**: Láncolt lista: az előzőből hozzunk éltre két darabot dinamikusan,​ az első a másodikra mutasson.
  
-    for(int i = 0; i SIZE * SIZE; i++) +<sxh c> 
-    +#include <​stdio.h>​ 
-        ​*(&​C[0][0] + i) = *(&​A[0][0] + i) + *(&​B[0][0] + i)+#include <​stdlib.h>​ 
-    }+struct Elem 
 +
 +    int szam
 +    ​struct Elem *next; 
 +};
  
-    printf("​\nMatrixok osszege: A+B = \n"); +int main() 
-    ​for(int sor 0; sor < SIZE; sor+++{ 
-    ​+    ​struct Elem* e1 (struct Elem*malloc(sizeof(struct Elem)); 
-        for(int oszlop ​0; oszlop < SIZE; oszlop++) +    ​struct Elem* e2 (struct Elem*malloc(sizeof(struct Elem)); 
-        { +    // osszekotes első variacio 
-            printf("%d ", C[sor][oszlop]); +    ​e1->​next = &e2[0]; 
-        } +    ​// osszekotes 2. variacio 
-        ​printf("​\n"​) // soronkent uj sor +    ​e1[0].next = e2;
-    ​}+
 } }
 </​sxh>​ </​sxh>​
  
-**4. feladat:** Ellenőrizzükhogy a felhasználótól ​bekért 3x3-as mátrix felső háromszög típusú-e?+**4. Feladat**: Láncolt lista: Készítsünk egy függvénytami kiírja a lista összes elemét. Majd kérjünk be a felhasználótól ​tetszőleges számú dinamikusan létrehozott listaelemet.
  
 <sxh c> <sxh c>
 #include <​stdio.h>​ #include <​stdio.h>​
 +#include <​stdlib.h>​
  
-#define SIZE 3 // a matrix-ok merete +typedef struct Elem  ​// azért lett typedef, hogy kényelmes függvényparaméter lehessen
-void readMatrix(int m[][SIZE])+
 { {
-    ​for(int sor = 0sor < SIZEsor++)+    int szam; 
 +    struct Elem *next // a '​struct Elem' nem mas mint onmaga 
 +} Elem; 
 + 
 +void printList(Elem * head) 
 +
 +    Elem * current = head; 
 + 
 +    while (current != NULL)
     {     {
-        ​for(int oszlop = 0; oszlop < SIZE; oszlop++) +        ​printf("%d\n", ​current->​szam); 
-        { +        ​current = current->​next;​
-            scanf("​%d", ​&​m[sor][oszlop]); +
-        ​}+
     }     }
 } }
Sor 114: Sor 97:
 int main() int main()
 { {
-    int A[SIZE][SIZE];+    int db; 
 +    printf("​Hany elemet ad meg?"​);​ 
 +    scanf("​%d",​ &db);
  
-    ​printf("​Kerem a matrix elemeit: \n")+    ​Elem *last = NULL
-    ​readMatrix(A);​ +    ​Elem *first ​NULL
- +    for(int ​i=0; dbi++)
-    int felsoHaromszog ​1; +
-    // 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 ​sor = 0; sor SIZEsor++)+
     {     {
-        ​for(int oszlop ​0oszlop < SIZE; oszlop++)+        ​Elem* e = (Elem*) malloc(sizeof(Elem));​ 
 +        e->​next ​NULL // probaljuk ki úgy is, hogy ezt a sort kitoroljuk. Magyarazzuk meg miert tortenik? 
 +        if(last != NULL// ha nem az elsőt töltjük fel
         {         {
-            ​// +            ​last->next e;
-            // a foatlo alatti elemeknek 0-nak kell lenniuk +
-            // +
-            if(sor ​oszlop && A[sor][oszlop]!=0) +
-            { +
-                felsoHaromszog = 0; +
-            }+
         }         }
 +        else // ha az elsőt töltjük fel, az elsőt eltároljuk,​ mert e nélkül elveszne az első eleme a listának
 +        {
 +            first = e;
 +        }
 +        printf("​Kerem az %d.-t:",​ i);
 +        scanf("​%d",​ &​e->​szam);​
 +        last = e; // osszekotjuk a ket strukturat
     }     }
-    ​if(felsoHaromszog) +    ​printList(first);
-    { +
-        printf("​felso haromszog matrix"​);​ +
-    } +
-    else +
-    { +
-        printf("​nem felso haromszog"​); +
-    }+
 } }
 +</​sxh>​
  
 +**5. Feladat**: Értsük meg jobban a typedef használatát a _types.h kódrészlete alapján:
 +
 +<sxh c>
 +/* sys/​x86/​include/​_types.h in FreeBSD */
 +/* this is machine dependent */
 +#​ifdef ​ __LP64__
 +typedef unsigned long       ​__uint64_t;​
 +#else
 +__extension__
 +typedef unsigned long long  __uint64_t;
 +#endif
 +...
 +...
 +typedef __uint64_t ​ __size_t; ​  
 </​sxh>​ </​sxh>​
  
-**5. feladat:** Írjon C programot, ami meghatározza,​ hogy egy mátrix ritka mátrix-e? Egy ritka mátrix olyan mártix aminek legalább elemeinek a fele 0. +A fenti kódpélda az **//unsigned long long//** ot rövidíti ​**//​__size_t//​**-nek (64 bites rendszereken)A következő kódrészlet 3 féle struktúradefiníciót alkalmaz:
- +
-**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 <​stdio.h>​ #include <​stdio.h>​
 +#include <​stdlib.h>​
  
-#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
 { {
-    ​for(int sor = 0; sor < SIZEsor++) +    ​char *text
-    ​+    int count
-        for(int oszlop = 0oszlop < SIZE; oszlop++) +    ​struct elem_t *next/* itt meg nem lehet roviditeni */ 
-        { +Item;
-            scanf("​%d",​ &​m[sor][oszlop]); +
-        } +
-    } +
-}+
  
-int main()+/* normal struktura definicio */ 
 +struct item
 { {
-    ​int A[SIZE][SIZE]+    ​char *text
-    int E[SIZE][SIZE]+    int count
-    ​printf("​Kerem a matrix elemeit: \n")+    ​struct item *next
-    ​readMatrix(A);+};
  
-    ​// Hogyan jovunk ra a megoldasra? +/* 
-    // Transzpontalt matrix pelda: +* ez valojaban egy nevtelen struktura 
-    /+*
-    // 1 2 3    1 4 7 +struct 
-    // 4 5 6 => 2 5 8 +{ 
-    ​// 7 8 9    3 6 9 +    ​int i; 
-    // +    ​char c
-    // A matrix [i][j] elemét [j][i]-re kell cserelni +} nevtelen;
-    for(int sor = 0sor < SIZE; sor++) +
-    ​+
-        for(int oszlop = 0; oszlop < SIZEoszlop++) +
-        { +
-            E[sor][oszlop] = A[oszlop][sor]; +
-        } +
-    }+
  
-    for(int sor = 0; sor < SIZE; sor+++int main(void
-    +
-        ​for(int oszlop ​0oszlop < SIZEoszlop++) +    // mutato a "​struct item"​-re 
-        { +    struct item *pi (struct item *)malloc(sizeof(struct item));; 
-            ​printf("%d ", E[sor][oszlop]); +    ​pi->​count = 10; 
-        } + 
-        ​printf("​\n"​); +    // Roviditett hasznalata a "struct item_t"-nek 
-    ​}+    Item *iI = (Item *)malloc(sizeof(Item)); 
 +    ​iI->​count = 5; 
 +    ​iI->​next = iI; // onmagara mutat (csak a pelda kedveert) 
 + 
 +    // nevtelen structura 
 +    nevtelen.i = 9
 +    ​nevtelen.c = '​x';​
 } }
 </​sxh>​ </​sxh>​
  
-**7feladat:** Írjon C programot, ami összeszoroz két mátrixot.+**6Feladat**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 <​stdio.h>​ +Elem* pop(Elem *first)
- +
-#define MAX_SOR 3 +
-#define MAX_OSZLOP 3 +
-void readMatrix(int m[][MAX_OSZLOP])+
 { {
-    ​for(int sor 0sor < MAX_SOR; sor++) +    ​Elem *ret first->​next
-    ​+    ​free(first); 
-        for(int oszlop = 0; oszlop < MAX_OSZLOP; oszlop++) +    ​return ret;
-        { +
-            scanf("​%d",​ &​m[sor][oszlop]); +
-        } +
-    ​}+
 } }
 +</​sxh>​
  
-int main()+**7. Feladat**: A 4. példához készítsünk egy **//void sort(Elem*)//**, ami sorbarendezi növekvő sorrendbe a lista elemeit, az értékek módosításával. 
 + 
 +<sxh c> 
 +void sort(Elem *first)
 { {
-    ​int A[MAX_SOR][MAX_OSZLOP]+    ​Elem *e1, *e2
-    ​int B[MAX_SOR][MAX_OSZLOP]+    ​e1 = first
-    ​int C[MAX_SOR][MAX_OSZLOP];​ +    ​while(e1->next !NULL)
-    printf("Kerem az A matrix elemeit: \n"​);​ +
-    readMatrix(A);​ +
-    printf("​Kerem a B matrix elemeit: \n"​);​ +
-    readMatrix(B);​ +
- +
- +
-    for (int sor 0; sor < MAX_SOR; sor++)+
     {     {
-        ​for (int oszlop ​0oszlop < MAX_OSZLOP; oszlop++)+        ​e2 e1->next; 
 +        while(e2 != NULL)
         {         {
-            ​int sum = 0; +            ​if(e2->​szam ​e1->szam)
-            for (int i = 0; i MAX_OSZLOP; i++)+
             {             {
-                ​sum +(*(*(A + sor) + i)) * (*(*(B + i) + oszlop));+                ​int tmp e2->​szam;​ 
 +                e2->szam = e1->​szam;​ 
 +                e1->szam = tmp;
             }             }
-            ​*(*(C + sor) + oszlop) ​sum;+            ​e2 e2->next;
         }         }
 +        e1 = e1->​next;​
     }     }
 +}
 +</​sxh>​
  
  
-    for(int sor = 0; sor < MAX_SOR; sor++) 
-    { 
-        for(int oszlop = 0; oszlop < MAX_OSZLOP; oszlop++) 
-        { 
-            printf("​%d ", C[sor][oszlop]);​ 
-        } 
-        printf("​\n"​);​ 
-    } 
-} 
  
-</​sxh>​ 
- 
-**8. feladat:** Írja át az előző példában a sum += (*(*A + sor .... -t az egyszerűbb indexes A[i][j]- alakra! 
-<sxh c> 
-sum += A[sor][i] * B[i][oszlop];​ 
-</​sxh>​ 
  
  
tanszek/oktatas/muszaki_informatika/strukturak_c-ben.1707853256.txt.gz · Utolsó módosítás: 2024/02/13 19:40 szerkesztette: knehez