Funkce s proměnným počtem parametrů

Slides:



Advertisements
Podobné prezentace
Standardní knihovní funkce pro práci s textovými řetězci
Advertisements

Programování v C jazyku - SEMINÁŘ
Počítače a programování 1 Přednáška 13 Jiří Šebesta.
Programovací jazyk C++
Třída SIMSET je druhou standardní systémovou třídou, která obsahuje prostředky pro práci se spojovými seznamy. KRUHOVÉ SPOJOVÉ SEZNAMY Spojový seznam –
Přednáška 11 Jiří Šebesta
Komunikace periférii.
Vytváření, použití dávkových souborů
Alg51 Rozklad problému na podproblémy Postupný návrh programu rozkladem problému na podproblémy –zadaný problém rozložíme na podproblémy –pro řešení podproblémů.
C++ Přednáška 3 Konstantní a statické členy tříd, ukazatel this, konstantní instance třídy Ing. Jiří Kulhánek , kat. 352, VŠB TU Ostrava 2004.
Preprocess Úvod do tvorby funkcí Princip preprocesoringu Direktivy preprocesoru Podmíněný překlad Základy tvorby funkcí Zjednodušený popis principu předávaní.
Programování v C++ Cvičení.
Principy překladačů Běhová podpora Jakub Yaghob. Běhová podpora Statická podpora jazyka Překladač Interface na knihovny Hlavičkové soubory Dynamická podpora.
J a v a Začínáme programovat Lucie Žoltá Přetěžování metod, rekurze.
8. přednáška typedef - preprocesor Studijní materiály najdete na adrese:
Procedury a funkce Základní charakteristika a použití v programu.
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci se soubory 13 Verze
FUNKCE V PHP. 2 FUNKCE JSOU V PODSTATĚ MALÉ KUSY SKRIPTŮ, KTERÉ JE MOŽNÉ OPAKOVANĚ POUŽÍVAT. Příklad
OSNOVA: a) Řetězce v C b) Funkce stdio.h pro řetězce c) Funkce string.h pro řetězce d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
C – strukturované příkazy
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
Algoritmy vyhledávání a řazení
Současný svět Projekt č. CZ /3. 1
Výrok „Počítač je pouze tak inteligentní jako jeho uživatel.“ (Radek Lochman, dnes)
A1PRG - Programování – Seminář Ing. Michal Ukazatele a pole 10 Verze
Ukázka odstranění rekurze Přemysl Tišer
Počítače a programování 1
JavaScript Podmínky, cykly a pole.
Příklady v jazyku C – část 3
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro vstup a výstup 12 Verze
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
IB111 Programování a algoritmizace
Jazyk XML Jazyk pro tvorbu strukturovaných dokumentů Syntaxí velmi podobný HTML Hlavní cíle návrhu: Snadná editace - jazyk je textový Snadné strojové zpracování.
Gymnázium prof. Jana Patočky Jindřišská Praha 1 „Praha & EU: Investujeme do vaší.
OSNOVA: a)Funkce – úvod b) Hlavičky funkcí c) Rekurze funkcí d)Knihovny funkcí e)Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Šesté cvičení Výjimky Balíky.
Pole Arrays.
A1PRG - Programování – Seminář Ing. Michal Řízení běhu programu 5 Verze
BINÁRNÍ STROM Vytvořte program, který bude vytvářet "binární strom". Každý prvek bude definován z klávesnice svým obsahem a dvěma dalšími proměnnými, které.
STRING A UKAZATELE. Co to je řetězec? Řetězec v Javě je samostatný objekt. Je konstantní, co znamená, že jednou vytvořený řetězec nelze změnit. Chceme-li.
C – jak na procedury Mgr. Lenka Švancarová. C – procedury #include int main() { printf("Ahoj\n"); return(0); } #include void pozdrav(void) { printf("Ahoj\n");
Příklady v jazyku C – část 8. Napište program, který inicializuje 2-rozměrné pole uživatele (5 řádků, 2 sloupce) a naplní ho hodnotami (první sloupec.
Vazby dynamických proměnných,databázové systémy Přednáška č. 10.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
C – procedury Mgr. Lenka Švancarová.
C – if Mgr. Lenka Švancarová. if vývojový diagram Podmínka Příkaz(y) Podmínka Příkaz(y) Úplné větveníNeúplné větvení ++--
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Funkce Přednáška č. 5. Funkce (functions)  posloupnost příkazů uvedená hlavičkou  využití – opakovaně volaná sekvence – strukturování programu – ošetření.
Programování OPERÁTOR SIZEOF, FUNKCE, POLE JAKO PARAMETRY FUNKCÍ ERIK KRÁL.
Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Programovací jazyk C++
Vzorové řešení zápočtového testu
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Struktury.
Programování 2. hodina RNDr. Jan Lánský, Ph.D.
Návrhový vzor Flyweight
Rekurze.
Programování v jazyce C++
Kurz algoritmizace a programování v jazyce C
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
Abstraktní datové typy
Řetězce (24) Funkce strchr: deklarována v: string.h
Oblast platnosti identifikátoru (1)
Opakování ze 3. cvičení deklarace proměnných výpis na monitor (výstup)
Union neboli sjednocení Bitová pole
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Transkript prezentace:

Funkce s proměnným počtem parametrů

proměnný počet parametrů se deklaruje pomocí tří teček jazyk C umožňuje programátorovi definovat vlastní funkce s proměnným počtem parametrů proměnný počet parametrů se deklaruje pomocí tří teček int maximum(n,…) povinné (pevné) parametry

funkci „musíme dát vědět“, kolik parametrů při konkrétním volání má, např. první parametr je povinný – počet parametrů jsou-li parametry číselné, stanovíme např., že poslední má hodnotu 0 aj. příklad: printf počet parametrů je dán počtem formátovacích specifikátorů % ve formátovacím řetězci

jak se dostaneme k dalším parametrům? parametry se v jazyce C ukládají na zásobník od posledního, tj. první parametr je na vrcholu zásobníku jak se dostaneme k dalším parametrům? přes ukazatele odvozené od adresy prvního parametru princip si ukážeme na funkci, která hledá maximum z n čísel; n je první povinný parametr funkce

Příklad funkce nesprávně napsané int maximum(int n,…) { int i; int max, hodn; int *prvy; prvy = &n+1; max = *prvy; for(i=1;i<n;i++) if ((hodn=*(prvy+i)) > max) max = hodn; return max; }

Co je na tom špatně? funkce bude pracovat správně pouze s čísly typu int a na procesorech Intel u procesorů Intel roste zásobník směrem dolů, tj. k parametrům pod vrcholem zásobníku přistoupím, přičítám-li hodnotu k ukazateli u jiných procesorů bych musel od ukazatele posuv odečítat řešení v knihovně stdarg.h jsou definována makra pro danou platformu

va_list je datový typ definovaný v knihovně void va_start(va_list ap, lastfix); type va_arg(va_list ap, type); void va_end(va_list ap); va_list je datový typ definovaný v knihovně ukazatel na void (vzdálený) va_start vrátí ukazatel na první nepovinný parametr, který následuje za posledním povinným poslední povinný je parametr makra lastfix ap je ukazatel na parametry typu va_list

va_arg vrací hodnotu aktuálního argumentu a posouvá ukazatel ap na další parametr va_end by mělo být voláno na konci funkce (implementačně závislé, např., nějaký „úklid“

Jak se to používá funkce deklaruje proměnnou typu va_list což je ukazatel voláním va_start jej inicializuje na hodnotu ukazující na první nepovinný parametr voláním va_arg vybírá cyklicky hodnotu jednotlivých parametrů zavolá makro va_end

int maximum(int n,…) { int i; int max, hodn; va_list ap; va_start(ap,n); max = va_arg(ap,int); for(i=1;i<n;i++) if ((hodn=va_arg(ap,int)) > max) max = hodn; va_end(ap); return max; }