HRA

Kill It!
Herní styl SEUCK
Multiplayer Bez multiplayeru
Rok vydání 1997
Programátor Chris Yates
Grafik Keith Killilea (Knightco...

INTRO

BASIC v2.0 - díl 2. - Smyčky útočí


V první lekci jsme se naučili psát všemocný příkaz PRINT. A protože jen tak vypsat nějaký text není vůbec žádná zábava, dneska se naučíme vypsat textu trochu více, aniž by nás to bolelo.



FOR ...TO ... NEXT ...


Vypsat něco, co se opakuje, je základním uměním všech programovacích jazyků na světě. A my si to ukážeme na jednoduchém příkladu kdy očíslujeme řádky nějakého textu. Pokud bychom na to šli pouze příkazem PRINT, museli bychom napsat následující program :

10 PRINT "Tohle je radek 1"
20 PRINT "Tohle je radek 2"
30 PRINT "Tohle je radek 3"
40 PRINT "Tohle je radek 4"
50 PRINT "Tohle je radek 5"

Pokud by bylo řádků sto, museli bychom tímto způsobem napsat program na sto řádků. Ne že by to nešlo, ale právě pro takový způsob práce existuje skvělý příkaz FOR-TO-(STEP)-NEXT. Tento příkaz umí počítat (například od nuly do sta) za nás a číslo, které právě tento příkaz "vypočítal" máme k dispozici a můžeme s ním tedy dále pracovat.
Popis smyčky, která je složena z příkazů FOR, TO , NEXT je následující:

10 FOR (pro proměnnou - od čísla) TO (do čísla) STEP (s jakým přírůstkem - bez STEP zvýší o 1)
20 Něco mi tady udělej (vytiskni) a použij k tomu číslo, které zrovna máme v proměnné pro FOR
30 NEXT (ukonči nejbližší smyčku FOR,TO)

Následující ukázka programu nám vypíše ten samý program jako jsme psali před chvílí

10 FOR A = 1 to 5
20 PRINT "Tohle je radek " A
30 NEXT A
Výsledek po suštění příkazem RUN bude následující :
Tohle je radek 1
Tohle je radek 2
Tohle je radek 3
Tohle je radek 4
Tohle je radek 5

Zde jde vidět, že příkaz FOR A=1 TO 5 má na začátku dáno, že musí počítat právě od jedničky do pětky a toto číslo při každém průchodu smyčkou navýší proměnnou o jedna. Aktuální hodnotu čísla v proměnné A můžete v tu chvíli vypsat nebo ji použít pro výpočet čehokoliv jiného. Příkaz PRINT v tuhle chvíli umí vypsat nejenom textový řetězec "Tohle je řádek", ale vypíše i hodnotu proměnné "A", která se za příkaz PRINT přidá.
Ukážeme si ještě jak můžeme vypsat proměnnou na jiném místě v řádku 20 a tím získáme jiný výpis na obrazovku.

Program Výsledek
20 PRINT A ". Tohle je radek " 1. Tohle je radek
20 PRINT "Tohle je" A ". radek " Tohle je 1. radek
20 PRINT A ". Tohle je radek " A 1. Tohle je radek 1

Smyčku, jak se příkazům FOR-TO(STEP)-NEXT říká můžeme použít i pro vytvoření jednoduché násobilky, která hlavně dětem pomůže krásně fixlovat při hodinách matematiky.
V dalším příkladu si ukážeme jak vytvořit násobilku čísla 7. Číslo 7 bude v proměnné "N", které si můžete zkoušet měnit dle svého.

10 N = 7
20 FOR A = 1 TO 10
30 X = A * N
40 PRINT A " * " N " = " X
50 NEXT A

Výsledkem tohoto programu je text na obrazovce, který opravdu vypadá jako násobilka : (a všimněte si také, jak příkaz print na řádku 40 dokáže všechny tyto proměnné vypsat na jednom řádku.)


1 * 7 = 7
2 * 7 = 14
3 * 7 = 21
4 * 7 = 28
5 * 7 = 35
6 * 7 = 42
7 * 7 = 49
8 * 7 = 56
9 * 7 = 63
10 * 7 = 70


FOR ...TO ... STEP ... NEXT ...


Pokud pracujeme s čísly s desetinnou čárkou, hodí se nám příkaz STEP. Tento příkaz nám říká, o kolik máme navyšovat proměnnou, která je použita v příkazu FOR-TO. V tomto případě máme možnost zvyšovat číslo například o 0.5. Program vlastně zůstane stejný, my jen přidáme na správné místo príkaz STEP.

10 FOR A = 1 to 5 STEP 0.5
20 PRINT "Tohle je radek " A
30 NEXT A

Po spuštění programu nalezneme na obrazovce následující výpis:

Tohle je radek 1
Tohle je radek 1.5
Tohle je radek 2
Tohle je radek 2.5
Tohle je radek 3
...


Nešvary v2.0


Ne vše je v BASICu počítače Commodore 64 ideální. Jedním z nešvarů je to, jak že tento BASIC formátuje, neboli zobrazuje čísla. trochu zvláštně: Všimněte si na obrázku, že i když vypíšeme hodnotu v proměnné "A", tak je okolo ní místo, neboli mezera.
Pokud se totiž jedná o kladná čísla, mezera před číslem je rezervována pro znaméno plus, které se ovšem nevypisuje. (Zde děkuji Sigimu za jeho přínos .. ) Pokud by byl výsledek záporný, znaménko minus se vypíše před hodnotu. Tvůrce tohoto BASICu napadlo, že by místo před hodnotou mohli použít tak či tak. A pak si řekli, že by bylo dobré "napsat" mezeru vlastně i za hodnotou. A jak že to všechno funguje (někdy zvláštně) vidíte na obrázku.

Zde je krásně vidět, že i když píšeme proměnnou "A" pomocí PRINT ihned za textem, přesto jsou okolo čísla(proměnné) ony zmiňované mezery.



Nešvary a jak si s nimi poradit !


Pokud bychom z nějakého jasného důvodu přeci jen chtěli vypsat číslo na úplném začátku řádku a text těsně za ním bez mezery, musíme použít formátovacích znaků počítače Commodore64. A co to je za znaky ?? Jsou to znaky, které se zaznamenají v uvozovkovém módu, prostě když mačkáme klávesy jako by jsme chtěli hýbat kurzorem atd. Tento mod se aktivuje napsáním uvozovek a ukončí se dalšímy uvozovkami (nebo z něj vyskočit kombinací SHIFT+RETURN). V tomto módu se zaznamenají stisknuté klávesy, například pohyb kurzoru - šipky nebo klávesy home, smazat obrazovku, změna barvy .. apod. Ukázka je na následujícím obrázku.

Zápis řádku 30 probíhá následovně. Ukážeme vám jak psát jeden znak za druhým :

P R I N T " {zmáčknout šipku doleva} " A " {zmáčknout šipku doleva} . M I S T O "

Místo posunu kurzoru při zmáčknutí směru doleva se zobrazí v závorce právě funkční znaky, které znamenají posun kurzoru zpět. Proto při spuštění programu texty budou vypsány tak, jako by jste se kurzorem vrátili o jeden znak zpět a začali psát.



Pokračování a tolik oblíbený domácí úkol


Smyčku můžeme použít pro jakékoliv počítání v kladných i záporných číslech. Následující příklad vypíše hodně moc čísel od -100 po +100 po 0.25
10 FOR A = -100 TO 100 STEP 0.25
20 PRINT A
30 NEXT A

Smyčky všem, ať se jedná o začátečníky či pokročilé programátory ušetří vždy mnoho práce.

A na závěr tolik oblíbený domácí úkol : Napište program, který vypíše na obrazovku čísla od -1000000 do +1000000 po 0.1 a všechna čísla pečlivě zapiště na papír.

PCH / Unreal und Sillicon / Unreal

Nový příspěvek k článku

podpis :
První znak podpisu musí být vykřičník, jinak se příspěvek neodešle (ochrana proti spamu)

14.04.2017 - Jack_Free

Sleduji to tu, a fandím vám, jen tak dál, sám si oprašuji vědomosti.

12.04.2017 - F6

Aha, od neuskutečnitelného úkolu k nadlidskému výkonu. V životě jsem si nemyslel, že bych to dokázal napsat, nepovažuji se za programátora, ale:
10 INPUT"{clr/home}ZADEJ CISLO";C:I=INT(C/256):J=I*256:K=C-J:L=INT(K/16):M=L*16:N=K-M
20 A$="0123456789ABCDEF":PRINTMID$(A$,I+1,1)MID$(A$,L+1,1)MID$(A$,N+1,1)
Asi by to šlo i zkrátit, ale už se mi nechce přemýšlet.. Vstup "C" může být dec číslo do 4095.

Pro přehlednost ještě výpis s komentáři:
10 INPUT "ZADEJ CISLO";C
20 I = INT (C / 256) : REM kolikrat se vejde 256 do C
30 J = I * 256
40 K = C - J : REM ...a kolik je z toho zbytek do C
50 L = INT (K / 16) : REM do zbytku K se vejde L 16-tek
60 M = L * 16
70 N = K - M : REM ...a zbytek do puvodniho zbytku K je N
80 A$ = "0123456789ABCDEF"
90 PRINT MID$ (A$, I+1, 1);: REM vypise 1. cislo tak, ze vybere z retezce "A$" "I+1"-ty znak
100 PRINT MID$ (A$, L+1, 1);: REM vypise 2. cislo tak, ze vybere z retezce "A$" "L+1"-ty znak
110 PRINT MID$ (A$, N+1, 1);: REM vypise 3. cislo tak, ze vybere z retezce "A$" "N+1"-ty znak

Uff.

12.04.2017 - Wankes

Začnu překlepem (dalšímy-dalšími, že?). Seriál je super, možná by tu mohl zaznít názor někoho kdo to zkouší (ono pokusné dítě). Z mé aktivní doby na reálném C64 pamatuji snad jen Simonxs Basic (zoufale pomalý), nebo disketová verze Basic 3.5 co měl v ROMce C+4. Takže pro rychlé řešení čehokoliv se V2.0 používal běžně.

11.04.2017 - PCH

1. Emulator mam rad hlavne tam, kde nemuzu mit s sebou C64.
2. Abolutní souhlas. Osmibit dle mě nerozptyluje tolik pozornost jako PC. ( Internet, hry, klikátka .. youtube .. a pod) a tím udrží dítě ( jakékoliv ) déle v klidu, protože to tam prostě NENI. A tohle funguje stejně jako s dospělými. ( pravidlo čím méně, tím lépe zde sedí naprosto.). Základy programování to dá natoli, aby jste poznali, jestli to dítě vedle vás bavit bude a nebo ne. A Syntax ? problémy ? To nováček prostě nemá šanci srovnat a až na to má to srovnat, tak tomu rozumí :) Takže účel splněn.
3. Ano. Od příště zkusím dávat jiné příklady a to opravdu již pořádné. Napadlo mě jen tak pro začátek : převod DEC čísla na HEX ... a co nejkratší kód !! .. Mno .. do toho !

11.04.2017 - F6

1) Kdo to myslí s C64 vážně, vlastní reálnou mašinu a ne nějaký pochybný emulátor!
2) Je úplně jedno, jaký Basic pro výuku základů se použije. PRINT, FOR, NEXT, TO, IF, THEN, LET, DIM, atd. jsou všude. Basic V2 umožňuje některé běžné syntaxe prznit, jako třeba vynechávat středníky, nemít proměnnou za NEXT, atd, ale to jsou nepříliš podstatné detaily. Stejně nikdo, kdo se podle tohoto seriálu fakt učí prgramovat v Basicu na C64 od základů, kdy asi použije jiný osmibit s jiným dialektem Basicu, ale spíš to využije jako základ pro nějaký jazyk na PC nebo bude mít aspoň povědomí o principu programování jako takového.
3) Úkol je neproveditelný ze dvou důvodů, a to a) protože Basic V2 má chybu při počítání s desetinnými čísly a po vypsání několika čísel s krokem po 0.1 se splete o dvě setiny, a za b) by vypisování tolika čísel na papír (bez použití tiskárny) trvalo velmi dlouho :)

11.04.2017 - Jirka

:-) ... tak jsem tě, Petře, vytočil ještě večer?
Já to bral podle sebe a svých vzpomínek na začátky s počítači v 80. letech a tehdy mě to táhlo jednoznačně za "grafikou". Chtěl jsem něco vykreslit na obrazovce. A když si představím, že bych to musel realizovat zrovna pomocí vestavěného Basicu na C64, tak by opravdu šlo buďto o hromady POKEů nebo odklon k assembleru (viz. Ray v prvním článku, který jej očekávatelně použil i jen pro zobrazení texu :-). Na jiných tehdejších strojích nebo na C64 třeba v Simonsx Basicu přitom s jednoduchou grafikou problémy nebyly. A tak jsem to bral, když jsem psal dotaz na důvod použití zrovna tohodle Basicu, když při použití emulátoru si dnes můžu vybrat Basic rozumný. Dnes, po těch letech, se už určitě dá zpětně nějak posoudit, který Basic byl lepší a který horší a vybrat některý z těch lepších.
Upřímně řečeno ale chápu, že jsem na půdě fandů konkrétního stroje a mám pro jistou dávku masochismu pochopení - sám si nejraděj hraju s těmi nejjednoduššími jednodeskáči - v mém případě právě proto, že to je těžké a plné omezení :-)

A tak tedy OK, zkusím na své prostřední dítě (věkově snad ještě odpovídající) C64 Basic 2 a zdejší vznikající seriál. Uvidím, jestli mě pošle k šípku hned a nebo až v průběhu ;-)

... a každopádně držím palce při psaní dalších dílů

10.04.2017 - PCH

Tak jsem to po sobě přečetl a musím uznat, že musím jít spát. Spánkový deficit z Atariády se ukázal v celé své kráse. Nehledejte v tom prosím logiku, není tam :)

10.04.2017 - PCH

Jirko, ... krucinál (nadávka) ( a odpověď) Je přeci jasné, že budoucí programátor musí být připraven na to, že má každý jazyk ty své úchylné problémy, které zastánci PRÁVĚ toho druhého jazyku nenávidí a upozorňují na ně. Je pravda, že basic v2.0 má své mouchy ... možná větší mouchy, ale principielně funguje zcela správně. A to se bavím o základních příkazech, logice programování a těch neprimitivnějších základů. Samozřejmě že se počítá s nasazením emulátorů, protože ani já nemám doma místo na tři C64 zapojené vedle sebe + 3x monitor.
Zjistil jsem, že děti nedotčené programovacími jazyky z PC berou basic jako něco normálního a neřeší to, co my musíme, protože bychom se z toho zbláznili.
A samozřejmě nejsem ortodoxní blázen, který si není vědom toho, že existují i jiné ... ale skutečné programovací jazyky. Proto vedle basicu mám vesměs pro děcka otevřené PHP nebo cokoliv jiného a ukazuji jim, jak to funguje na C64 a jak na PC .. např. zrovna PHP (zase čuňácký jazyk ) nebo když už tak Python.
Takže je jasné, že C64 + basic je začátečnické síto. A kromě toho. Ono se v tom docela psát dá. Během dílů se budeme věnovat tvorbě enginu pro textové a RPG hry. Takže uvidíš :)

10.04.2017 - jirka

Kucí, myšlenka BASICu jako vstupního místa pro programování mi není proti srsti, ale pokud je to míněno alespoň trošku reálně, tak předpokládám, že by to reální pokusní 10letí králíci zkoušeli asi v emulátoru. Nebo se předpokládá prosetí potenciální cílovky pomocí vlastnictví reálného 8bit železa? To by v ČR zůstalo asi tak 7 dětí včetně všech tří potomků PCH :-)
A tedy - pokud je přípustné použití emulátoru, pak mi to opravdu nedá a musím se zeptat: "Proč probůh použít zrovna tuhle verzi Basicu?" Nemám nic proti Commodoru (fakt), ale jeho Basic je asi nejtragičtější verzí tohoto jazyka vůbec. Jasně - název webu je všeříkající, ale omluvou pro frustrování dětí zrovna tímto "dialektem" to není.
Teď se do mě pusťte, ale prosím, zakomponujte mezi nadávky i odpověď :-)

Advert

Hardcode and datamining by PCH of UNREAL, Hardware guru by RAY of UNREAL, Bugs report by SILLICON of UNREAL
UNREAL 2014-2021 Czech republic