Vissza az előzőleg látogatott oldalra (nem elérhető funkció)Vissza a tananyag kezdőlapjára (P)Ugrás a tananyag előző oldalára (E)Ugrás a tananyag következő oldalára (V)Fogalom megjelenítés (nem elérhető funkció)Fogalmak listája (nem elérhető funkció)Oldal nyomtatása (nem elérhető funkció)Oldaltérkép megtekintése (D)Keresés az oldalon (nem elérhető funkció)Súgó megtekintése (S)

Informatika oktatása / Egy számítógép modell – A számítógépről népszerűsítő stílusban /3. Második felvonás

Egy számítógép modell – A számítógépről népszerűsítő stílusban

3. Második felvonás

amelyben új szereplő lép színre.

(Függöny föl!)

A látvány nem változik. A mondanivaló viszont terebélyesedik. Az előző felvonásban tárgyalt alapvető problémára keressük most is a választ, de nem elégedhetünk meg a válaszadás előbb követett udvariatlan módjával: ki kell írni válaszként azt, hogy ’igen’, ha X²+Y²=Z², különben pedig, hogy ’nem’.

A rendező szól

A rendezői utasítássort módosítani kell! Próbáljunk kiindulni a már meglevő „majdnem jó” algoritmusból! Egészítsük ki úgy, hogy a többletfeladatot is figyelembe vesszük! Rá kell ébrednünk, ez nem történhet a korábbi szereplők segítségével, új szereplőt kell színpadra küldeni, akinek csupán az a dolga, hogy a többiek munkáját kiegészítve további információkat gyűjt a számításról, pontosabban szólva, az utoljára elvégzett művelet eredményéről. Így tőle tudakolható meg, hogy a szám, ami keletkezett pl. pozitív-e, negatív-e vagy nulla. (Ő – sajátos céljaihoz – külön kap egy saját noteszt, s ebbe jegyzetel folyamatosan, minden felszólítás nélkül). Az új szereplőnknek adjuk a következő, spanyolos hangzású nevet: El’ Dönti. Most már el tudjuk képzelni, miképpen oldhatjuk meg az X²+Y²-Z² előjelétől függően a különböző szöveg kiírását. Külön algoritmusrész tartozzon (az algoritmus 20. sora környékén) az egyik, illetve a másik szöveg kiírásához; valahogy így:

Fióksorszám

Fióktartalom

21:

???

Ha az eredmény nulla, akkor

Fióksorszám

Fióktartalom

22:

23:

24:

25:

26:

27:

28:

29:

30:

Tégy az A noteszbe 'I' betűt

Írd ki az adatot

Tégy az A noteszbe 'G' betűt

Írd ki az adatot

Tégy az A noteszbe 'E' betűt

Írd ki az adatot

Tégy az A noteszbe 'N' betűt

Írd ki az adatot

Állj

Ha az eredmény nem nulla, akkor

Fióksorszám

Fióktartalom

31:

32:

33:

34:

35:

36:

37:

Tégy az A noteszbe 'N' betűt

Írd ki az adatot

Tégy az A noteszbe 'E' betűt

Írd ki az adatot

Tégy az A noteszbe 'M' betűt

Írd ki az adatot

Állj

Kérdés, kit utasítsunk és hogyan a két programrész közüli választásra? Mivel Lóti Futi az, aki a fiókokat húzogatja, nyilván neki kell címezni egy olyan utasítást, melyből tudni fogja, hogy nem a soron következő fióknál, hanem egy másiknál kell folytatnia. Legyen ez az ukáz a: Folytasd a ... fióknál! Illetve most nekünk egy feltételhez kötött párjára van szükségünk: Folytasd a ... fióknál, ha nem nulla! El’ Dönti jegyzetei alapján most is tudható, hogy a legutóbbi részeredmény pozitív-e, negatív-e vagy 0-e? Így válik értelmessé, elképzelhetővé az alábbi utasítás:

Fióksorszám

Fióktartalom

21:

Folytasd a 31. fióknál, ha nem nulla!

Megjegyzés

Az Írd ki ... ukáz hatására most egy betű jelenik meg, amíg az előző felvonásban az a szám volt, amit az A notesz tartalmazott. Hogyan lehetséges ez? Megkülönböztethető betű és szám? Ez ellentmondana a korábban megfogalmazott „szekrénytani” (neumann-i) elveknek! Egyetlen lehetőségünk, hogy minden megjelenő jelnek – legyen az betű, számjegy, írás-, vagy műveleti jel – megfeleltetünk egy kódot, ezt küldjük az ablakon át a „külvilágba”. Ennek fényében viszont korábbi algoritmusunk kiíró utasítása helyére egy jóval bonyolultabb utasítás-sorozatot kellene illesztenünk, amely révén Lóti Futi képes lesz a számot átalakítani megfelelő számjegyek sorozatává. Ezt a visszamenőleges javítást hadd ne végezzük el pótlólag! És most következne a fenti algoritmus kódolása ..., de ezt jobb nem is említeni, hát még véghezvinni!

Vissza a tartalomjegyzékhez

Szünet

E nyúlfarknyira sikeredett felvonás szünetét most is a konklúziók megbeszélésére használjuk föl! Röviden a tanulságok:

Fogalom

Mesebeli megfelelő

elágazás utasítás

Folytasd ... , ha ... (vezérlésátadó utasítás),

amely egy speciális regiszter, a feltétel regiszter

(El’ Dönti saját notesze) segítségével valósítható meg.

Példa

Utasítás

Megjegyzés

...
a döntés feltételének kiértékelését

elvégző ukázok, a következő megállapodással:

az A regiszterbe teszi a feltétel logikai értékét,

a 0=hamis, illetve 1=igaz konvencióval
...

Egyenlő A 1-gyel

új ukáz: A=1?

Folytasd OTT, ha nem nulla

az OTT a folytatás helyének ’címkéje’

...

az igaz értékhez tartozó ukázok

...

Folytasd TOVÁBB-nál

átugrás TOVÁBB-hoz, a hamis-ág utánra

OTT:

a Folytasd OTT, ha... ukáz

erre a pontra hivatkozik

...

a hamis értékhez tartozó ukázok

...

TOVÁBB:

a végrehajtás itt folytatódik akár igaz,

akár hamis feltételérték esetén

...

Példa

Utasítás

Megjegyzés

...

CIKLUS:

...

a feltétel kiértékelését elvégző ukázok,

a korábbi konvencióval

...

Egyenlő A 1-gyel

A=1?

Folytasd KILÉP-nél, ha nem nulla

KILÉP: a folytatás helyének címkéje

...

a ciklusmag ukázai

...

Folytasd CIKLUS-nál

az ismétlődő rész vége, ugrás az elejére

KILÉP:

a végrehajtás itt folytatódik a ciklus után

...

Megjegyzés

Elképzelhető lenne ettől lényegesen eltérő kódhozzárendelés is, uram bocsá’ az sem feltétel, hogy minden karakternek 1-bájtos kód feleljen meg. Gondoljunk csak a közismert Morse-ABC-re, vagy a nem annyira közismert, a fájltömörítéseknél használt Huffman-kódra!

Feladat

1. Valósítsd meg az előző felvonás végén említett 'bootstrap' programot, pontosabban

  • (A) tervezd meg a beolvasandó program szerkezetét, majd
  • (B) írd meg a beolvasás és betöltés (elindítás) algoritmusát!

Megoldás:

  • (A) A betöltendő program szerkezete:

fióksorszám
(betöltési cím)

programhossz

programkód
(programhossz fióknyi szám)

  • (B) A betöltés algoritmusát először egy – kitalálható jelentésű – mondatszerű nyelven írjuk le, hogy képesek legyünk átlátni a működés egészét:

Be: cím, hossz

Ciklus i=cím-től cím+hossz-ig

Be: adat

fiók(i):=adat

Ciklus vége

másként

Be: cím, hossz

Ciklus amíg hossz>0

Be: adat

fiók(cím):=adat

cím:=cím+1

hossz:=hossz-1

Ciklus vége

A megismert Lótis utasításkészlettel a betöltés (utóbbi változatának) programja a következő (most sem foglalkozunk a beolvasásnál a karakteresről a belső, bináris ábrázolásúra való konvertálással, továbbá itt is alkalmazzuk a még nem tisztázott gépi kódhoz közeli szimbolizmust):

Utasítás

Megjegyzés

Olvasd be az adatot

Tedd el A-belit CÍM-re

Olvasd be az adatot

Tedd el A-belit HOSSZ-ra

Tégy C-re '1'-t

Tedd vissza CÍM-ről B-be

Tedd vissza HOSSZ-ról D-be

ÚJRA:

Folytasd AMOTT, ha 0

Olvasd be az adatot

Tedd el A-t (B-beli cím)-re

Add B-belihez C-belit

Vond ki D-beliből C-belit

Folytasd ÚJRA-nál

AMOTT:

Tedd vissza CÍM-ről B-be

Folytasd (B-beli cím)-en

CÍM:

'0'

HOSSZ:

'0'

betöltési cím

.

programhossz

.

C⇐1

B⇐a „mozgó” cím

D⇐a „csökkenő” hossz

.

.

.

újdonság: indirekt címzés

.

.

.

indítsd el a programot

B⇐az eredeti kezdőcím

újdonság: indirekt címzés

.

virtuális kezdőérték

.

virtuális kezdőérték

Feladat

2. Tervezz programot, amely egy beolvasott szöveget tömöríti a következő elvek alapján, majd ebben a tömörebb formában írja vissza! Tömörítési elvek:

  • A szóközintervallumok helyettesítendők ún. tabulátor jelekkel úgy, hogy megállapodunk abban: minden tabulátor jel pontosan 8 szóközt „ér”.
  • A megszakítás nélkül ismétlődő jelsorozatokat egy kódhármassal helyettesíteni, mely egy speciális jelből, egy számlálóból és az ismétlődő jelből álljon. A speciális jel az eredeti szövegben nem szerepelhet, éppen az a feladata, hogy jelezze a vele kezdődő kódok eltérő jelentését. A számláló értelemszerűen az ismétlődő jelsorozat hosszával egyezik.

Tervezd meg a tömörítést megszüntető program algoritmusát is! Gondolj ki más tömörítési elveket is! (Egynek ötletéül a mindenki által ismert Morse-abc szolgálhat, amelyben az egyes jelek nem azonos hosszúságú kóddal rendelkeznek. Vajon miért éppen annyival, amennyivel? ...)

Vissza a tartalomjegyzékhez

Új Széchenyi terv
A projekt az Európai Unió támogatásával, az Európai Szociális Alap társfinanszirozásával valósul meg.

A tananyag az ELTESCORM keretrendszerrel készült