Data v číslicových počítačích I. nejčastěji počítače pracují s údaji vyjádřenými ve dvojkové soustavě, tedy pomocí číslic 0 a 1 důvod dvojkové soustavy byl ten, že první počítače byly reléové, tedy šlo rozlišit pouze 2 stavy (0 – rozepnuto, 1 – sepnuto) nejmenší jednotkou informace je 1 bit (1b) z anglického binary digit
Data v číslicových počítačích II. nejmenší objem dat, se kterými obvykle počítač může pracovat je 1 Byte (1 bajt, 1B) 1 Byte = 8 bit pomocí 1B lze vyjádřit 28=256 různých hodnot
Předpony soustavy SI kilobyte kB 10001 B 103 bajtů megabyte MB 10002 B gigabyte GB 10003 B 109 bajtů terabyte TB 10004 B 1012 bajtů petabyte PB 10005 B 1015 bajtů exabyte EB 10006 B 1018 bajtů
Násobky bajtů Historicky (z technologických důvodů) vzniklo označování 1kB (malé „k“)= 103 B = 1000 B 1KB (velké „k“)= 210 B = 1024 B Problém, jak to rozlišit u dalších předpon (mega, giga,….) velikostí písmene není možné (mB není zkratkou pro megabajt) - řešení viz IEC
International Electrotechnical Commission (IEC) v roce 1998 kibibyte KiB 10241 B 210 bajtů mebibyte MiB 10242 B 220 bajtů gibibyte GiB 10243 B 230 bajtů tebibyte TiB 10244 B 240 bajtů pebibyte PiB 10245 B 250 bajtů exbibyte EiB 10246 B 260 bajtů v ČR převzato jako ČSN IEC 60027-2
Obvyklé uvádění velikostí polovodičové paměti, velikost souborů ~ 2x 1GB = 1 GiB = 230 B např. 2GB (prodejní velikost) → reálná velikost = 2*230/220= 2048MiB norma IEC 60027-2 není moc používána (výjimka např. WinSCP) pevné disky ~ 10x 1GB = 109 B (prodejní velikost) např. 1,5TB HDD → reálná velikost = 1.5*1012/240=1.364TiB
Kódování češtiny Historie - každý znak uložen v počítači jako 1 Byte, tzn. 8 bitů => 1B …. 256 různých znaků A … 65, B … 66, C … 67 Od 0 do 32 jsou systémové znaky, od 33 do 127 jsou znaky anglické abecedy (plus znaky typu závorek, zavináč apod.) a čísla od 128 do 255 jsou různé národní znaky. Přiřazení znaků k číslům se označuje jako kódování. iso-8859-2 (Unix), windows-1250 (Windows) š … 185 (iso-8859-2), 154 (window-1250) UNICODE pro uložení znaku používá 1 a více Byte
ASCII nejstarší standardizovaná znaková sada (1967) http://www.gjszlin.cz/ivt/esf/ostatni-sin/kodovani-textu.php
WINDOWS-1250 kódování pro středoevropské jazyky (MS Windows) http://www.gjszlin.cz/ivt/esf/ostatni-sin/kodovani-textu.php
ISO 8859-2 ISO standard kódování (Unix/Linux) http://www.gjszlin.cz/ivt/esf/ostatni-sin/kodovani-textu.php
ISO 8859-2 vs. Windows-1250
UNICODE UTF-8 znak se ukládá pomocí 1 až 6*) Byte (pro české znaky s diakritikou 2 Byte, asijské znaky 3 Byte) zpětná kompatibilita s ASCII UTF-16 znak se ukládá pomoci 16 nebo 32 bitů UTF-32 znak se ukládá pomocí 4 Byte *) v roce 2003 omezeno jen na 4 Byte
UTF-8 vs. ISO 8859-2
Algoritmus Definice Jedná se o posloupnost elementárních kroků Návod jak provést určitou činnost Přesný návod či postup, kterým lze vyřešit daný typ úlohy … Transformace vstupních dat na výstupní data Vstupy mají definované množiny hodnot, jichž mohou nabývat Algoritmus je procedura proveditelná Turingovým strojem teoretický model počítače popsaný matematikem Alanem Turingem Jedná se o posloupnost elementárních kroků
Algoritmus Jak si jej jednoduše představit: postup pro výpočet obvodu kruhu kuchařka: recepty postup jak převést číslo ze z-adické soustavy do jiné návod pro sestavení nábytku
Vlastnosti algoritmů Elementární Deterministický Konečný Resultativní Skládá se z konečného počtu jednoduchých činností (kroky) Deterministický Po každém kroku můžeme určit zda skončil nebo v jakém kroku budeme pokračovat Konečný Musí skončit po konečném počtu kroků Resultativní Vede k výsledku Hromadný (obecný) Můžeme použít k řešení celé skupiny podobných úloh Efektivní Vede k řešení v optimálním čase - rychlost
Metody řešení algoritmů Shora dolů Postup řešení rozkládáme na jednodušší operace, až dospějeme k elementárním krokům Příkladem je kvadratická rovnice Vypočti diskriminant Podle něj rozhodneme, zda-li máme Jedno řešení Dvě řešení Dvě komplexní řešení Zdola nahoru Skupiny elementárních operací chápeme jako nové elementární kroky Postupně z elementárních kroků vytváříme prostředky, které nakonec umožní zvládnout požadovaný problém
Časová a paměťová náročnost Samotné vyřešení úlohy ještě neznamená spokojenost Často se dá úloha řešit jednodušeji (efektivněji) Musíme použít optimalizaci? Náročnost pro počítač Při komplikovanější úloze můžeme dlouho čekat na výsledek (procesor má příliš mnoho instrukcí) Časová náročnost tedy zjednodušeně může být úměrná počtu elementů, které umístíme do algoritmu Potom co nemůžeme ovlivnit: počet vstupních dat (ale…) Příklad Výpočet absolutní hodnoty zabere 3takty procesoru sin(x) nám zabere 291taktů Není to moc, ale pokud budeme kombinovat mnoho funkcí…
Druhy algoritmů Rekurzivní algoritmy Hladové algoritmy které využívají (volají) samy sebe výpočet faktoriálu Hladové algoritmy k řešení se propracovávají po jednotlivých rozhodnutích, která jakmile jsou jednou učiněna, už nejsou dále revidována Rozděl a panuj algoritmy dělí problém na menší podproblémy (shora-dolů), na něž se rekurzivně aplikují (až po triviální podproblémy, které lze vyřešit přímo), posléze se dílčí řešení vhodným způsobem sloučí Algoritmy dynamického programování postupně se ř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ů
Druhy algoritmů Pravděpodobnostní algoritmy (probabilistické) provádějí některá rozhodnutí náhodně či pseudonáhodně Paralelní algoritmy Rozdělení výpočtů mezi více počítačů (jader procesorů) pro rychlejší výpočty 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í Heuristické algoritmy Za cíl si nekladou nalézt přesné řešení, ale pouze nějaké vhodné přiblížení (nedostatek času nebo neexistence exaktního řešení)
Zápis algoritmu Slovním popisem Vývojovými diagramy (grafický zápis) Vychází se slovního popisu algoritmu v přirozeném jazyce. Zachycuje postupný rozklad algoritmu na jemnější kroky při návrhu metodou shora dolů. Vývojovými diagramy (grafický zápis) Jednotlivé kroky jsou vyjádřeny grafickými symboly dle typu operace Posloupnost vykonávání kroků je vyjádřena orientovanou hranou
Základní komponenty algoritmů Začátek/konec Posloupnost (sekvence) příkazů kroky v daném pořadí AKCE Větvení (podmínky) výběr dalších prováděných kroků závisí na splnění/nesplnění nějaké podmínky Cyklus opakované provádění kroků s pevným počtem opakování s podmínkou (na konci/na počátku) - provádění kroků se opakuje, dokud je/není splněna podmínka
Základní symboly vývojového diagramu
Základní použití symbolů
Základní použití symbolů ANO ANO NE NE
Základní použití symbolů NE ANO
Cyklus s podmínkou s podmínkou na začátku s podmínkou na konci tělo cyklu se provede minimálně jednou
Základní použití symbolů
Proměnná „úložiště“ informace (tedy vyhrazené místo v paměti). Proměnná nebo (v beztypových jazycích) její hodnota má typ. Mezi nejčastější typy patří: číslo celé číslo "reálné" číslo - číslo s pohyblivou řádovou čárkou znak řetězec (znaků) pole (pole polí je matice) struktura nebo objekt ukazatel - obvykle může ukazovat na kterýkoliv z ostatních typů nebo na funkci
Algoritmus pro výpočet obvodu kruhu zápis strukturovaným přirozeným jazykem Krok 1. - Tiskni: Zadej poloměr Krok 2. - Čti: r Krok 3. - o = 2*3.14*r Krok 4. - Tiskni: Obvod je o Krok 5. - Konec
Algoritmus pro výpočet obvodu kruhu zápis vývojovým diagramem
Odolnost vůči špatným vstupům (aneb blbovzdornost) není možné se spoléhat, že na vstupu se načtou údaje, se kterými má smysl dále pracovat v algoritmu pro výpočet obvodu kruhu – co když uživatel zadá záporné číslo? Výsledek by byl nesmyslný!
Algoritmus pro výpočet obvodu kruhu zápis strukturovaným přirozeným jazykem Krok 1. - Tiskni: Zadej poloměr Krok 2. - Čti: r Krok 3. - Jestliže je r < 0, pak Krok 7. Krok 4. - o = 2*3.14*r Krok 5. - Tiskni: Obvod je o Krok 6. - Konec Krok 7. - Tisk: Chyba: Poloměr je záporný Krok 8. - Konec
Algoritmus pro výpočet obvodu kruhu
Jak bude vypadat algoritmus zapsaný v jazyce C? printf("Zadej poloměr: "); scanf("%f",&r); if (r<0) printf("Chyba: Poloměr je záporný"); else { o = 2*3.14*r; printf("Obvod je %f",o); }
Název proměnné v názvu „nesmí“ být mezery (použijte raději podtržítko) nedoporučují se znaky s diakritikou název proměnné by měl mít vypovídací hodnotu, k čemu proměnná slouží u víceslovného názvu proměnné první písmeno každého dalšího slova velké (různé zvyklosti u různých jazyků) objemKruhu některé programovací jazyky nerozlišují velikost písma promA, Proma, PROMa apod.
Vysvětlení významu Ze vstupu (např. z klávesnice) se načte hodnota do proměnné pojmenované A. Do proměnné B se uloží výsledek součinu hodnoty proměnné A a čísla 2. Do proměnné C se uloží číslo 5. Pokud je hodnota v proměnné B číslo 10, podmínka platí a na výstup se vypíše: "Zadal jste číslo 5" Do proměnné C se uloží číslo 5+10.
Aritmetické výrazy + sčítání - odčítání * násobení / dělení % binární operátory + sčítání - odčítání * násobení / dělení % mod dělení modulo – zbytek po celočíselném dělení 5 % 3 = 2 3 % 5 = 3
Relační operátory = == rovná se > je větší < je menší >= je větší nebo rovno <= je menší nebo rovno <> != nerovná se
Algoritmus výměny hodnot dvou proměnných
Algoritmus výměny hodnot dvou proměnných
Algoritmus výměny hodnot dvou proměnných – bez pomocné proměnné
NA POŘADÍ ZÁLEŽÍ!!!!!
Algoritmus pro vyhodnocení, zda zadané číslo je sude nebo liché
Cyklus s pevným počtem opakováni tělo cyklu se provede 3krát proměnná i bude nabývat postupně hodnot: 1, 2, 3
Cyklus s pevným počtem opakováni tělo cyklu se provede 7krát proměnná i bude nabývat postupně hodnot: 1, 0, -1, -2, -3, -4, -5
Cyklus s pevným počtem opakováni
Algoritmus, který ověří, že ze zadaných 3 délek stran lze sestrojit trojúhelník. Nekontroluje se nezápornost vložených čísel!!!
Booleova algebra I. logický součet OR, logický součin AND, negace NOT
Booleova algebra II. při vyhodnocování složené podmínky má přednost logický součin (AND), pořadí vyhodnocování lze ovlivnit pomocí závorek Vyhodnoťte následující 2 podmínky: P1: (a>1) AND (b>1) OR (c>1) P2: (a>1) AND ((b>1) OR (c>1)) a b c P1 P2 4 2 1 5
Booleova algebra III. Vyhodnoťte následující 2 podmínky: P1: (a>1) AND (b>1) OR (c>1) P2: (a>1) AND ((b>1) OR (c>1))
Booleova algebra IV. – mnemotechnická pomůcka PRAVDA => 1, NEPRAVDA => 0, AND => *, OR => + př.: pravda AND nepravda OR pravda AND pravda = 1 * 0 + 1 * 1 = 1, tedy výsledek je větší než 0 => výsledek podmínky je PRAVDA
Algoritmus, který ověří, že ze zadaných 3 délek stran lze sestrojit trojúhelník. je si však třeba uvědomit, že se vždy vyhodnotí všechny 3 podmínky, což nemusí být časově zanedbatelné.....
Algoritmus ze vstupu načte 3 čísla a určí, které číslo je největší, a to vypíše. pozn. pokud jsou zadána 3 stejná čísla, číslo se vypíše
Násobení dvou celých čísel (A Násobení dvou celých čísel (A*B) bez operace násobení – procesor neumí násobit A*B = A+A+………+A=0+A+A+………+A Bé-krát se přičte A
Nutno myslet „strojově“ stroj neumí provést celou operaci A+A+………+A najednou je nutné postupně přičítat hodnotu proměnné A číslo cyklu 1 2 3 4 5 6 7 ….. B 0+A +A ..…
Násobení dvou celých čísel (A Násobení dvou celých čísel (A*B) bez operace násobení – procesor neumí násobit
Násobení dvou celých čísel (A*B) bez operace násobení chyba: co když bude B=0? Cyklus se provede dvakrát (i=1, i=0) => V=0+A+A chyba: nefunguje pro B<0
Násobení dvou celých čísel (A*B) bez operace násobení, B>0 efektivnější algoritmus o 1 opakování chyba: co když bude B=1? Cyklus se provede dvakrát (i=1, i=0) => V=A+A+A
Násobení dvou celých čísel (A*B) bez operace násobení, B>1 efektivnější algoritmus o 1 opakování optimálnější by však bylo počítat 5*3, než 3*5 = úspora 2 opakování těla cyklu
Násobení dvou celých čísel (A*B) bez operace násobení, B>1, A>1 optimálnější by však bylo počítat 5*3, než 3*5 = úspora 2 opakování těla cyklu vyplatilo by se při 2*3?
Násobení dvou celých čísel (A Násobení dvou celých čísel (A*B) bez operace násobení, (pro libovolné A, B)
Vytvořte algoritmus, který vypíše ciferný součet zadaného celého čísla např. pro číslo 5426 bude výsledek 17 (5+4+2+6) můžete použít pouze základní aritmetické operace +, -, *, /, % a funkci abs() pro výpočet absolutní hodnoty
Vytvořte algoritmus, který vypočítá n-tou mocninu čísla X (Xn) můžete použít pouze základní aritmetické operace +, -, *, /, % a funkci abs() pro výpočet absolutní hodnoty Xn = X*X*X*…..*X (n-krát násobení X pro n>0) Xn = 1 𝑋∗𝑋∗𝑋∗…….∗𝑋 (pro n<0) Xn = 1(pro n=0)
Vytvořte algoritmus, který bude počítat faktoriál ze zadaného celého čísla R >= 0 R!=R*(R-1)! R!=R*(R-1)*….*2*1 R!=1*2*….*(R-1)*R 0!=1
Mohl by cyklus hned začít s i=2? (tzn. i=2..R)
Algoritmus zapsaný pomocí cyklu s podmínkou na začátku
Vykreslete obdélník pomocí. , výšku a šířku načtěte ze vstupu Vykreslete obdélník pomocí *, výšku a šířku načtěte ze vstupu. (V>0, S>0) příklad pro 4*14: ************** pro tisk znaků můžete použít funkci CHAR, které dejte do parametru číslo znaku z ASCII tabulky: CHAR(42) je znak *, CHAR(13) CHAR(10) je konec řádku
vnitřní (vnořený) cyklus tělo vnějšího cyklu
Vylepšete algoritmus, aby se vykresloval jen obrys obdélníku Vylepšete algoritmus, aby se vykresloval jen obrys obdélníku. (zjednoduš.V>2,S>2) příklad pro 4*14: ************** * * CHAR(32) je znak mezery
Násobení tří celých čísel (A. B Násobení tří celých čísel (A*B*C) bez násobení – A>0, B>0, C>0 A*B*C = A*B+A*B+A*B+.....A*B (počet A*B je C) =A+A+A+....A + A+A+A+....A + ....+ A+A+A+....A
Násobení tří celých čísel (A. B Násobení tří celých čísel (A*B*C) bez násobení – A>0, B>0, C>0 zkouška pro 5*3*2=30
Vytvořte algoritmus, kterým ověříte, že zadané přirozené číslo (>1) je prvočíslo. prvočíslo – beze zbytku dělitelné pouze číslem 1 a sebou samým 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, …….
Vytvořte algoritmus, který vypíše všechna prvočísla až do zadaného čísla
Pole (vektor) Označuje datovou strukturu, která uchovává konečný počet prvků (čísel, textových řetězců, … ) stejného datového typu. K jednotlivým prvkům pole se přistupuje pomocí jejich indexu (celého čísla, označujícího pořadí prvku). 1 5 6 10 3 2 7 8 a i= 1 2 3 4 5 6 7 8
Pole / pokračování i= 1 2 3 4 5 6 7 8 1 5 6 10 3 2 7 8 a[2] = 5 … a[i] Pokud chceme projít celé pole musíme: projít postupně všechny prvky pomocí indexu i, který postupně nabývá hodnot i=1..m (kde m značí velikost pole)
vytvoří se pole a a hodnoty jeho prvků se načtou ze vstupu, rozměr pole (počet prvků pole) je m na výstup se vypíše hodnota druhého prvku pole; CHYBA, pokud má pole pouze 1 prvek pokud první prvek (a[1]) má hodnotu >3, na výstup se vypíše počet prvků pole vytvoří se pole p, rozměr pole je 5 prvků - hodnoty prvků pole nejsou definovány prvek s indexem 1 pole p se nastaví na hodnotu 25
Načtení pole budeme používat zjednodušení v praxi však nutno načítat hodnoty prvků jednotlivě budeme používat zjednodušení
Algoritmus, který načte pole ze vstupu a poté vytiskne postupně hodnoty všech prvků pole.
Vytvořte algoritmus, který načte pole ze vstupu a sečte hodnoty všech prvků v poli
Vytvořte algoritmus, který načte pole ze vstupu a sečte všechny hodnoty prvků v poli větší než 3
Vytvořte algoritmus, který načte pole ze vstupu a vymění hodnoty prvků tímto způsobem: a[1] <=> a[8] a[2] <=> a[7] a[3] <=> a[6] a[4] <=> a[5] první s posledním druhý s předposledním atd. 1 5 6 10 3 2 7 8 8 7 2 3 10 6 5 1
Algoritmus funkční pro sudý počet prvků
Plně funkční algoritmus
Plně funkční algoritmus
Vytvořte algoritmus, který načte pole čísel, vytvoří nové pole a zkopíruje do něj hodnoty prvků načteného pole zvětšené o číslo indexu prvku. 1 5 6 10 3 2 7 8 a i= 1 2 3 4 5 6 7 8 2 7 9 14 8 16 b
algoritmy řazení čísel
Bubble sort – řazení zaměňováním Vzestupné řazení: porovnává hodnoty dvou sousedních prvků, a pokud je nižší číslo napravo od vyššího, tak je prohodí a se stejnou logikou se pokračuje na dalším indexu. Pokud jsou čísla ve správném pořadí, tak je neprohodí – pouze postoupí na další index. prochází se pole a porovnávají se dva sousední prvky (index j a j+1). Pokud platí, že prvek s indexem j > prvek s indexem j+1, pak oba prvky zaměníme. na konci prvního provedení postupu se tímto způsobem na konec pole vždy dostane to největší číslo. po n-1 opakováních algoritmu je pole seřazeno (n je počet prvků v poli) http://www.algoritmy.net/article/3/Bubble-sort
Vzestupné setřídění čísel pomocí Bubble sort I. 1 2 3 4 5 6 7 5 8 4 9 7 2 1 5 4 8 9 7 2 1 5 4 8 7 9 2 1 5 4 8 7 2 9 1 5 4 8 7 2 1 9
Vytvořte algoritmus na postup, kterým se jednou projde pole, porovnávají se hodnoty sousedních prvků a pokud prvek s menším indexem má větší hodnotu než prvek s větším indexem, hodnoty obou prvků se vymění.
Vzestupné setřídění čísel pomocí Bubble sort II. na začátku: 5 8 4 9 7 2 1 po prvním zopakování postupu: 5 4 8 7 2 1 9 po druhém zopakování postupu: 4 5 7 2 1 8 9 po šestém zopakování postupu: 1 2 4 5 7 8 9
Efektivnější algoritmus Bubble sort všimněte si 5 8 4 9 7 2 1 1. 5 4 8 7 2 1 9 2. 4 5 7 2 1 8 9 3. 4 5 2 1 7 8 9 4. 4 2 1 5 7 8 9 5. 2 1 4 5 7 8 9 6. 1 2 4 5 7 8 9
Bubble sort Algoritmus (pro vzestupné seřazení): 1. prochází se pole a porovnávají se dva sousední prvky (index j a j+1). Pokud platí, že prvek s indexem j > prvek s indexem j+1, pak oba prvky zaměníme. 2. krok 1 se opakuje pro pole délky n, n-1, ....,2
Efektivnější algoritmus Bubble sort při prvním a každém dalším provádění postupu se kontroluje, zda se vůbec vyměnily hodnoty dvou prvků pokud ano – postup se znovu zopakuje pokud ne – čísla jsou již seřazena, není třeba postup opakovat 1 2 3 4 5 6 7 1 3 4 6 7 9 12
Select sort - řazení výběrem maximálního prvku Vzestupné řazení: 1. nalezení prvku s maximální hodnotou 2. záměna maximálního prvku s posledním prvkem pole (pro vzestupné řazení) Algoritmus spočívá v aplikování základních kroků postupně na pole délky n, n-1, n-2,....,2; tato pole vzniknou z původního pole zkráceného o maximální prvky (postupně o 1, 2, 3,……. n-2 prvků) http://www.algoritmy.net/article/4/Selection-sort
1 2 3 4 5 6 7 5 8 4 9 7 2 1 5 8 4 1 7 2 9 5 2 4 1 7 8 9 5 2 4 1 7 8 9 1 2 4 5 7 8 9 1 2 4 5 7 8 9
Vytvořte algoritmus na postup, kterým se projde pole načtených hodnot a nalezne se index prvku s maximální hodnotou v celém poli.
Select Sort cyklus délka prohledávaného pole změněné pole prvků 1 6 základní pole prvků: 10, 5, 9, 3, 1, 4 cyklus délka prohledávaného pole změněné pole prvků 1 6 4, 5, 9, 3, 1, 10 2 5 4, 5, 1, 3, 9, 10 3 4 4, 3, 1, 5, 9, 10 1, 3, 4, 5, 9, 10
algoritmy vyhledávání čísel
Sekvenční vyhledávání Algoritmus spočívá v procházení prvků pole a v jejich porovnávání s hledanou hodnotou, dokud se prvek nenajde, nebo dokud se nedojde na konec pole. http://www.algoritmy.net/article/19/Linearni-vyhledavani
Vyhledávání binárním půlením Algoritmus je aplikovatelný pouze na neklesající posloupnost prvků (pole), případně po modifikaci na nerostoucí posloupnost prvků. Rekurzivně se opakuje porovnání hledaného prvku X s prvkem uprostřed pole a[i] (i=n/2 nebo i=(n+1)/2). Pokud se hodnota obou prvků shoduje pak je prvek nalezen. Pokud X<a[i], algoritmus se aplikuje na polovinu menších prvků, jinak na polovinu větších prvků. http://www.algoritmy.net/article/21/Binarni-vyhledavani
Hledá se číslo 3 1 2 3 4 5 6 7 1 2 3 4 5 9 10 1 2 3 4 5 9 10 1 2 3 4 5 9 10
Hledané číslo nenalezeno. Hledá se číslo 40 1 2 3 4 5 6 7 8 9 10 11 12 1 5 7 13 14 22 23 24 35 49 55 99 1 5 7 13 14 22 23 24 35 49 55 99 1 5 7 13 14 22 23 24 35 49 55 99 Hledané číslo nenalezeno.
Vyhledávání – binárním půlením (příklad) základní pole prvků: 1, 2, 3, 4, 5, 9, 10 hledaný prvek: 3 cyklus prohledávané pole 1 1, 2, 3, 4, 5, 9, 10 2 1, 2, 3 3
Matice =dvojrozměrné pole, prvky matice se nacházejí v řádcích a sloupcích a[1][1] a[i][k] i – řádek k – sloupec a[3][2] a[3][4] číslování řádků a sloupců od 1 a[5][1] a[5][4]
vytvoří se matice a a hodnoty jejích prvků se načtou ze vstupu, rozměr matice je m řádků a n sloupců na výstup se vypíše hodnota prvku ve 2. řádku a 3. sloupci matice; CHYBA, pokud matice má 1 řádek nebo 2 sloupce pokud hodnota prvku a[1][2] >3, na výstup se vypíše počet prvků v matici
vytvoří se matice a a hodnoty jejích prvků se načtou ze vstupu, rozměr matice je m řádků a n sloupců vytvoří se matice b, rozměr matice je 1 řádek a 3 sloupce – hodnoty prvků matice nejsou definovány vytvoří se matice c, rozměr matice je m řádků a n sloupců - hodnoty prvků matice nejsou definovány vytvoří se pole p, rozměr pole je 5 prvků - hodnoty prvků pole nejsou definovány
Načtení matice budeme používat zjednodušení v praxi však nutno načítat hodnoty prvků jednotlivě budeme používat zjednodušení
Algoritmus, který načte matici ze vstupu a poté vytiskne postupně hodnoty všech prvků matice po řádcích.
Algoritmus, který načte matici ze vstupu a poté vytiskne postupně hodnoty všech prvků matice po sloupcích.
Algoritmus načte matici ze vstupu a vypíše součet všech prvků v matici. součet se provádí po řádcích
Algoritmus načte matici ze vstupu a vypíše součet všech prvků v matici. součet se provádí po sloupcích
Algoritmus, který načte čtvercovou matici a vymění prvky na hlavní a vedlejší diagonále po řádcích.
Algoritmus, který vymění prvky na hlavní a vedlejší diagonále čtvercové matice po řádcích.
Algoritmus, který vymění prvky na hlavní a vedlejší diagonále čtvercové matice po řádcích.
Algoritmus, který vymění prvky na hlavní a vedlejší diagonále čtvercové matice po řádcích.
Algoritmus, který načte matici A, vytvoří novou matici B stejných rozměrů a vloží do ní hodnoty prvků z načtené matice A, ale k hodnotám prvků v prvním sloupci se přičte číslo řádku, ve kterém se nacházejí. matice A matice B =5+1 =4+2 =5+3 =7+4 =5+5
Algoritmus, který načte matici a vrátí součet hodnot prvků na hlavní diagonále.
Algoritmus, který načte matici a vrátí součin hodnot prvků na hlavní diagonále. jak se změní předchozí algoritmus?
Vytvořte algoritmus, který načte pole čísel, vypíše největší z nich a index prvku, ve kterém se nachází
pokud by byla jistota, že pole je minimálně dvouprvkové, cyklus by mohl být „i=2..m“
Vytvořte algoritmus, který načte matici a vytvoří novou matici, transponovanou z načtené
Pomocí vývojového diagramu zapište algoritmus na sečtení všech prvků v matici, které jsou zároveň v lichých sloupcích a lichých řádcích. Tyto prvky navíc nastavte na hodnotu 0 (nula).
Vytvořte obecný algoritmus, který načte dvě matice stejného rozměru a do třetí vytvořené matice vloží jejich součet. konkrétní příklad 6 4 1 7 5 4 2 5 1 6 8 3 12 1 + =
Vytvořte obecný algoritmus, který načte dvě matice a do třetí vytvořené matice vloží jejich součin. konkrétní příklad 6 4 1 7 5 8 44 10 14 39 20 5 4 1 2 5 * = c[1][1]=a [1][1]*b [1][1]+a [1][2]*b [2][1] c[1][2]=a [1][1]*b [1][2]+a [1][2]*b [2][2] c[1][3]=a [1][1]*b [1][3]+a [1][2]*b [2][3] c[2][1]=a [2][1]*b [1][1]+a [2][2]*b [2][1] c[2][2]=a [2][1]*b [1][1]+a [2][2]*b [2][2] c[2][3]=a [2][1]*b [1][1]+a [2][2]*b [2][3] …. c[3][3]=a [3][1]*b [1][3]+a [3][2]*b [2][1]
Čtení algoritmu Máte k dispozici vývojový diagram algoritmu. Když se na vstupu načte níže uvedené pole, jaké hodnoty bude mít načtené pole na konci algoritmu a jakých hodnot budou postupně nabývat uvedené proměnné (i, j, P) v označeném místě algoritmu?
1 2 5 3 -1 1 5
Máte k dispozici vývojový diagram algoritmu Máte k dispozici vývojový diagram algoritmu. Jaký bude výsledek algoritmu (výstup), když se na vstupu načte níže uvedená matice, jaké hodnoty bude mít načtená matice na konci algoritmu a jakých hodnot budou postupně nabývat uvedené proměnné (i, k, V) v označeném místě algoritmu?
1 2 6 3 8 13 18 19 17 výpis algoritmu: Součet je 19