Matematické funkce

Všechny funkce nemusíte psát sami. K jazyku C patří knihovna hotových funkcí a některé z nich už jste použili: printf, strlen, toupper. Hlavičkový soubor math.h obsahuje funkce pro matematiku:

  • sqrt(x) vrátí druhou odmocninu x: sqrt(16) je 4.0.
  • pow(x, y) vrátí x na y-tou: pow(2, 10) je 1024.0.
  • round(x) zaokrouhlí x na nejbližší celé číslo: round(3.7) je 4.0. Polovina se zaokrouhluje směrem od nuly, takže round(2.5) je 3.0.
  • fabs(x) vrátí absolutní hodnotu x, tedy číslo bez znaménka minus: fabs(-3.5) je 3.5.

Fungují stejně jako funkce, které píšete vy: dostanou argumenty a vrátí hodnotu. Všechny čtyři vracejí double, a tak je vypisujte pomocí %f nebo %.2f. Abyste je mohli použít, přidejte na začátek programu vedle #include <stdio.h> ještě #include <math.h>:

#include <math.h>
#include <stdio.h>

int main(void) {
    printf("%.2f\n", sqrt(16));
    printf("%.2f\n", pow(2, 10));
    printf("%.2f\n", round(3.7));
    printf("%.2f\n", fabs(-3.5));
    return 0;
}

Tento program vypíše:

4.00
1024.00
4.00
3.50

Kdybyste je vypsali pomocí %d, program by se tady nepřeložil: format specifies type 'int' but the argument has type 'double'. A když zapomenete #include, program se také nepřeloží:

#include <stdio.h>

int main(void) {
    printf("%.2f\n", sqrt(16));
    return 0;
}
main.c:4:22: error: call to undeclared library function 'sqrt' with type 'double (double)'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
    4 |     printf("%.2f\n", sqrt(16));
      |                      ^
main.c:4:22: note: include the header <math.h> or explicitly provide a declaration for 'sqrt'
1 error generated.

První řádek už znáte: volání funkce, kterou překladač zatím nezná, tentokrát funkce z knihovny (library function). Řádek s note radí, co dělat: vložit hlavičkový soubor <math.h>, nebo funkci sqrt deklarovat sami. Teď je vidět, k čemu #include slouží: v math.h jsou prototypy těchto funkcí.

Pro absolutní hodnotu celého čísla je zvláštní funkce abs, a to v jiném hlavičkovém souboru: stdlib.h (standardní knihovna). Dostane i vrátí int, a tak ji vypíšete pomocí %d:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int rano = -5;
    int poledne = 3;
    printf("Změna: %d stupňů\n", abs(poledne - rano));
    printf("%d\n", abs(-7));
    return 0;
}

Tento program vypíše:

Změna: 8 stupňů
7

Pro celá čísla používejte abs a pro desetinná fabs: abs(-2.5) bez upozornění vrátí 2. A funkce z knihovny můžete volat i uvnitř svých vlastních funkcí. Přesně to teď uděláte.

Pokyny

Žebřík je opřený o zeď. Jeho horní konec je ve výšce vyska metrů a jeho spodní konec stojí vzdalenost metrů od zdi. Délka žebříku je druhá odmocnina z vyska * vyska + vzdalenost * vzdalenost (to je Pythagorova věta). Přidejte na začátek #include <math.h> a napište funkci delka_zebriku se dvěma parametry typu double, vyska a vzdalenost, která vrátí délku žebříku. Program pak vypíše Žebřík: 5.00 a Žebřík: 3.61.

Přidejte #include <stdlib.h> a napište funkci rozdil se dvěma parametry typu int, a a b, která vrátí, jak daleko od sebe ta dvě čísla jsou, vždy bez znaménka minus: abs(a - b). Na konci main, před return 0;, vypište rozdil(-5, 3) a potom rozdil(3, -5), pokaždé s popiskem Rozdíl:. Oba řádky budou Rozdíl: 8.

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

11/12