ALGDS – řešená cvičení ALGDS – řešená cvičení........................ 1 1.cvičení....................................- 2 1/1 ......................................... - 2 1/2 ......................................... - 2 1/3 ......................................... - 2 1/4 ......................................... - 3 2.cvičení....................................- 3 2/1 ......................................... - 3 2/2 ......................................... - 3 2/3 ......................................... - 4 2/4 ......................................... - 4 2/5 ......................................... - 4 3. cvičení...................................- 5 3/1 ......................................... - 5 3/2 ......................................... - 5 3/3 ......................................... - 5 3/4 ......................................... - 6 3/5 ......................................... - 6 4. cvičení...................................- 6 4/1 ......................................... - 6 4/2 ......................................... - 6 4/3 ......................................... - 7 4/4 ......................................... - 7 4/5 ......................................... - 7 5. cvičení...................................- 8 5/1 ......................................... - 8 5/2 ......................................... - 8 5/3 ......................................... - 8 5/4 ......................................... - 9 5/5 ......................................... - 9 Společné příklady ze cvičení 5: ... - 9 6. cvičení.................................- 10 6/1 ....................................... - 10 6/2 ....................................... - 10 6/3 ....................................... - 11 6/4 ....................................... - 11 6/5 X..................................... - 11 6/6 Společný příklad X............. - 11 7. cvičení.................................- 12 7/1 a).................................... - 12 7/1 b) ................................... - 12 7/2 ....................................... - 13 7/3 ....................................... - 13 7/4 ....................................... - 13 7/5 ....................................... - 14 8. cvičení.................................- 14 8/1 X..................................... - 14 8/2 ....................................... - 14 8/3 ....................................... - 14 8/4 ....................................... - 15 8/5 ....................................... - 15 -
8/prémiový příklad X............... - 16 9. cvičení.................................- 16 9/1 X .................................... - 16 9/2 X .................................... - 16 9/3 X .................................... - 16 9/4 X .................................... - 16 9/5 X .................................... - 17 10. cvičení...............................- 17 10/1...................................... - 17 10/2...................................... - 17 10/3...................................... - 18 10/4...................................... - 18 10/5...................................... - 18 10/Společný příklad: X ............ - 19 11. cvičení – opakovaní před písemkou ................................- 19 11/1...................................... - 19 11/2...................................... - 19 11/3...................................... - 20 11/4...................................... - 20 11/5...................................... - 20 11/6 X................................... - 21 11/7 X................................... - 21 11/8 X................................... - 21 11/9 X................................... - 21 11/10 X ................................. - 21
1
-
1.cvičení 1/1
Napište algoritmus, pomocí něhož postupně uložíte 3 hodnoty do proměnných a1, a2, a3 a určíte počet proměnných, jejichž hodnota je rovna nule. Počet vypište. ZAČÁTEK ČTI (a1); ČTI (a2); ČTI (a3); POČET:=0; JESTLIŽE a1=0 PAK POČET:=POČET+1; JESTLIŽE a2=0 PAK POČET:=POČET+1; JESTLIŽE a3=0 PAK POČET:=POČET+1; NAPIŠ(„Počet proměnných s nulou je “,POČET) KONEC.
1/2
Napište algoritmus, pomocí něhož postupně uložíte 4 hodnoty do proměnných a1, a2, a3, a4 a určíte součet hodnot těch proměnných, jejichž hodnota je sudá. Součet vypište. ZAČÁTEK SOUČET:=0; ČTI (a1); JESTLIŽE a1 MOD 2 = 0 PAK SOUČET:= SOUČET + a1; ČTI (a2); JESTLIŽE a2 MOD 2 = 0 PAK SOUČET:= SOUČET + a2; ČTI (a3); JESTLIŽE a3 MOD 2 = 0 PAK SOUČET:= SOUČET + a3; ČTI (a4); JESTLIŽE a4 MOD 2 = 0 PAK SOUČET:= SOUČET + a4; JESTLIŽE SOUČET=0 PAK NAPIŠ(„Nebyla zadána sudá čísla!“) JINAK NAPIŠ(„Součet sudých hodnot je “,SOUČET); KONEC.
1/3
Do proměnné x uložte libovolné liché číslo.Určete součet a součin pěti lichých za sebou jdoucích čísel, jestliže prostřední číslo je x. ZAČÁTEK SOUČET:=0; ČTI (x); JESTLIŽE x MOD 2 = 0 PAK NAPIŠ(„Bylo zadáno sudé číslo!“) JINAK ZAČÁTEK SOUČET:= 5x; SOUČIN:= (x-4)*(x-2)*x*(x+2)*(x+4); KONEC; NAPIŠ(„Součet je “,SOUČET,„ a součin je “,SOUČIN,„.“); KONEC.
-2-
1/4 Vypočítejte a vypište velikost hrany, objem a povrch krychle, jestliže do proměnné u načtete velikost tělesové úhlopříčky. ZAČÁTEK ČTI (u); JESTLIŽE u > 0 PAK ZAČÁTEK a:= u/√3; V:= a3; P:= 6*a2; NAPIŠ(„Velikost hrany krychle:“,a); NAPIŠ(„Objem krychle:“,V); NAPIŠ(„Povrch krychle:“,P); JINAK NAPIŠ(„S touto hodnotou nelze počítat!“) KONEC.
2.cvičení 2/1
Určete hodnotu, která se rovná rozdílu maximální hodnoty ze tří čísel uložených v proměnných x, y, z a aritmetického průměru z těchto čísel. ZAČÁTEK ČTI (x); ČTI (y); ČTI (z); MAX:= x; JESTLIŽE y > MAX PAK MAX:= y; JESTLIŽE z > MAX PAK MAX:= z; PRŮMĚR:=(x+y+z)/3; HODNOTA:= MAX – PRŮMĚR; NAPIŠ(„Rozdíl maximální hodnoty a průměru je:“,HODNOTA); KONEC.
2/2
Určete minimální hodnotu ze čtyř celých čísel uložených v proměnných x, y, u, v. ZAČÁTEK ČTI (x); ČTI (y); ČTI (u); ČTI (v); MIN:= x; JESTLIŽE y < MIN JESTLIŽE u < MIN JESTLIŽE v < MIN NAPIŠ(„Minimální KONEC.
PAK MIN:= y; PAK MIN:= u; PAK MIN:= v; hodnota je: “,MIN)
-3-
2/3 Určete největší počet za sebou jdoucích přirozených čísel počínaje číslem x, které je potřebné sečíst, abyste dostali součet největší možný a zároveň menší než je hodnota uložená v proměnné y. Hodnoty do proměnných x, y nejprve načtěte, nechť x < y. ZAČÁTEK ČTI (x); ČTI (y); JESTLIŽE x < y PAK ZAČÁTEK součet:= x; počet:= 1; DOKUD součet < y OPAKUJ ZAČÁTEK součet:=součet+1; počet:=počet+1; KONEC; NAPIŠ(„Počet je “,POČET); JINAK NAPIŠ(„Špatně zadané hodnoty x a y!“); KONEC.
2/4
Vypište součin všech celých čísel ležících ve vámi zadaném intervalu (dolní < horní). ZAČÁTEK ČTI (dolní); ČTI (horní); JESTLIŽE dolní < horní PAK ZAČÁTEK SOUČIN:= 1; i:=dolní; DOKUD i < horní OPAKUJ ZAČÁTEK SOUČIN:=SOUČIN * i; i:= i+1; KONEC; NAPIŠ(„Součin čísel v intervalu (“,dolní;horní,„)je “,SOUČIN); JINAK NAPIŠ(„Špatně zadaný interval“); KONEC.
2/5 Do proměnné x uložte libovolné číslo. Určete součet a součin 101 za sebou jdoucích čísel, jestliže prostřední číslo je x. ZAČÁTEK ČTI (x); DOLNÍ:=(x-50); HORNÍ:=(X+50) PRO i OD DOLNÍ DO HORNÍ OPAKUJ ZAČÁTEK SOUČET:=SOUČET + DOLNÍ; SOUČIN:=SOUČIN + DOLNÍ; DOLNÍ:=DOLNÍ + 1; KONEC; NAPIŠ(„Součin je “,SOUČIN); KONEC.
-4-
3. cvičení 3/1 Vypište aritmetický průměr z celých čísel ležících ve vámi zadaném intervalu (dolní < horní). ZAČÁTEK ČTI (dolní); ČTI (horní); JESTLIŽE dolní < horní PAK ZAČÁTEK SOUČET:= 0; i:=dolní; DOKUD i < horní OPAKUJ ZAČÁTEK SOUČET:=SOUČET + i; i:= i+1; KONEC; PRŮMĚR:=SOUČET/(horní – dolní +1); NAPIŠ(„Součin čísel v intervalu (“,dolní;horní,„)je “,SOUČIN); JINAK NAPIŠ(„Špatně zadaný interval“); KONEC.
3/2
Určete přirozené číslo nabývající minimální hodnoty z konečného počtu přirozených čísel, jejichž hodnoty postupně ukládáte do proměnné číslo, přičemž ukládání ukončíte vložením hodnoty nula. ZAČÁTEK ČTI (číslo); MIN:= ∞; DOKUD číslo ≠ 0 OPAKUJ ZAČÁTEK JESTLIŽE číslo < MIN PAK ZAČÁTEK MIN:= číslo; ČTI (číslo); KONEC; JINAK ČTI (číslo); KONEC; NAPIŠ(„Minimální hodnota je “,MIN); KONEC.
3/3 Do proměnné číslo příkazem čti (číslo) postupně ukládejte přirozená čísla, přičemž ukládání ukončete vložením hodnoty nula. Určete a vypište maximální hodnotu z vložených čísel, která jsou dělitelná čtyřmi. ZAČÁTEK ČTI (číslo); MAX:= 0; DOKUD číslo ≠ 0 OPAKUJ ZAČÁTEK JESTLIŽE číslo MOD 4=0 ٨ číslo > MAX PAK MAX:= číslo; ČTI (číslo); KONEC; JINAK NAPIŠ(Byla zadána pouze nula); KONEC; NAPIŠ(„Maximální hodnota ze zadaných čísel dělitelných 4 je“,MAX); KONEC.
-5-
3/4 Určete n-tou mocninu nějakého vámi zadaného čísla. Hodnoty načtěte do proměnných n a x. ZAČÁTEK ČTI (x); ČTI (n); mocnina:= x^n; NAPIŠ(„N-tá mocnina x je “,mocnina); KONEC.
3/5 Zjistěte a vypište, zda dané číslo uložené v proměnné x je prvočíslo. ZAČÁTEK ČTI (x);
x
DĚLITEL:= DOKUD x MOD DĚLITEL ≠ 0 OPAKUJ DĚLITEL:=DĚLITEL – 1; JESTLIŽE DĚLITEL = 1 PAK NAPIŠ(x,„ je prvočíslo“) JINAK NAPIŠ(x,„ není prvočíslo“); KONEC.
4. cvičení 4/1 Vypočtěte součin prvních p přirozených čísel dělitelných třemi, p ≥ 1. ZAČÁTEK ČTI (p); SOUČIN:=1; ČÍSLO:=3; PRO i OD 1 DO P OPAKUJ ZAČÁTEK SOUČIN:=SOUČIN*ČÍSLO; ČÍSLO:=ČÍSLO+3; KONEC; NAPIŠ(„Součin prvních “,p,„ přirozených čísel dělitelných třemi je “,SOUČIN); KONEC.
4/2
Určete součet všech lichých přirozených čísel menších než daná hodnota h a větších než daná hodnota d. ZAČÁTEK ČTI (d); ČTI (h); SOUČET:=0; PRO i OD d+1 DO h-1 OPKAUJ JESTLIŽE i MOD 2 = 1 PAK SOUČET:=SOUČET+i; NAPIŠ(„Součet je “,SOUČET); KONEC.
-6-
4/3 Určete sudé přirozené číslo nabývající minimální hodnoty z konečného počtu přirozených čísel, jejichž hodnoty postupně ukládáte do proměnné číslo příkazem čti(číslo), přičemž ukládání ukončíte vložením hodnoty nula. ZAČÁTEK ČTI (číslo); MIN:=číslo; DOKUD číslo ≠ 0 OPAKUJ JESTLIŽE číslo MOD 2 = 0 A ČÍSLO < MIN PAK ZAČÁTEK MIN:=číslo; ČTI (číslo); KONEC; JINAK ČTI (číslo); NAPIŠ(MIN); KONEC.
4/4 Určete nejmenší počet za sebou následujících čísel, počínaje číslem jedna, které je zapotřebí sečíst, abyste dostali součet větší než je daná hodnota h. ZAČÁTEK ČTI (h); POČET:= 1; DOKUD SOUČET < h OPAKUJ ZAČÁTEK SOUČET:=SOUČET+POČET; POČET:= POČET + 1; KONEC; NAPIŠ(POČET) KONEC.
4/5 Do proměnné číslo příkazem čti (číslo) postupně ukládejte celá čísla, přičemž ukládání ukončete vložením hodnoty nula. Určete a vypište maximální hodnotu z vložených čísel, která jsou menší než hodnota v proměnné hranice, kterou načtete. ZAČÁTEK ČTI (hranice); ČTI (číslo); MAX:=číslo; DOKUD číslo ≠ 0 OPAKUJ ZAČÁTEK JESTLIŽE číslo > MAX A číslo < hranice PAK MAX:=číslo; ČTI (číslo); KONEC; NAPIŠ(MAX); KONEC.
-7-
5. cvičení 5/1
2).
Určete maximální a minimální hodnotu v posloupnosti celých čísel a1, a2, …, an (předpokládejme n Předpokládáme, že prvky posloupnosti jsou uloženy v jednorozměrném poli a. Proveďte záměnu posledního prvku posloupnosti s maximálním prvkem. ZAČÁTEK MAX:= a[1]; INDEX:=1; PRO i OD 1 DO n OPAKUJ ZAČÁTEK JESTLIŽE a[i] > MAX PAK MAX:= a[i]; INDEX:= I; JESTLIŽE a[i] < MIN PAK MIN:= a[i]; KONEC; a[INDEX]:= a[n]; a[n]:= MAX; KONEC.
5/2
Určete a vypište aritmetický průměr z čísel uložených v posloupnosti čísel a1, a2, …, an, jejichž hodnoty leží ve vámi zadaném intervalu. Předpokládáme, že prvky posloupnosti jsou uloženy v jednorozměrném poli a.
ZAČÁTEK ČTI (d); ČTI (h); JESTLIŽE d > h PAK NAPIŠ(„Špatně zadaný interval“) JINAK ZAČÁTEK SOUČET:=0; POČET:=0; PRO i OD 1 DO n OPAKUJ JESTLIŽE a[i] ≥ d A a[i]≤ h PAK ZAČÁTEK SOUČET:= SOUČET + a[i]; POČET:= POČET + 1; KONEC; JINAK NAPIŠ(„V posloupnosti nejsou hodnoty z intervalu!“); KONEC; NAPIŠ(„Průměr hodnot v posloupnosti z intervalu (“,d,h,„) je:“,SOUČET/POČET) KONEC.
5/3
Do proměnné x uložte libovolnou celočíselnou hodnotu. Vypište, kolikrát se v posloupnosti čísel a1, a2, …, an, která jsou uložena v jednorozměrném poli a, vyskytuje na sudé pozici v posloupnosti (tj. v položkách se sudým indexem) hodnota uložená v x. ZAČÁTEK ČTI (x); POČET:=0; PRO i OD 1 DO n OPAKUJ JESTLIŽE a[i] = x A i MOD 2 = 0 PAK POČET:=POČET + 1; NAPIŠ(„Hodnota “,x,„ je v posl. uložena “,POČET,„-krát na sudých pozicích“); KONEC.
-8-
5/4 Určete a vypište součet všech čísel uložených v posloupnosti čísel a1, a2, …, an, která jsou větší než daná hodnota x. Tu si do proměnné x načtěte příkazem čti(x). Předpokládáme, že prvky posloupnosti jsou uloženy v jednorozměrném poli a. ZAČÁTEK ČTI (X); SOUČET:=0; PRO i OD 1 DO n OPAKUJ JESLIŽE a[i] > x PAK SOUČET:=SOUČET + a[i]; NAPIŠ(„Součet čísel z posloupnosti, vyšších než “,x,„ je “,SOUČET); KONEC.
5/5 Předpokládejme, že v jednorozměrném poli a je uloženo n celých čísel. Napište algoritmus, který v poli a nahradí čísla menší než 5 a větší než nula předem zadanou hodnotou x. ZAČÁTEK ČTI (x); PRO i OD 1 DO n OPAKUJ JESTLIŽE a[i] > 0 A a[i] < 5 PAK a[i]:=x; KONEC.
Společné příklady ze cvičení 5:
Napište algoritmus, který ze vstupu přečte 20 čísel (do pole a) a vypíše je v opačném pořadí. ZAČÁTEK PRO i OD 1 DO 20 OPAKUJ ČTI a[i]; i:= 20; DOKUD i > 0 OPAKUJ ZAČÁTEK NAPIŠ a[i]; i:= i-1; KONEC; KONEC.
-9-
6. cvičení 6/1
3)
Určete nejmenší, druhou nejmenší a třetí nejmenší hodnotu v posloupnosti navzájem různých celých čísel a1, a2, …, an. Předpokládáme, že prvky posloupnosti jsou uloženy v jednorozměrném poli a. ( Předpokládejme n ZAČÁTEK MAX:= a[1]; INDEX:= 1; PRO i OD 1 DO n OPAKUJ JESTLIŽE MAX < a[i] PAK ZAČÁTEK MAX:= a[i]; INDEX:= i; KONEC; MIN1:= MAX; INDEX1:= INDEX; MIN2:= MAX; INDEX2:= INDEX; MIN3:= MAX; PRO i OD 1 DO n OPAKUJ ZAČÁTEK JESTLIŽE MIN1 > a[i] PAK ZAČÁTEK MIN1:= a[i]; INDEX:= i; KONEC; JESTLIŽE MIN2 > a[i] AND i ≠ INDEX1 PAK ZAČÁTEK MIN2:= a[i]; INDEX2:= i; KONEC; JESTLIŽE MIN2 > a[i] AND i ≠ INDEX1 AND i ≠ INDEX2 ZAČÁTEK MIN3:= a[i]; INDEX3:= i; KONEC; KONEC; KONEC.
6/2
PAK
Napište algoritmus, kterým vložíte do posloupnosti a1, a2, …, an před k-tý prvek nový prvek x, který načtete příkazem čti(x). ZAČÁTEK ČTI (k); ČTI (x); j:= 1; m:= 0; PRO i OD k DO n OPAKUJ ZAČÁTEK b[j]:= a[i]; j:= j+1; m:= m+1; KONEC; a[k]:= x; i:= k+1; PRO j OD 1 DO m OPAKUJ ZAČÁTEK a[i]= b[j]; i:= i+1;
- 10 -
KONEC; KONEC.
6/3 Napište algoritmus, který pro posloupnost n čísel a1, a2, …, an, uložených v jednotlivých položkách proměnné a typu jednorozměrné pole, určí počet těch členů posloupnosti ležících na lichých pozicích v poli a (tj. i = 1, 3, …), které mají sudou hodnotu. Tyto hodnoty uložte postupně do posloupnosti b1, b2, …, bk, 1 ≤ k ≤ n . ZAČÁTEK POČET:= 0; i:= 1; DOKUD i ≤ n OPAKUJ ZAČÁTEK JESTLIŽE a[i] MOD 2 = 0 PAK ZAČÁTEK POČET:= POČET + 1; b[POČET]:= a[i]; KONEC; i:=i+2; KONEC; KONEC.
6/4 Napište algoritmus, který pro posloupnost n čísel a1, a2, …, an, uložených v jednotlivých položkách proměnné a typu jednorozměrné pole, najde poslední sudé číslo v dané posloupnosti. Použijte zarážku. ZAČÁTEK a[0]:= 2; i:= n; DOKUD a[i] MOD 2 ≠ 0 OPAKUJ i:= i – 1; index:= i; JESTLIŽE index = 0 PAK NAPIŠ(„V posloupnosti není sudé číslo“) JINAK NAPIŠ(„Poslední sudé číslo je v a[“index„]”) KONEC.
6/5 X Zjistěte, zda v posloupnosti čísel a1, a2, …, an, uložených v jednotlivých položkách jednorozměrného pole a, existuje číslo větší hodnoty než je daná hodnota x. Jakmile takové číslo najdete, zapište jeho hodnotu a index položky, v které se nachází, a v dalším procházení polem nepokračujte. Pokud takové číslo neexistuje, informujte o tom. ZAČÁTEK KONEC.
6/6 Společný příklad X Ze vstupu načtěte do pole a posloupnost 100 reálných hodnot. Sestavte algoritmus, kterým nejprve najdete maximální hodnotu a její pozici k. a) vyměňte jí se složkou a[100], b) posuňte položky a[k+1], a[k+2],…, a[100] o jednu pozici “dopředu (dolů)”, a hodnotu, která byla původně v položce a[k], uložte do a[100]. Takto vytvořenou posloupnost s pozměněným pořadím vypište. ZAČÁTEK KONEC.
- 11 -
7. cvičení 7/1 a)
Předpokládejte, že posloupnost navzájem různých celých čísel a1, a2, …, an je uložena v poli a. Sestavte algoritmus, kterým přenesete danou posloupnost z pole a do pole b tak, aby b[1] = min{a1, a2, …, an}, b[n] a ostatní prvky zůstaly ve stejném pořadí. (Např.: jestliže ak je minimální prvek, tak pole b vypadá: b = (b[1], b[2],b[3],….,b[n]) = (ak, a1, a2, …, ak-1, ak+1,…, an).
začátek b[1]:=a[1]; index := 1; pro i od 2 do n opakuj jestliže b[1] > a[i] pak začátek b[1]:=a[i]; index := i; konec; pro i od 1 do (index – 1) opakuj b[i+1]:=a[i]; pro i od (index + 1) do n opakuj b[i]:=a[i]; konec.
7/1 b)
Předpokládejte, že posloupnost navzájem různých celých čísel a1, a2, …, an je uložena v poli a. Sestavte algoritmus, kterým přenesete danou posloupnost z pole a do pole b tak, aby b[1] = min{a1, a2, …, an}, b[n] = max{ a1, a2, …, an} a ostatní prvky zůstaly ve stejném pořadí. (Např.: jestliže ak je minimální prvek, ap je maximální prvek, tak pole b vypadá: (b[1], b[2],b[3],….,b[n]) = (ak, a1, a2, …, ak-1, ak+1,…, ap-1, ap+1,…,an, ap), pro k < p nebo (b[1], b[2],b[3],….,b[n]) = (ak, a1, a2, …, ap-1, ap+1,…, ak-1, ak+1,…,an, ap), pro p < k začátek b[1]:=a[1]; index_min := 1; b[n]:=a[1]; index_max := 1; pro i od 2 do n opakuj začátek jestliže b[1] > a[i] pak začátek b[1]:=a[i]; index_min := i; konec; jestliže b[1] < a[i] pak začátek b[n]:=a[i]; index_max := i; konec; konec; jestliže index_min < index_max pak začátek pro i od 1 do (index_min – 1) opakuj b[i+1]:=a[i]; pro i od (index_min + 1) do (index_max – 1) opakuj b[i]:=a[i]; pro i od (index_max + 1) do n opakuj b[i-1]:=a[i]; konec jinak začátek pro i od 1 do (index_max – 1) opakuj b[i+1]:=a[i]; pro i od (index_max + 1) do (index_min – 1) opakuj b[i]:=a[i]; pro i od (index_min + 1) do n opakuj b[i-1]:=a[i]; konec; konec.
- 12 -
7/2 Je dáno n-prvkové pole a. Sestavte algoritmus, kterým přenesete pole a do n- prvkového pole b tak, že pro pole b bude platit: (b[1], b[2], b[3],….,b[n])= (a[1], a[n], a[2], a[n-1], a[3], a[n-2], a[4], a[n-3],…., a[k]), kde k =
n n +1 + 1 když (n mod 2) = 0 a k = když (n mod 2) = 1. 2 2 začátek pro i od 1 do n div 2 opakuj začátek b[2i-1]:=a[i]; b[2i]:=a[n-i+1]; konec jestliže n mod 2 ≠ 0 pak b[n]:=a[(n div 2)+1]; konec.
7/3
Jsou dána přirozená čísla n, a1, a2, …, an. Je zapotřebí určit, kolik členů ak dané posloupnosti uložené v n-rozměrném poli a, vyhovuje podmínce 2.a k < a k −1 + a k +1 , (k ≥ 3) a tyto členy uložit do pole b. Pokud se takové členy v poli a nenacházejí, podejte o tom informaci. začátek počet := 0; i := 0; pro k od 2 do n-1 opakuj jestliže 2*a[k] < a[k-1] + a[k+1] pak začátek počet := počet + 1; i := i + 1; b[i] := a[k]; konec; jestliže počet = 0 pak napiš(“Žádný člen posloupnosti nesplňuje podmínku.”); konec.
7/4 Pro danou posloupnost n celých čísel uloženou v poli a utvořte pole b tak, že jeho položka b[i] , i = 1, …, n, je roven počtu těch členů z pole a, které převyšují v počátečním úseku délky i posloupnosti a hodnotu i. Posloupnost b vypište. začátek i := 0; pro k od 2 do n-1 opakuj jestliže 2*a[k] < a[k-1] + a[k+1] pak začátek i := i + 1; b[i] := a[k]; konec; jestliže i = 0 pak napiš(“Žádný člen posloupnosti nesplňuje podmínku.”); konec.
- 13 -
7/5 Napište algoritmus, který pro posloupnost n čísel a1, a2, …, an uloženou v jednotlivých položkách proměnné a typu jednorozměrné pole provede její rozdělení do tří posloupností tak, že prvky původní posloupnosti od prvního do ktého budou v jedné posloupnosti, od (k+1)-ního prvku do s-tého budou v druhé posloupnosti a od (s +1)-ního do posledního v třetí posloupnosti, 1 ≤ k < s < n, n ≥ 3. ZAČÁTEK ČTI (k); ČTI (s); JESTLIŽE k > s PAK NAPIŠ („ŠPATNÉ INTERVALY“) JINAK JESTLIŽE s > n PAK NAPIŠ („INTERVAL VĚTŠÍ NEŽ POSLOUPNOST“) JINAK ZAČÁTEK PRO i OD 1 DO k OPAKUJ x[i]:= a[i]; j:= 1; PRO i OD k+1 DO s OPAKUJ ZAČÁTEK y[e]:= a[i]; j:= j+1; KONEC; PRO i OD s+1 DO n OPAKUJ ZAČÁTEK z[f]:= a[i]; f:= f+1; KONEC; KONEC; KONEC.
8. cvičení 8/1 X
Nechť matice A je typu (m,n). Napište algoritmus, který sečte prvky prvního a předposledního řádku a daný součet uloží do proměnné součet.
8/2
Nechť matice A je typu (m,n). Napište algoritmus, který provede záměnu druhého a čtvrtého sloupce. Pozměněnou matici vypište. ZAČÁTEK PRO i OD 1 DO m OPAKUJ ZAČÁTEK ZÁMĚNA:= a[i,2]; a[i,2]:= a[i,4]; a[i,4]:= ZÁMĚNA; KONEC; PRO i OD 1 DO m OPAKUJ PRO j OD 1 DO n OPAKUJ NAPIŠ(a[i;j]) KONEC.
8/3 Nechť matice A je typu (m,n). Napište algoritmus, který vypočítá součet sudých prvků (tj. prvků se sudou hodnotou) třetího řádku a součin lichých prvků (tj. prvků s lichou hodnotou) pátého sloupce. ZAČÁTEK SOUČET:= 0; SOUČIN:= 1;
- 14 -
PRO j OD 1 DO n OPAKUJ JESTLIŽE a[3,j] MOD 2 = 0 PAK SOUČET:= SOUČET + a[3,j]; PRO j OD 1 DO n OPAKUJ JESTLIŽE a[I,5] MOD 2 = 1 PAK SOUČIN:= SOUČIN + a[I,5]; KONEC.
8/4
Nechť matice A je typu (m,n). Napište algoritmus, který určí počet všech lichých prvků ležících v druhém řádku a předposledním sloupci, který uložíte do proměnné počet. A pak nahraďte poslední prvek posledního řádku (tj. a[m,n]) hodnotou proměnné počet. ZAČÁTEK POČET:= 0; PRO j OD 1 DO m OPAKUJ JESTLIŽE a[2,j] MOD 2 = 1 PAK POČET:= POČET + 1; PRO i OD 1 DO n OPAKUJ JESTLIŽE a[i,n-1] MOD 2 = 1 PAK POČET:= POČET +1; JESTLIŽE a[2,n-1] MOD 2 = 1 PAK POČET:= POČET – 1; a[m,n]:= počet; KONEC.
8/5
Nechť matice A je typu (m,n). Předpokládejme, že prvky matice jsou navzájem různé. Napište algoritmus, který najde minimální prvek prvního řádku a maximální prvek posledního řádku a pak tyto prvky vymění. (Pozn.: Je nutno najít nejen minimální hodnotu, ale též pozici, kde tato minimální hodnota leží. Obdobně maximální prvek.)
ZAČÁTEK MIN:= a[1,1]; i_min:= 1; MAX:= a[m,1]; i_max:= 1; PRO j OD 2 DO n OPAKUJ ZAČÁTEK JESTLIŽE a[1,j] < MIN PAK ZAČÁTEK MIN:= a[1,j]; i_min:= j; KONEC; JESTLIŽE a[m,j] > MAX PAK ZAČÁTEK MAX:= a[m,j]; i_max:=j; KONEC; KONEC; a[1,i_min]:= max; a[n,i_max]:= min; KONEC.
- 15 -
8/prémiový příklad X Ze vstupu načtěte dvě trojciferná čísla pomocí příkazů čti(číslo1), čti(číslo2). První číslo rozložte na cifry a tyto pak uložte do prvního řádku matice A typu (2,3). Druhé číslo také rozložte na cifry a pak je uložte do druhého řádku matice A.
9. cvičení 9/1 X
Nechť matice A je typu (m, n). Z matice A vytvořte matici B typu (m, n +1) tak, že před k-tý sloupec vložíte nový sloupec obsahující m jedniček. Hodnotu k načtete pomocí příkazu čti(k). Matice B bude vypadat následovně:
a1,1 a 2 ,1 B= Μ a m −1,1 a m ,1
a1, 2
a 2,2
Μ
a m −1, 2 am, 2
Λ Λ
Λ Λ
a1, k −1
a 2 , k −1 Μ
1 1
Μ
a1, k
a 2,k
Μ
a m −1, k −1 1 a m −1, k a m, k −1
1
a m,k
Λ Λ
Λ Λ
a1, n a 2, n Μ a m −1, n a m,n
9/2 X
Nechť matice A je typu (m, n). Z matice A vytvořte matici B typu (m +1, n ) tak, že k matici A přidáte (m +1)-tý řádek obsahující prvky am+1,1,
am+1,2, …, am+1,n, přičemž am+1,1 = ak,1+ as,1, am+1,2 = ak,2+ as,2,
…, am+1,n = ak,n+ as,n . Proměnné k,s načtete pomocí příkazů čti(k), čti(s). Matice B bude vypadat následovně:
a1,1 Μ B= a m ,1 a + a s ,1 k ,1
a1, 2
Λ
a m, 2
Λ
Μ
a k ,2 + a s ,2
Λ
Μ a m, n a k , n + a s , n a1, n
9/3 X
Nechť matice A je typu (m, n). Předpokládejme, že prvky matice jsou navzájem různé. Určete maximální hodnotu matice a uložte ji do proměnné max. Pak nahraďte každý prvek druhého řádku, jehož hodnota leží v intervalu <max5, max-1>, hodnotou max.
9/4 X Nechť matice A je typu (m, n). Určete průměrnou hodnotu prvků matice A (tj. průměrnou hodnotu ze všech hodnot matice) a uložte ji do proměnné průměr. Pak zjistěte, kolikrát se v matici A vyskytuje prvek s menší hodnotou než je průměrná hodnota a vypočítejte průměrnou hodnotu z těchto prvků.
- 16 -
9/5 X Nechť matice A je typu (m, n). Napište algoritmus, který určí první sudou hodnotu prvního řádku, uloží ji do proměnné suda a pak zjistí prvky, jejichž hodnota je větší než hodnota proměnné suda a tyto prvky uloží do pole a. Jestliže takové prvky neexistují, podejte o tom informaci.
10. cvičení 10/1
V matici A typu (m, n) určete v každém sloupci součet prvků. Vypočtené součty ukládejte postupně do jednorozměrného pole a. Matici A a pole a vypište. ZAČÁTEK PRO j OD 1 DO m OPAKUJ ZAČÁTEK SOUČET:= 0; PRO i OD 1 DO m OPAKUJ SOUČET:= SOUČET + a[i,j]; a[j]:= SOUČET; NAPIŠ(a[j]); KONEC. PRO i OD 1 DO m OPAKUJ PRO j OD 1 DO n OPAKUJ NAPIŠ(a[I,j]; KONEC.
10/2
Načtete prvky matice A typu (m, n). Zjistěte a vypište průměr těch prvků matice, které leží v sudých řádcích a zároveň v lichých sloupcích (tj. součin prvků matice, jejichž řádkový index je sudý a sloupcový index je lichý). ZAČÁTEK PRO i OD 1 DO m OPAKUJ PRO j OD 1 DO n OPAKUJ ČTI a[I,j]; SOUČET:= 0; POČET:= 0; j:= 1; DOKUD j ≤ n OPAKUJ ZAČÁTEK i:=2; DOKUD i ≤ m OPAKUJ ZAČÁTEK SOUČET:= SOUČET + a[i,j]; POČET:= POČET + 1; KONEC; j:= j+2; KONEC; JESTLIŽE POČET = 0 PAK NAPIŠ(“Není matice”) JINAK ZAČÁTEK PRŮMĚR:= SOUČET / POČET; NAPIŠ(PRŮMĚR); KONEC; KONEC.
- 17 -
10/3 Nechť matice A je čtvercová matice typu (m, m). Najděte minimální a maximální prvek na hlavní diagonále, které uložíte do proměnných min a max. Pak tyto prvky vyměňte a pozměněnou matici vypište. ZAČÁTEK MIN:= a[1,1]; i_min:= 1; MAX:= a[1,1]; i_max:= 1; PRO I OD 1 DO m OPAKUJ ZAČÁTEK JESTLIŽE a[i,i] > MAX PAK ZAČÁTEK MAX:= a[i,i]; i_max:= i; KONEC; JESTLIŽE a[i,i] < MIN PAK ZAČÁTEK MIN:= a[i,i]; i_min:= i; KONEC; KONEC; JESTLIŽE MIN = MAX PAK NAPIŠ(„Všechny prvky stejné“) JINAK ZAČÁTEK a[i_min,i_min]:= MAX; a[i_max,i_max]:= MIN; PRO i OD 1 DO m OPAKUJ PRO j OD 1 DO n OPAKUJ NAPIŠ( a[i,j]; KONEC; KONEC.
10/4 Nechť matice A je čtvercová matice typu (m, m). Napište algoritmus, který určí počet všech lichých prvků ležících v druhém řádku a předposledním sloupci, který uložíte do proměnné počet. Pokud takové prvky neexistují, podejte o tom informaci. Pokud takové prvky existují, tak nahraďte každý prvek vedlejší diagonály proměnnou počet. ZAČÁTEK POČET:= 0; PRO i OD 1 DO m OPAKUJ ZAČÁTEK JESTLIŽE a[2,i] MOD 2 = 1 PAK POČET:= POČET + 1; JESTLIŽE a[i,m-1] MOD 2 = 1 PAK POČET:= POČET + 1; JESTLIŽE a[2,m-1] MOD 2 = 1 PAK POČET:= POČET - 1; KONEC; JESTLIŽE POČET = 0 PAK NAPIŠ(„V matici nesou žádné liché prvky“) JINAK PRO i OD 1 DO m OPAKUJ PRO j OD 1 DO n OPAKUJ a[i,m-i+1]:= POČET; KONEC.
10/5 Nechť matice A je čtvercová matice typu (m, m). Určete součet hodnot prvků ležících na hlavní a vedlejší diagonále, které jsou větší než hodnota x, kterou načtete příkazem čti(x). ZAČÁTEK ČTI (x); SOUČET:= 0; PRO i OD 1 DO m OPAKUJ
- 18 -
ZAČÁTEK JESTLIŽE a[i,i] > x PAK SOUČET:= SOUČET + a[i,i]; JESTLIŽE a[i,m-i+1] > x PAK SOUČET:= SOUČET + a[i,m-i+1]; KONEC; JESTLIŽE m MOD 2=1 PAK JESTLIŽE a[(m+1)/2,(m+1)/2] > x PAK SOUČET:=SOUČET - a[(m+1)/2,(m+1)/2]; NAPIŠ(SOUČET); KONEC.
10/Společný příklad: X
Vypište aritmetický průměr z prvků ležících nad hlavní diagonálou, která jsou sudá.
11. cvičení – opakovaní před písemkou 11/1 Ze vstupu postupně načtěte do proměnné číslo dvě stě čísel a určete aritmetický průměr z těch, která jsou větší než -17 a menší než 19. V ALGORITMU NEPOUŽÍVEJTE POLE. ZAČÁTEK POČET:= 0; SOUČET:= 0; i:= 1; DOKUD i ≤ 200 OPAKUJ ZAČÁTEK ČTI (číslo); JESTLIŽE číslo > -17 AND číslo < 19 PAK ZAČÁTEK SOUČET:= SOUČET + číslo; POČET:= POČET + 1; KONEC; i:= i+1; KONEC; ar_průměr:= součet/počet; KONEC.
11/2
První dvě Fibonacciho čísla F1 a F2 se rovnají jedné. Další Fibonacciho číslo vypočítáme tak, že sčítáme dvě předchozí Fibonacciho čísla Fn = Fn –1 + Fn-2 pro n = 3,4,5,... . Sestavte algoritmus, který vypočítá n-té Fibonacciho číslo. Hodnotu n načtete jako vstupní údaj. V ALGORITMU NEPOUŽÍVEJTE POLE, POUZE JEDNODUCHÉ PROMĚNNÉ! ZAČÁTEK ČTI (n); JESTLIŽE n = 1 NEBO n = 2 PAK ZAČÁTEK Fn:= 1; Fn-1:= 1; Fn-2:= 1; KONEC; JINAK PRO i OD 3 DO n OPAKUJ ZAČÁTEK Fn:= Fn-1 + Fn-2; Fn-2:= Fn-1; Fn-1:= Fn; KONEC; NAPIŠ(Fn); KONEC.
- 19 -
11/3 Celé číslo 153 se nazývá Armstrongovo číslo pro svoji zajímavou vlastnost: 153=13+53+33, tj. součet třetích mocnin cifer se rovná samotnému číslu. Sestavte algoritmus, který najde všechna trojciferná Armstrongova čísla a vypíše je. ZAČÁTEK x:= 0; y:= 0; y1:= 0; z:= 0; i:= 0; PRO a OD 100 DO 999 OPAKUJ ZAČÁTEK x:= a DIV 100; y1:= a-x * 100; y:= y1 DIV 10; z:= a MOD 10; JESTLIŽE x3 + y3 + z3 = a PAK ZAČÁTEK b[i]:= a; i:= i+1; KONEC; KONEC; PRO a OD 1 DO i OPAKUJ NAPIŠ b[i] KONEC.
11/4 Z konečného počtu přirozených čísel, jejichž hodnoty postupně ukládáte do proměnné číslo příkazem čti(číslo), přičemž ukládání ukončíte vložením hodnoty nula, určete aritmetický průměr prvního a naposledy vloženého přirozeného čísla. ZAČÁTEK ČTI (číslo); JESTLIŽE číslo = 0 PAK NAPIŠ(„Žádná čísla“) JINAK ZAČÁTEK první:= číslo; poslední:= 0; DOKUD číslo ≠ 0 OPAKUJ ZAČÁTEK ČTI (číslo); poslední:= číslo; KONEC; JESTLIŽE poslední = 0 PAK NAPIŠ(“Nebylo zadáno druhé číslo”) JINAK ar_průměr:= (první + poslední)/2; KONEC; KONEC.
11/5
Z číselné posloupnosti a1, …, an odeberte první prvek, který je násobkem pěti a zároveň není dělitelný třemi. Pokud se v posloupnosti takový prvek nevyskytuje, odeberte druhý prvek a2. Posloupnost vypište. Předpokládáme, že posloupnost je již uložená v poli a.
- 20 -
11/6 X Předpokládejte, že v poli a máte uloženu číselnou posloupnost a1, …, an. V poli a najděte první liché číslo a před toto číslo přidejte do pole novou položku obsahující hodnotu nula. Pokud se v posloupnosti liché číslo nevyskytuje, přidejte nulu až na konec posloupnosti, t.j. do položky a[n+1]. Posloupnost vypište.
11/7 X Napište algoritmus, který pro číselnou posloupnost a1, a2,..., an , kterou načtěte do pole a, najde a vypíše poslední dvě nezáporná čísla a z daných čísel určí a vypíše menší. Pokud se taková čísla v poli nenacházejí, podejte o tom informaci.
11/8 X Napište algoritmus, který pro matici A typu (m,n), m ≥ 2, jejíž prvky jsou celá navzájem různá čísla, určí minimální prvek vyskytující se v matici A v prvním řádku, uloží ho do proměnné min, a určí a vypíše součin prvků v posledním řádku, jejichž hodnota je větší než hodnota min.
11/9 X Napište algoritmus, který pro matici A typu (m,n), n ≥ 4, jejíž prvky jsou celá čísla, zjistí v druhém a předposledním sloupci součet prvků ostře větších než je daná hodnota x. Z těchto dvou zjištěných hodnot vypíše tu menší. Pokud jsou obě hodnoty stejné, tak o tom podá informaci.
11/10 X
Napište algoritmus, který pro matici A typu (m,n), jejíž prvky jsou celá čísla, určí a vypíše indexy prvního lichého prvku a posledního sudého prvku vyskytujícího se v posledním řádku matice A. Pokud některý prvek neexistuje, podejte o tom informaci.
- 21 -