Anti-Santa banner
Pozor! Veškerý obsah se přesouvá na www.klusik.cz

Programování v jazyce C

Začátky s programováním

Konstanty


Než se pustíme do výkladu konstant v jazyce C, nejdříve si připomeňme, co to vůbec taková konstanta je a z čeho to všechno vlastně vychází. Podívejme se jen letmým pohledem do matematiky. Jaký je rozdíl mezi proměnnou a konstantou? Vezměme si např. matematickou rovnici:

x2 + x - 17 = 0

Nyní si rozložme tento výraz na proměnné a konstanty. Každý polynom můžeme zapsat ve tvaru:

A1xn + A2xn-1 + A3xn-2 + A4xn-3 + .... + An-1x1 + Anx0

Náš polynom (polynomem rozumíme cokoli, co je zapsané ve formátu, který jsem právě uvedl) tedy můžeme zapsat ve tvaru:

A1x2 + A2x1 + A3x0

a tedy celková rovnice by byla ve tvaru:

A1x2 + A2x1 + A3x0=0

kde konstanty A jsou [1, 1, -17]. Jsou to tedy čísla, která se během výpočtu nemění a vlastně mají jakousi "statickou" funkci - něco nám násobí, nebo se někam přičítají a podobně. Zato však proměnné se během výpočtu mění - např. v našem případě můžeme proměnnou x libovolně měnit na jakékoli hodnoty, avšak jen pro dvě konkrétní hodnoty je rovnice pravdivá. Zkráceně řečeno - konstanta je to, co se NEMĚNÍ a proměnná (již z názvu vyplývá) se MĚNÍ.
Nyní se obraťme zpět k programování. Stejně tak, jako v matematice i zde platí, že proměnná je měnitelná a konstanta nikoli. Jak to ale překladači sdělíme, že něco je proměnná a něco konstanta? Samozřejmě i na to pánové při vymýšlení jazyka nezapomněli a jde to velice jednoduše. Sledujme následující program (na konci bude opět celý rozebrán a vysvětlen):
#include <stdio.h>

#define X 150    //vsimneme si, ze zde NENI STREDNIK!!!!

int main()
{
  int a;

  a=7;
  printf("Hodnota promenne pred zmenou ");
  printf("je %d a hodnota konstanty je %d\n",a,X);

  a=12;
  printf("Hodnota promenne po zmene ");
  printf("je %d a konstantz je %d\n",a,X);

  return(0);

}
Možná nevidíte, že bych konstantu měnil - ono to totiž ani nejde - překladač by zahlásil chybu. Jak to překladač překládá napíšu za chvíli - poté, co vysvětlím jednotlivé části programu:
#include <stdio.h>
Známá to funkce na zavedení knihovny obsahující funkce pro standartní vstup a výstup.
#define X 150
Tímto jsme právě zavedli do paměti konstantu X o hodnotě 150.
int main();
{
}
Zavedení hlavní funkce (každý program musí obsahovat jednu).
int a;
a=7;

výpis hlášky:

Cislo je 7 a konstanta 150

a odentrování (viz. escape sekvence)

Dále je program snad jasný - nastavíme hodnotu a na 15 a výpis se opakuje. Znaky %d v textu jsou zástupné symboly pročísla v pořadí, v jakém je uvedeme za uvozovkami a středníkem - viz. náš příklad.

K čemu tedy používat konstanty, když se nedají změnit a můžu tam místo nich použít normální proměnnou? Tak například budeme vyrábět program na výpočet různých ploch a objemů a tam se neobejdeme bez čísla PÍ - 3.14.. atd. Psát pokaždé všude 3.14 je nepraktické, tak je vhodné si udělat proměnnou např. float pi=3.14; a pak počítat s ní. Nebo můžeme udělat konstantu PI. Je to teď jedno. Ale co když budeme vyrábět program na pomalý procesor (např. na 8086) a který bude provádět např. milióny operací během běhu programu? Zde již můžeme použít konstanty s velkou výhodou. Pokud totiž použijeme proměnné - program při naražení na proměnnou musí kouknout do paměti "co tam je" a s tím pak počítat. Ale pokud použijeme konstantu, nebude alokována žádná pamět na proměnnou, pouze při překladu překladač všechny konstanty nahradí jejich hodnotou - např. tedy místo všech PI narve 3.14 a pak program přeloží. jako bychom tam vlastně to 3.14 všude psali, ale on to udělá za nás. A to se samozřejmě projeví na efektivnosti programu - zvláště při velkém množství dat a pomalém procesoru.