Rozbor testu č.1 – nejčastější chyby
Čtěte pozorně zadání – každá část má bodové ohodnocení (je-li napsáno, že má být funkce, potom správný algoritmus v main nemůže získat body za definici a volání funkce).
Násobení (krát) má v C podobu „*“ ne „ . “ (tečka – ta je určena pro jiné mechanizmy)
Dávejte přednost typu double před float.
U cyklu
for(i=0;i<10;i++)
f(i);
se
inkrementace proměnné i, provede po skončení těla cyklu, tj. poprvé
se provede až po prvním volání funkce f(i). Po nesplnění podmínky se
už tělo neprovede.
Escape sekvence s číslem '\072' '\0' se převede na číslo mající danou hodnotu uvedenou za lomítkem (zde oktalově), takže '\0' se interpretuje jako hodnota 0 (nula).
Voláme-li funkce, které něco vypočtou a vrátí výsledek, je rozumné (nutné) výsledek někam uložit.
Při hledání minima (maxima) z více parametrů je dobré uvažovat i situaci, kdy minimální (maximální) hodnoty nabývá více parametrů.
Při volání funkce se uvádí typ u každé proměnné – správně je int funkce(int i, int j, int k) a ne int funkce(int i, j, k)
Pokud se má napsat prototyp k funkci, která je volána s konstantním parametrem (číslem) funkce1(2), funkce2(3.14), potom při psaní prototypu funkce, která by měla odpovídat tomuto volání, nejdříve určíme typ přímo dosazené proměnné (zde tedy int a double) a pro ten napíšeme prototyp funkce – int funkce(int aP) a int funkce2(double aP).
Pokud funkce počítá hodnoty, tak základním typem pro výpočty by měl být double (int pouze v situacích, kdy to vyplývá z typu úlohy a je to tedy odůvodnitelné – výpočet obvodu kruhu určitě v double, výpočet obvodu/plochy obdélníku v int v případě, že máme čtvercový rastr, který nikdy nebudeme chtít dělit (v budoucnu takový požadavek může přijít)).
Je-li funkce zapsána pouze pomocí hlavičky (bez těla), jedná se o
deklaraci, která patří do hlavičkového souboru. Má-li funkce tělo,
jedná se o definici a umístí se do zdrojového souboru (.c).
int
f2(int aI); // deklarace funkce – patří do hlavičkového souboru
– soubor.h
int f3(double aD) {} // definice funkce –
patří do zdrojového souboru – soubor.c
Do funkcí, které vykonávají nějakou činnost (která je opakovaná a hrozí tedy vícenásobné použití v budoucnosti) nedávat I/O operace (tisk, načítání) pokud to není nezbytně nutné. Použítím těchto operací se znemožní univerzální použití. Je lepší hodnoty načítat/tisknout mimo funkci. Funkce „pouze pracuje“ na základě parametrů (vstupních a výstupních) a tím je přenositelná a vícenásobně použitelná.
Při zápisu x = f(i) * j +c ; se nejprve vyhodnotí pravá strana (v přesnosti nejpřesnějšího typu – zde návratový typ funkce, j a c) a následně dojde ke konverzi na typ výsledku (zde typ proměnné x).
++bb a bb++ se liší tím, že v prvním případě se nejprve přičte jednička a výsledek se použije, zatímce ve druhém případě se nejdříve použije proměnné a potom se k ní přičte jednička.
Operátor ^ je XOR a ne mocnina. Pro mocniny nižších řádů se dá použít násobení (x * x * x), pro vyšší řády potom funce pow (power).
Pokud používáme konstantu (jako například Pí), potom je vhodné ho na jedniném místě nadefinovat (#define, konstantní proměnné) a jinde používat. Určitě není vhodné předávat Pí jako parametr do funkce, nebo ji v každém použití vypisovat znovu.
Poslední změna 2014-03-21