Fontolja meg a problémát:

A program bevitele egy természetes szám, amely nem haladja meg a 2 * 10 9 értéket. Határozza meg ennek a számnak a számjegyeinek összegét!

Első pillantásra a feladat meglehetősen egyszerű: egymás után ki kell választania a számban szereplő számokat, és hozzá kell adnia őket az összeghez. Ugyanakkor nyilvánvaló, hogy a számban lévő számjegyek száma változhat, így a ciklusparaméter végső értéke definiálatlannak bizonyul, és az alkalmazása nehézségekbe ütközik.

Azokban a ciklikus algoritmusokban, amelyekben egy bizonyos utasításkészlet ismétlődéseinek száma nem érhető el az indítás előtt, feltételes ciklusokat használnak.

A while ciklus

Az egyik ilyen konstrukció a Kumir programozási nyelvben az ciklus viszlát. Ez a ciklus, amelyet gyakran ún hurok előfeltétellel, a következő formátummal rendelkezik:

  • nc bye feltétel
  • loop_body

Az utána írt feltétel hivatalos szó míg , egy logikai kifejezés.

A hurok végrehajtása a következőképpen történik:

  1. A logikai kifejezés értéke kiértékelésre kerül.
  2. Ha a számítás eredménye nem, akkor a ciklus véget ér, és Kumir a while ciklus utáni első parancsra lép. Ha a számítás eredménye igen, akkor a ciklus törzse végrehajtásra kerül, majd a kifejezés értéke ismét egy új értékkel kerül kiszámításra.

Fontos! A ciklus törzsében a feltételhez tartozó értéknek változnia kell, hogy biztosítsa a ciklus végét, különben a ciklus örökkévalóvá válhat.

Most használjuk a while ciklust a probléma megoldására.

  • bemeneti sz
  • nc míg a szám > 0
  • összeg:= összeg + mod(szám, 10 )
  • szám:= div(szám, 10 )
  • kivonási összeg

Tehát a huroktörzs minden egyes végrehajtása során a szám utolsó számjegye hozzáadódik az összeghez, majd a szám 10-szeresére csökken. Nyilvánvaló, hogy végül a num 0 lesz, ami után a ciklus véget ér.

Addig ciklus

Az Idolban van egy másik változata a feltételes ciklusnak, az úgynevezett till ciklus, amelynek formátuma a következő:

  • loop_body
  • kc feltétel alatt

Ha a ciklusban a feltétel ellenőrzése közben a ciklus törzse előtt, akkor a ciklusban addig - után. Ezért ezt a ciklust gyakran nevezik hurok utófeltétellel. Az ilyen hurok törzse mindig legalább egyszer végrehajtásra kerül.

A ciklus munkája addig a következőképpen zajlik:

  1. A huroktest végrehajtásra kerül
  2. A logikai kifejezés értéke kiértékelésre kerül. Ha a számítás eredménye nem, akkor a ciklus törzse újra végrehajtásra kerül, és így tovább Ha a számítás eredménye igen, akkor a ciklus véget ér, és Kumir a ciklus után következő parancs végrehajtására lép.

Feladat. A program bemenete nullára végződő egész számok sorozata. Keresse meg a negatív számok számát a sorozatban! Garantált, hogy a sorozat legalább egy nullától eltérő számot tartalmazzon.

(Program kódrészlet)

  • bemeneti sz
  • ha a 0
  • akkor k:= k + 1
  • kts a szám = 0-nál
  • kimenet k

Algoritmus spirál rajzolásához:

használd a fiókot
alg
korai
. egy pontra lépni(3,3)
. engedje le a tollat
. tekercs (1); tekercs (3); tekercs (5); tekercs (7); tekercs (9)
. emelje fel a tollat
con
alg turn(arg w)
korai
. eltolás vektorral(a, 0)
. eltolás vektorral(0, -a)
. eltolás vektorral(-a-1,0)
. eltolás vektorral(0, a+1)
con

Ügyeljen a parancsblokkra:

tekercs (1); tekercs (3); tekercs (5); tekercs (7); tekercs (9)

A "tekercs (arg dolog a)" segédalgoritmust 5-ször hívják, de nem hívható meg az "N-szeres" ciklusban, mert minden alkalommal különböző értékeketérv.

De láthatja, hogy az argumentum értékei 1-ről 9-re változnak, minden alkalommal 2-vel. Tehát segíthetünk hurok számlálóval. Az ilyen ciklust "for" ciklusnak is nevezik.

Hurok számlálóval- egy ciklus, amelyben valamilyen változó egy adott kezdeti értékről valamilyen lépéssel végső értékre változtatja az értékét, és ennek a változónak minden értékére a ciklus törzse egyszer végrehajtásra kerül.

Általában ezt a ciklust akkor használják, ha át kell ismételnie bizonyos értékeket, és mindegyiknél végre kell hajtania néhány műveletet.

A ciklus általános képe számlálóval:

nc for<счетчик>tól től<нач. знач.>előtt<кон. знач.>[lépés<знач.>]
<тело цикла (последовательность команд)>
kts

A lépést nem szükséges feltüntetni, ha nincs megadva, akkor eggyel egyenlőnek számít.

Most átírhatjuk a "spirál" algoritmust a következő módon:

használd a fiókot
alg
korai
. egy pontra lépni(3,3)
. engedje le a tollat
. egész méretben
. nc 1-9 mérethez 2. lépés
. . tekercs (méret)
. kts
. emelje fel a tollat
con
alg turn(arg w)
korai
. eltolás vektorral(a, 0)
. eltolás vektorral(0, -a)
. eltolás vektorral(-a-1,0)
. eltolás vektorral(0, a+1)
con

Ebben a példában a "size" számlálóváltozó a következő értékeket kapja: 1, 3, 5, 7, 9. Azaz, ciklus 5-ször kerül végrehajtásra. A „size” változó minden egyes értékénél a ciklustörzs egyszer végrehajtásra kerül, példánkban ez a „coil (arg thing)” segédalgoritmus hívása.

Egy változó első használata előtt deklarálni kell, vagyis hogy milyen típusú. Ezt a programunkban az „integer size” sorban tesszük meg, azaz jelezzük, hogy a „size” változót használjuk egész számok tárolására, ezért ehhez memóriát kell foglalnunk. A változókról kicsit később fogunk még beszélni.

Egy ilyen algoritmus blokkdiagramja így néz ki:

Nézzünk egy másik példát:

Először emlékezzünk meg és írjunk egy segédalgoritmust, amely négyzetet rajzol az (x, y) pontban. A rajz megváltoztatásához a parancsot fogjuk használni eltolás vektorral(az előző példákban egy pontra tolták el).

Az algoritmus a következő lehet:

alg négyzet(arg x, y, oldal)
korai
. egy pontra lépni(x, y)
. eltolás vektorral(-oldal/2, oldal/2)
. engedje le a tollat
. eltolás vektorral(oldal, 0)
. eltolás vektorral(0, -oldal)
. eltolás vektorral(-oldal, 0)
. eltolás vektorral(0, oldal)
. emelje fel a tollat
con

Egy ilyen segédalgoritmus segítségével a következő ábrát rajzoljuk:

Ehhez a "for" ciklust használjuk. Tanulmányozza a mintaprogramot:

használd a fiókot
alg ábra1
korai
. egész z
. nc z 2-től 10-ig 2. lépés
. . négyzet(0, 0, z)
. kts
con
alg négyzet(arg x, y, oldal)
korai
. egy pontra lépni(x, y)
. eltolás vektorral(-oldal/2, oldal/2)
. engedje le a tollat
. eltolás vektorral(oldal, 0)
. eltolás vektorral(0, -oldal)
. eltolás vektorral(-oldal, 0)
. eltolás vektorral(0, oldal)
. emelje fel a tollat
con

Ebben a példában a "z" változó a 2, 4, 6, 8, 10 értékeket kapja. ciklus 5-ször kerül végrehajtásra. Minden „z” értéknél a ciklustörzs egyszer végrehajtásra kerül, példánkban ez a segédnégyzetes algoritmus hívása.

Egy változó első használata előtt deklarálni kell, vagyis hogy milyen típusú. Ez a programunkban az "integer z" sorban történik, azaz jelezzük, hogy a "z" változót fogjuk használni egész számok tárolására, ezért memóriát kell lefoglalnunk hozzá. A változókról kicsit később fogunk még beszélni.

Amint észrevette, az algoritmus nemcsak számokat, hanem számokat is használt algebrai kifejezések, képletek, például "-oldal/2". Az informatikában ezeket a kifejezéseket ún számtan. A nyelv szabályai lehetővé teszik, hogy az algoritmusok írásakor bárhová írhatunk számot, tetszőleges aritmetikai kifejezést írjunk.

Feladatkártyák

    Keresse meg a billentyűzetről beírt n egész számok közül a negatív számot

    Két tetszőleges számot kapsz. Amíg a termékük 100-nál kisebb, növelje az egyes számokat 2-vel, és jelenítse meg a végső számokat a monitoron

    Sorozatosan beírt n -egész számok. Keresse meg a sorozat ötöseinek számát

    Sorozatosan beírt n -egész számok. Keresse meg a különbséget a maximális és minimális értékeket adott számokat

    Keresse meg a billentyűzetről beírt n egész számok közül a negatív számot

    Két tetszőleges számot kapsz. Amíg a termékük 100-nál kisebb, növelje az egyes számokat 2-vel, és jelenítse meg a végső számokat a monitoron

    Sorozatosan beírt n -egész számok. Keresse meg a sorozat ötöseinek számát

    Sorozatosan beírt n -egész számok. Keresse meg az adott számok maximális és minimális értéke közötti különbséget

    Keresse meg a billentyűzetről beírt n egész számok közül a negatív számot

    Két tetszőleges számot kapsz. Amíg a termékük 100-nál kisebb, növelje az egyes számokat 2-vel, és jelenítse meg a végső számokat a monitoron

    Sorozatosan beírt n -egész számok. Keresse meg a sorozat ötöseinek számát

    Sorozatosan beírt n -egész számok. Keresse meg az adott számok maximális és minimális értéke közötti különbséget

    Keresse meg a billentyűzetről beírt n egész számok közül a negatív számot

    Két tetszőleges számot kapsz. Amíg a termékük 100-nál kisebb, növelje az egyes számokat 2-vel, és jelenítse meg a végső számokat a monitoron

    Sorozatosan beírt n -egész számok. Keresse meg a sorozat ötöseinek számát

    Sorozatosan beírt n -egész számok. Keresse meg az adott számok maximális és minimális értéke közötti különbséget

Beágyazott hurkok és ágak a KUMIR rendszerben

A számítástechnika egyik alapfogalma az algoritmus fogalma. Az "algoritmus" kifejezés eredete a matematikához kapcsolódik. Ez a szó az Algorithmi-ból származik - Muhammad al-Khwarizmi (787-850), a középkori kelet kiemelkedő matematikusa nevének latin írásmódja. "Az indiai számla" című könyvében megfogalmazta a természetes számok arab számokkal történő írásának szabályait és a velük való munka szabályait egy oszlopban.

A jövőben az algoritmust pontos előírásnak kezdték nevezni, amely meghatározza azt a műveletsort, amely biztosítja a kívánt eredmény elérését a kezdeti adatokból.

Az algoritmus úgy is megtervezhető, hogy emberi vagy automatizált eszköz hajtsa végre. Egy algoritmus létrehozása, még a legegyszerűbb is, kreatív folyamat. Kizárólag élőlények számára elérhető, ill hosszú idejeúgy gondolják, hogy csak az emberek számára. A XII században. matematikai értekezésének latin fordítása készült, amelyből az európaiak megismerték a decimális helyzetszámrendszert és a többjegyű aritmetika szabályait. Ezeket a szabályokat akkoriban algoritmusoknak nevezték.

Az algoritmus fent megadott definíciója nem tekinthető szigorúnak - nem teljesen világos, hogy mi a "pontos előírás" vagy "a kívánt eredmény elérését biztosító műveletek sorozata". Ezért gyakori az algoritmusok több általános tulajdonságának megfogalmazása, amelyek lehetővé teszik az algoritmusok megkülönböztetését más utasításoktól.

Ezek a tulajdonságok:

diszkrétség (szakadás, szétválasztás) - az algoritmusnak a probléma megoldásának folyamatát egyszerű (vagy korábban meghatározott) lépések egymás utáni végrehajtásaként kell ábrázolnia. Az algoritmus által biztosított minden egyes művelet csak az előző végrehajtásának befejezése után kerül végrehajtásra.

Bizonyosság - az algoritmus minden szabálya legyen világos, egyértelmű, és ne hagyjon teret az önkényességnek. Ennek a tulajdonságnak köszönhetően az algoritmus végrehajtása mechanikus jellegű, és nem igényel további utasításokat vagy információkat a megoldandó problémáról.

Hatékonyság (végesség) – az algoritmusnak véges számú lépésben kell elvezetnie a probléma megoldásához.

tömegjelleg - a probléma megoldására szolgáló algoritmus általános formában van kidolgozva, vagyis egy bizonyos problémaosztályra kell alkalmazni, amelyek csak a kiindulási adatokban különböznek egymástól. Ebben az esetben a kiindulási adatokat egy bizonyos területről lehet kiválasztani, amelyet az algoritmus alkalmazhatósági területének nevezünk.

Algoritmusok írásának módjai

Az algoritmusok írásához sokféle eszközt használnak. Az eszközök megválasztását a végrehajtott algoritmus típusa határozza meg.

Az algoritmusok írásának a következő főbb módjai vannak:

- szóbeli amikor az algoritmust emberi (természetes) nyelven írják le. A nemzeti nyelvek természetesek (orosz, angol, német stb.);

- szimbolikus amikor az algoritmus leírása szimbólumkészlettel van leírva, és egy program (a programok programozási nyelvekkel íródnak);

- grafikus amikor az algoritmus leírása a halmaz segítségével történik grafikus képek(blokk diagramm).

Az általánosan használt rögzítési módszerek agrafikus jelölés folyamatábrák segítségével éskarakter jelölés valamilyen algoritmikus nyelv – program segítségével.

Nál nél grafikus módon rekordokat, folyamatábrákat állítanak össze, amelyeken, segítségével szimbólumok(geometriai ábrák) jelölik az algoritmus különböző részeit. A blokkdiagramok elemei az ábrán láthatók.

KUMIR programozási rendszer

Az algoritmusok témakörének elsajátításakor a KUMIR programozási rendszert fogjuk használni.

A KuMir (Oktatási MIR-készlet) egy programozási rendszer, amelyet arra terveztek, hogy támogassa az alapfokú számítástechnikai és programozási kurzusokat közép- és felsőfokú iskolákban.

A KuMir rendszer iskolai algoritmikus nyelvet használ orosz szókinccsel és beépített végrehajtókkal: Robot és Draftsman stb.

A programba való belépéskor a KuMir folyamatosan teljes ellenőrzést végez annak helyességére vonatkozóan, jelentést készít a program margóin az összes észlelt hibáról.

A program futtatásakor lépésről lépésre mód A KuMir megjeleníti a hozzárendelési műveletek eredményeit és a logikai kifejezések értékeit a mezőkön. Ez lehetővé teszi a programozás alapjainak elsajátításának felgyorsítását.

Grafikus Robot

A grafikus végrehajtó robot lehetővé teszi a programozás alapjainak elsajátítását és a fő algoritmikus struktúrák működésének megértését.

Grafikusa vezérlő objektum. Egy csomaguralkodni fogunk rajtuk.

A robot előadó néhánybankiinduló környezet - téglalap alakú mező, cellákra osztva, amelyek között falak lehetnek.

A robot a falak megkerülésével és a cellákra festve mozoghat a pályán. A robot nem tud áthaladni a falon, de tudja ellenőrizni, hogy van-e fal mellette. A robot nem léphet túl a mezőt határoló téglalapon.

R
bot parancsokat tud végrehajtani
: fel, le, jobbra, balra, fesd át.

A robot ellenőrizni tudja a körülményeket : felül szabad, alul szabad, jobb oldalon szabad, bal oldalon szabad, részecske hozzáadása Nem megfordítja az állapotot. Nem szabad felülről, nem szabad alulról, nem szabad jobbról, nem szabad balról.

Alapvető algoritmikus struktúrák

    Három alapvető algoritmikus struktúra (konstrukció) létezik-lineáris (követő), elágazó És ciklus, amelyből bármilyen algoritmus felállítható.Minden algoritmikus struktúrának egy belépési és egy kilépési pontja van.

    Az algoritmusokat iskolai nyelven és blokkdiagramok formájában is írjuk.

Lineáris szerkezet

Lineáris szerkezet Az algoritmusok legegyszerűbb szervezése - a parancsok egymás után sorban hajtódnak végre

Példa:

Ciklikus szerkezet (ciklus)

    Ciklikus szerkezet (ciklus) ugyanazon parancsok többszöri végrehajtását biztosítja. A ciklikus struktúráknak többféle típusa van.

    Bármely ciklikus szerkezet két részből áll:fejlécÉs ciklustestek.

    A ciklus végrehajtása során ismétlődő utasítások halmazát hívjukciklus test.

    fejléc meghatározza a huroktest ismétlődéseinek számát.

Hurok az ismétlések számához (szer)

nc N egyszer

<команда>

kts

P Példa:

használat Robot
alg oszlop

korai
.
nc 5 egyszer
. . festeni át
. . fel
.
kts

con

Hurok előfeltétellel (még)

(belépés algoritmikus nyelv)

nc Viszlát <условие>

<команда>

Nak nek c

Példa:

használat Robot
alg Vonal

korai

nc Viszlát felső laza
festeni át
fel
kts

con

Hurok utófeltétellel (at)

(jelölés algoritmikus nyelven)

n c

<команда>

cc_at <условие>

Példa:

használat Robot
alg Vonal

korai
nc

átfesteni; fel

cc_at szabadon hagyták

con

Elágazás szerkezete.

    Elágazás szerkezete. Egyes problémák megoldása bizonyos feltételek teljesülésétől függően különböző cselekvéseket igényel. Ilyen esetekben az algoritmus elágazásáról beszélünk.

    Az „elágazó” struktúra megvalósításához az iskola EL két strukturált parancsát használjuk - if és choice, amelyek mindegyike lehet teljes és hiányos.

    Folyamatábrákban és iskolai nyelven<условие>egy logikai kifejezés, amely a kettő közül az egyiket eredményezheti lehetséges értékek - igaz vagy fekszik. Az iskolai nyelven ezek az értékek igennel és nemmel vannak írva. A programozási nyelvek gyakran használnak értékeketIgazÉs Hamis. A számítógép ezeket az értékeket 1-ként és 0-ként tárolja.

Teljes ág

(jelölés algoritmikus nyelven)

e ha <условие>
. .
Hogy <команда1>
. .
másképp <команда2>
Minden

Példa:

használat Robot
alg elágazó_teli

korai
.
Ha felső laza
. .
Hogy fel
. .
másképp le-
.
Minden

con

hiányos elágazás

(jelölés algoritmikus nyelven)

e ha <условие>
. .
Hogy <команда1>
Minden

Példa:

használat Robot
alg elágazás_hiányos

korai
.
Ha felső laza
. .
Hogy fel
.
Minden

con

Segédalgoritmus (eljárás)

    Segédalgoritmusnak nevezzük azt az algoritmust, amellyel a főfeladatból valamilyen részfeladatot megoldanak, és amelyet rendszerint ismételten végrehajtanak.

    A programozási nyelven írt segédalgoritmust szubrutinnak vagy eljárásnak nevezzük.

    A segédalgoritmust a főprogramból a néven keresztül hívják meg. A segédalgoritmust a főalgoritmus után írjuk. A segédalgoritmusnak nevet kell adni.

használat Robot
alg
korai
le-

négyzet
le-

le-
con

alg négyzet
korai

festeni át

jobb

festeni át

le-

festeni át

balra

festeni át
con

Beágyazott hurkok és ágak

Egyes feladatok robottal való megoldása során szükség van egymásba ágyazott hurkok vagy ágak használatára.

C az ucl-t beágyazottnak nevezzük, ha egy másik hurkon belül van elhelyezve.

Tekintsünk egy beágyazott hurkot a while ciklus példájával.

Tudjuk, hogy a ciklus egy hurokfejlécből áll, amely meghatározza, hogy a hurok törzse hányszor ismétlődik.

A ciklus törzse a ciklus azon része, amely a ciklus végrehajtásakor ismétlődik.

A ciklus törzse lehet egy parancs, több parancs vagy egy másik hurok vagy ág.

Ha a hurok törzse egy másik hurok vagy ág, akkor ezeket beágyazottnak nevezzük.

beágyazott hurok

Az első lépésben a külső hurok meghívja a belső hurkot, amely a befejezésig fut, majd a vezérlés átkerül a külső hurok törzsébe. A második lépésben a külső hurok ismét hívja a belsőt. És így tovább, amíg a külső hurok véget nem ér.

Beágyazott ág

Fontolja meg a probléma megoldását beágyazott ágakkal és hurkokkal:

1. feladat A robot a falon van, amelyen lyukak vannak, a fal mentén jobbra haladva, a robotnak át kell festenie az összes cellát, ahol lyukak vannak.

használat Robot alg korai
.
nc Viszlát jobb oldalon Val vel szabadon
nc Viszlát feneke laza
.átfesteni;
jobb
. .
kts
. . jobb
.
kts con VAL VEL
meghagyjuk a feladat megoldására szolgáló algoritmust egy külső while ciklussal és egy beágyazott while ciklussal.

R Ugyanezt a problémát egy külső while ciklus és egy beágyazott ág segítségével oldjuk meg.

Oldjuk meg ugyanezt a problémát egy külső while ciklussal és egy beágyazott while ciklussal.

Végrehajtó vezérlő robot a KUMIR rendszerben

A robot egy bizonyos környezetben létezik (téglalap alakú kockás mező). A falak a mező egyes cellái között helyezkedhetnek el. Egyes cellák árnyékolhatók (3.11. ábra).

A robot pontosan egy cellát foglal el a mezőből.

A felfelé, lefelé, balra és jobbra adott parancsoknál a Robot a következő cellára lép a megadott irányban. Ha fal van az úton, akkor hiba történik - üzenet jelenik meg a következő parancs végrehajtásának lehetetlenségéről.

Az átfestés parancsára a Robot átfesti azt a cellát, amelyben áll. Ha a cellát már átfestették, akkor a rendszer újra átfesti, bár látható változás nem történik.

A robot csak helyesen írt parancsokat tud végrehajtani. Ha leírod a parancs helyett, akkor a Robot nem fogja megérteni ezt a bejegyzést, és azonnal hibát jelez.

RÓL RŐL
hibák: 1 szintaktikai; 2. logikus

A jelenetleírásokat a rendszer tárolja szöveges fájlok speciális formátum (.fil formátum).

Jelenlegi- a környezet, amelyben a robot tartózkodik Ebben a pillanatban(beleértve a Robot helyzetére vonatkozó információkat is).

itthon- az a környezet, amelybe a Robotot a Robot segítségével végrehajtott program végrehajtásának kezdetén erőszakkal elhelyezik.

Működési eljárás:


  1. Kérdez kiinduló környezet feladat szerint:
Menü Eszközök → A Robot kezdőkörnyezetének módosítása (a környezet megrajzolása a feladat feltételének megfelelően, adjon nevet, mentse a Személyes mappába)

2. Adja meg a vállalkozót:

Beszúrás menü → Robot használata

3. Írjon algoritmust a feladat megoldására!

4. Futtassa az algoritmust (Menü Futtatás → Folyamatos futtatás / F9)

A végrehajtó robot parancsrendszere a KUMIR rendszerben


Csapat

Akció

fel

A robot 1 cellával feljebb lép

le-

A robot 1 cellával lejjebb mozog

balra

A robot 1 cellát balra mozgat

jobb

A robot 1 cellát jobbra mozgat

festeni át

A robot lefesti azt a cellát, amelyben van

jogos ingyen

A robot ellenőrzi a megfelelő végrehajtását egyszerű körülmények

szabadon hagyták



felső laza



feneke laza



a cella árnyékolt



ketrec tiszta



Ciklikus algoritmusok

Ciklus ismétlődő cselekvések megszervezése, amíg egy bizonyos feltétel nem teljesül .

Hurok test - megismételhető műveletek halmaza.

Feltétel - logikai kifejezés (egyszerű vagy összetett (összetett))
Ciklus típusok:

1.Loop "N-szer ismétlés" 2. Loop "Bye"
nc n alkalommal nts viszlát
. . Hurok test. . Hurok test
kts kts

Példa: nts viszlát jogos ingyen


Az "Ismételd n-szer" ciklus általános nézete:

ISMÉTELÉS n-SZER

VÉGE
kts

A while ciklus általános képe:

TEENDŐ KÖZBEN

VÉGE
Összetett feltételek egy vagy többből alakult ki egyszerű feltételekés szolgálati szavakat ÉS, VAGY, NEM.


Összetett állapot A és B(ahol A, B egyszerű feltételek) teljesül, ha a benne foglalt két egyszerű feltétel mindegyike teljesül.

Legyen A - ingyenes a tetején BAN BEN - szabad a jobb oldalon akkor az összetett feltétel A és B- ingyenes a tetején ÉS szabad a jobb oldalon.


Összetett állapot A VAGY B teljesül, ha a benne foglalt két egyszerű feltétel közül legalább az egyik teljesül: top ingyenes VAGY jobb ingyenes
Összetett állapot NEM A- teljesül, ha az A feltétel nem teljesül.

Példa: Legyen A egy árnyékolt cella (egyszerű feltétel).

P Az összetett állapot ellenőrzése NEM A:

a) A - kész, NEM A (NEM árnyékolt) - nincs kész.

b) A - nincs kész, NEM A (NEM árnyékolt) - kész.


Elágazás parancs

Elágazás - a cselekvések olyan szervezési formája, amelyben egy bizonyos feltétel teljesülésétől vagy nem teljesülésétől függően akár egyik, akár másik cselekvéssorozatot hajtanak végre.

Az IF parancs általános nézete:

HA HOGY MÁSKÉPP

VÉGE

KUMIR nyelven:

Teljes elágazás: Részleges elágazás:
Ha Hogy Ha Hogy

másképp

mind mind

Segítő algoritmus- egy algoritmus, amely megoldja a fő probléma néhány részproblémáját.

A KUMIR rendszerben a segédalgoritmusokat a főprogram végére írják (a szervizszó után con) név szerint hívják végrehajtásra a főprogramban.

BAN BEN felmérések és megbízások

1. Adja meg annak a három parancsnak az összes algoritmusát, amely a Robotot eredeti helyéről a B cellába mozgatja.

Van-e algoritmus ehhez a feladathoz, amely során a robot:

a) két lépés b) négy lépés; c) öt lépés; d) hét lépés?


  1. Petya készített egy algoritmust, amely átfesti a robotot az A cellából a B cellába. Mit tegyen Kolya ezzel az algoritmussal, hogy olyan algoritmust kapjon, amely a robotot B-ből A-ba viszi, és ugyanazokat a cellákat tölti ki?


7. Kettő ismert segédalgoritmusok Robot

Rajzolja le, mi történik, ha a Robot a következő alapvető algoritmusokat hajtja végre:


A)

nc 5 alkalommal


minta_1

jobb; jobb;


b)

nc 7 alkalommal


minta_2

jobb; jobb


V)
jobb; jobb; jobb

fel; fel

jobb; jobb; jobb

le; le-


G)
jobb; jobb
jobb; jobb

8. Állítson össze algoritmusokat, amelyek alapján a robot átfesti a megadott cellákat:



9. Ismeretes, hogy valahol a Robottól jobbra van egy fal. Alkossunk meg egy algoritmust, aminek vezérlése alatt a Robot több cellát lefest a falig, és visszatér eredeti helyzetébe.

10. Ismeretes, hogy valahol a Robottól jobbra van egy árnyékolt cella.

VAL VEL hagyja el az algoritmust, amelynek vezérlése alatt a Robot több cellát fest az árnyékolt celláig, és visszatér eredeti helyzetébe.

11. Ismeretes, hogy a Robot a vízszintes folyosó bal bejáratának közelében található.

12. Ismeretes, hogy a Robot valahol a vízszintes folyosón van. A folyosó egyik cellája sincs lefestve.

Állítsunk össze egy algoritmust, amelynek vezérlése alatt a Robot átfesti ennek a folyosónak az összes celláját, és visszatér eredeti helyzetébe.


13. A Robottól jobbra lévő tíz cellából álló sorban néhány cella árnyékolt.

VAL VEL hagyjuk a cellákat festő algoritmust:

a) minden árnyékolt cella alatt;

b) minden egyes árnyékolt cella felett és alatt.


14. Mit mondhatunk az algoritmus következő töredékének helyességéről?

nts viszlát a cella árnyékolt

HA jogos ingyen HOGY

jobb; festeni át

Nak nek
c

15. Írjon programot, amellyel a Robot mindhárom útvesztőben eljuthat a B cellába!


16. Írjon programot, amely után a Robot végig tud menni a folyosón a mező bal alsó sarkától a jobb felső felé. A folyosó egy cella széles, és balról lentről jobbra felfelé húzódik. Egy lehetséges folyosóra példa látható az ábrán.

Z

adachi GIA


  1. Folyosó1. A robot valahol a függőleges folyosón van. A folyosó egyik cellája sincs lefestve. Hozzon létre egy algoritmust, amely alapján a robot átfesti ennek a folyosónak az összes celláját, és visszatér eredeti helyzetébe.

  1. NAK NEK
    Szükséges

    Adott
    folyosó2. A robot egy keskeny függőleges folyosó felső cellájában található. A folyosó szélessége egy cella, a folyosó hossza tetszőleges lehet.

A Robot kezdeti helyének egy lehetséges változata az ábrán látható (a robotot "P" betű jelöli)

Írjon egy algoritmust a robothoz, amely kitölti a folyosón belüli összes cellát, és visszaállítja a robotot az eredeti helyzetébe. Például a fenti képhez a robotnak a következő cellákat kell átfestenie (lásd a képet):


  1. A végtelen mezőn egy hosszú vízszintes fal található. A fal hossza ismeretlen. A robot az egyik ketrecben van, közvetlenül a fal felett. A Robot kezdeti helyzete sem ismert. Az egyik lehetséges pozíció:
H


Szükséges

Adott
Írjon egy algoritmust a Robothoz, amely befesti a fal feletti és mellette lévő összes cellát, függetlenül a fal méretétől és a robot kezdeti helyzetétől. Például az adott rajzhoz a Robotnak át kell festenie a következő cellákat:

A Robot végső pozíciója tetszőleges lehet. Az algoritmus végrehajtásakor a robotot nem szabad megsemmisíteni.



  1. A végtelen mezőn egy hosszú függőleges fal található. A fal hossza ismeretlen. A robot az egyik ketrecben található, közvetlenül a faltól jobbra. A robot kezdeti helyzete sem ismert. A robot egyik lehetséges pozíciója az ábrán látható (a robotot „P” betű jelöli): Írjon egy algoritmust olyan munkához, amely átfesti a fal melletti összes cellát: balra, felülről festetlenül és egyen át; a jobb oldalon, alulról kiindulva árnyékolva és egyen át. A robotnak csak azokat a cellákat kell átfestenie, amelyek megfelelnek ezt az állapotot. Például a fenti ábrához a robotnak a következő cellákat kell kitöltenie (lásd az ábrát): A robot végső elhelyezkedése tetszőleges lehet. Az algoritmusnak meg kell oldania a problémát tetszőleges falméret és a robot bármely érvényes kezdeti helyzete esetén. Az algoritmus végrehajtásakor a robotnak nem szabad összeesnie.


Írjon egy algoritmust a robothoz, amely lefesti a függőleges faltól balra és a vízszintes fal felett és mellettük lévő összes cellát. A robotnak csak azokat a cellákat kell átfestenie, amelyek megfelelnek ennek a feltételnek. Például a fenti képhez a Robotnak át kell festenie a következő cellákat (lásd a képet).


H írj egy algoritmust a Robothoz, amely a fal melletti cellákat felülről és alulról balról kezdve egyen át festi. A robotnak csak azokat a cellákat kell átfestenie, amelyek megfelelnek ennek a feltételnek. Például az adott a) ábrához a Robotnak át kell festenie a következő cellákat (lásd b ábra).

A Robot végső pozíciója tetszőleges lehet. Az algoritmusnak meg kell oldania a problémát tetszőleges falméret és a Robot bármely érvényes kezdeti helyzete esetén.



R

  1. A végtelen mezőn egy hosszú függőleges fal található. A fal hossza ismeretlen. A robot az egyik ketrecben található, közvetlenül a faltól balra. A robot kezdeti helyzete sem ismert. A robot egyik lehetséges pozíciója az ábrán látható (a robot "P" betűvel van jelölve):
Írjon egy algoritmust a munkához, amely átfesti a fal melletti összes cellát:

  • mind a bal oldalon;

  • a jobb oldalon felülről indulva festetlen és egyen keresztül.
A robotnak csak azokat a cellákat kell átfestenie, amelyek megfelelnek ennek a feltételnek.

B
1102_GIA2011

A végtelen mezőn két vízszintes fal található. A falak hossza ismeretlen. A falak közötti távolság nem ismert. A robot az alsó fal felett, a bal szélén található ketrecben található. Írjon egy algoritmust a robothoz, amely lefesti az összes cellát, amely az alsó fal felett és a felső fal alatt található, és a mellettük található. A robotnak csak azokat a cellákat kell átfestenie, amelyek megfelelnek ennek a feltételnek. Például a fenti rajzhoz a robotnak a következő cellákat kell kitöltenie (lásd az ábrát):

A robot végső elhelyezkedése tetszőleges lehet. Az algoritmusnak meg kell oldania a problémát tetszőleges mezőméretre és a falak tetszőleges helyére egy téglalap alakú mezőn belül. Az algoritmus végrehajtásakor a robotnak nem szabad összeesnie.


BAN BEN
1103_GIA_2011


A végtelen mezőn van egy vízszintes fal. A fal hossza ismeretlen. A fal jobb végétől lefelé egy függőleges fal húzódik, szintén ismeretlen hosszúságú. A robot egy vízszintes fal felett, a bal szélén található ketrecben található. Az ábrán az egyik látható lehetséges módjai a falak és a Robot elhelyezkedése (a robotot "P" betű jelzi).

Írjon egy algoritmust a robothoz, amely lefesti a vízszintes fal felett és a függőleges faltól jobbra található és a mellettük lévő összes cellát. A robotnak csak azokat a cellákat kell átfestenie, amelyek megfelelnek ennek a feltételnek. Például a fenti képhez a Robotnak át kell festenie a következő cellákat (lásd a képet).