(strukturované programování v imperativním jazyce, datové a řídicí struktury programovacích jazyků, datové typy, procedury a funkce, bloková a modulární struktura programu)
Program je posloupnost příkazů, které jsou postupně prováděny:
příkaz 1;příkaz 2;…….;příkaz n;
Během provádění programu se počáteční stav počítače postupně modifikuje, dokud se nedosáhne cílového stavu. Jsou to většiny „běžných“ jazyků (Basic, Pascal, C, C++, Java…).
Označuje programovací techniku, kdy se implementovaný algoritmus rozděluje na dílčí úlohy, které se spojují v jeden celek. Každý celek se může skládat z menších bloků. Na nejnižší úrovni jsou bloky složeny z příkazů programovacího jazyka nebo volání funkcí. K implementaci v programu se používá řídících struktur.
Všechny příkazy se provedou postupně
Příkaz se provede v závislosti na splnění/nesplnění podmínky
if (podmínka) { //když podmínka splněna }else { //když podmínka nesplněna }
switch (n) { case 1 : case 2 : case 3 : ... break; case 4 : ... break; default: ... ; // tato vetev bude provedena pokud zadna podminka nevyhovuje, uvádí se na konci }
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 (tak jako 1,2 v našem příkladě).
V závislosti na splnění podmínky se část programu vykoná vícekrát
Existují tyto druhy cyklů:
„Elegantní“ způsob, jak naprogramovat nekonečný cyklus v jazyku C/C++/C# je použít for cyklus bez inicializace, podmínky i inkrementu:
for (;;) { //tělo cyklu }
while (true) { //tělo cyklu }
int i = 0; while ( i < 3 ) { // dokud i < 3 cout << i; // vypise hodnotu i i++; }
int i = 0; do { // opakuj cout << i; // vypise hodnotu i i++; }while (i < 3); // dokud je i < 3
for ( i=0; i < 3; i++ ) { //inicializátor; podmínka; inkrementace //tělo cyklu }
Společně s cykly bývají často používány příkazy:
Principiálně existují 2 druhy skoků:
v dnešní době se však už skoky používají jen výjimečně.
Hlavním cílem je zjednodušit a zpřehlednit program, který provádí operace s datovým typem. Jsou-li všechny komponenty dané struktury téhož typu, označujeme strukturu homogenní, v opačném případě heterogenní.
Rozdělení:
Datový typ definuje druh proměnných. Je určen oborem hodnot a zároveň typickými výpočetními operacemi, které lze s daty provádět.
Tři základní skupiny:
typedef struct { int vek; char *jmeno; enum { muz, zena } pohlavi; } Osoba;
Abstraktní datový typ je implementačně nezávislá specifikace struktury dat s operacemi povolenými na této struktuře.
Základní ADT jsou například:
Zabudované ADT Protože některé abstraktní datové typy jsou velmi užitečné a běžně používané, některé programovací jazyky používají tyto ADT jako primitivní datové typy, které jsou přidány do jejich knihoven. Například v Perlu je možné pole považovat za implementaci seznamu, standardní knihovny C++ a Javy zase nabízejí implementaci seznamu, zásobníku, fronty a řetězců.
Vlastnosti abstraktního datového typu Nejdůležitější vlastnosti abstraktního typu dat jsou:
Typy operací
Na abstraktním datovém typu rozlišujeme tři druhy operací: konstruktor, selektor a modifikátor. Operace, která ze zadaných parametrů vytváří novou hodnotu abstraktního datového typu, se nazývá konstruktor. Úkolem konstruktoru je sestavení platné vnitřní reprezentace hodnoty na základě dodaných parametrů. Operace označovaná jako selektor slouží k získání hodnot, které tvoří složky nebo vlastnosti konkrétní hodnoty abstraktního datového typu, a konečně operace typu modifikátor provádí změnu hodnoty datového typu.
Datový typ, který je možné parametrizovat jiným typem. V jazyce Pascal to může být např. typ pole s parametrem a jaké prvky budou v poli uloženy (např. array of char). Mnohem větší možnosti, jak parametrizovat typy, poskytuje systém šablon v C++ nebo generické typy uvedené v jazycích Java 5, či C# 2.0.
Genericita
Programovací jazyk podporuje genericitu, pokud umožňuje parametrizovat datové typy. Parametrizované datové typy se nazývají generické datové typy. Typickým příkladem zabudovaného generického typu je typ pole.
Deklaraci: Data = array [0 .. 4] of Real lze chápat jako parametrizaci typu array typem Real a intervalem 0 .. 4.
Tvoří posloupnost instrukcí, které potřebujeme v programu provádět na různých souborech dat, nebo na různých místech v programu. Procedura nebo funkce může být po deklaraci použita kdekoliv v následujícím bloku programu.
Rozdíl:
Funkce je operace, u které podle daného vstupu požadujeme určitý výstup. Vstupem rozumíme parametry a výstupem návratovou hodnotu.
int secti(int a, int b){ // funkce neco vraci return a+b; }
Volání funkce secti(1,1) vrátí hodnotu 2:
cout << secti(1,1) << endl;
Procedura má stejnou konstrukci jako funkce, s tím rozdílem, že nevrací žádnou hodnotu (nemá return). Místo návratového typu má „void“.
void pozdrav(){ // procedura nic nevraci cout << "ahoj" << endl; }
Volání této procedury nevrátí hodnotu, pouze na obrazovku vypíše ahoj:
pozdrav();
Blok je řídící struktura, která kromě příkazů obsahuje též deklarace (ty platí pouze v daném bloku). Deklarace provedené uvnitř bloku ztrácí mimo blok platnost. Blok má 2 části: deklarační a příkazovou. Bloky mohou být do sebe vnořovány, přičemž věc deklarovaná v bloku je viditelná ve vnořeném bloku také.
Modul je programová jednotka, která na rozdíl od bloku umožňuje, aby v ní deklarované proměnné a metody byly použitelné i v jiných modulech.
Skládá se ze dvou částí:
Příkladem modulu může být například knihovna v C.
Tuto otázku už jsem si vypracovával dřív a bohužel si nepamatuju, kde jsem čerpal, ale určitě minimálně ze stránek doktora Pitnera: Tomáš Pitner - Homepage.
Dále jsem našel článek o blokové a modulární struktuře programu s příklady v C, takže kdo chce vědět víc než jen vysvětlení těchto dvou struktur, ať se podívá sem.
Programování - WIKI Datové typy - WIKI Datová stuktura - WIKI Řídící sruktura - WIKI Bloková struktura programu Modulární struktura programu
Evoluce programovacích jazyků - tohle nakreslete a není co řešit A jak vyšité
Ludvík Vidlák, 98532 <99%> ICQ:235006787
Pokud má někdo nějaké připomínky, ať to hned upraví, nebo napíše do diskuze:-)
Díky
Diskuze
dal bych sem jeste i priklady, co myslite? Dle meho velka spousta lidi na FI programovani moc nerozumi.
urcite nebude od veci sem soupnout priklad:
- podminka, cykly
- procedura, funkce a jeji volani
- modularni vs blokova struktura
imho je uplne jedno v jakym programovacim jazyku
Tak jsem doplnil par prikladu temer ke vsemu a doplnil odkaz na stránky s blokovou a modulární strukturou programu s příklady. To jest vše z mé strany k této otázce
Zformatovali jsme priklady a pridali par drobnosti jako treba switch
Jj to je dobre na to jsem pozapomel. Diky
zislo by sa este doplnit cast „Datove typy“ o genericke dat.typy, heterogenne dat.typy (zaznam) a trochu to okecat…tiez by som trochu okecal kazdu cast, podobne ako je to na ceskej wiki, nech mam o com rozpravat :)
Hm, zo zápiskov predmetu Principy programovacích jazyků vyplýva, že bloková štruktúra a modulárna štruktúra jazyku sa líšia iba v tom, že v blokovej sa bloky môžu vnárať (v definícii funkcie v Pascale môžem definovať podfunkciu) a v modulárnej sa moduly vnárať nemôžu (v Céčku môžem definovať funkcie iba v najvyššom stupni zanorenia). To či premenné definované v bloku/module môžu využívať aj iné časti programu, to si myslím, nezáleží od modulárnej/blokovej povahy jazyka, alebo sa mýlim? Pascal má napríklad blokovú štruktúru. Potom pascalovská knižnica je modul? Trošku som z týchto pojmov zmätený, vedel by mi to niekto objasniť? Ďakujem…
Aha, me to nedalo a tak sem na to ted koukal jeste jednou a to co rikas ty je pravda. Ale tak nasel jsem i ty moje definice blokove/modularni struktury programu. Sice nevim presne kde, ale rekl bych ze v tech odkazech co tam jsou na blokovou a modularni strukturu je to napsany. Jsou to odkazy na modul student na CVUT v Praze tak si to tam snad nevymysleli ne? Bohuzel jsou ted tyto odkazy docasne mimo provoz
Ale kazdopadne uznavam ze mas pravdu i ty.
Tak ako keď to je takto nejednoznačné, tak si nemyslím, že by nám za to u štátnich utrhli hlavu, zvlášť ak je to v materiáloch nejakej inej univerzity definované inak. Ja som len bol zvedavý, či tu náhodou nie je niekto kto si je istý, že v tom má 100% jasno… :P
Casem doplnim genericke datove typy a abstraktni datovy typ
Tak hotovo, doplněno. +přidána ještě část heterogenní datové typy