viteka32

Struktury

Oct 18th, 2021
920
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <math.h> // sqrt
  3.  
  4. // vytvoreni struktur pro vypocet kvadraticke rovnice
  5. typedef struct {
  6.     float a;
  7.     float b;
  8.     float c;
  9. } koefKvadRovnice;
  10.  
  11. typedef struct{
  12.     float realnaSlozka;
  13.     float imaginarniSlozka;
  14. } komplexniCislo;
  15.  
  16. typedef struct{
  17.     komplexniCislo koren1;
  18.     komplexniCislo koren2;
  19. } korenyKvadRovnice;
  20.  
  21. // deklarace a definice funkce
  22. void vypisKvadRovnice(koefKvadRovnice rovnice)
  23. {
  24.     printf("%fx^2 + (%fx) + (%f) = 0\n", rovnice.a, rovnice.b, rovnice.c);
  25. }
  26.  
  27. korenyKvadRovnice vypocetKvadRovnice(koefKvadRovnice rovnice)
  28. {
  29.     // b^2 - 4 * a * c
  30.     float D = rovnice.b * rovnice.b - (4 * rovnice.a * rovnice.c);
  31.     // 2 * a
  32.     float doubleA = 2 * rovnice.a;
  33.     korenyKvadRovnice vysledek;
  34.     // vypocet korenu kvadraticke rovnice
  35.     if(D > 0){
  36.         vysledek.koren1.imaginarniSlozka = 0;
  37.         vysledek.koren2.imaginarniSlozka = 0;
  38.         vysledek.koren1.realnaSlozka = (-rovnice.b + sqrt(D))/doubleA;
  39.         vysledek.koren2.realnaSlozka = (-rovnice.b - sqrt(D))/doubleA;
  40.     }else if(D < 0){
  41.         // dodelat
  42.     }else
  43.     {
  44.         // D == 0
  45.         // dodelat
  46.     }
  47.     // navrat vysledku z funkce
  48.     return vysledek;
  49. }
  50.  
  51. void vypisKorenu(korenyKvadRovnice koreny)
  52. {
  53.     if(fabs(koreny.koren1.imaginarniSlozka) > 0)
  54.     {
  55.         printf("r1 = %f + %fi\n"
  56.                "r2 = %f - %fi\n\n",
  57.                koreny.koren1.realnaSlozka,
  58.                fabs(koreny.koren1.imaginarniSlozka),
  59.                koreny.koren2.realnaSlozka,
  60.                fabs(koreny.koren2.imaginarniSlozka));
  61.     }else{
  62.         printf("r1 = %f\n"
  63.                "r2 = %f\n\n", koreny.koren1.realnaSlozka,
  64.                koreny.koren2.realnaSlozka);
  65.     }
  66. }
  67.  
  68. int main()
  69. {
  70.     koefKvadRovnice rovnice[3] = {{1, 7, 12}, {1, -10, 25}, {1, 1, 1}};
  71.     // naplneni pres jednotlive prvky struktury
  72.     rovnice[0].a = 1;
  73.     rovnice[0].b = 7;
  74.     rovnice[0].c = 12;
  75.  
  76.     // sizeof(rovnice)/sizeof(rovnice[0])
  77.     // size of vraci velikost operandu v bytech, vyraz v podmince cyklu provede
  78.     // 36 / 12 = 3
  79.     // koefKvadRovnice se sklada 3x float = 3*4 = 12
  80.     // pole rovnice je 3*12 = 36
  81.     for(int i = 0; i < sizeof(rovnice)/sizeof(koefKvadRovnice); i++)
  82.     {
  83.     // vypis rovnice do konzole
  84.     vypisKvadRovnice(rovnice[i]);
  85.     // vypocitani kvad rovnice
  86.     korenyKvadRovnice vysledek = vypocetKvadRovnice(rovnice[i]);
  87.     // vypsani korenu do konzole
  88.     vypisKorenu(vysledek);
  89.     }
  90.  
  91.     return 0;
  92. }
RAW Paste Data