Vítejte na našem webu, který je určen pro zelenáče. Na našem vebu můžete najít několik užitečných algoritmů.
Něco o algoritmech a jazyku C++ ve kterém jsou tyto algoritmy psány.
Algoritmus
Algoritmus je schematický postup pro řešení určitého druhu problémů, který je prováděn pomocí konečného množství přesně definovaných kroků. Ačkoliv se dnes tento pojem používá především v informatice a přírodních vědách obecně, tak je jeho působnost daleko širší (kuchyňské recepty, návody a postupy...). Samotné slovo algoritmus pochází ze jména perského matematika 9. století Abu Jafar Muhammada ibn Mūsā al-Chwārizmího, který ve svých dílech položil základy algebry (arabské číslice, řešení lineárních a kvadratických rovnic).
Historie pojmu algoritmus a jeho původ
Slovo algoritmus pochází ze jména významného perského matematika žijícího v první polovině 9. století (cca 780–840 n. l.), kterým byl Abū ‘Abd Allāh Muhammad ibn Mūsā al-Khwārizmī (أبو عبد الله محمد بن موسى الخوارزمي) (doslova „Otec Abdulláha, Mohameda, syn Mojžíšův, pocházející z města Khwārizm.“ Region Khwārizm se nachází jižně od Aralského moře). Tento učenec ve svém díle prakticky vytvořil systém arabských číslic a základy algebry (konkrétně metody řešení lineárních a kvadratických rovnic), jejíž název pochází přímo z titulu tohoto díla (Kitūb al-jabr waāl-muqūbala). Jeho jméno bylo do latiny převedeno jako algorismus, a původně znamenalo: „provádění aritmetiky pomocí arabských číslic.“
Postupem času se kvůli neznalosti původu slova jeho podoba měnila, záměnou arabského kořene s kořenem řeckého slova αριθμός (arithmos) se z algorismu stal algoritmus. (Později bylo v některých jazycích včetně češtiny th změněno na t, v katalánštině se vrátilo s.). Toto slovo se používalo jako označení různých matematických postupů. Slovo algoritmus v dnešním významu se používá až zhruba od 20. století.
Algoritmus bývá často definován jako: „přesný návod či postup, kterým lze vyřešit daný typ úlohy.“ Toto je sice na první pohled pravdivá, ale při bližším prozkoumání nepřesná definice. Například některé matematické postupy by této definici vyhovovaly, ale nejsou algoritmy. Přesné znění definice algoritmu zní: „Algoritmus je procedura proveditelnáTuringovým strojem.“
Turingův stroj je teoretický model počítače popsaný matematikem Alanem Turingem. Skládá se z procesorové jednotky, tvořené konečným automatem a programu ve tvaru pravidel přechodové funkce a potenciálně nekonečné pásky pro zápis mezivýsledků a vstupů dat.
Tímto končím historický a etymologický úvod a začínám se věnovat vlastnostem algoritmů.
Vlastnosti algoritmů:
Algoritmus obvykle pracuje s nějakými vstupy, veličinami, které jsou mu předány před započetím jeho provádění, nebo v průběhu jeho činnosti. Vstupy mají definované množiny hodnot, jichž mohou nabývat. Algoritmus má alespoň jeden výstup, veličinu, která je v požadovaném vztahu k zadaným vstupům, a tím tvoří odpověď na problém, který algoritmus řeší.
Algoritmus musí být:
- Konečný – Každý algoritmus musí skončit v konečném počtu kroků. Tento počet kroků může být libovolně velký (podle rozsahu a hodnot vstupních údajů), ale pro každý jednotlivý vstup musí být konečný. Postupy, které tuto podmínku nesplňují, se mohou nazývat výpočetní metody. Speciálním příkladem nekonečné výpočetní metody je reaktivní proces, který průběžně reaguje s okolním prostředím.
- Deterministický – Každý krok algoritmu musí být jednoznačně a přesně definován; v každé situaci musí být naprosto zřejmé, co a jak se má provést, jak má provádění algoritmu pokračovat. Protože běžný jazyk obvykle neposkytuje naprostou přesnost a jednoznačnost vyjadřování, byly pro zápis algoritmů navrženy programovací jazyky, ve kterých má každý příkaz jasně definovaný význam. Vyjádření výpočetní metody v programovacím jazyce se nazývá program.
- Efektivní – Obecně požadujeme, aby algoritmus byl efektivní, v tom smyslu, že požadujeme, aby každá operace požadovaná algoritmem, byla dostatečně jednoduchá na to, aby mohla být alespoň v principu provedena v konečném čase pouze s použitím tužky a papíru.
- Obecný – Algoritmus neřeší jeden konkrétní problém (např. „jak spočítat 3×7“), ale obecnou třídu obdobných problémů (např. „jak spočítat součin dvou celých čísel“).
- Rezultativní – Algoritmus při zadání vstupních dat vždy vrátí nějaký výsledek (může se jednat i jen o chybové hlášení).
Správnost algoritmu
Algoritmus je správný tehdy, když pro všechny údaje splňující vstupní podmínku se proces zastaví a výstupní údaje splňují výstupní podmínku. K ověření správnosti algoritmu nestačí vyzkoušet reakci algoritmu na konečný počet vstupních dat, i když se to tak v praxi často dělá a takové ověření o správnosti algoritmu leccos vypoví. Není ovšem dokázáno, že se algoritmus při neočekávané kombinaci vstupních dat nezhroutí. Pro ověřování správnosti algoritmu neexistuje univerzální metoda, algoritmus by měl být matematicky dokázán sledem předem známých kroků (operací), které nevyvratitelně vedou pro všechna přípustná data ke správnému výsledku úlohy. Je zřejmé, že takový algoritmus je pak korektním řešením úlohy. Algoritmus můžeme považovat za korektní, pokud není opomenuta žádná z možností zpracování dat při průchodu algoritmem. Algoritmus je částečně (parciálně) správný, právě když platí, že pokud skončí, vydá správný výsledek. K dokázání částečné správnosti výpočtu můžeme použít tzv. invariant – tvrzení, které platí po celou dobu výpočtu. Nutné je také ověřit konečnost algoritmu (pro všechna přípustná data algoritmus po konečném počtu kroků skončí).
Konečnost algoritmu
Konečnost algoritmu je často intuitivně zřejmá tím, že se pro vstupní data nemůže algoritmus zacyklit. Matematicky lze dokázat konečnost algoritmu takto: Pokud najdeme způsob, který každý stav výpočtu ohodnotí přirozeným číslem, a ukážeme, že provedením jednoho kroku algoritmu se tato hodnota zmenší, je jasné, že algoritmus po konečném počtu kroků skončí, neboť interval počtu průchodů algoritmem je konečný.
Druhy algoritmů
Algoritmy můžeme klasifikovat různými způsoby. Mezi důležité druhy algoritmů patří:
- Rekurzivní algoritmy, které využívají (volají) samy sebe.
- Hladové algoritmy se k řešení propracovávají po jednotlivých rozhodnutích, která, jakmile jsou jednou učiněna, už nejsou dále revidována.
- Algoritmy typu rozděl a panuj dělí problém na menší podproblémy, na něž se rekurzivně aplikují (až po triviální podproblémy, které lze vyřešit přímo), po čemž se dílčí řešení vhodným způsobem sloučí.
- Algoritmy dynamického programování pracují tak, že postupně řeší části problému od nejjednodušších po složitější s tím, že využívají výsledky již vyřešených jednodušších podproblémů. Mnoho úloh se řeší převedením na grafovou úlohu a aplikací příslušného grafového algoritmu.
- Pravděpodobnostní algoritmy (někdy též probabilistické) provádějí některá rozhodnutí náhodně či pseudonáhodně.
- V případě, že máme k dispozici více počítačů (procesorů nebo jader), můžeme úlohu mezi ně rozdělit, což nám umožní ji vyřešit rychleji; tomuto cíli se věnují paralelní algoritmy.
- Genetické algoritmy pracují na základě napodobování biologických evolučních procesů, postupným „pěstováním“ nejlepších řešení pomocí mutací a křížení. V genetickém programování se tento postup aplikuje přímo na algoritmy (resp. programy), které jsou zde chápany jako možná řešení daného problému.
- Heuristické algoritmy si za cíl nekladou nalézt přesné řešení, ale pouze nějaké vhodné přiblížení; používají se v situacích, kdy dostupné zdroje (např. čas) nepostačují na využití exaktních algoritmů (nebo pokud nejsou žádné vhodné exaktní algoritmy vůbec známy).
Přitom jeden algoritmus může patřit zároveň do více skupin; například může být zároveň rekurzivní a typu rozděl a panuj.
Reprezentace a zápis algoritmů:
- Slovním popisem – slovní popis v přirozeném jazyce
- Vývojovým diagramem (blokové schéma) – grafické znázornění algoritmu řešení úlohy jednotnými značkami a zkratkami (tento způsob kombinovaný se slovním popisem zde budu používat, tudíž přibude i článek na toto téma).
- Strukturogramy – používá obdobné symboly ale přesnější, tento systém přesně splňuje podmínky důležité pro strukturované programování
- Datově orientované diagramy HIPO – (z angl. Hierarchy plus Input- Process- Output), je grafickým vyjádřením funkčního členění problému, struktury dat a postupu řešení problému při různém stupni podrobnosti.
- Rozhodovací tabulky – používané při velmi složitých větveních.
Dalším kritériem pro algoritmy je jejich efektivita, respektive rychlost nebo naopak složitost. Složitost algoritmů je ovšem téma na celý článek a to hned na ten příští.
Zdroje:
- https://cs.wikipedia.org/wiki/Algoritmus
- https://ct.upce.cz/machalik/inf_II/napl_pred.htm
- https://www.studentske.sk/informatika/MO7_Algoritmus.htm
C++
C je programovací jazyk, který počátkem 70. let 20. století vyvinuli Ken Thompson a Dennis Ritchie pro potřeby operačního systému Unix. V současné době je to jeden z nejpopulárnějších jazyků, zřejmě nejčastější pro psaní systémového softwaru, ale velmi rozšířený i pro aplikace. C je nízkoúrovňový, kompilovaný, relativně minimalistický programovací jazyk. Je dostatečně mocný na většinu systémového programování (ovladače ajádro OS), přičemž zbytek lze dořešit tzv. inline assemblerem, tedy metodou zápisu assembleru přímo do kódu. Zdrojový kód C je přitom mnohem čitelnější než assembler, je jednodušší ho zapsat a navíc je snáze přenositelný na jiné architektury. Proto jsou často operační systémy,překladače, knihovny a interpretry vysokoúrovňových jazyků implementovány právě v C. Mnoho dalších moderních programovacích jazyků přebírá způsob zápisu (neboli syntaxi) z jazyka C, například Java, Perl a PHP.
Ukládání dat je v C řešeno třemi základními způsoby: statickou alokací paměti (při překladu), automatickou alokací paměti na zásobníku a dynamickou alokací na haldě (heap) pomocí knihovních funkcí. Jazyk disponuje jen minimální abstrakcí nad alokací: s pamětí se pracuje přes datový typ zvaný ukazatel, který drží odkaz na paměťový prostor daného typu proměnné, ale je na něm možné provádět aritmetické operace (tyto operace ale neoperují s ukazateli přímo na úrovni jednotlivých bajtů, nýbrž přihlíží k velikosti datového typu, na který ukazují – existují ale také ukazatele typu void *
, které mohou odkazovat na jakýkoliv typ dat uložený v paměti.). Ukazatele tedy existují nezávisle na proměnných, na které odkazují, a je na odpovědnosti programátora, aby neukazovaly na paměť nealokovanou.
Ukazatele jsou velmi mocným nástrojem, protože C jazyk povoluje ukazatele nejen na data, ale i na funkce. Současně jsou ukazatele z hlediska přenositelnosti a rizika zhroucení programu při jejich nesprávném použití Achillovou patou jazyka. Na druhou stranu programátor má plnou zodpovědnost za alokaci paměti, není zde tedy závislost na automatickém dealokátoru paměti (garbage collector). Jazyky Java a C#, oba odvozené od C, používají méně univerzální způsob odkazování alokovaných proměnných, který snižuje pravděpodobnost chyby v programu. JazykC++, původně rozšíření jazyka C, ovšem zodpovědnost programátora za alokaci zachoval.
Historie [editovat]
Počátky [editovat]
Vývoj jazyka C začal v Bellových laboratořích AT&T mezi léty 1969 a 1973. Ritchie tvrdí, že nejpřínosnější období bylo v roce 1972. Pojmenování „C“ zvolili, protože mnoho vlastností přebírali ze staršího jazyka zvaného „B“, jehož název byl zase odvozen od jazyka BCPL (ale to není jisté, neboť Thompson také vytvořil jazyk Bon na poctu své ženy Bonnie).
V roce 1973 se stal jazyk C dostatečně stabilním. Většina zdrojového kódu jádra Unixu, původně napsaného v assembleru PDP-11, byla přepsána do C. Unix tedy patří mezi první operační systémy, které byly napsané v jiném než strojovém jazyce či assembleru. Předchozí byl například systém Multics (napsaný v PL/I) a TRIPOS (napsaný v BCPL).
K&R C [editovat]
V roce 1978, Ritchie a Brian Kernighan vydali první vydání knihy The C Programming Language. Tato kniha, mezi programátory C známá jako „K&R“, sloužila po mnoho let jako neformálníspecifikace jazyka. Verze C, kterou takto popsali, bývá označována jako „K&R C“. (Druhé vydání knihy popisovalo novější standard ANSI C.)
K&R zavedli následující vlastnosti jazyka:
- datový typ
struct
- datový typ
long int
- datový typ
unsigned int
- Operátor
=+
byl změněn na+=
, a podobně (=+
mátl lexikální analyzér překladače C).
K&R C je považován za základní normu, kterou musejí obsahovat všechny překladače jazyka C. Ještě mnoho let po uvedení ANSI C to byl „nejmenší společný jmenovatel“, který využívali programátoři v jazyce C kvůli maximální přenositelnosti, protože zdaleka ne všechny překladače plně podporovaly ANSI C.
V několika letech následujících po uvedení K&R C bylo uvedeno a přidáno několik „neoficiálních“ vlastností jazyka, které byly podporovány překladači od AT&T a některých dalších dodavatelů. Změny zahrnují:
- datový typ
void *
a funkce vracejícívoid
- funkce vracející typ
struct
nebounion
- položky ve
struct
se ukládají do odděleného jmenného prostoru pro každýstruct
- modifikátor
const
- standardní knihovnu zahrnující většinu funkcí implementovaných různými dodavateli
- výčtový typ enumeration
- datový typ
float
ANSI C a ISO C [editovat]
V pozdních sedmdesátých letech začalo C nahrazovat BASIC jako přední programovací jazyk pro mikropočítače. Během osmdesátých let bylo přejato pro použití na platformě IBM PC a jeho popularita se značně zvýšila. Tou dobou Bjarne Stroustrup a další v Bellových laboratořích začali pracovat na rozšiřování C o objektově orientované prvky. Jazyk, který vytvořili, zvaný C++, je dnes nejrozšířenější programovací jazyk pro aplikace na Microsoft Windows; C zůstává stále populárnější ve světě Unixu.
V roce 1983 se American National Standards Institute (ANSI) dohodla na sestavení komise X3J11, aby vytvořila standardní specifikaci C. Po dlouhém a pracném procesu byl standard dokončen v roce 1989 a schválen jako ANSI X3.159-1989 „Programming Language C“. Tato verze jazyka je často stále označována jako ANSI C. V roce 1990 byl standard ANSI C (s drobnými změnami) adoptován institucí International Organization for Standardization (ISO) jako „ISO 9899|ISO/IEC 9899:1990“.
Jedním z cílů standardizačního procesu ANSI C byl vytvořit nadmnožinu K&R C zahrnující mnoho „neoficiálních vlastností“. Navíc standardizační komise přidala několik vlastností jako funkční prototypy (vypůjčené z C++) a schopnější preprocesor.
ANSI C je dnes podporováno téměř všemi rozšířenými překladači. Většina kódu psaného v současné době v C je založena na ANSI C. Jakýkoli program napsaný pouze ve standardním C je přeložitelný a spustitelný na jakékoli platformě, která odpovídá tomuto standardu. Nicméně mnoho programů se dá přeložit pouze na jedné platformě nebo jedním překladačem, kvůli použití nestandardních knihoven, např. pro grafiku, a také některé překladače v implicitním módu neodpovídají standardu ANSI C.
C99 [editovat]
Po standardizaci jazyka v roce 1989 se většina vývoje soustředila na jazyk C++. Přesto však na konci 90. let došlo k vydání dokumentu ISO 9899:1999 (obvykle nazývaný C99), který byl následně v březnu 2000 přijat i jako ANSI standard.
C99 představil několik nových vlastností, které byly mnohdy v překladačích už implementovány jako rozšíření:
- Inline funkce
- Proměnné mohou být deklarovány kdekoli (jako v C++), v C89 mohly být deklarovány pouze na začátku bloku
- Několik nových datových typů, včetně
long long int
(tj. 64 bitový integer),bool
(logický ano/ne typ) nebo typcomplex
určený na reprezentaci komplexních čísel. - Pole s nekonstantní velikostí
- Podpora pro zakomentování jednoho řádku
//
, tak jako v jazycích C++ nebo BCPL - Nové knihovní funkce, hlavně ve formě náhrady za funkce náchylné na přetečení na zásobníku, např.
snprintf()
- Nové hlavičkové soubory, např.
stdint.h
- Variadická makra (makra C preprocesoru s proměnným počtem argumentů)
- Klíčové slovo
restrict
, které v deklaraci ukazatele specifikuje, že na paměť odkazovanou tímto ukazatel nepřistupuje žádný jiný ukazatel (např.int* restrict foo;
), díky čemuž překladač může produkovat optimalizovanější kód; zajištění, aby tomu skutečně tak bylo, je na programátorovi (při nedodržení je chování programu nedefinované)
Standard C99 je v některých ohledech přísnější než původní standard C89; například je (až na výjimky) zakázáno přistupovat k paměti prostřednictvím ukazatele jiného typu, než pomocí jakého byla zapsána. Toto omezení poskytuje překladači prostor k lepší optimalizaci, ale může způsobit problémy s kompilací starších programů.
Žádný kompilátor zatím neobsahuje kompletní implementaci C99, přestože některé jsou poměrně blízko (GCC). Firmy jako Microsoft nebo Borland neprojevily velký zájem o implementaci C99, především kvůli tomu, že většinu nových vlastností poskytuje C++ a to často nekompatibilně s C99 (datový typ complex v C99 versus třída complex v C++).
„Hello, World!“ v C [editovat]
Následující jednoduchá aplikace vypíše „Hello, World!“ na standardní výstup (většinou obrazovku, ale může to být i do souboru nebo na jiné hardwarové zařízení nebo dokonce i bit bucket, což závisí na nastavení standardního výstupu v době spuštění programu). Jedna z verzí se poprvé objevila v K&R.
# includeint main(void) { printf("Hello, World!\n"); return 0; }
Charakteristika jazyka C [editovat]
Datové typy [editovat]
Programovací jazyk C má tyto datové typy:
- char – Používá se pro znaky
- int – Používá se pro celá čísla
- float – Používá se pro desetinné číslo s plovoucí řádovou čárkou
- double – Používá se pro desetinné číslo s plovoucí řádovou čárkou s dvojnásobnou přesností
- void – Používá se, pokud nepotřebujeme žádnou hodnotu (např. u funkcí)
Řídící příkazy [editovat]
Řídící příkazy určují průběh zpracovávání programu. Jako takové tvoří páteř programů.
if [editovat]
Příkaz if je jedním z příkazů jazyka C pro větvení programu (někdy nazývané také jako podmíněné příkazy). Jeho činnost je určena výsledkem testu podmínky, která je vyhodnocena jako pravdivá, nebo nepravdivá. Jednoduše řečeno, podmíněné činí rozhodnutí na základě vyhodnocení nějaké podmínky.
if (výraz) příkaz;
příklad:
/* Když je hodnota proměnné i rovna jedna, provede se vypsání textu. */ if (i==1) printf("\nHodnota promenne 'i' je jedna.");
if – else [editovat]
K příkazu if můžete přidat else. Pokud tak učiníte, tak programu řeknete, co má dělat, i pokud bude podmínka nepravdivá. Konstrukce poté může vypadat takto:
if (výraz) příkaz1; else příkaz2;
1. příklad:
/* Podle velikosti promenne j se provede prikaz vypisujici informace o jeji hodnote. */ if (j<3) printf("\nHodnota promenne j je mensi nez tri."); else printf("\nHodnota promenne j je vetsi nebo rovna trem.");
2. příklad:
# include/* Program, který ze tří celých čísel vybere největší. */ int nej(int a, int b, int c) { int vysl; if (a>b) { if (a>c) vysl = a; else vysl = c; } else { if (b>c) vysl = b; else vysl = c; } return(vysl); } int main() { int a; int b; int c; printf("Tento program vyhodnoti nejvyssi ze tri zadanych cisel.\n"); printf("Zadej prvni cislo:"); scanf("%d", &a); printf("Zadej druhe cislo:"); scanf("%d", &b); printf("Zadej treti cislo:"); scanf("%d", &c); printf("Nejvetsi cislo je: %d\n", nej(a,b,c)); return(0); }
switch [editovat]
Příkaz switch slouží k výběru jedné z několika větví programu, která se má provést v závislosti na nějaké celočíselné hodnotě. Jeho formát je následující:
switch (celočíselný výraz) { case hodnota1: příkazy1; break; case hodnota2: příkazy2; break; ... default: příkazy pro všechny ostatní případy; break; }
Podle hodnoty celočíselného výrazu se vybere jedna z větví case. Je-li hodnota výrazu rovna hodnotě1, provedou se příkazy1, je-li rovna hodnotě2, provedou se příkazy2, atd. Příkaz break na konci každé větve není povinný, ale pokud tam není, začne se po skončení větve provádět další větev v pořadí bez ohledu na hodnotu výrazu. Chceme-li tedy pro každou hodnotu provádět jedinou větev, je break nutný na konci každé větve kromě poslední. Větev default (je-li přítomna) se vykoná v případě, že hodnota výrazu není rovna ani jedné z hodnot uvedených za příkazy case. Obvykle se uvádí jako poslední, není to však vyžadováno.
Příklad
# define CZ 1 # define EN 2 # define DE 3 int jazyk; ... /* V zavislosti na hodnote promenne 'jazyk' se vypise pozdrav v ruznych jazycich. */ switch ( jazyk ) { case CZ: printf("\nNazdar svete!"); break; case EN: printf("\nHello world!"); break; case DE: printf("\nHallo Welt!"); break; default: /* Kdyz nezname jazyk, vypiseme text anglicky */ printf("\n(Language unknown => english)."); printf("\nHello world!"); break; }
Cyklus for [editovat]
Příkaz cyklu for je jedním ze tří příkazů cyklu v jazyku C. Umožňuje opakovat jeden, nebo více příkazů. Cyklus for je mnohými programátory v jazyku C považován za jeho nejpružnější příkaz. Cyklus for se používá pro zadaný počet opakování příkazu, nebo bloku příkazu. Jeho obecný formát pro opakování jednoho příkazu vypadá takto:
for (inicializace; test podmínky; inkrementace) příkaz;
Příklad:
/* Vypis druhych a tretich mocnin cisel 1 az 10 */ int i; ... /* - cyklus je zahajen s hodnotou i = 1, * - po provedeni tela cyklu se hodnota i zvysi o 1 (prikaz 'i++'), * - dokud je i mensi nebo rovno 10 dochazi k opakovanemu provadeni tela cyklu a prikazu 'i++' * - po provedeni cyklu s hodnotou i rovnou 10 se i zvysi na 11 (prikaz 'i++'), podminka i<=10 * se vyhodnoti jako nepravdiva a program pokracuje prikazy nasledujicimi za telem cyklu. */ for ( i=1; i<=10; i++ ) { printf("\nDruha mocnina cisla %d je %d.", i, i*i ); printf("\nTreti mocnina cisla %d je %d.", i, i*i*i ); }
Cyklus while [editovat]
Cyklus while je cyklus s podmínkou na začátku. Napřed se testuje podmínka, je-li platná, pak se provede tělo cyklu a znovu se testuje podmínka. Není-li platná, program pokračuje za cyklem. Není-li tedy podmínka platná při prvním příchodu na cyklus, neprovede se cyklus ani jednou. Jeho formát vypadá takto:
while (test podmínky) příkaz;
Příklad:
/* Vypis druhych a tretich mocnin od 1 do 10. */ int i; ... i = 1; while (i <= 10) { printf("\nDruha mocnina cisla %d je %d.", i, i*i); printf("\nTreti mocnina cisla %d je %d.", i, i*i*i); i++; }
Cyklus do-while [editovat]
Cyklus do-while je cyklus s podmínkou na konci. Napřed se provede tělo cyklu, pak se testuje podmínka. Je-li platná, cyklus se provede znovu. Není-li platná, program pokračuje za cyklem. Tento cyklus se tedy provede vždy nejméně jednou. Jeho formát vypadá takto:
do příkaz; while (test podmínky);
Příkazy break a continue [editovat]
Příkaz break slouží k okamžitému opuštění cyklu, bez ohledu na platnost podmínky. Příkaz continue slouží ke skoku na konec cyklu a znovu testování podmínky (v cyklu for skočí na inkrementaci, pak se znovu testuje podmínka, v cyklech while a do-while skočí na test podmínky). Jejich syntaxe je jednoduchá:
break;
continue;
Příklad:
/* Cyklus while(1) by byl normalne nekonecny, ale je ukoncen podminenym provedenim prikazu break. */ int i; ... i=1; while(1) { printf("\n%d na druhou je %d.", i, i*i ); i++; if( i > 10 ) { printf( "\nHodnota i je %d, padla.", i ); break; } }
Související články [editovat]
- C preprocesor
- Překladač
- Sada kompilátorů vytvořených v rámci projektu GNU
- Volatile
- Standardní knihovna jazyka C
Příbuzné jazyky [editovat]
Jazyky C++ a Objective-C vznikly jako odpověď na vlnu popularity objektově orientovaného programování (OOP) v 80. letech 20. století. Obě tato rozšíření jazyka C byla nejprve implementována ve formě preprocesoru, tedy zdrojový kód byl nejprve přeložen do C a poté zkompilován kompilátorem jazyka C. Kromě toho vzniklo velké množství jazyků, které sice s jazykem C nejsou příbuzné, ale které částečně přejaly syntaxi jazyka (Java, C#, D) nebo dokonce jména některých knihovních funkcí (PHP).
C++ [editovat]
Jazyk C++ je odvozen z jazyka C, není s ním ale úplně kompatibilní. Rozdíl, který způsobuje nejvíce problémů s kompilací je způsoben tím, že C++ definuje mnohem striktnější pravidla propřetypování datových typů. Kromě OOP implementuje C++ také generické a procedurální programování.
Objective-C [editovat]
Objective-C je odvozen z jazyků C a Smalltalk, přičemž s C je úplně kompatibilní (tedy je možné zkompilovat libovolný zdrojový text s překladačem Objective-C). Syntaxe týkající se preprocesoru, výrazů, deklarací funkcí a volání funkcí je odvozena z C, zatímco objektově orientované programování je odvozeno z jazyka Smalltalk.
Literatura [editovat]
- Brian W. Kernighan, Dennis M. Ritchie: The C Programming Language, Second Edition, Prentice-Hall, 1988, ISBN 0-13-110370-9
- Pavel Herout: Učebnice jazyka C, KOPP, 2004, IV. přepracované vydání, ISBN 80-7232-220-6
- Literatura k jazykům C a C++
Externí odkazy [editovat]
- Specifikace ANSI C (v angličtině)
- Skripta jazyka C (v češtině – autor: doc.Ing.Jiří Vogel,CSc., pro Fakultu strojní ČVUT)
- Seriál o jazycích C a C++ na linuxsoft.cz (v češtině – autor: Mgr.Jan Němec)
- Objasnění klíčového slova
restrict
v C99 (v angličtině)
V tomto článku byl použit překlad textu z článku C (programming language) na anglické Wikipedii.
Zdroje: