====== 5 - Strukturované datové typy ====== ===== Struktura - komplexní čísla ===== #include struct komplex { float re, im; }; typedef struct { float re, im; } complex; struct komplex soucet (struct komplex x, struct komplex y) { struct komplex ret; ret.re = x.re + y.re; ret.im = x.im + y.im; return ret; } struct komplex rozdil (struct komplex x, struct komplex y) { return (struct komplex){.re = x.re - y.re, .im = x.im - y.im}; } int main() { struct komplex a; // promenne datoveho typu struct komplex struct komplex b = {1.0, 2.0}; struct komplex c = { .im = 6.2, .re = 4.3}; a.re = 2.9; a.im = 3.14; printf("a = %.2f + j%.2f\n", a.re, a.im); printf("b = %.2f + j%.2f\n", b.re, b.im); printf("c = %.2f + j%.2f\n", c.re, c.im); c = (struct komplex){.re = 1.1, .im = 2.2}; // C99 printf("c = %.2f + j%.2f\n", c.re, c.im); c = soucet (a, b); printf("c = %.2f + j%.2f\n", c.re, c.im); a = rozdil (c, b); printf("a = %.2f + j%.2f\n", a.re, a.im); return 0; } ===== Union - rozklad float ===== #include union integer { unsigned int i; unsigned char c[4]; }; union flo { float f; struct { unsigned int mantisa:23; unsigned int exponent:8; unsigned int znamenko:1; } s; }; int main() { union integer x; x.i = 325; for (int i = 0; i < 4; i++) printf("%i ", x.c[i]); printf("\n"); union flo y; y.f = 0.15625; printf("mantisa: %x\n", y.s.mantisa); printf("exponent: %x\n", y.s.exponent); printf("znamenko: %x\n", y.s.znamenko); return 0; } ===== Pole - inicializace (1) ===== #include void tisk (int x[], int velikost, char nazev) { printf(" -- vypis pole %c -- \n", nazev); for (int i = 0; i < velikost; i++) { printf("[%i] = %i\n", i, x[i]); } } int main() { // neinicializovane pole velikosti 3 int a[3]; int b[3] = {0}; int c[] = {[7] = 110}; int d[4] = {[2] = 4}; for (int i = 0; i < 3; i++) { printf("a[%i] = %i\n", i, a[i]); } for (int i = 0; i < sizeof(b)/sizeof(int); i++) { printf("b[%i] = %i\n", i, b[i]); } tisk(b, sizeof(b)/sizeof(int), 'b'); tisk(c, sizeof(c)/sizeof(int), 'c'); tisk(d, sizeof(d)/sizeof(int), 'd'); return 0; } ===== Pole - inicializace (2) ===== #include void tisk (int x[], int velikost, char nazev) { printf(" -- vypis pole %c -- \n", nazev); for (int i = 0; i < velikost; i++) { printf("[%i] = %i\n", i, x[i]); } } int main() { int n, a; // velikost pole scanf ("%i", &n); int pole[n]; for (int i = 0; i < n; i++) { scanf("%i", &a); pole[i] = a; } tisk (pole, n, 'p'); return 0; }