Navhněte strukturu pro komplexní číslo a naprogramujte variadickou funkci pro výpočet sumy komplexních čísel využívají prvního přístupu k určení počtu volitelných argumentů.
Napište funkci
long double prumer(char* format, ...), která výpočítá
aritmetický průměr ze zadaných hodnot různých datových typů. Typy
předávaných hodnot jsou určeny pomocí parametru format,
který může tvořit libovolná posloupnost znaků odpovídající typům
následujících parametrů - i pro typ int,
d pro typ double a l pro long
double.
Naprogramujte vlastní verzi funkce printf, která s
podporou tiskových direktiv %i, %f a
%z, kde poslední direktiva vede k tisku zlomku. Při řešení
lze využít funkci printf.
Napište funkci
double* map(double (*fce)(double), double* input, int len),
která na hodnoty pole input aplikuje funkci
fce a vrátí pole výsledných hodnot. Velikost pole
input parametrem len.
Napište funkci
double akumulator(double (*fce)(double, double), double numbers[], int len),
která zpracuje pomocí předané funkce fce hodnoty z pole
numbers, jehož velikost je dána parametrem
len. Můžete předpokládat, že len je vždy
alespoň 2.
S použitím příkladu z kapitoly vytvořte funkci pro binární vyhledávání zlomků.
Do následujícího kódu doprogramujte generickou funkci pro třídění
a s její pomocí funkce pro třídění zlomků a short int.
(Můžete si doprogramovat libovolné pomocné funkce.) Je zakázáno použít
třídicí funkci ze standardní knihovny.
typedef struct
{
int numerator;
int denominator;
} Fraction;
typedef int compare_fn(void*, void*);
int compare_fraction(void *a, void *b)
{
// TODO
}
int compare_unsigned(void *a, void *b)
{
// TODO
}
void generic_sort(void *array, size_t n, size_t element_size, compare_fn* cmp)
{
// TODO
}
void fraction_sort(Fraction *array, int n)
{
// TODO
}
void unsigned_sort(unsigned int* array, int n)
{
// TODO
}