Rekapitulace Funkce Pole
Funkce a Pole Základy algoritmizace a programování
Pˇrednáška 12. ˇríjna 2011
ZAPG
Rekapitulace Funkce Pole
Co už víme Algoritmus . . . . . . za nás poˇcítaˇc nevymyslí!
Program . . . Základní pˇríkazy jsou: pˇriˇrazení ˇ ˇ vetvení (podmínený) if (...) ...else ... cyklus (opakování) for...while ...do - while
ˇ v pˇríkazech se vyskytují promenné ˇ promenné mají jméno a hodnotu ˇ prozatím používáme jednoduché promenné bud’ celoˇcíselné nebo reálné.
ZAPG
Rekapitulace Funkce Pole
ˇ Oblast "viditelnosti" (platnosti) promenných ˇ Podle místa deklarace jsou promenné lokální nebo globální. ˇ Oblastí lokalizace je blok, ve kterém je promenná deklarována. ˇ v souboru ˇ Globální promenné jsou "videt" (od místa uvedení do konce souboru). ˇ Lokální promenné – od místa uvedení do konce funkce, ve které byly deklarovány. ˇ Globální promenné jsou implicitneˇ inicializovány nulou. ˇ Lokální promenné nejsou inicializovány, jejich hodnota je náhodná! ˇ Lokální promenné "zastíní" globální. int globalni,c; main(){ int a,b,c; ...c=2; globalni=c*2; ... } ZAPG
Rekapitulace Funkce Pole
Program v C
Program v C je množina funkcí, z nichž práveˇ jedna je main. /*Šablona programu:*/ /* poznámky*/ #include<stdio.h> /*použití funkcí z knihoven */ #define N 10 /* konstanty*/ ˇ int pocet; float b; /*globální promenné */ float f(float x) { /*funkce jiné než main */ return x*x; } /* hlavní program */ main() ˇ /*deklarace promenných */ { int a; float b; /*pˇ r íkazy */ a=1; b=3*a;}
ZAPG
Rekapitulace Funkce Pole
Úloha trojúhelník - formulace a postup ˇrešení Úloha trojúhelník - programujeme a testujeme
Funkce ˇ ˇ Deklarace funkce: hlavicka_funkce telo_funkce ˇ hlavicka_funkce: typ jméno ( seznam_parametru˚ ) typ: void, int, float ... typ návratové hodnoty seznam parametru: ˚ () nebo (void) ... žádné parametry (typ jmeno, typ jmeno) (int a, float b) ˇ ˇ telo_funkce: { deklarace_ promenných; pˇríkazy; } ˇ funkce je pˇríkaz return výraz ; V tele kde hodnota výrazu má typ návratové hodnoty. Volání funkce: jmeno_funkce (seznam_argumentu); ˚ za parametry se dosadí hodnoty v zadaném poˇradí Uvnitˇr funkce nesmí být deklarována jiná (lokální) funkce. ZAPG
Rekapitulace Funkce Pole
Úloha trojúhelník - formulace a postup ˇrešení Úloha trojúhelník - programujeme a testujeme
funkce main
hlaviˇcka: main () typ: neuveden ⇒ implicitneˇ typ int jméno: main prázdný seznam parametru: ˚ ˇ telo: { ...} nebo: void main (void) { ... return ; }
ZAPG
Rekapitulace Funkce Pole
Úloha trojúhelník - formulace a postup ˇrešení Úloha trojúhelník - programujeme a testujeme
K cˇ emu jsou funkce?
ˇ Delba práce ˇ Citelnost (srozumitelnost) programu ...
ZAPG
Rekapitulace Funkce Pole
Úloha trojúhelník - formulace a postup ˇrešení Úloha trojúhelník - programujeme a testujeme
Úloha trojúhelník
Jsou dána 3 cˇ ísla, která mají význam: délek 3 stran trojúhelníka (sss) délek 2 stran a velikosti úhlu jimi sevˇreného (sus) délky strany a velikosti pˇrilehlých 2 úhlu˚ (usu) Napište program, ve kterém budou urˇceny zbývající strany a ˇ kružnice opsané a polomer ˇ úhly, výšky, obvod, obsah, polomer kružnice vepsané.
ZAPG
Rekapitulace Funkce Pole
Úloha trojúhelník - formulace a postup ˇrešení Úloha trojúhelník - programujeme a testujeme
Jak postupovat? Jak se to poˇcítá? . . . potˇrebujeme vzoreˇcky Co mám (vstupní data) a co chci vypoˇcítat? sss: dáno: a,b,c sus: dáno: a, b, γ usu: dáno: α, β, c
vypoˇcítat: α, β, γ, v_a,v_b,v_c, S,o,r,ρ vypoˇcítat: α, β, c, v_a,v_b,v_c, S,o,r,ρ vypoˇcítat: a, b, γ, v_a,v_b,v_c, S,o,r,ρ
Mám 3 ruzné ˚ možnosti zadání: pro každý typ zadání napíšu funkci! Všechny údaje o trojúhelníku (a, b, c, α, β, γ, v_a,v_b,v_c, S,o,r,ρ ) ˇ budou uloženy v globálních promenných. Pˇredstavím si, jak bude program pracovat.
ZAPG
Rekapitulace Funkce Pole
Úloha trojúhelník - formulace a postup ˇrešení Úloha trojúhelník - programujeme a testujeme
Scénáˇre 1
2
3
program: Jakou úlohu rˇešíme? ˇ "hloupého". uživatel: sss, sus, usu, žádnou, nebo neco program: pˇrejde do jednoho ze stavu: ˚ "sss", "sus", "usu", "nic" nebo "chyba". program je ve stavu:
nic : program skonˇcí chyba : program: "na to nejsem, odcházím" a pˇrejde k bodu 1. sss,sus,usu : program: zadej vstupní data uživatel: zadá vstupní data 4
5 6 7
ˇ rí, zda jsou údaje korektní program: oveˇ bud’ pokraˇcuje, nebo pˇrejde do stavu "chyba". program: provede výpoˇcet ˇ výsledky nebo upozorní na chybu program: sdelí program: vrátí se k bodu 1. ZAPG
Rekapitulace Funkce Pole
Úloha trojúhelník - formulace a postup ˇrešení Úloha trojúhelník - programujeme a testujeme
ˇ ("delba ˇ Upˇresnení práce")
main : komunikace s uživatelem (zadání dat a tisk výsledku) ˚ ˇ stavu", tj. volání funkcí . a "zmenu nic : program skonˇcí ˇ špatneˇ chyba : funkce oznam(chyba) bude oznamovat, že je neco výpoˇcty : funkce sss, sus a usu budou pˇredpokládat, že ˇ v globálních promenných mají potˇrebné hodnoty, ˇ rí, zda jsou verohodné, ˇ oveˇ a bud’ neprovedou výpoˇcet, ale vrátí "ˇcíslo chyby" nebo se pustí do výpoˇctu, ˇ pˇri kterém výsledky uloží do globálních promenných
ZAPG
Rekapitulace Funkce Pole
Úloha trojúhelník - formulace a postup ˇrešení Úloha trojúhelník - programujeme a testujeme
V jakém poˇradí
1
napíšeme funkci main a otestujeme
2
postupneˇ upravujeme funkci oznam (pˇridáváme možné druhy chyb)
3
napíšeme jednu z funkcí, které realizují výpoˇcet
4
ˇ ríme (otestujeme) oveˇ
5
napíšeme druhou a tˇretí
ZAPG
Rekapitulace Funkce Pole
Úloha trojúhelník - formulace a postup ˇrešení Úloha trojúhelník - programujeme a testujeme
Funkce main a její okolí
#include<stdio.h> #include<math.h> float a,b,c,alha, beta, gamma; float v_a,v_b,v_c, S, o, r, rho; void oznam(int chyba){/*pozdeji*/ return;}; int sss(){/*pozdeji*/ return 0;}; int sus(){/*pozdeji*/ return 0;}; int usu(){/*pozdeji*/ return 0; }; main() {/*hned*/ };
ZAPG
Rekapitulace Funkce Pole
Úloha trojúhelník - formulace a postup ˇrešení Úloha trojúhelník - programujeme a testujeme
Programujeme (funkce main) main() { int uloha,chyba; do { /* uloha: bude zadano 0,1,2,3 nebo jine*/ switch(uloha){ case 0:chyba=0; break; /*pripadne return 0;*/ case 1:/*zadej data*/ chyba=sss(); break; case 2:/*zadej data*/ chyba=sus();break; case 3:/*zadej data*/ chyba=usu(); break; default:chyba = 1; }/*konec switch*/ if(chyba) oznam(chyba); else /*tiskni vysledky*/ ;}/*konec do-while*/ while(uloha);/* while(uloha !=0)*/ }/*konec main*/ ZAPG
Rekapitulace Funkce Pole
Úloha trojúhelník - formulace a postup ˇrešení Úloha trojúhelník - programujeme a testujeme
Programujeme (funkce main) main() { int uloha,chyba; do { printf("Uloha: 0:nic, 1:sss, 2:sus, 3:usu"); scanf("%d",&uloha); switch(uloha){ case 0:chyba=0; break; /*pripadne return 0;*/ case 1:/*zadej data*/ chyba=sss(); break; case 2:/*zadej data*/ chyba=sus();break; case 3:/*zadej data*/ chyba=usu(); break; default:chyba = 1; }/*konec switch*/ if(chyba) oznam(chyba); else /*tiskni vysledky*/ ;}/*konec do-while*/ while(uloha);/* while(uloha !=0)*/ }/*konec main*/ ZAPG
Rekapitulace Funkce Pole
Úloha trojúhelník - formulace a postup ˇrešení Úloha trojúhelník - programujeme a testujeme
ˇ Doplnujeme funkci oznam
void oznam (int chyba) { switch(chyba) { case 1: printf("Takovou ulohu neresim\n"); break; default: printf("Takovou chybu neznam\n"); }/*konec switch*/ return; }/*konec funkce*/
ZAPG
Rekapitulace Funkce Pole
Úloha trojúhelník - formulace a postup ˇrešení Úloha trojúhelník - programujeme a testujeme
Testujeme funkci main
1. 2. 3.
zadáme úloha 9 0 1
4. 5.
2 3
zadáme strany, úhly
1,1,1
oˇcekáváme ˇ úlohy oznámení o chybném výberu vytisknuté výsledky (všechny nulové) vytisknuté výsledky: nulové, které jsme nezadali + zadané hodnoty
ZAPG
Rekapitulace Funkce Pole
Úloha trojúhelník - formulace a postup ˇrešení Úloha trojúhelník - programujeme a testujeme
Z jakých údaju˚ lze sestrojit trojúhelník?
Strany (a,b,c) musí být kladná cˇ ísla. Úhly zadáváme bud’ ve stupních (a potom v programu pˇrevádíme na radiány) nebo v radiánech. Pro stupneˇ musí platit: úhel ∈ (0, 180), pro radiány: úhel ∈ (0, π). ˇ Pro úlohu sss musí délky stran splnovat trojúhelníkovou nerovnost. a + b < c ∧ |a − b| > c.
ZAPG
Rekapitulace Funkce Pole
Úloha trojúhelník - formulace a postup ˇrešení Úloha trojúhelník - programujeme a testujeme
Programujeme kontrolu dat sss: int ok; ok=(a > 0&&b > 0&&c > 0); ok = ok&&(a + b) > c&&fabs(a − b) < c); ˇ ˇ že došlo k /* v promenné ok bude 0 ("false") v pˇrípade, ˇ asponˇ jedné z podmínek */ nesplnení
if(! ok) return 2 ; /* data nesprávná, výpoˇcet se nekoná */ /*zde bude výpoˇcet */ sus: int ok; ok=(a > 0&&b > 0); ok = ok&& gamma >0 && gamma < 180; if(! ok) return 2; /*zde bude výpoˇcet */ usu: int ok; ok=c>0; ok=ok && alpha>0 && alpha < 180 ; ok = ok && beta >0 && beta < 180 ; if (!ok) return 2; /*zde bude výpoˇcet */ ZAPG
Rekapitulace Funkce Pole
Úloha trojúhelník - formulace a postup ˇrešení Úloha trojúhelník - programujeme a testujeme
Testujeme nesprávná data Doplníme funkci oznam: void oznam (int chyba) { switch(chyba) { case 1: printf("Takovou ulohu neresim\n"); break; case 2: printf("Ze zadanych udaju neumim sestrojit trojuhelnik"); break; default: printf("Takovou chybu neznam\n"); }/*konec switch*/ return; }/*konec funkce*/ Zadáváme všechny možné pˇrípady chyb! ZAPG
Rekapitulace Funkce Pole
Úloha trojúhelník - formulace a postup ˇrešení Úloha trojúhelník - programujeme a testujeme
Potˇrebujeme vzoreˇcky. . . umíme je najít Vzorce pro obecný trojúhelník obvod o =a+b+c a obsah S = a·v 2 1 q S = 2 ab sin γ S=
ˇ kružnice opsané polomer ˇ kružnice vepsané polomer ˇ kosinová veta ˇ sinová veta
o o 2(2
− a)( o2 − b)( o2 − c)
r = abc 4S a r = 2 sin α 2S ρ= o a2 = b2 + c 2 − 2bc cos α a b c sin α = sin β = sin γ = 2r
Pˇrevod stupnˇ u˚ na radiány a naopak:(π radiánu˚ = 180 stupnˇ u) ˚ a stupnˇ u˚ = a radiánu˚ · 180 π π b radiánu˚ = b stupnˇ u· ˚ 180 . ZAPG
Rekapitulace Funkce Pole
Úloha trojúhelník - formulace a postup ˇrešení Úloha trojúhelník - programujeme a testujeme
Výpoˇcet podle vzorcu˚ sss 1 2
pˇreˇcteme hodnoty a,b,c ˇ vyjádˇríme úhly z kosinové vety 2 2 a + c 2 − b2 b + c 2 − a2 β = arccos α = arccos 2bc 2ac 2 a + b2 − c 2 γ = arccos 2ab
3
vypoˇq cteme obvod o = a + b + c a obsah S = o2 ( o2 − a)( o2 − b)( o2 − c)
4
2S 2S vypoˇcteme výšky va = 2S a , vb = b , vc = c vypoˇcteme polomeˇ ry kružnic : opsané: r = ρ = 2S o
5
ZAPG
abc 4S
a vepsané:
Rekapitulace Funkce Pole
Úloha trojúhelník - formulace a postup ˇrešení Úloha trojúhelník - programujeme a testujeme
sus 1 2
3
pˇreˇcteme hodnoty a,b,gamma ˇ vyjádˇríme stranu c a úhly α, β. z kosinové vety p c = a2 + b2 − 2ab cos γ 2 2 b + c 2 − a2 a + c 2 − b2 α = arccos β = arccos 2bc 2ac Ostatní vypoˇcteme stejneˇ jako pro úlohu sss.
usu 1 2 3
pˇreˇcteme hodnoty a,beta,gamma dopoˇcítáme úhel α = π − β − γ ˇ vyjádˇríme strany b a c. ze sinové vety b =a·
4
sin β sin α
c =a·
sin γ sin α
Ostatní vypoˇcteme stejneˇ jako pro úlohu sss. ZAPG
Rekapitulace Funkce Pole
Úloha trojúhelník - formulace a postup ˇrešení Úloha trojúhelník - programujeme a testujeme
Testujeme výpoˇcet
Vhodné trojúhelníky jsou: rovnostranný √ a=b=c=2,√α = β = γ = 60◦ , v_a = v_b=v_c= 3, o = 6, S= 3, r = . . . , ρ = . . . pravoúhlý ...
ZAPG
Rekapitulace Funkce Pole
Úloha trojúhelník - formulace a postup ˇrešení Úloha trojúhelník - programujeme a testujeme
Malé shrnutí
Na pˇríkladu úlohy trojúhelník jsme si ukázali, jak postupovat pˇri ˇrešení vetší ˇ úlohy. Pro podstatu úlohy používáme nejvíce ˇ pˇriˇrazovací pˇríkaz (jedná se o výpoˇcetní úlohu). Vetvení a cykly slouží k tomu, aby jednotlivé cˇ ásti úlohy spolu "komunikovaly". ˇ ˇ jsme úlohu na menší Aby byl zápis úlohy pˇrehlednejší, rozdelili samostatné cˇ ásti, které jsme realizovali jako funkce.
Kudy dál? – Výlet do polí!
ZAPG
Rekapitulace Funkce Pole
Pˇríklady
POLE
ˇ Jednoduchá promenná
ˇ POLE (jednoduchých)promenných ...
ZAPG
Rekapitulace Funkce Pole
Pˇríklady
POLE
ˇ Jednoduchá promenná hodnota
ˇ POLE (jednoduchých)promenných hodnoty ...
jméno
jméno
ZAPG
Rekapitulace Funkce Pole
Pˇríklady
POLE
ˇ Jednoduchá promenná hodnota a jméno
ˇ POLE (jednoduchých)promenných hodnoty ... jméno
deklarace: int a;
ZAPG
Rekapitulace Funkce Pole
Pˇríklady
POLE
ˇ Jednoduchá promenná hodnota a 5 jméno
ˇ POLE (jednoduchých)promenných hodnoty ... jméno
deklarace: int a; zadání hodnoty: a = 5;
ZAPG
Rekapitulace Funkce Pole
Pˇríklady
POLE
ˇ Jednoduchá promenná hodnota a 5 jméno
deklarace: int a;
ˇ POLE (jednoduchých)promenných hodnoty ...
v jméno
deklarace: int v[4];
zadání hodnoty: a = 5;
ZAPG
Rekapitulace Funkce Pole
Pˇríklady
POLE
ˇ Jednoduchá promenná hodnota a 5 jméno
deklarace: int a;
ˇ POLE (jednoduchých)promenných hodnoty ... v jméno 6 6 6 6 v [0]v [1]v [2]v [3] deklarace: int v[4];
zadání hodnoty: a = 5;
ZAPG
Rekapitulace Funkce Pole
Pˇríklady
POLE
ˇ Jednoduchá promenná hodnota a 5 jméno
ˇ POLE (jednoduchých)promenných hodnoty ... v jméno 6 6 6 6 v [0]v [1]v [2]v [3]
deklarace: int a;
deklarace: int v[4];
zadání hodnoty: a = 5;
zadání hodnot:
ZAPG
Rekapitulace Funkce Pole
Pˇríklady
POLE
ˇ Jednoduchá promenná hodnota a 5 jméno
ˇ POLE (jednoduchých)promenných hodnoty ... v 1 jméno 6 6 6 6 v [0]v [1]v [2]v [3]
deklarace: int a;
deklarace: int v[4];
zadání hodnoty: a = 5;
zadání hodnot: v[0]=1;
ZAPG
Rekapitulace Funkce Pole
Pˇríklady
POLE
ˇ Jednoduchá promenná hodnota a 5 jméno
ˇ POLE (jednoduchých)promenných hodnoty v 1 10 . . . jméno 6 6 6 6 v [0]v [1]v [2]v [3]
deklarace: int a;
deklarace: int v[4];
zadání hodnoty: a = 5;
zadání hodnot: v[0]=1; v[3]=10;
ZAPG
Rekapitulace Funkce Pole
Pˇríklady
POLE
ˇ Jednoduchá promenná hodnota a 5 jméno
ˇ POLE (jednoduchých)promenných hodnoty v 1 2 10 . . . jméno 6 6 6 6 v [0]v [1]v [2]v [3]
deklarace: int a;
deklarace: int v[4];
zadání hodnoty: a = 5;
zadání hodnot: v[0]=1; v[3]=10; v[1]=2;
ZAPG
Rekapitulace Funkce Pole
Pˇríklady
POLE
ˇ Jednoduchá promenná hodnota a 5 jméno
ˇ POLE (jednoduchých)promenných hodnoty v 1 2 4 10 . . . jméno 6 6 6 6 v [0]v [1]v [2]v [3]
deklarace: int a;
deklarace: int v[4];
zadání hodnoty: a = 5;
zadání hodnot: v[0]=1; v[3]=10; v[1]=2; v[2]=4;
ZAPG
Rekapitulace Funkce Pole
Pˇríklady
Deklarace pole deklarace pole:
int float typ jméno [ poˇcet ]; typ ... poˇcet musí být znám pˇri pˇrekladu, proto SPRÁVNEˇ int v[4]; #define POCET 10 float r[20]; . . . int z[POCET]; poˇcet urˇcuje, kolik prvku˚ má pole, tj. ˇ bylo pˇrideleno). ˇ (kolik pameti ZAPG
Rekapitulace Funkce Pole
Pˇríklady
Prvky pole
ˇ Prvky pole jsou promenné typu typ . K jednotlivým prvkum ˚ se dostaneme pomocí závorek [ ] Indexují se vždy od 0. NENÍ kontrola mezí! int v[4]; ... v[4] ... lezeme na cizí území v 6 6 6
66
v [0]v [1]v [2]v [3] v [4]
ZAPG
Rekapitulace Funkce Pole
Pˇríklady
Kdy potˇrebujeme pole Chceme oznaˇcit jedním jménem "podobné" hodnoty Vytvoˇrit pole 100 prvoˇcísel. Práce s vektory. ˇ rených hodnot stejné veliˇciny. Zpracování 50 nameˇ Musíme data zkoumat vícekrát ˇ o více než p %. Kolik cˇ ísel se liší od aritmetického prum ˚ eru Kolik ze zadaných cˇ ísel se rovná poslednímu. Seˇradit cˇ ísla podle velikosti. ZAPG
Rekapitulace Funkce Pole
Pˇríklady
Operace Nelze provést operaci s celým polem najednou. Zpravidla realizujeme operaci pomocí cyklu, ve kterém pracujeme s jednotlivými prvky pole. Pˇríklady: Naplnit pole hodnotami. Vytisknout pole. Urˇcit, kolik ze zadaných cˇ ísel se liší od aritmetického ˇ o p. prum ˚ eru Vytvoˇrit pole prvních 100 prvoˇcísel. Uvažujte, kde je nutné použít pole, kde si vystaˇcíme s ˇ jednoduchými promennými: ˇ Dáno 50 cˇ ísel. Urˇcit aritmetický prum ˚ er. Dáno 50 cˇ ísel. Kolik z nich se rovná poslednímu? Dáno 100 cˇ ísel. Vytisknout nejprve kladná, potom ostatní. ZAPG
Rekapitulace Funkce Pole
Pˇríklady
Výplata ˇ Pˇríklad: Je dána celocíselná cˇ ástka P (napˇríklad v Kˇc) . Napište program, který urˇcí, jak uvedenou cˇ ástku vyplatit co nejmenším poˇctem platidel (za pˇredpokladu, že je máme v dostateˇcném množství). Uvažujeme platidla v hodnotách napˇr. {5000,2000,1000,500,200,100,50,20,10,5,2,1} ˇ ˇ Jak? – operace celoˇcíselného delení a zbytku po delení! ˇ Cástku mužeme ˚ vyplatit : P / 5000 + (P%5000)/2000 + ((P%5000)%2000)/1000 + . . . Mužeme ˚ se obejít bez pole i bez cyklu, ale platidel je pˇríliš moc, tak pro neˇ vytvoˇríme pole. A když máme pole ... tak použijeme cyklus. ZAPG
Rekapitulace Funkce Pole
Pˇríklady
Výplata ˇ /*promenné*/ int P, pocet, i=0, money [ ] = {5000,2000,1000,500,200,100,50,20,10,5,2,1};
printf("Zadej sumu\n"); scanf("%d",&P); if(P>=0) while(P>=0) { pocet=P/money[i]; printf("%d x %d Kc\n", pocet, money[i]); P=P%money[i]; i++; } else printf("Vyplacim pouze kladne castky"); ZAPG
Rekapitulace Funkce Pole
Pˇríklady
ˇ pole známým poˇctem cˇ ísel Naplnení #include<stdio.h> #define pocet 4 main() { int i, pole[pocet]; v printf("Zadej %d cisel", pocet); v [0]v [1]v [2]v [3] for(i=0; i< pocet; i++) { scanf("%d",&v[i]); } i //Vytiskneme obsah pole for(i=0; i< pocet; i++) { printf("%d ",v[i]); }
} ZAPG
Rekapitulace Funkce Pole
Pˇríklady
ˇ pole známým poˇctem cˇ ísel Naplnení #include<stdio.h> #define pocet 4 main() { int i, pole[pocet]; v 2 6 printf("Zadej %d cisel", pocet); v [0]v [1]v [2]v [3] for(i=0; i< pocet; i++) { scanf("%d",&v[i]); } i 0 //Vytiskneme obsah pole for(i=0; i< pocet; i++) { printf("%d ",v[i]); }
} ZAPG
Rekapitulace Funkce Pole
Pˇríklady
ˇ pole známým poˇctem cˇ ísel Naplnení #include<stdio.h> #define pocet 4 main() { int i, pole[pocet]; v 2 64 6 printf("Zadej %d cisel", pocet); v [0]v [1]v [2]v [3] for(i=0; i< pocet; i++) { scanf("%d",&v[i]); } 1 i 0 //Vytiskneme obsah pole for(i=0; i< pocet; i++) { printf("%d ",v[i]); }
} ZAPG
Rekapitulace Funkce Pole
Pˇríklady
ˇ pole známým poˇctem cˇ ísel Naplnení #include<stdio.h> #define pocet 4 main() { int i, pole[pocet]; v 2 64 66 6 printf("Zadej %d cisel", pocet); v [0]v [1]v [2]v [3] for(i=0; i< pocet; i++) { scanf("%d",&v[i]); } 2 1 i 0 //Vytiskneme obsah pole for(i=0; i< pocet; i++) { printf("%d ",v[i]); }
} ZAPG
Rekapitulace Funkce Pole
Pˇríklady
ˇ pole známým poˇctem cˇ ísel Naplnení #include<stdio.h> #define pocet 4 main() { int i, pole[pocet]; v 2 64 66 68 6 printf("Zadej %d cisel", pocet); v [0]v [1]v [2]v [3] for(i=0; i< pocet; i++) { scanf("%d",&v[i]); } 3 2 1 i 0 //Vytiskneme obsah pole for(i=0; i< pocet; i++) { printf("%d ",v[i]); }
} ZAPG
Rekapitulace Funkce Pole
Pˇríklady
ˇ pole známým poˇctem cˇ ísel Naplnení #include<stdio.h> #define pocet 4 main() { int i, pole[pocet]; v 2 64 66 68 66 printf("Zadej %d cisel", pocet); v [0]v [1]v [2]v [3] for(i=0; i< pocet; i++) { scanf("%d",&v[i]); } 4 3 2 1 i 0 //Vytiskneme obsah pole for(i=0; i< pocet; i++) { printf("%d ",v[i]); }
} ZAPG
Rekapitulace Funkce Pole
Pˇríklady
ˇ pole neznámým poˇctem cˇ ísel Naplnení Dokud nezadáno cˇ íslo KONEC, ukládáme hodnoty do pole. #include<stdio.h> #define pocet 10 #define KONEC 157 main() { int i, cislo, pole[pocet]; i=0; scanf("%d",&cislo); while (i< pocet && cislo != KONEC) { pole[i]=cislo; i=i+1; scanf("%d",&cislo); } ZAPG
Rekapitulace Funkce Pole
Pˇríklady
ˇ o méneˇ než p. Kolik z daných cˇ ísel se liší od jejich aritmetického prum ˚ eru
Hodnoty musíme projít dvakrát: Urˇcit celkový souˇcet ˇ Aritmeticý prum ˚ er Znovu všechny hodnoty projít a spoˇcítat, kolik z nich ...
Zadáme: ˇ rených hodnot" N, "chybu" p, poˇcet "nameˇ v cyklu zadáváme hodnoty. Souˇcet: nejprve se rovná nule, po zadání hodnoty se ˇ ˇ Souˇcet zvetšuje o zadané císlo. (S=0; . . . S=S+cisla[i];) Poˇcet: nejprve se rovná nule, když najdeme cˇ íslo, které má ˇ hledanou vlastnost, Poˇcet se zvetšuje o jedna. (P=0; . . . if (cisla[i] . . . ) P=P+1;) ZAPG
Rekapitulace Funkce Pole
Pˇríklady
#include<stdio.h> #include<math.h> #define pocet 100 main() { int i, kolik, N; float s, p, prumer , cisla[pocet]; scanf("%d",&N); if(N>= pocet){ return;} //"Prilis moc cisel" scanf("%f",&p); s = 0; for(i=0; i
Rekapitulace Funkce Pole
Pˇríklady
Najdi je všechny!
V urˇcitém druhu výrobku je pˇribalena kartiˇcka. Celá sbírka obsahuje 10 ruzných ˚ kartiˇcek. ˇ celou Kolik výrobku˚ si budeme muset koupit, abychom meli sbírku? Budeme modelovat nákup.
ZAPG
Rekapitulace Funkce Pole
Pˇríklady
Modelujeme hledání
(Pseudo)náhodná cˇ ísla ˇ knihovna stdlib, funkce srand(císlo);, rand(); pole kartiˇcky[10] vynulujeme "nákup": karta = rand()%10; pole[karta]=pole[karta]+1;
"máme je všechny?" projdeme kartiˇcky: všechny kartiˇcky[ i ] jsou nenulové ⇒ máme zbyly nulové ⇒ opakujeme nákup
ZAPG
Rekapitulace Funkce Pole
Pˇríklady
Hledáme v poli
ˇ Pˇredpokládejme, že cˇ ísla v poli jsou nesetˇrídená. ˇ všechna cˇ ísla, Musíme prohlédnout (v nejhorším pˇrípade) abychom zjistili, zda hledané cˇ íslo v poli je nebo není. ˇ promenná mam: hodnota 0 ⇒ dosud nenalezeno "pro jistotu" mužeme ˚ použít "zarážku"
ZAPG
Rekapitulace Funkce Pole
Pˇríklady
Pˇríšteˇ . . .
ˇ další typ složených promenných více o funkcích
ZAPG