Lekce 12 - Seznamy ve Scratchi podruhé
V minulé lekci, Seznamy ve Scratchi, jsme si vysvětlili, co je to seznam, a naučili jsme se ho vytvořit, naplnit a vymazat.
V dnešním Scratch tutoriálu se ještě budeme věnovat seznamu. Popíšeme si další bloky pro práci se seznamem a naučíme se například zjistit jeho délku, nahradit v něm konkrétní položku nebo zjistit, zda se v něm konkrétní položka vyskytuje. Nakonec vylepšíme náš projekt s nákupním seznamem a nové bloky pro práci se seznamem si při tom vyzkoušíme 😉
Bloky pro práci se seznamem
Pojďme si tedy nejprve popsat další možnosti práce se seznamem ve Scratchi.
Vložení položky na konkrétní místo
Někdy se stane, že nechceme položku vložit na konec seznamu, ale chceme ji vložit třeba doprostřed nebo na začátek. K tomu slouží blok vlož na v:

Chceme-li tedy přidat položku na začátek seznamu, ponecháme v bloku
hodnotu indexu 1
. Můžeme samozřejmě také zadat jiný index,
kterým určíme, na jaké místo má být položka uložena.
Nahrazení položky v seznamu
Někdy se může stát, že budeme chtít změnit název položky v seznamu. To můžeme udělat, stejně jako vložení a smazání položky, buď ručně, nebo programově. Pojďme si ukázat obě varianty.
Nahrazení položky programově
Pokud chceme nahradit položku programově, použijeme k tomu blok nahraď v hodnotou:

Do bloku nejprve zadáme index prvku, který nahrazujeme, poté nový název položky, jež se na toto místo zapíše.
Připomeňme si, že se seznam ve Scratchi čísluje od
1
😉
Nahrazení položky ručně
Nahrazení vybrané položky mimo běh programu provedeme tak, že na ni klikneme a můžeme začít psát nový název:

Když jsme s úpravou hotovi, klikneme někam mimo položku, tím se nová hodnota uloží 😉
Vypsání konkrétního prvku ze seznamu
Kdybychom například dělali závodní hru a potřebovali bychom oznámit jména vítězů, může se nám hodit blok pro výpis konkrétního prvku prvek z:

Jak asi tušíte, číslo v bloku je pořadí prvku, který chceme vypsat.
Zjištění délky seznamu
Zjistit délku našeho seznamu bychom již dokázali pomocí cyklu. Ten by pokračoval, dokud by nenarazil na konec seznamu, a my bychom počítali, kolikrát proběhl. To je ale zbytečně zdlouhavé a složité řešení 😉 Scratch má totiž přesně k těmto účelům zabudovaný blok délka:

Obsahuje seznam položku?
Poslední blok pro práci se seznamem, který nám zbývá, je blok
obsahuje. V minulé lekci jsme použili trochu kulišácké řešení.
Když jsme chtěli vědět, jestli je nějaká položka v seznamu, zeptali jsme
se na její pořadí, a pokud bylo nulové, znamenalo to, že položka
neexistuje. To jsme udělali hlavně proto, abychom si zapamatovali, že se
seznam čísluje od 1
a že pro neexistující položku se vrátí
0
.
Existuje ale i elegantnější řešení. Tím je použití bloku obsahuje:

Jak můžeme vidět podle tvaru bloku, vrací hodnotu pravda/nepravda, takže se dá použít v blocích když tak nebo v cyklech 😉
Nákupní seznam
S novými znalostmi o možnostech seznamů pojďme z našeho projektu s nákupním seznamem udělat trochu pokročilejší aplikaci. Nový nákupní seznam bude umět přidávat a odebírat položky podle názvu. Pokud zadaná položka v seznamu již existuje a chceme ji přidat, kočičák nás na to upozorní a položka se znovu nepřidá. Pokud chceme smazat položku, která v seznamu není, položka se samozřejmě nesmaže 🙂
Budeme se také moci kočičáka zeptat, jestli má konkrétní položku v seznamu. Na vyžádání nám kočičák všechny položky ze seznamu přečte. Naučíme ho také vyhledat položku na konkrétním místě v seznamu. A pokud budeme chtít, můžeme kočičáka nechat celý seznam smazat, ale k tomu budeme muset zadat heslo. Kočičák nám také řekne, kolik položek v seznamu je 🙂
Že to vypadá složitě? Ale vůbec není, protože všechno, co je k tomu potřeba, už umíme 😉 Pojďme na to.
Příprava těla programu
Začneme tím, že si vytvoříme proměnnou programBezi
a
seznam nakupniSeznam
. Na plochu si umístíme startovní blok a za
něj blok nastav na, který nastaví proměnnou
programBezi
na hodnotu ANO
. Za blok nastav na
umístíme blok opakuj dokud nenastane s blokem obsahuje,
který má na levé straně hodnotu programBezi
a na pravé hodnotu
NE
:

Do těla cyklu vložíme otázku
Chcete provést další operaci se seznamem? ANO/NE
a za ní blok
nastav na, který nastaví proměnnou programBezi
na
odpověď
:

Z dřívějších lekcí již víme, že se tento princip využívá, aby se program opakoval a nemuseli jsme ho pořád zapínat ručně 😉
Pojďme dál. Nyní pomocí bloků bublina vypíšeme po sekundě
jednotlivé možnosti. Poté vytvoříme proměnnou volba
. Za
bubliny přidáme otázku s textem Zadejte číslo operace:
a blok
nastav na, který nastaví proměnnou volba
na
odpověď
:

Teď za blok, kde nastavujeme proměnnou volba
, umístíme
sedmkrát blok když tak jinak a jako poslední vnoříme blok
když tak. Každý další blok umístíme do větve jinak
toho předchozího. Tělo potom bude vypadat takto:

Do prvního bloku dáme jako podmínku, že volba je menší než
1
nebo větší než 7
, a do jeho těla bublinu s
textem Neplatná volba.
:

Teď do všech ostatních podmínek vložíme bloky rovná se,
které na levé straně mají volba
a na pravé straně čísla od
1
do 7
.
Přidávání položky
Pro první operaci vytvoříme otázku
Jakou položku chcete přidat?
a za ní nalepíme blok když
tak jinak. Podmínkou v bloku bude blok obsahuje, který zjistí,
jestli nakupniSeznam
obsahuje odpověď
. Pokud ano,
objeví se bublina sekund Položka na seznamu již je.
.
Pro případ, že seznam odpověď
neobsahuje, vložíme blok
přidej k, který přidá odpověď
do nákupního
seznamu. Za ním bude bublina sekund
Položka přidána.
:

Celý kód přesuneme do těla volby 1
. Stejně budeme
postupovat i u dalších operací.
Odstranění položky
Odebrání položky bude podobné, takže můžeme předchozí blok kódu
zkopírovat 😉 Otázku potom přepíšeme na
Jakou položku chcete odstranit?
. Pokud nákupní seznam položku
obsahuje, tak ji odstraníme blokem smaž z, který bude mít uvnitř
blok pořadí ve s proměnnou odpověď
. V bublině pak
vypíšeme Položka byla smazána.
. Pokud položka v seznamu není,
zobrazí se bublina Položka není na seznamu.
:

Je položka na seznamu?
Opět můžeme vycházet z předchozího kódu. Do otázky napíšeme
Zadejte název položky:
. Pokud položka existuje, vypíše se
bublina sekund Položka JE na seznamu.
, jinak se vypíše
Položka NENÍ na seznamu.
:

Přečtení všech položek
Jako další si vytvoříme proměnnou i
. Jak víme, půjde o
řídicí proměnnou cyklu 🙂 Přidáme blok nastav na, který
nastaví i
na 1
. Potom umístíme cyklus opakuj
dokud nenastane s podmínkou je větší než. Na levé straně
doplníme proměnnou i
a na pravé blok délka. V těle
cyklu bude bublina s obsahem: blok prvek z, která má v sobě
proměnnou i
. Nezapomeneme přidat blok změň o, který
pokaždé zvýší hodnotu i
o 1
:

Výpis položky podle indexu
Zde opět doplníme podobné bloky jako u přidání a odebrání položky.
Do otázky napíšeme Zadejte index položky:
. V podmínce bude
blok nebo, který bude mít nalevo blok odpověď
menší než 1
a napravo blok odpověď
větší než délka. Podmínka bude splněna, pokud uživatel
zadá neplatný index. Vypíšeme o tom tedy zprávu v první bublině. V
opačném případě zobrazíme bublinu s blokem prvek z, který
obsahuje odpověď
:

Smazání celého seznamu
Může se stát, že budeme chtít vymazat celý seznam. Protože by to ale
bylo nebezpečné, ošetříme to ještě raději zadáním hesla 😉 Opět si
vypůjčíme strukturu bloků z předešlých operací. Do otázky napíšeme
Zadejte heslo:
. V podmínce využijeme blok rovná se,
který bude mít na levé straně odpověď
a na pravé straně
libovolné heslo, například kočičák
😉 Pokud uživatel zadá
stejné heslo, provede se blok smaž všechno z a vypíše se bublina
Seznam smazán.
, jinak se vypíše text
Neplatné heslo.
:

Vypsání délky seznamu
Jako poslední budeme vypisovat délku seznamu. Vezmeme bublinu, do které
dáme blok spoj. Vlevo doplníme text
V seznamu je položek:
s mezerou na konci a doprava přidáme blok
délka:

Jako poslední přesuneme na konec programu bublinu
Děkuji za použití nákupního seznamu.
. A je hotovo 🙂 Celý
program je opět ke stažení v příloze lekce.
V následujícím cvičení, Řešené úlohy k 11.-12. lekci Scratche, si procvičíme nabyté zkušenosti z předchozích lekcí.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 13x (45.29 kB)
Aplikace je včetně zdrojových kódů v jazyce Scratch