Algoritmizace a programování



Podobné dokumenty
Algoritmizace a programování

Výrazy lze též zavést v nečíselných oborech, pak konstanty označuji jeden určitý prvek a obor proměnné není množina čísel.

Funkce, intuitivní chápání složitosti

Základní stavební prvky algoritmu

Numerická integrace. 6. listopadu 2012

Rostislav Horčík. 13. října 2006

(k 1)x k + 1. pro k 1 a x = 0 pro k = 1.

Algoritmizace a programování

Úvod Petr Kropík viz:

Algoritmizace a programování

2.1. Pojem funkce a její vlastnosti. Reálná funkce f jedné reálné proměnné x je taková

Lineární algebra. Vektorové prostory

Definice z = f(x,y) vázané podmínkou g(x,y) = 0 jsou z geometrického hlediska lokálními extrémy prostorové křivky k, Obr Obr. 6.2.

Asymptoty grafu funkce

AMU1 Monitorování bezpečného života letounu (RYCHLÝ PŘEHLED)

Novinky v programu Majetek 2.06

Externí zařízení Uživatelská příručka

IRACIONÁLNÍ ROVNICE. x /() 2 (umocnění obou stran rovnice na druhou) 2x 4 9 /(-4) (ekvivalentní úpravy) Motivace: Teorie: Řešené úlohy:

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT. Cyklus while, do-while, dělitelnost, Euklidův algoritmus

Algoritmizace a programování

Želva se nachází v tzv. grafickém okně (zviditelníme ji klávesou +), v němž jsou vidět i čáry, které nakreslila.

Algoritmizace a programování

DUM 06 téma: Náležitosti výkresu sestavení

3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java

MS Word 2007 REVIZE DOKUMENTU A KOMENTÁŘE

3. Slimák lezl na strom 10m vysoký. Přes den vylezl 4m ale v noci vždycky sklouzl o 3m. Za kolik dní dosáhl vrcholu stromu?

Matrika otázky a odpovědi Vidimace částečné listiny. Ing. Markéta Hofschneiderová Eva Vepřková

2.6.4 Lineární lomené funkce s absolutní hodnotou

Elektrická měření 4: 4/ Osciloskop (blokové schéma, činnost bloků, zobrazení průběhu na stínítku )

Hotelová škola, Obchodní akademie a Střední průmyslová škola Teplice,Benešovo náměstí 1, příspěvková organizace

NÁVOD K OBSLUZE MODULU VIDEO 64 ===============================

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Vítězslav Bártl. prosinec 2013

Uložené procedury Úvod ulehčit správu zabezpečení rychleji

Stavební mechanika přednáška, 2. května 2016

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Ž Á D O S T O POSKYTNUTÍ NEINVESTIČNÍ DOTACE Z ROZPOČTU MORAVSKOSLEZSKÉHO KRAJE 2016/2017 OBECNÁ ČÁST

( ) ( ) Sčítání vektorů. Předpoklady: 7201

M-10. AU = astronomická jednotka = vzdálenost Země-Slunce = přibližně 150 mil. km. V následující tabulce je závislost doby

Žáci mají k dispozici pracovní list. Formou kolektivní diskuze a výkladu si osvojí grafickou minimalizaci zápisu logické funkce

Integrovaný Ekonomický Systém Zakázkový list - IES WIN 2006

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

PŘEDPISY V SOCIÁLNÍ OBLASTI TÝKAJÍCÍ SE SILNIČNÍ DOPRAVY nařízení (ES) č. 561/2006, směrnice 2006/22/ES, nařízení (EU) č. 165/2014

Základy počítačové grafiky

1) Vypočítej A) 32 B) 44 C) 48 D) 56. 2) Urči číslo, které se skrývá za A ve výpočtu: 8 5 A) 12 B) 13 C) 14 D) 15

Pokusy s kolem na hřídeli (experimenty s výpočty)

titul před titul za rodné číslo datum narození (nebylo-li přiděleno rodné číslo)

Jan Březina. Technical University of Liberec. 17. března 2015

Příprava na 1. čtvrtletní písemku pro třídu 1EB

1 Měření kapacity kondenzátorů

1.2.5 Reálná čísla I. Předpoklady:

Programování pro deskriptivní geometrii

Goniometrie trigonometrie

Algoritmizace a programování

EHLED OSV za rok 2015 vykonávajících pouze hlavní SV

Rozklad problému na podproblémy, rekurze

ALLEX FX Programovatelný logický automat. Katalogový list. říjen Programovatelné logické automaty

UŽITÍ DERIVACÍ, PRŮBĚH FUNKCE

VEŘEJNÁ NABÍDKA POZEMKŮ URČENÝCH K PRODEJI PODLE 7 ZÁKONA

Fyzikální praktikum 3 - úloha 7

Cílem kapitoly je seznámit studenta se strukturou programu a jeho překladem.

1 Matematické základy teorie obvodů

Rozklad problému na podproblémy, rekurze

Změnu DPH na kartách a v ceníku prací lze provést i v jednotlivých modulech.

Programovanie v jazyku C stromy

Školní kolo soutěže Mladý programátor 2016, kategorie A, B

Střední průmyslová škola a Vyšší odborná škola technická Brno, Sokolská 1. Podpora digitalizace a využití ICT na SPŠ CZ.1.07/1.5.00/34.

Vyhláška č. 294/2015 Sb., kterou se provádějí pravidla provozu na pozemních komunikacích

Business Contact Manager Správa kontaktů pro tisk štítků

Příručka pro práci s dataloggerem Labquest 2. Zapínání a domácí obrazovka

Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY

Název projektu: Spokojená škola Číslo projektu: OPVK.CZ.1.07/1.2.33/ Metodické pokyny k pracovnímu listu č. 1 Význam slov

-1- N á v r h ČÁST PRVNÍ OBECNÁ USTANOVENÍ. 1 Předmět úpravy

Databázovéa informačnísystémy NÁVRH IMPLEMENTACE 2 KONZISTENCE DATABÁZE

Katedra obecné elektrotechniky Fakulta elektrotechniky a informatiky, VŠB - TU Ostrava 16. ZÁKLADY LOGICKÉHO ŘÍZENÍ

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

Poruchy modul pro rychlé hlášení poruch z provozu.

Druhá mocnina. Druhá odmocnina Druhá odmocnina. Předpoklady: V této hodině jsou kalkulačky zakázány.

Česká zemědělská univerzita v Praze Fakulta provozně ekonomická. Obor veřejná správa a regionální rozvoj. Diplomová práce

Řeší parametry kaskády (obvodu složeného ze sériově řazených bloků)

Modul: Cvičebnice programování ISO - soustruh

1.7. Mechanické kmitání

2.8.8 Kvadratické nerovnice s parametrem

Sbírka úloh pro elektronickou stavebnici. Stručný popis programovacího jazyka Bascom AVR

účetních informací státu při přenosu účetního záznamu,

Jazyk C++ I. Šablony 3

Rovnice s neznámou pod odmocninou I

Vytvoření nebo odstranění makra Excel

INTERNETOVÝ TRH S POHLEDÁVKAMI. Uživatelská příručka

Adresace paměti. 11.přednáška

Posouzení únosnosti svaru se provádí podle zásad pružnosti a pevnosti v nebezpečném průřezu.

Lekce 2 LEGO Education (3,5 vyuč. hodiny)

Matematika pro 9. ročník základní školy

Struktura dat zasílaných provozovatelem distribuční soustavy pro účely vyúčtování služby distribuce elektřiny

CEFIF Založení a změna s. r. o. Obchodní rejstřík I

Rychlé vyrovnávací paměti (cache)

mísy na koření akční pole prostor pro karty koření 1 mlýnek na pepř

Novinky verzí SKLADNÍK 4.24 a 4.25

Data v počítači EIS MIS TPS. Informační systémy 2. Spojení: jan.skrbek@tul.cz tel.: Konzultace: úterý

SimOS. Jakub Doležal Radek Hlaváček Michael Očenášek Marek Reimer

Transkript:

Algoritmizace a programování Jazyk C funkce České vysoké učení technické Fakulta elektrotechnická A8B14ADP Algoritmizace a programovaní -Jazyk C -Ver.1.00 funkce J. Zděnek 20151 - černá (programová) skřínka pro určitý výpočetní úkon Známe - co počítá Nezajímá nás jak to počítá Má určené místo pro vstup informace se kterou metoda počítá vstup dat Má určené místo pro výstup zpracované informace výstup dat Princip umožňuje řešit složité úkoly rozkladem na jednodušší navzájem spolupracující části (metody) Vstup dat Metoda má jméno Známe co metoda počítá Nezajímá nás jak to počítá Výstup dat A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 2 J. Zděnek - 2011 1

bez vstupů nemusí mít vstup dat Má pouze výstup dat Např: Čtení hodnoty z klávesnice Výstupem funkce přečtená hodnota Čtení hodnoty z klávesnice Výstup dat = přečtená hodnota A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 3 bez výstupů nemusí mít výstup dat, pouze vykoná nějakou činnost Má pouze vstup dat Např: zobrazení hodnoty na obrazovce Vstupem funkce jméno a hodnota zobrazovaných dat Vstup dat = Jméno a hodnota toho co se má zobrazit Zobrazení jména a hodnoty dat na obrazovce A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 4 J. Zděnek - 2011 2

- vstupní a výstupní data může mít více vstupních dat může mít i více výstupních dat typu funkce má pouze jednu hodnotu výstupní Procedura je funkce, která má definovány vstupní hodnoty a svou činnost nemívá žádná výstupní data vždy pouze jednu výstupní hodnotu Procedura něco vykoná Procedura Procedura A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 5 typu funkce má pouze jednu hodnotu hodnotu funkce Funkci lze použít ve výrazu Např: y = 2*x + sin(x), y = 2*x + sin(x); sin(x) je funkce vždy pouze jednu výstupní hodnotu Sin(x) A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 6 J. Zděnek - 2011 3

Procedura Procedura je funkce, která má definovány vstupní hodnoty a svou činnost - nemívá žádná výstupní data Procedura ale může změnit Hodnotu nelokální proměnné nedoporučeno proč? Hodnoty proměnných, je-li vstupní hodnotou reference na proměnnou Proceduru nelze použít ve výrazu Procedura něco vykoná Procedura Procedura A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 7 a procedura vstupní data Pravidla pro zápis vstupních dat jsou pro funkci i pro proceduru stejná Pravidla pro zápis vstupních dat pro funkci i proceduru stejná Procedura Procedura A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 8 J. Zděnek - 2011 4

, rozklad na dílčí problémy Připomeňme si program pro výpočet faktoriálu: void main(int argc, char** argv) { int n, i, j; printf("zadejte přirozené číslo \n "); scanf("%d",&n); if (n < 1) { printf(n + " není přirozené číslo"); return; i = 1; f = 1; while (i < n) { i = i + 1; f = f * i; printf("n = %d, f! = %d", n, f); return; Čtení přirozeného čísla Algoritmus výpočtu faktoriálu Tisk výsledku Čtení přirozeného čísla, výpočet faktoriálu a tisk výsledku jsou tři dílčí podproblémy, jejichž řešení popíšeme samostatnými funkcemi A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 9 Řešení problému rozkladem na dílčí problémy ctiprirozene Předává se přečtené n faktorial Čtení přirozeného čísla Předává se vypočtený faktoriál Algoritmus výpočtu faktoriálu tiskvysledku Procedura Tisk výsledku A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 10 J. Zděnek - 2011 5

pro čtení přirozeného čísla Faktoriál pomocí funkcí (1) int ctiprirozene(void) { int n; printf("zadejte přirozené číslo"); scanf("%d",&n); if (n < 1) { printf("%d není přirozené číslo", n); exit(0); return n; Hlavička funkce int ctiprirozene(void) vyjadřuje, že funkce nemá parametry (prázdná závorka) a že výsledkem volání funkce je hodnota typu int Příkaz return n; předepisuje návrat z funkce, výsledkem volání je hodnota n Příklad volání funkce: nn = ctiprirozene(); A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 11 pro výpočet faktoriálu int faktorial(int n) { int i = 1; int f = 1; while (i < n) { i = i + 1; f = f * i; return f; Faktoriál pomocí funkcí (2) Hlavička funkce vyjadřuje, že funkce má jeden vstupní parametr typu int a že výsledkem je hodnota typu int Příklad volání funkce ff = faktorial(4); A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 12 J. Zděnek - 2011 6

Faktoriál pomocí funkcí (3) Procedura pro tisk výsledku výpočtu void tiskvysledku(int n, int f) { printf("n = %d, f! = %d",n,f); Hlavička vyjadřuje, že procedura má dva vstupní parametry (int, int). Procedura nevrací žádnou hodnotu (void). Příklad volání procedury tiskvysledku(n, f); A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 13 Výsledné řešení: #include <stdio.h> #include <stdlib.h> Faktoriál pomocí funkcí (4) void main(int argc, char** argv) { int n, fakt; n = ctiprirozene(); fakt = faktorial(n); tiskvysledku(n,fakt); int ctiprirozene() { int faktorial(int n) { void tiskvysledku(int n,int f){ A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 14 J. Zděnek - 2011 7

Deklarace funkce Deklaraci funkce tvoří hlavička funkce tělo funkce Hlavička funkce v jazyku C má tvar typ jméno(specifikace parametrů) kde typ je typ výsledku funkce (funkční hodnoty) jméno je identifikátor funkce specifikací parametrů se deklarují parametry funkce, každá deklarace má tvar typ_parametru jméno_parametru (a oddělují se čárkou) specifikace parametrů je prázdná, jde-li o funkci bez parametrů Tělo funkce je složený příkaz nebo blok, který se provede při volání funkce Tělo funkce musí končit příkazem return x; kde x je výraz, jehož hodnota je výsledkem volání funkce A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 15 Bloková struktura programu void main (String[] args) { int x = funkcea ( 35 ); funkcec ( x, c1 ); #include <stdio.h> #include <stdlib.h> extern funkceb(void); extern funkcec(void); int x1, x2=0, y=54; int funkcea (int x) { char s; s = funkceb ( );........ Začátek programu Konec programu char funkceb (void) { double d; d = funkced ( ); Fce v jiném modulu void funkcec (int r1, char c) { printf (..);......... #include <stdio.h> #include <stdlib.h> extern funkcea(void); A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 16 J. Zděnek - 2011 8

Struktura funkce/procedury Jméno funkce Typ návratové hodnoty Formální parametr(y) funkce double funkcea ( int x ) { const double MIN = 1000.0; double v = 1.0; int n; for( n=0; n<10; n++) { v = v * 4.5 + 305.9; if( v > MIN ) v = v - 255.6; return v ; Hlavička funkce Začátek funkce Lokální konstanty Lokální proměnné Kód funkce Návratová hodnota Zdrojový modul (soubor) Konec funkce A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 17 Vstupní parametry funkce Parametry funkce jsou lokální proměnné funkce, kterým se při volání funkce přiřadí hodnoty skutečných parametrů Jestliže parametr funkce je typu T, pak přípustným skutečným parametrem je výraz, jehož hodnotu lze přiřadit proměnné typu T (stejná podmínka, jako u přiřazení) Příklad: int max(int x, int y) { if (x > y) return x; else return y; void main(int argc, char** argv) { int a = 10, b = 20; printf("max = %d",max(a+20, b)); A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 18 J. Zděnek - 2011 9

Vstupní parametry funkce Vstupní parametry funkce slouží pro předání vstupních dat algoritmu, který je funkcí realizován Častá chyba začátečníka: funkce, která čte hodnoty parametrů pomocí operace vstupu dat (např. čtení klávesnice) int max(int x, int y) { scanf("%d",&x); // nesmyslný příkaz scanf("%d",&y); // nesmyslný příkaz if (x > y) return x; else return y; Nesmysl Proč? int z; z = max(7,99); A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 19 Hodnota funkce Typ návratové hodnoty se uvádí před názvem funkce Návratová hodnota (proměnná, výraz) se uvádí za příkazem return může vracet pouze jednu návratovou hodnotu Návratovou hodnotou může být i ukazatel (pointer) int max(int x, int y) { int maxhodnota = y; if (x > y) maxhodnota = x; return maxhodnota; max Návratová hodnota A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 20 J. Zděnek - 2011 10

Formální a skutečné parametry funkce void main(int argc, char** argv){ int a = 4; int b = 2; int m = max(a,b); printf("max = %d",m); m = max(b,6); printf("max = %d",m); int max(int x, int y) { int maxhodnota = y; if (x > y) maxhodnota = x; return x; Skutečné parametry Skutečné parametry obsahují aktuální předávaná data do metody Formální parametry Formální parametry umožní v těle metody popsat, jak má algoritmus zpracovat vstupní data Formální parametry jsou lokální proměnné A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 21 Příklad Výplata hotovosti (1) Výplata hotovosti (výčetka platidel) se odevzdává bance, uvádí vždy hodnotu bankovky a počet bankovek My budeme hledat takovou výčetku, která pro danou částku obsahuje celkově nejmenší počet bankovek Příklad: (pro jednoduchost uvažujme pouze bankovky 5000, 1000, 500 a 100 Kč) Částka = 38 900 bankovka (Kč) počet (ks) 5000 7 1000 3 500 1 100 4 A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 22 J. Zděnek - 2011 11

Příklad - Výplata hotovosti (2) void main(int argc, char** argv){ int plat,platx,p5000,p1000,p500,p100; prinf( Zadej plat = ); scanf( %d,&plat); platx = plat; p5000=plat/5000; plat=plat%5000; p1000=plat/1000; plat=plat%1000; pocet = plat/hodnbankovky; p500=plat/500; plat = plat%hodnbankovky; plat=plat%500; p100=plat/100; plat=plat%100; printf("vyplata castky %d je \n,platx); printf( %d \n%d \n%d \n%d \n,p5000,p1000,p500,p100); printf( zbytek %d \n,plat); A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 23 Výplata hotovosti s funkcí (3) int plat; void main(int argc, char** argv){ int p5000,p1000,p500,p100,platx; prinf( Zadej plat = ); scanf( %d,&plat); platx = plat; p5000 = pocetbankovek(5000); p1000 = pocetbankovek(1000); p500 = pocetbankovek(500); p100 = pocetbankovek(100); printf("vyplata castky %d je \n,platx); printf( %d \n%d \n%d \n%d \n,p5000,p1000,p500,p100); printf( zbytek %d \n,plat); int pocetbankovek(int hodnotabankovky){ int pocet; pocet = plat/hodnotabankovky; plat = plat%hodnotabankovky; return pocet; ; A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 24 J. Zděnek - 2011 12

Příklady funkcí pro zjištění, zda daný rok je přestupný void main(int argc, char** argv){ int rok; printf( Zadejte rok \n"); scanf( %d,&rok); printf("rok = %d \n,rok); if (prestupnyrok(rok)) printf( Je prestupny \n"); else printf( Neni prestupny \n"); int prestupnyrok(int rok){ if (rok%4 == 0 && (rok%100!= 0 rok%1000 == 0)) return true; else return false; return může metodu ukončit na více místech A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 25 pro výpočet NSD (1) Efektivní algoritmus lze sestavit na základě těchto vztahů: je-li x = y, pak nsd(x,y) = x je-li x > y, pak nsd(x,y) = nsd(x-y,y) je-li x < y, pak nsd(x,y) = nsd(x,y-x) Řešení 1: int nsd(int x, int y) { while (x!= y) if (x > y) x = x - y; else y = y - x; return x; int nsd(int x, int y) { int d; if (x<y) d=x; else d=y; while (x%d!=0 y%d!=0) d--; return d; void main(int argc, char** argv) { int a, b; scanf( %d,&a);scanf( %d,&b); printf( Nejv.spol.del.%d a %d je %d\n,a,b,nsd(a,b)); A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 26 J. Zděnek - 2011 13

pro výpočet NSD (2) Do těla cyklu vnoříme místo podmíněného příkazu pro jediné zmenšení hodnoty x nebo y dva cykly pro opakované zmenšení hodnot x a y Řešení 2: int nsd(int x, int y) { while(x!= y) { while(x > y) x = x-y; while(y > x) y = y-x; return x; void main(int argc, char** argv) { int a, b; scanf( %d,&a);scanf( %d,&b); printf( Nejv.spol.del.%d a %d je %d\n,a,b,nsd(a,b)); A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 27 Euklidův algoritmus pro výpočet NSD (3) Vnitřní cykly řešení 2 počítají nenulový zbytek po dělení většího čísla menším Pro výpočet zbytku po dělení máme operaci % Jejím využitím dostaneme Euklidův algoritmus, který lze slovně formulovat takto: určíme zbytek po dělení daných čísel, zbytkem dělíme dělitele a určíme nový zbytek, až dosáhneme nulového zbytku; poslední nenulový zbytek je nsd. Řešení 3: int nsd(int x, int y) { int zbytek; zbytek = x % y; while (zbytek!= 0) { x = y; y = zbytek; zbytek = x % y; return y; void main(int argc, char** argv) { int a, b; scanf( %d,&a);scanf( %d,&b); printf( Nejv.spol.del.%d a %d je %d\n,a,b,nsd(a,b)); A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 28 J. Zděnek - 2011 14

Procedury, jejíž typ výsledku je void, nevrací žádnou hodnotu, která nevrací žádnou hodnotu, se nazývá procedura Předávání vstupních dat do procedury se řídí stejnými pravidly jako u funkce Procedura může vracet vypočítané hodnoty (!) - způsob bude probrán v dalších lekcích. Příklady procedury: Hlavní funkce main Tisk na obrazovku printf( ) Příklad uživatelské procedury: Výpis znaku zn doplněného zleva mezerami na celkový počet n znaků void vypisznak(char zn, int n) { int i; for (i = 1; i < n; i++) printf( ); printf( %c \n,zn); A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 29 Statické proměnné Program může obsahovat deklarace statických proměnných Statické třídy jsou použitelné ve všech funkcích jsou to pro ně globální proměnné Příklad: int x, y; //Deklarovane mimo telo funkci void main(int argc, char** argv){ printf( Zadejte dvě celá čísla \n"); scanf( %d,&x); scanf( %d,&y); // printf( %d \n,i); // Nelze, i zde neznama vypissoucet(); void vypissoucet(void) { int i = 6; printf( Součet čísel je %d, i = %d \n,(x+y),i); Poznámka: statické proměnné jsou inicializovány hodnotou nula A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 30 J. Zděnek - 2011 15

Hvězdičky procedury (1) void hvezdickyln(int pocet){ int i; for(i = 1; i <= pocet; i++)printf( * ); printf( \n ); void hvezdicky(int pocet){ int i; for(i = 1; i <= pocet; i++)printf( * ); void mezeryln(int pocet){ int i; for(i = 1; i <= pocet; i++)printf( ); printf( \n ); void mezery(int pocet){ int i; for(i = 1; i <= pocet; i++)printf( ); A0B36PRI A8B14ADP PROGRAMOVÁNÍ Algoritmizace a programovaní 04 -Jazyk C - funkce 31 Hvězdičky procedury (2) void main(int argc, char** argv){ hvezdickyln(5); mezery(4); hvezdicky(10); mezeryln(0); hvezdickyln(5); ***** ********** ***** A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 32 J. Zděnek - 2011 16

Zastínění nelokální proměnné Deklarace lokální proměnné x zastíní deklaraci globální proměnné Příklad: int a = 10; void main(int argc, char** argv){ f(); printf( %d,a); Globální proměnná void f() { int a = 20; printf( %d,a); Program vypíše 20 10 Lokální proměnná, zastíní globální proměnnou stejného jména A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 33 Přidělování paměti proměnným Poznali jsme doposud dva druhy proměnných: globální proměnné lokální proměnné funkcí Přidělením paměti proměnné rozumíme určení adresy umístění proměnné v paměti počítače Globálním proměnným třídy se přidělí paměť v okamžiku, kdy se do paměti zavádí kód fprogramu, a zůstane jim přidělena až do ukončení běhu programu. Lokálním proměnným a parametrům funkce se paměť přidělí při každém volání funkce a zůstane jim přidělena jen do návratu z funkce ( při návratu z funkce se přidělené adresy uvolní pro další použití). Úseky paměti přidělované lokálním proměnným a parametrům tvoří tzv. zásobník (stack, LIFO): úseky se přidávají a odebírají, přičemž se vždy odebere naposledy přidaný úsek zásobník A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 34 J. Zděnek - 2011 17

Přidělování paměti proměnným Příklad void main(int argc, char** argv){ int a; // 1 f();... // 5 void f() { int b; // 2 g(10);... // 4 void g(int x) { int c; // 3... Proměnné v paměti b c x b a a a a a arg arg arg arg arg b krok 1 2 3 4 5 A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 35 Algoritmizace a programování Jazyk C funkce Konec České vysoké učení technické Fakulta elektrotechnická A8B14ADP Algoritmizace a programovaní -Jazyk C - funkce 36 J. Zděnek - 2011 18