PA1 test ústní

Ace your homework & exams now with Quizwiz!

Jaká bude hodnota v proměnné a po provedení int a = 3; a/=2?

a=1

Určete nejlepší a nejhorší složitost algoritmu řazení zaměňováním (bubble sort) a algoritmus popište.

nejlepší = n nejhorší = n*n Bublikové řazení, někdy též řazení zaměňováním, (angl. bubble sort) je jedním ze základních řadících algoritmů. Při bublinkovém řazení postupně porovnáváme sousední prvky a pokud jejich hodnoty nejsou v požadované relaci, vyměníme je. Po prvním průchodu polem se největší hodnota dostane na konec pole (vybublá). Pokud se provedla alespoň jedna výměna, průchod opakujeme, stačí však projít úsek pole o jeden prvek kratší.

Dynamicky alokujte pole pro dvacet prvků typu int.

*pt = (int *) malloc(20*sizeof(int))

Jaké chyby mohou nastat při kopírování jednoho souboru do druhého a jak tyto chyby ošetříme?

- Rozdílný typ souborů (binární versus textový). - Soubor neexistuje -> vytvoříme ho - nejsou dostatečná práva -> poskytneme práva (pokud to lze) - nedostatečné místo na disku -> zajistíme místo na disku

Jaké jsou typické operace pro ADT množinu?

1. vypsání všech prvků, 2. vložení prvku, 3. odebrání prvku, 4. zjištění, zda je prvek v množině, 5. sjednocení dvou množin, 6. průnik dvou množin, 7. rozdíl dvou množin, 8. symetrická diference dvou množin, 9. doplněk množiny, ... U množiny není důležité pořadí prvků, posledně vložený prvek může být ve výpisu na libovolném místě.

Jaká bude hodnota v proměnné a po provedení int a = 3; a<<=2?

3 = 0011 hodnoty jsou posunuty vlevo o počet bytů specifikovanými za = (tedy o 2 bity) 0011 posuneme o dva vlevo = 1100 = 12

Jaká bude hodnota v proměnné a po provedení int a = 3; a&= 10?

3=0011 10=1010 kde je v obouch 1ka ->0010

Popište podmínky použití binárního vyhledávání a určete jeho složitost.

Binární hledání (binary search) se někdy označuje jako hledání prvku pole půlením. Při hledání prvku pole lze použít princip opakovaného půlení v případě, že pole je seřazené, tj. hodnoty jeho prvků tvoří monotonní posloupnost. Jak funguje: 1. zjistíme hodnotu y prvku ležícího uprostřed prohledávaného úseku pole, 2. jestliže hledaná hodnota x = y, je prvek nalezen, 3. jestliže x < y, pokračujeme v hledání v levém úseku, 4. jestliže x > y, pokračujeme v hledání v pravém úseku. Časová složitost je O(log n).

Co je a k čemu slouží binární strom?

Binární stromy jsou struktury, které mají jeden kořen (počáteční prvek, vrchol) a každý vrchol kromě kořene má právě jednoho předka a každý vrchol má maximálně dva následníky. Binární stromy mají široké použití, například v kompresi dat, v šifrování, ve vyhledávání (binární vyhledávací strom) a další.

Co se stane pokud budeme v proměnnou typu double zvyšovat o jedničku?

Budeme ztrácet přesnost

Jaký je rozdíl mezi definicí a deklarací funkce, uveďte příklad.

Deklarací funkce, řeknu její návratovou hodnotu, název a vstupní parametry. void tiskniCislice(void); Definice funkce, řekneme co bude funkce dělat.

Co je to doplňkový kód a jak reprezentuje číslo 5 a jak -5?

Dvojkový doplněk (též doplňkový kód) je způsob kódování celých, tedy kladných i záporných čísel ve dvojkové soustavě používaný v počítačích. Dvojkový doplněk umožňuje zjednodušit konstrukci aritmeticko-logické jednotky uvnitř procesoru díky tomu, že sčítání a odečítání se provádí pro čísla se znaménkem stejně jako pro čísla bez znaménka, odlišná je pouze interpretace přetečení. 0101 = 5 1011 = -5 ( otočíme hodnotu binární 5ky, tedy z 0101 uděláme 1010 a pričteme 1 a tak vznikne 1011)

Co je Fibonacciho posloupnost?

Jedná se o nekonečnou posloupnost přirozených čísel, kdy každé číslo je součtem 2 předchozích čísel.

Jak implementovat zásobník konečné hloubky polem?

Normální pole, přidávám na konec pole a odebírám na konci pole.

Mějme pole celých čísel. Popište algoritmus určení nejméně častého prvku. Určete složitosti tohoto algoritmu (časovou, prostorovou, v nejlepším a nejhorším případě). Pomohlo by, kdyby pole bylo seřazené?

To samé, jen naopak.

Co bude v proměnné v po provedení double v = 17/5?

Vyhodnotí se celočíselný výraz 17/5 = 3, tato hodnota je posléze přiřazena do v.

Telefonní seznam bylo nutné aktualizovat, protože pět uživatelek se provdalo a změnily si příjmení. Navrhněte algoritmus, který efektivně aktualizuje telefonní seznam tak, aby pole zůstalo seřazené. Určete složitosti tohoto algoritmu (časovou, prostorovou, v nejlepším a nejhorším případě).

Změní jména, ty si seřadí a postupně vkládá. Tedy prochází seznam dokud nenarazí na místo kam může abecedne zařadit ženu s novým jménem. Pokud na to místo narazí, vloží ji tam, pokračuje v seznamu ale tentorkát s dalším jménem.

Jaká hodnota bude 4.7 - 4.7F a proč?

0

Jaká bude hodnota v proměnné a po provedení int a = 3; a»=2?

0011 posuneme o 2 vpravo - 0000 = 0

Co je a k čemu slouží abstraktní datový typ?

Abstraktní datový typ (dále jen ADT) je datový typ umožňující jednotné zacházení s daty různých typů. Hlavním cílem zavedení ADT je zjednodušení a zpřehlednění programu, který ADT používá. Všechny ADT lze realizovat jako knihovnu v C.

Co je ADT množina(Set) a jak se liší od ADT seznam(List)?

Abstraktní datový typ (dále jen ADT) je datový typ umožňující jednotné zacházení s daty různých typů. Hlavním cílem zavedení ADT je zjednodušení a zpřehlednění programu, který ADT používá. Všechny ADT lze realizovat jako knihovnu v C. Pro množinu je charakteristické, že žádný prvek v množině se nesmí opakovat. Jedná se o hromadu hodnot. Pro seznam je charakteristické, že (na rozdíl od množiny) prvky se v seznamu mohou opakovat a pořadí prvků je důležité. O proti množině, se typicky nepracuje s celým seznamem. Podobá se spíše poli, hodnoty na sebe vzájemně odkazují.

Co je algoritmus a čím se zabývá algoritmizace?

Algoritmus je určitý postup pro vyřešení problému.

Co se stane pokud budeme v proměnnou typu int opakovaně zvyšovat o jedničku?

Až dosáhneme limitu, přeteče nám. (2^32 nejčastěji)

Co se v C stane pokud do znaménkového int vložím v 32 bitovém prostředí číslo 0xFFFF? Co se vypíše při použití konverze %d a co při %u?

Do proměnné se uloží 0xFFFF(H) = 65535(D). Nejvyšší bit není zaplněn, proto mezi konverzemi nebude rozdíl.

Co se v C stane pokud do znaménkového int vložím v 32 bitovém prostředí číslo 0xFFFFFFFF? Co se vypíše při použití konverze %d a co při %u?

Do proměnné se uloží 0xFFFFFFFF(H) = 4294967295(D). Při konverzi %u se vypíše toto číslo, při konverzi %d se použije vlasností doplňkového kódu a program vypíše -1.

Co je to doplňkový kód a jak reprezentuje desetinné číslo 2.5 a jak -0.5?

Dvojkový doplněk (též doplňkový kód) je způsob kódování celých, tedy kladných i záporných čísel ve dvojkové soustavě používaný v počítačích. Dvojkový doplněk umožňuje zjednodušit konstrukci aritmeticko-logické jednotky uvnitř procesoru díky tomu, že sčítání a odečítání se provádí pro čísla se znaménkem stejně jako pro čísla bez znaménka, odlišná je pouze interpretace přetečení.

Jaký je rozdíl mezi interpretovanými a kompilovanými programovacími jazyky. Uveďte příklady těchto jazyků.

Interpretované jazyky - kompilují se za běhu (PHP) Kompilované jazyky - před spuštěním se musí zkompilovat kompilátorem do strojového kódu např. C JAVA - kompiluje se do mezikódu

Jak vypadá a k čemu je příkaz switch?

Je to vlastně několik ifů. switch (hodnota) { case 5: (pokud hodnota je 5) vykonej neco; break (vyskoc z funkce); default: vykonej; }

Co jsou .h soubory a k čemu slouží?

Jedná se o hlavičkové soubory, obsahují již napsané funkce (usnaďnují nám práci), například math.h.

Co je bit, byte, kilobyte, kibibyte?

Jedná se o jednostky velikosti. bit byte = 8 bity kilobyte = 1000 bytu kikibyte = 1024 bytu

Co je EOF a k čemu lze použít?

Jedná se o konec souboru (anglicky end of file), vužívá se například ke zjištění konce vstupu.

Co je NULL v C?

Jedná se o makro pro hodnotu 0. Používá se u ukazatelů, vlastně říká programátorovi, zde nic není.

Co je v C řetězec?

Jedná se o pole znaků, která je ukončeno \0

Co znamená konstrukce p→a a jak ji lze nahradit?

Jedná se o přístup ke členu(obsahu) struktury. p->a je zkratka pro (*p).a

K čemu složí funkce scanf, jaké má parametry a co vrací?

K přečtení znaků na vstupu. Parametrem určujeme typ vstupu. Vrací počet načtených vstupů, které splňují námi zadaný typ.

Vysvětlete vlastnosti algoritmu: konečnost, determinovanost, vstup, výstup, efektivita, obecnost(hromadnost).

Každý algoritmus by měl být konečný, pokud není je napsaný špatně. Každý krok je jednoznačně definovaný. Vstup, jaké vstupní parametry očekává. V jakém formátu vrací výsledek. Efektivita, kolik početních operací vykoná na základě vstupu. Obecnost, dokáže pracovat s růynými vstupy.

Popište mechanismus volání funkce v C.

Když zavoláme funkci, program přeskočí na místo kde je funkce uložena, provede ji a vrátí se zpět na místo odkud ji volal.

Co je překladač (compiler) jazyka C a k čemu slouží.

Kompiluje zdrojový kód do strojového kódu (překládá člověku srozumitelný kód do kódu srozumitelného počítači).

Proč se zabýváme algoritmy řazení? Jakou složitost tyto algoritmy mají?

Mají různou složitost implementace a rychlost. Například binární vyhledávání potřebuje seřazenost. BubbleSort - O(n^2) O(n) SelectSort - O(n^2) O(n^2) InsertSort - O(n^2) O(n) MergeSort - O(n x log(n)) O(n x log(n)) QuickSort - O(n^2) O(n*log(n))

Co je makro v C jak funguje? Uveďte příklad.

Makro je fragment kódu, kterému je přiřazen identifikační řetězec. Pokud kdekoli v kódu narazí preprocesor na tento řetězec, nahradí jej obsahem daného makra - tzv. expandování makra. #define SIZE_OF_ARRAY 255

Co je medián a jak souvisí s pojmem pivot? Kde se používají a jak se dají určit?

Medián je „prostřední" prvek z množiny (prostřední hodnota). Dělí množinu na dvě stejně početné poloviny. Platí že 50%prvků je menší nebo rovno a 50% prvků je větší nebo rovno mediánu. Pivot je kandidátem na střed (na medián), který je v ideálním případě mediánem (viz: Quicksort). Špatné zvolení pivotu může zvetšit složitost řadícího algoritmu. Čím blíže je pivot mediánu, tím dosáhneme vyšší rychlosti.

Jak je definována množina funkcí omikron O(f(n)) pro nějakou funkci f(n)?

Množina omikron O(f(n)) je množina všech funkcí, které mají stejný nebo vyšší řád růstu než f(n). Omikron O(f(n)) je nejhorší možnost co se týká složitosti algoritmu, která může pro jakkákoliv libovolné data nastat. Př. qsort má v nejhorším případě složitost N^2, v průměru N x log(N) - N x log(N) je tedy prvkem množiny omikron O(N^2)

Jak implementovat frontu konečné délky polem?

Mám pole, přidávám na konec pole, odebírám ze začátku a následně vše posunu o jedno doleva.

Popište Euklidův algoritmus pro zjištění NSD dvou čísel.

Mějme dána dvě přirozená čísla, uložená v proměnných u a w. Dokud w není nulové, opakuj: Do r ulož zbytek po dělení čísla u číslem w Do u ulož w Do w ulož r Konec algoritmu, v u je uložen největší společný dělitel původních čísel.

Jaké operace jsou v C povoleny s ukazateli a jaký mají význam?

Můžeme ukazatele sčítat a odčítat (posouváme se o několik polí dál a nebo zpět), dále pak můžeme ukazatele porovnávat (jestli jeden ukazuje na druhého atd.)

Popište algoritmus převodu textové podoby celého čísla do reprezentace int.

Můžeme využít funkci atoi(). Případně stačí přičíst '0'. c = i +'0';

Popište algoritmus hledání v poli se zarážkou.

Na určené volné místo v poli je vložena hledaná hodnota. Pole je pak prohlíženo od počátku a je hledána požadovaná hodnota. Pokud je hodnota nalezena a index se neshoduje s indexem vložené hodnoty, je prvek nalezen; v opačném případě prvek nalezen není.

Navrhněte efektivní algoritmus, který určí průnik dvou polí reprezentující množiny čísel. Určete složitosti tohoto algoritmu (časovou, prostorovou, v nejlepším a nejhorším případě). Pomohlo by, kdyby byla pole seřazená?

Najdi prvek, který je obsahem obou množin. Bude kratší.

Navrhněte efektivní algoritmus, který určí množinový rozdíl dvou polí reprezentující množiny čísel. Určete složitosti tohoto algoritmu (časovou, prostorovou, v nejlepším a nejhorším případě). Pomohlo by, kdyby byla pole seřazená?

Nalezni prvky, které jsou v A a nejsou v B. Podobné řešení jako u symetrické diference.

Jak pro zadaný cyklus určím podmínky, které zaručí, že skončí?

Nastavím podmínku, tedy že pokud cyklus dosáhne určité hodnoty tak z cyklu vyskočím(ukončím ho). Podmínka musí být nastavena správně, jinak by se cyklus neukončil (byl by nekonečný). Musím také zajistit, aby se měnila hodnota proměné.

Popište algoritmus prohledávání uspořádaného binárního stromu - prefix, infix, postfix.

Procházení začíná v kořeni stromu (nahoře) a postupuje se vždy na potomky daného vrcholu. Procházení končí, když v žádné větvi (tj. v žádnem podstromu) již není následník. PREFIX: proveď akci, projdi levý podstrom, projdi pravý podstrom, (nebo jinak: prvně kořen, pak levý podstrom a pak pravý) INFIX: projdi levý podstrom, proveď akci, projdi pravý podstrom,(nebo jinak: prvně levý podstrom, pak kořen a pak pravý) POSTFIX: projdi levý podstrom, projdi pravý podstrom, proveď akci ( nebo jinak: prvně levý podstrom, pak pravý a pak kořen).

Co je předpřekladač (preprocessor) jazyka C a k čemu slouží.

Prochází kód a doplňuje hlavičkové soubory, odstraňuje komentáře atd.

Jak je zařízena vazba mezi programovými jednotkami (proměnné, funkce)?

Programová jednotka (modul) je součást programu která je v jiném souboru. Vazba je zařízena externími proměnnými, nebo definicemi funkci uvedenymi v .h souboru.

Co je sekvenční přístup k souboru? Jaký by mohl být jiný a jak se liší?

Proudové (sekvenční) zpracování, zpracovává záznamy postupně (jeden za druhým). Bývá rychlejší než přímý přístup.

Jak se provede if () {...} if () {...} else {...} a proč?

První if se provede pokus se splní podmínka. Poté se podívá na druhý if, pokud je splněna podmínka provede se if, pokud není splněna podmínka provede se else.

Jaká bude hodnota 100000000000L + 12E100? Jakého typu a proč?

První číslo je na long moc dlouhé.

Co je sestavovač (linker) jazyka C a k čemu slouží.

Připojuje k programu potřebné knihovny a moduly, díky linkeru nemusíme vždy kompilovat celý program, ale jen změněnou část.

Co je rekurze a jak byste s její pomocí řešili problém Hanojských věží?

Rekurze je funkce, která volá sebe sama akorát s menším okruhem (pro vyřešení menšího problému). Musí obsahovat podmínku, která volání rekurze zastaví. Problém hanojských věží ( mám 3 tyčky, na nich kolečka a musím je přemístit na další krajní tyč). Rekurzí bych odhaloval, zda tah, který chci učinit je efektivní a povede ke správnému řešení, případně bych ofiltroval neefektivní (zdlouhavé) postupy.

K čemu složí funkce printf, jaké má parametry a co vrací?

Slouží k vypsání nějaké hodnoty. Parametr má buď jeden (text), případně podle počtu proměnných, které chceme vypsat. Vrací počet vypsaných znaků.

Popište struktury v C a definujte pomocí struktury proměnnou pro reprezentaci auta charakterizovaného počtem míst k sezení a SPZ.

Struktury v C slouží ke sdružování souvisejících dat do komplexnějších celků. #define MAX = 8; typedef struct Auto { int mist; char[MAX] spz; } AUTO

Co je v C union a k čemu slouží. Uveďte příklad.

Tento datový typ je velice podobný strukturám s tím rozdílem, že se položky v paměti překrývají místo toho, aby se ukládali za sebe. union identifikace { char RC[12]; /*bude vyplněno, pokud má rodné číslo*/ long long int cisloPasu; /* pokud ne, musí mít číslo pasu*/ };

Co je Little endian, big endian a proč se tím máme v C zabývat?

Typ uložení na místo v paměti. Little endien (vzužíván intelem) ukládá bity s nejnižší vahou „doprava". 0x4A3B2C1D se uloží jako: | 1D | 2C | 3B | 4A | Big endien je ukládá naopak, tedy nejnižší váhu "doleva". 0x4A3B2C1D se uloží jako: | 4A | 3B | 2C | 1D | Při práci s bloky paměti, které jsou uloženy na jiném endienu může způsobit problém (pokud to nepohlídáme).

Porovnejte složitosti typických operací pro ADT množina při reprezentaci množiny pomocí zřetězeného seznamu a pomocí pole. Jak se změní složitosti pokud budeme obě struktury uvažovat seřazené?

U interpretací pole, je problém realokace, při jejím špatném užití můžeme dosáhnout složitosti až n*n. Seřazení pole urychlí vyhledávání ale zhorší vkládání/mazání prvků a stojí čas (udržet ho seřazené). Zřetězený seznam odstraňuje problém s realokací na úkor vyšší režie (více náročnosti). Uspořádaný zřetězený seznam umožňuje efektivni operaci množinových operací ale neumožňuje binární vyhledávání (bez použití další struktury).

Jak se liší přiřazení mezi dvěma proměnnými typu pole a mezi dvěma proměnnými typu struktura?

U pole s mění adresa paměti. U struktur se mění obsah paměti.

Co je v C ukazatel?

Ukazatel (anglicky pointer) lze při zjednodušení považovat za adresu do paměti.

Navrhněte efektivní algoritmus, který určí množinovou symetrickou diferenci dvou polí reprezentující množiny čísel. Určete složitosti tohoto algoritmu (časovou, prostorovou, v nejlepším a nejhorším případě). Pomohlo by, kdyby byla pole seřazená?

V matematice se jako symetrická diference nebo symetrický rozdíl dvou množin označuje taková množina, která obsahuje všechny prvky z obou množin, které nejsou v jejich průniku. Řešení: Pro každý prvek v poli A se podívám, jestli není v poli B. Pokud prvek v poli B nenaleznu, vypíšu ho. Poté projdu prvek B a prvky, které se neshodovali vypíšu. Seřazení pomůže.

Navrhněte efektivní algoritmus, který určí sjednocení dvou polí reprezentující množiny čísel. Určete složitosti tohoto algoritmu (časovou, prostorovou, v nejlepším a nejhorším případě). Pomohlo by, kdyby byla pole seřazená?

Vezmu A a zkopíruju ho do C (spojené pole). Vezmu B a kouknu jestli je v A, pokud ne, přidám ho do C, pokud ano, nepřidám ho.

Mějme pole celých čísel. Popište algoritmus určení nejčastějšího prvku. Určete složitosti tohoto algoritmu (časovou, prostorovou, v nejlepším a nejhorším případě). Pomohlo by, kdyby pole bylo seřazené?

Vezmu první prvek, projdu zbytek pole a pokud se jiný prvek rovná prvnímu, zvýším si počet prvku o jedna. Pak se posunu na druhej prvek, pokud jeho součet je vyšší než u prvního prvku, přepíšu proměnou max. A tak dále až na konec pole. Seřazené pole zrchlí procházení, respektivě stačí se mi podívat zda následující prvek se rovná prvnímu, pokud ne tak v danném poli není prvek který by byl stejný. n^2

Co je v C enum? Uveďte příklad.

Výčtové typy používáme zejména pro zvýšení čitelnosti programů, pro překladač jsou kompatibilní s typem int. typedef enum {FALSE=0, TRUE} BOOLEAN;

Co je přetypování (cast)?

Z nějakého datového typu udělá nějaký jiný.

Proč je třeba nepoužívané dynamické proměnné uvolnit? Jak se to provede?

Zabírá místo v paměti, po ukončení programu to odstřelí OS, ale během běhu našeho programu by také mohlo dojít k dosahnutí maximální přidělené paměti. Uvolnění se provede free()

Jaká bude hodnota v proměnné a po provedení int a = 3; a^= 1?

a = 3 = 0011 a ^ = 1 0011 0001 0010 = 2

Co je soubor v C a jaký je rozdíl mezi textovým a binárním souborem?

binární soubor obsahuje strojový kód a pro jeho čtení potřebujeme znát pozici písmen,čísel atd. textový soubor je v lidsky srozumitelném jazyce

Popište algoritmus převodu int čísla do textové reprezentace.

c = i -'0';

Nahraďte příkaz do {...} while příkazem while.

do {a+=1;} while (a != 100) while (a !=100){ a+=1;}

Napište funkci, která vrátí součet absolutních hodnot obou jejích celočíselných argumentů.

int absSum ( int x, int y) { return abs(x) + abs(y); }

Určete nejlepší a nejhorší složitost algoritmu řazení vkládáním (insert sort) a algoritmus popište.

nejlepší = n nejhorší = n*n Řazení vkládáním (angl. insert sort) využívá již seřazené části pole, do které vkládá další prvky tak, že je postupně porovnává od nejvyššího prvku a pokud je vkládaný prvek menší, prohodí je, jinak začne s vkládáním dalšího prvku.

Určete nejlepší a nejhorší složitost algoritmu řazení slučováním (merge sort) a algoritmus popište.

nejlepší = n*Log(n) nejhorší = n*Log(n) Rozdělí seznam/pole na dvě poloviny, ty seřadí a následně je spojí.

Určete nejlepší a nejhorší složitost algoritmu řazení quick sort a algoritmus popište.

nejlepší = n*Log(n) nejhorší = n^2 Základní myšlenkou quicksortu je rozdělení řazené posloupnosti čísel na dvě přibližně stejné části. V jedné části jsou čísla větší a ve druhé menší, než nějaká zvolená hodnota (nazývaná pivot). Pokud je tato hodnota zvolena dobře, jsou obě části přibližně stejně velké. Pokud budou obě části samostatně seřazeny, je seřazené i celé pole. Obě části se pak rekurzivně řadí stejným postupem. Některé algoritmy to zlepšují, tedy pokud rozdělená část má například méně než 10 prvků, doseřadí ji jiným algoritmem.

Určete nejlepší a nejhorší složitost algoritmu řazení výběrem (select sort) a algoritmus popište.

nejlepší = n*n nejhorší = n*n Řazení výběrem (angl. select sort) opakovaně vyhledává nejmenší prvek. První průchod projde celé neseřazené pole a najde globální minimum a tento prvek prohodí s prvním prvkem pole. Nejmenší prvek je tak umístěn na svou správnou pozici a druhý průchod již prohledává pole o jeden prvek kratší.

Jaký je rozdíl mezi syntaxí a sémantikou v programovacím jazyce.

syntaxe se zabývá formou (znaky a jejich vztahy, skládání znaků/slov do určitého významu) sémantika - význam znaků

Nahraďte příkaz while() {...} příkazem do {...} while

while (a !=100){ a+=1;} do {a+=1;} while (a != 100)

Coje normalizace u interní reprezentace racionálních (float,double, long double) hodnot?

Čísla jsou v těchto typech reprezentována jako floating point (což není vždy ideální). Číslo (32 bitů) je například rozděleno na 24 bitů pro mantisu a 8 pro exponent (obojí eventuelně se znaménkem). Tzv. hidden bit, neboli skrytý bit. U normalizovaných čísel je tato hodnota rovna 1, u denormalizovaných 0. Příklad: 0.11011 se normalizuje na 1.1011×2^-1. Note: Dnes se v některých jazycích používá typ: DECIMAL pro operace s pěnežními hodnotamu, který má fixed point.

Napište funkci, která pro zadané celé číslo vypíše jeho rozklad na prvočinitele.

Číslo dělíme 2mi dokud se jedná o dělení beze zbytku, poté dělíme číslem 3.

Jaká bude hodnota v proměnné a po provedení int a = 3; a&&= 1?

Špatný zápis.

Vysvětlete pojem skrytý bit u interní reprezentace racionálních (float,double, long double) hodnot.

Špatně, jedná se o první bit mantisy (před desetinnou čárkou). Pokud je 1, je číslo v normalizovaném tvaru (tj. 1.XXX*2^Y), který zaručuje největší možnou přesnost a unikátnost zápisu každého čísla. Například hodnota 0 ovšem normalizovat nelze.

Co vyjadřuje asymptotická složitost algoritmu, proč bychom se jí měli zabývat?

Efektivitu a rychlost. Asypmtotická složitost určuje jak roste složitost výpočtu vzhledem k velikosti vstupních dat. Zanedbávají se aditivní a multiplikativní konstanty. (Př. lineární asymptotická složitost = n, kvadratická = n*n atd) Vyjadřuje chování algoritmu na základě velikosti (počtu) vstupních dat. Vyjadřuje se: O[f(n)]. Říká, že složitost programu je v nejhorší možné variantě f(n) [f(n) je napřklad: n^2]. Druhy složitosti: konstantní, logaritmická, lineální, kvadratická, exponencíální, faktoriální.

K čemu slouží Eratosthénovo síto a jak se používá?

Eratosthenovo síto je jednoduchý algoritmus pro nalezení všech prvočísel menších než zadaná horní mez. Vezme první prvočíslo a odstraní všechny jeho násobky. Takhle pokračuje dokud neodstraní všechna čísla v seznamu nebo se neoznačí jako prvočíslo odmocnina ze zadaného maxima.

Napište funkci, která vypíše prvních N členů Fibonacciho posloupnosti. Určete složitost Vašeho algoritmu.

Fibonnacioho posloupnost je posloupnost čísel, kdy každé číslo je součtem 2 předchozích čísel.

Popište implementaci fronty spojovým seznamem. Jak byste omezili délku?

Fronta - First in, first out (FIFO) Jednalo by se o jednosměrný seznam, kde znám ukazatel na začátek a na konec (pro lepší vkládání). Velikost lze hlídat pomocí proměnné s maximální velikostí.

Co dělá funkce free? Jaké má parametry?

Funkce uvolňuje alokované bloky paměti, řekne že daný úsek je volný (znovu použitelný) ale danné hodnoty přímo nesmaže. Jako parametr potřebuje ukazatel na začátek seznamu, který se má dealokovat.

Co je globální proměnná, jak ji v programu poznám a na jakou hodnotu je nastavena?

Globální proměnná je definovaná na začátku programu, mimo všechny funkce. Hodnota může být definována kdekoliv v programu.

Popište rozsah platnosti identifikátorů v C.

Platí v bloku kódu, kde je deklarován a ve všech podřazených. Například proměnná(identifikátor) deklarovaný v podmínce if, mimo podmínku neplatí. Jedině globální proměnná(identifikátor) je přístupný v celém programu.

Popište implementaci zásobníku spojovým seznamem. Jak byste omezili hloubku?

Pomocí jednosměrného spojového seznamu, kde bych odkazoval pouze na poslední člen. Hloubku bych hlídal pomocí proměnné.

Jakým způsobem měříme efektivitu algoritmu?

Počtem iterací, tedy kolik výpočtů daný algoritmus udělá. Toto zajišťuje objektivitu (čas a rychlost je ovlivněna hw).

Co je podmíněný překlad v C? Uveďte příklad.

Preprocesor vyhodnocuje kód a například za #include <stdio.h> dosadí danou knihovnu.

Co je lineární spojová struktura? Ukažte její vytvoření pro hodnoty typu int.

Pro reprezenatci dynamických seznamů a množin se mohou použít spojové struktury. Podle počtu následníků se dělí na lineární(jeden následník) a nelineární (například stromy). Příklady lineárních struktur jsou: - jednosměrný, - dvousměrný (též obousměrný), - cyklický jednosměrný.


Related study sets

Chapter 44 Objectives 1,2,3,5,6 and Chapter 43 Objective 14

View Set

Module 3 - Medicare Part D: Prescription Drug Coverage

View Set

CH 2: Central Dogma (Transcription, Translation)

View Set

Vocabulary Level E Unit 3: def/syn/ant separate

View Set

Firefox Keyboard shortcuts - Search

View Set