Obsah lekce:
Aby naše programy mohly řešit složitější matematické vzorce, pak je potřeba, aby uměly další matematické funkce jako mocnina či odmocnina. Ukážeme si funkce mocnina a odmocnina v programovacím jazyce C.
Poznámka: Abychom mohli následující funkce v programu použít, tak je třeba do našeho programu přidat hlavičkový soubor (někdy označovaný termínem "knihovna") math.h. Hlavičkový soubor je soubor, který obsahuje deklaraci dalších naprogramované funkce (například matematické), které (po vložení tohoto souboru) umí náš program použít (kdybychom do hlavičky programu potřebnou direktivu #include nevložili, pak by náš program funkce z tohoto hlavičkového souboru neznal a hlásil by chybu).
#include "stdafx.h";
#include <math.h>
int _tmain(int argc, _TCHAR* argv[])
{
...
return 0;
}
Pro výpočet funkce mocnina je v jazyce C k dispozici funkce pow (což je zkratka z anglického termínu pro mocninu - power). V referenční příručce jazyka C zjistíte toto:
double pow (double base, double exponent );
long double pow ( long double base, long double exponent );
float pow (float base, float exponent );
double pow (double base, int exponent );
long double pow (long double base, int exponent );
Raise to power.
Returns base raised to the power exponent.
Definice funkce říká, že se volá (použije v programu) příkazem pow, který má dva parametry:
Referenční příručka nám nabízí více variant zápisu – tyto varianty nám ukazují, jaký datový typ mohou mít vstupní hodnoty a jaký datový typ má výsledek.
Chceme-li tedy, aby náš program spočítal a vypsal například výraz a5, pak v programu napíšeme printf("%f", pow(a,5));
Pro výpočet funkce odmocnina je v k dispozici funkce sqrt (což je zkratka pro anglický termín square root - odmocnina). V referenční příručce zjistíte toto:
double sqrt (double x );
float sqrt (float x );
long double sqrt (long double x );
Compute square root.
Returns the square root of x.
Jak funkce mocnina, tak odmocnina již ke své funkčnosti potřebují obor reálných čísel. Je tedy nutné výsledky výpočtů vkládat do proměnných, které jsou daných datových typů (tj. float, double nebo long double).
Seznam těchto datových typů byl zmíněn v minulé lekci. Pro zopakování je však uveďme ještě jednou.
Datový typ |
Povolený zkrácený zápis |
Popis |
Rozsah |
Celočíselné datové typy se znaménkem |
|||
signed int |
int |
Celé číslo se znaménkem |
od - 2 147 483 648 |
signed short int |
short int nebo short |
Krátké celé číslo se znaménkem |
od - 32 768 |
signed long int |
long int nebo long |
Dlouhé celé číslo se znaménke, |
od - 2 147 483 648 |
signed char |
char |
Znak se znaménkem |
od - 128 |
Celočíselné datové typy bez znaménka |
|||
signed int |
|
Celé číslo bez znaménka |
od 0 |
signed short int |
signed short |
Krátké celé číslo bez znaménka |
od 0 |
signed long int |
signed long |
Dlouhé celé číslo bez znaménka |
od 0 |
signed char |
|
Znak bez znaménka |
od 0 |
Reálné datové typy |
|||
float |
|
Reálné číslo s jednoduchou přesností |
od 3.4×10-38 |
double |
|
Reálné číslo s dvojitou přesností |
od 1.7×10-308 |
long double |
|
Reálné číslo se zvýšenou přesností |
od 3.4×10-38 |
#include "stdafx.h"
#include <math.h>
int _tmain(int argc, _TCHAR* argv[])
{
float a, b, e;
printf("Zadejte prosim zaklad mocniny: ");
scanf("%f",&a);
printf("Zadejte prosim exponent mocniny: ");
scanf("%f",&e);
b = pow(a,e);
printf("Vyraz %f^%f = %f\n", a, e, b);
getchar();
return 0;
}
Pokud program spustíme, zjistíme, že se nám všechny výsledky zobrazují na 6 desetinných míst, což může být někdy nepraktické, proto ještě nastavíme počet zobrazovaných desetinných míst. Náš program proto takto upravíme:
#include "stdafx.h"
#include <math.h>
int _tmain(int argc, _TCHAR* argv[])
{
float a, b, e;
printf("Zadejte prosim zaklad mocniny: ");
scanf("%f",&a);
printf("Zadejte prosim exponent mocniny: ");
scanf("%f",&e);
b = pow(a,e);
printf("Vyraz %5.2f^%5.2f = %5.2f\n", a, e, b);
fflush(stdin);
getchar();
return 0;
}
Pokud nechceme definovat minimální počet znaků, ale pouze počet desetinných míst, je možné zápis %5.2f zápisem %.2f.
Pokud budeme potřebovat v jazyce C použít hodnotu pi, je možné ji nadefinovat jako konstantu. Pro definici konstanty se používá direktiva #define, která se uvádí na začátku programu, stejně jako v případě direktivy #include (kterou jsme již dříve použili pro vkládání hlavičkových souborů).
Pro definici konstanty použijeme následující zápis:
#define JMENO HODNOTA
Na výše uvedeném zápisu si můžeme všimnout dvou věcí: stejně jako u direktivy #include řádek nezakončujeme středníkem a u konstanty neuvádíme datový typ (zápis uvádíme ve tvaru "#define mezera jméno konstanty mezera hodnota).
Pro konstantu pí bude definice vypadat následovně (pozn. hodnotu uvádíme dle požadované přesnosti):
#define PI 3.14159
Napište program pro výpočet objemu koule a válce. Potřebné vzorce nalezněte na Internetu.
Napište program pro výpočet vzorce ax+by.