====== 6 - Funkce, ukazatele, pole ======
===== 1. Ășloha =====
#include
int pole_nacteni (int *pole, int velikost)
{
for (int i = 0; i < velikost; i++)
{
if (scanf("%i", &pole[i]) != 1) return 1;
}
return 0;
}
void pole_tisk (int pole[], int velikost)
{
for (int i = 0; i < velikost; i++)
{
printf("%i ", *(pole + i));
}
printf("\n");
}
void pole_min_max (int *pole, int *min, int *max, int velikost)
{
*min = 1000;
*max = 0;
for (int i = 0; i < velikost; i++)
{
if (pole[i] > *max) *max = pole[i];
if (pole[i] < *min) *min = pole[i];
}
}
void pole_skalar (int *pole, int skalar, int velikost)
{
int a, b, s;
pole_min_max (pole, &a, &b, velikost);
for (int i = 0; i < velikost; i++)
{
s = pole[i] + skalar;
pole[i] = (s > b) ? a + (s - b) : s;
}
}
int main(void)
{
int N = 0, ret = 0;
int *n = &N;
if (scanf("%i", n) != 1)
{
fprintf(stderr, "chyba vstupu\n");
return 100;
}
if (N > 0)
{
int a[N];
if (pole_nacteni (a, N))
{
fprintf(stderr, "chyba nacitani\n");
return 101;
}
pole_tisk (a, N);
pole_skalar (a, 2, N);
pole_tisk(a, N);
}
else
{
fprintf(stderr, "pozadovano pole nulove delky\n");
return 102;
}
return 0;
}
===== 2. Ășloha =====
#include
typedef struct {float re, im;} komplex;
void swap1 (komplex *a, komplex *b)
{
komplex tmp = {.re = a->re, .im = a->im};
a = b;
b = tmp;
}
void swap2 (komplex *a, komplex *b)
{
a->re += b->re;
b->re = a->re - b->re;
a->re = a->re - b->re;
a->im += b->im;
b->im = a->im - b->im;
a->im = a->im - b->im;
}
void print (komplex a, char nazev)
{
printf ("%c = %.2f%+.2f\n", nazev, a.re, a.im);
}
int main(void)
{
komplex x = {.re = 2.2, .im = 3.3}, y = {0.0, 0.0};
printf ("-- pocatecni hodnoty promennych --\n");
print (x, 'x');
print (y, 'y');
printf ("-- swap 1 ------------------------\n");
swap1 (&x, &y);
print (x, 'x');
print (y, 'y');
printf ("-- swap 2 ------------------------\n");
swap2 (&x, &y);
print (x, 'x');
print (y, 'y');
return 0;
}