Zvážte problém:

Vstup do programu je prirodzené číslo nepresahujúce 2 * 10 9 . Určte súčet číslic tohto čísla.

Na prvý pohľad je úloha celkom jednoduchá: musíte dôsledne vybrať čísla v čísle a pridať ich k súčtu. Zároveň je zrejmé, že počet číslic v čísle sa môže meniť, takže konečná hodnota parametra slučky pre sa ukáže ako nedefinovaná a existujú ťažkosti s jej aplikáciou.

V cyklických algoritmoch, v ktorých nie je možné získať počet opakovaní určitej sady inštrukcií pred jej začiatkom, sa používajú podmienené slučky.

Slučka while

Jednou z takýchto konštrukcií v programovacom jazyku Kumir je cyklus zbohom. Tento cyklus, často označovaný ako slučka s predpokladom, má nasledujúci formát:

  • nc bye stav
  • loop_body

Podmienka napísaná za služobným slovom je logickým výrazom.

Cyklus sa vykonáva takto:

  1. Hodnotí sa hodnota logického výrazu.
  2. Ak je výsledok výpočtu nie , cyklus sa skončí a Kumir prejde na prvý príkaz po slučke while. Ak je výsledok výpočtu áno, potom sa vykoná telo cyklu, po ktorom sa hodnota výrazu opäť vypočíta s novou hodnotou.

Dôležité! V tele cyklu sa musí nejaká hodnota spojená s podmienkou dočasne zmeniť, aby sa zabezpečil koniec cyklu, inak sa môže stať, že slučka je večná.

Teraz použijeme cyklus while na vyriešenie nášho problému.

  • vstupné č
  • nc, zatiaľ čo číslo > 0
  • suma:= suma + mod(číslo, 10)
  • num:= div(num, 10)
  • suma výberu

Takže pri každom vykonávaní tela slučky sa posledná číslica čísla pridá k sume a potom sa číslo zníži 10-krát. Je zrejmé, že nakoniec sa num bude rovnať 0, po čom sa cyklus skončí.

Dovtedy cyklovať

V Idol existuje ďalší variant podmienenej slučky, nazývanej až do slučky, ktorá má nasledujúci formát:

  • loop_body
  • kc pod podmienkou

Ak je v slučke, zatiaľ čo podmienka je kontrolovaná pred telom slučky, potom v slučke dovtedy - po. Preto sa tento cyklus často nazýva slučka s dodatočnou podmienkou. Telo takejto slučky sa vždy vykoná aspoň raz.

Práca slučky dovtedy prebieha takto:

  1. Telo slučky sa vykoná
  2. Hodnotí sa hodnota logického výrazu. Ak je výsledok výpočtu nie , telo cyklu sa začne vykonávať znova atď. Ak je výsledok výpočtu áno , cyklus sa skončí a Kumir pristúpi k vykonaniu nasledujúceho príkazu po slučka.

Úloha. Vstupom do programu je postupnosť celých čísel končiacich nulou. Nájdite počet záporných čísel v postupnosti. Je zaručené, že sekvencia obsahuje aspoň jedno nenulové číslo.

(útržok kódu programu)

  • vstupné č
  • ak číslo 0
  • potom k:= k + 1
  • kts pri čísle = 0
  • výstup k

Algoritmus na kreslenie špirály:

použite zásuvku
alg
skoro
. presunúť do bodu(3,3)
. spustite pero
. cievka(1); cievka(3); cievka(5); cievka(7); cievka (9)
. zdvihnite pero
kon
alg turn (arg w)
skoro
. posun po vektore(a, 0)
. posun po vektore(0, -a)
. posun po vektore(-a-1.0)
. posun po vektore(0, a+1)
kon

Venujte pozornosť príkazovému bloku:

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

Pomocný algoritmus „coil(arg thing)“ sa volá 5-krát, ale nedá sa volať v slučke „N-krát“, pretože zakaždým sa volá s inou hodnotou argumentu.

Ale môžete vidieť, že hodnoty argumentu sa menia z 1 na 9, zakaždým sa zvyšujú o 2. Takže vám môžeme pomôcť slučka s počítadlom. Takýto cyklus sa tiež nazýva cyklus „pre“.

Slučka s počítadlom- cyklus, v ktorom niektorá premenná zmení svoju hodnotu z danej počiatočnej hodnoty na konečnú s nejakým krokom a pre každú hodnotu tejto premennej sa telo cyklu vykoná raz.

Táto slučka sa zvyčajne používa, ak potrebujete iterovať niektoré hodnoty a vykonať nejaké akcie pre každú z nich.

Celkový pohľad na cyklus s počítadlom:

nc pre<счетчик>od<нач. знач.>predtým<кон. знач.>[krok<знач.>]
<тело цикла (последовательность команд)>
kts

Nie je potrebné uvádzať krok, ak nie je špecifikovaný, potom sa považuje za rovný jednej.

Teraz môžeme prepísať "špirálový" algoritmus týmto spôsobom:

použite zásuvku
alg
skoro
. presunúť do bodu(3,3)
. spustite pero
. celá veľkosť
. nc pre veľkosť 1 až 9, krok 2
. . cievka (veľkosť)
. kts
. zdvihnite pero
kon
alg turn (arg w)
skoro
. posun po vektore(a, 0)
. posun po vektore(0, -a)
. posun po vektore(-a-1.0)
. posun po vektore(0, a+1)
kon

V tomto príklade bude premenná počítadla „veľkosť“ dostávať hodnoty: 1, 3, 5, 7, 9. slučka sa vykoná 5-krát. Pre každú hodnotu premennej „veľkosť“ sa telo slučky vykoná raz, v našom príklade ide o volanie pomocného algoritmu „coil (arg thing)“.

Pred prvým použitím premennej musí byť deklarovaná, t.j. o aký typ ide. V našom programe sa to robí v riadku „veľkosť celého čísla“, t. j. uvádzame, že premennú „veľkosť“ použijeme na ukladanie celých čísel, a preto pre ňu musíme alokovať pamäť. O premenných si povieme viac o niečo neskôr.

Bloková schéma takéhoto algoritmu vyzerá takto:

Pozrime sa na ďalší príklad:

Najprv si zapamätajme a napíšme pomocný algoritmus, ktorý nakreslí štvorec v bode (x, y). Pre zmenu na kreslenie použijeme príkaz posun po vektore(v predchádzajúcich príkladoch boli posunuté do bodu).

Algoritmus môže byť takýto:

alg square (arg x, y, strana)
skoro
. presunúť do bodu(x, y)
. posun po vektore(-strana/2, strana/2)
. spustite pero
. posun po vektore(strana, 0)
. posun po vektore(0, -strana)
. posun po vektore(-strana, 0)
. posun po vektore(0, strana)
. zdvihnite pero
kon

Pomocou takéhoto pomocného algoritmu nakreslíme nasledujúci obrázok:

Na to používame slučku "for". Preštudujte si ukážkový program:

použite zásuvku
alg obrázok1
skoro
. celé číslo z
. nc pre z od 2 do 10 krok 2
. . štvorec (0, 0, z)
. kts
kon
alg square (arg x, y, strana)
skoro
. presunúť do bodu(x, y)
. posun po vektore(-strana/2, strana/2)
. spustite pero
. posun po vektore(strana, 0)
. posun po vektore(0, -strana)
. posun po vektore(-strana, 0)
. posun po vektore(0, strana)
. zdvihnite pero
kon

V tomto príklade premenná „z“ získa hodnoty: 2, 4, 6, 8, 10. slučka sa vykoná 5-krát. Pre každú hodnotu „z“ sa telo slučky vykoná raz, v našom príklade je to volanie pomocného štvorcového algoritmu.

Pred prvým použitím premennej musí byť deklarovaná, t.j. o aký typ ide. V našom programe sa to robí v riadku "integer z", teda naznačíme, že premennú "z" budeme používať na ukladanie celých čísel, a preto pre ňu potrebujeme alokovať pamäť. O premenných si povieme viac o niečo neskôr.

Ako ste si všimli, algoritmus používal nielen čísla, ale aj algebraické výrazy, vzorce, napríklad "-strana/2". V informatike sa tieto výrazy nazývajú aritmetika. Pravidlá jazyka umožňujú pri písaní algoritmov, kdekoľvek môžete napísať číslo, napísať ľubovoľný aritmetický výraz.

Karty úloh

    Nájdite medzi n - celými číslami zadanými z klávesnice číslo záporu

    Dostanete dve ľubovoľné čísla. Pokiaľ je ich súčin menší ako 100, zvýšte každé číslo o 2 a zobrazte konečné čísla na monitore

    Postupne zadaných n - celých čísel. Nájdite počet pätiek v poradí

    Postupne zadaných n - celých čísel. Nájdite rozdiel medzi maximálnymi a minimálnymi hodnotami daných čísel

    Nájdite medzi n - celými číslami zadanými z klávesnice číslo záporu

    Dostanete dve ľubovoľné čísla. Pokiaľ je ich súčin menší ako 100, zvýšte každé číslo o 2 a zobrazte konečné čísla na monitore

    Postupne zadaných n - celých čísel. Nájdite počet pätiek v poradí

    Postupne zadaných n - celých čísel. Nájdite rozdiel medzi maximálnymi a minimálnymi hodnotami daných čísel

    Nájdite medzi n - celými číslami zadanými z klávesnice číslo záporu

    Dostanete dve ľubovoľné čísla. Pokiaľ je ich súčin menší ako 100, zvýšte každé číslo o 2 a zobrazte konečné čísla na monitore

    Postupne zadaných n - celých čísel. Nájdite počet pätiek v poradí

    Postupne zadaných n - celých čísel. Nájdite rozdiel medzi maximálnymi a minimálnymi hodnotami daných čísel

    Nájdite medzi n - celými číslami zadanými z klávesnice číslo záporu

    Dostanete dve ľubovoľné čísla. Pokiaľ je ich súčin menší ako 100, zvýšte každé číslo o 2 a zobrazte konečné čísla na monitore

    Postupne zadaných n - celých čísel. Nájdite počet pätiek v poradí

    Postupne zadaných n - celých čísel. Nájdite rozdiel medzi maximálnymi a minimálnymi hodnotami daných čísel

Vnorené slučky a vetvy v systéme KUMIR

Jedným zo základných pojmov v informatike je koncept algoritmu. Pôvod termínu „algoritmus“ je spojený s matematikou. Toto slovo pochádza z Algorithmi - latinského hláskovania mena Muhammada al-Khwarizmiho (787 - 850), vynikajúceho matematika stredovekého východu. Vo svojej knihe „Na indickom účte“ sformuloval pravidlá zápisu prirodzených čísel pomocou arabských číslic a pravidlá práce s nimi v stĺpci.

V budúcnosti sa algoritmus začal nazývať presným predpisom, ktorý určuje postupnosť akcií, ktoré zabezpečujú získanie požadovaného výsledku z počiatočných údajov.

Algoritmus môže byť navrhnutý tak, aby ho vykonával človek alebo automatizované zariadenie. Vytvorenie algoritmu, dokonca aj toho najjednoduchšieho, je kreatívny proces. Je dostupný výlučne pre živé bytosti a dlho sa verilo, že iba pre ľudí. V XII storočí. vznikol latinský preklad jeho matematického pojednania, z ktorého sa Európania dozvedeli o desiatkovej pozičnej číselnej sústave a pravidlách viaccifernej aritmetiky. Tieto pravidlá sa v tom čase nazývali algoritmy.

Vyššie uvedená definícia algoritmu nemôže byť považovaná za striktnú - nie je úplne jasné, čo je "presný predpis" alebo "sekvencia činností, ktoré zabezpečujú dosiahnutie požadovaného výsledku." Preto je bežné formulovať niekoľko všeobecných vlastností algoritmov, ktoré umožňujú odlíšiť algoritmy od iných inštrukcií.

Tieto vlastnosti sú:

diskrétnosť (diskontinuita, separácia) - algoritmus by mal reprezentovať proces riešenia problému ako postupné vykonávanie jednoduchých (alebo vopred definovaných) krokov. Každá akcia poskytnutá algoritmom sa vykoná až po ukončení vykonania predchádzajúcej.

Istota - každé pravidlo algoritmu by malo byť jasné, jednoznačné a nenechávať priestor pre svojvôľu. Vďaka tejto vlastnosti je vykonávanie algoritmu svojou povahou mechanické a nevyžaduje žiadne ďalšie inštrukcie alebo informácie o riešenom probléme.

Efektívnosť (konečnosť) – algoritmus by mal viesť k riešeniu úlohy v konečnom počte krokov.

masový charakter - Algoritmus na riešenie problému je vyvinutý vo všeobecnej forme, to znamená, že musí byť použiteľný pre určitú triedu problémov, ktoré sa líšia iba počiatočnými údajmi. V tomto prípade je možné počiatočné údaje vybrať z určitej oblasti, ktorá sa nazýva oblasť použiteľnosti algoritmu.

Spôsoby písania algoritmov

Na písanie algoritmov sa používajú rôzne prostriedky. Výber prostriedkov je určený typom vykonávaného algoritmu.

Existujú nasledujúce hlavné spôsoby zápisu algoritmov:

- verbálne keď je algoritmus opísaný v ľudskom (prirodzenom) jazyku. Národné jazyky sú prirodzené (ruština, angličtina, nemčina atď.);

- symbolický keď je algoritmus opísaný pomocou množiny symbolov a je programom (programy sú napísané pomocou programovacích jazykov);

- grafický keď je algoritmus opísaný pomocou sady grafických obrázkov (vývojový diagram).

Bežne používané metódy nahrávania súgrafický zápis pomocou vývojových diagramov aznakový zápis pomocou nejakého algoritmického jazyka - programu.

Pomocou metódy grafického záznamu sa zostavujú vývojové diagramy, na ktorých sú pomocou symbolov (geometrické tvary) označené rôzne časti algoritmu. Prvky blokových schém sú znázornené na obrázku.

Programovací systém KUMIR

Pri zvládnutí témy algoritmy využijeme programovací systém KUMIR.

KuMir (Súprava vzdelávacích MIR) je programovací systém určený na podporu základných kurzov informatiky a programovania na stredných a vysokých školách.

Systém KuMir využíva školský algoritmický jazyk s ruskou slovnou zásobou a vstavanými spúšťačmi Robot a Draftsman atď.

KuMir pri vstupe do programu vykonáva neustálu plnú kontrolu jeho správnosti, pričom na okraj programu hlási všetky zistené chyby.

Pri vykonávaní programu v režime krok za krokom KuMir zobrazuje výsledky operácií priraďovania a hodnoty logických výrazov v poliach. To vám umožní urýchliť proces zvládnutia základov programovania.

Robot grafického umelca

Grafický spúšťací robot vám umožňuje zvládnuť základy programovania a pochopiť fungovanie hlavných algoritmických štruktúr.

Grafický umelecje objekt kontroly. Balíkbudeme im vládnuť.

Robotický umelec je v niektorýchštartovacie prostredie - obdĺžnikové pole, rozdelené na bunky, medzi ktorými môžu byť steny.

Robot sa môže pohybovať po poli, obchádzať steny a maľovať bunky. Robot nemôže prejsť cez stenu, ale môže skontrolovať, či je pri ňom stena. Robot nemôže ísť za obdĺžnik, ktorý ohraničuje pole.

R
bot môže vykonávať príkazy
: hore, dole, vpravo, vľavo, premaľovať.

Robot môže kontrolovať podmienky : voľná hore, voľná dole, voľná vpravo, voľná vľavo, pridanie častice nie obracia stav. Neslobodný zhora, neslobodný zdola, neslobodný sprava, neslobodný zľava.

Základné algoritmické štruktúry

    Existujú tri základné algoritmické štruktúry (konštrukcie)-lineárny (nasledujúci), rozvetvený a cyklus, z ktorých možno zostaviť ľubovoľný algoritmus.Každá algoritmická štruktúra má jeden vstupný bod a jeden výstupný bod.

    Algoritmy budeme písať v školskom jazyku aj vo forme blokových schém.

Lineárna štruktúra

Lineárna štruktúra je najjednoduchšia organizácia algoritmov - príkazy sa vykonávajú postupne jeden po druhom

Príklad:

Cyklická štruktúra (cyklus)

    Cyklická štruktúra (cyklus) poskytuje viacnásobné vykonávanie rovnakých príkazov. Existuje niekoľko typov cyklických štruktúr.

    Akákoľvek cyklická štruktúra pozostáva z dvoch častí -hlavička a telesá cyklu.

    Zavolá sa množina inštrukcií opakovaných počas vykonávania cyklutelo cyklu.

    hlavička určuje počet opakovaní tela slučky.

Slučka pre počet opakovaní (krát)

nc N raz

<команда>

kts

P Príklad:

použitie Robot
alg stĺpec

skoro
.
nc 5 raz
. . zafarbiť
. . hore
.
kts

kon

Slučka s predbežnou podmienkou (zatiaľ)

(zápis v algoritmickom jazyku)

nc zbohom <условие>

<команда>

do c

Príklad:

použitie Robot
alg Linka

skoro

nc zbohom vrch voľný
zafarbiť
hore
kts

kon

Slučka s dodatočnou podmienkou (at)

(zápis v algoritmickom jazyku)

n c

<команда>

cc_at <условие>

Príklad:

použitie Robot
alg Linka

skoro
nc

zafarbiť; hore

cc_at ponechaný voľný

kon

Štruktúra pobočky.

    Štruktúra pobočky. Riešenie niektorých problémov si vyžaduje rôzne úkony v závislosti od splnenia určitých podmienok. V takýchto prípadoch sa hovorí o vetvení algoritmu.

    Na implementáciu štruktúry „vetvovania“ sa používajú dva štruktúrované príkazy školského EL – if a choice, z ktorých každý môže byť úplný a neúplný.

    Vo vývojových diagramoch a školskom jazyku<условие>je boolovský výraz, ktorého výsledkom môže byť jedna z dvoch možných hodnôt -pravda alebo Nepravdivé. V školskom jazyku sú tieto hodnoty napísané ako áno a nie. Programovacie jazyky často používajú hodnotyPravda a Nepravdivé. Počítač tieto hodnoty uloží ako 1 a 0.

Plná pobočka

(zápis v algoritmickom jazyku)

e ak <условие>
. .
potom <команда1>
. .
inak <команда2>
všetky

Príklad:

použitie Robot
alg vetvenie_plné

skoro
.
ak vrch voľný
. .
potom hore
. .
inak cesta dole
.
všetky

kon

neúplné vetvenie

(zápis v algoritmickom jazyku)

e ak <условие>
. .
potom <команда1>
všetky

Príklad:

použitie Robot
alg vetvenie_neúplné

skoro
.
ak vrch voľný
. .
potom hore
.
všetky

kon

Pomocný algoritmus (postup)

    Algoritmus, ktorým sa rieši niektorá podúloha z hlavnej úlohy a ktorý sa spravidla vykonáva opakovane, sa nazýva pomocný algoritmus.

    Pomocný algoritmus napísaný v programovacom jazyku sa nazýva podprogram alebo procedúra.

    Pomocný algoritmus sa volá z hlavného programu cez meno. Pomocný algoritmus je napísaný za hlavným algoritmom. Pomocný algoritmus musí mať názov.

použitie Robot
alg
skoro
cesta dole

námestie
cesta dole

cesta dole
kon

alg štvorec
skoro

zafarbiť

správny

zafarbiť

cesta dole

zafarbiť

doľava

zafarbiť
kon

Vnorené slučky a vetvy

Pri riešení niektorých úloh s robotom je potrebné použiť vnorené slučky alebo vetvy.

C ucl sa nazýva vnorený, ak je umiestnený v inej slučke.

Zvážte vnorený cyklus pomocou príkladu cyklu while.

Vieme, že slučka pozostáva z hlavičky slučky, ktorá určuje, koľkokrát sa telo slučky zopakuje.

Telo cyklu je časť cyklu, ktorá sa opakuje, keď sa cyklus vykonáva.

Telom cyklu môže byť príkaz, viacero príkazov alebo iná slučka alebo vetva.

Keď je telo slučky ďalšou slučkou alebo vetvou, nazývajú sa vnorené.

vnorená slučka

Pri prvom prechode vonkajšia slučka zavolá vnútornú slučku, ktorá sa dokončí, po ktorej sa riadenie prenesie na telo vonkajšej slučky. Pri druhom prechode vonkajšia slučka opäť volá vnútornú. A tak ďalej, kým sa vonkajšia slučka neskončí.

Vnorená vetva

Zvážte riešenie problému s vnorenými vetvami a slučkami:

Úloha 1 Robot je na stene, ktorá má diery, pohybuje sa po stene doprava, robot musí premaľovať všetky bunky, kde sú diery.

použitie Robot alg skoro
.
nc zbohom napravo s voľne
nc zbohom dno voľné
.zafarbiť;
správny
. .
kts
. . správny
.
kts kon OD
ponecháme algoritmus na riešenie problému s vonkajšou slučkou while a vnorenou slučkou while.

R Rovnaký problém riešime pomocou vonkajšej slučky while a vnorenej vetvy.

Vyriešme rovnaký problém s vonkajšou slučkou while a vnorenou slučkou while.

Robot na ovládanie vykonávateľa v systéme KUMIR

Robot existuje v určitom prostredí (obdĺžnikové šachovnicové pole). Steny môžu byť umiestnené medzi niektorými bunkami poľa. Niektoré bunky môžu byť zatienené (obr. 3.11).

Robot zaberá presne jednu bunku poľa.

Na príkazy hore, dole, doľava a doprava sa robot presunie do ďalšej bunky v zadanom smere. Ak je na ceste stena, dôjde k zlyhaniu - zobrazí sa správa o nemožnosti vykonať ďalší príkaz.

Na príkaz premaľovať robot premaľuje bunku, v ktorej stojí. Ak je bunka už prelakovaná, prelakuje sa znova, aj keď nedôjde k žiadnym viditeľným zmenám.

Robot môže vykonávať iba správne napísané príkazy. Ak namiesto príkazu zapíšete, Robot nebude rozumieť tomuto zadávaniu a okamžite ohlási chybu.

O
chyby: 1 syntaktické; 2. logické

Popisy prostredí sú uložené v textových súboroch špeciálneho formátu (formát .fil).

Aktuálne- prostredie, v ktorom sa Robot práve nachádza (vrátane informácií o polohe Robota).

Domov- prostredie, do ktorého je Robot násilne umiestnený na začiatku vykonávania programu pomocou Robota.

Operačný postup:


  1. Opýtať sa štartovacie prostredie podľa zadania:
Ponuka Nástroje → Zmeniť štartovacie prostredie robota (nakresliť prostredie podľa stavu úlohy, pomenovať, uložiť do priečinka Osobné)

2. Uveďte dodávateľa:

Ponuka Vložiť → Použiť robota

3. Napíšte algoritmus na riešenie problému.

4. Spustite algoritmus (Menu Spustiť → Spustiť nepretržite / F9)

Systém príkazov vykonávateľa Robota v systéme KUMIR


Tím

Akcia

hore

Robot sa posunie o 1 bunku vyššie

cesta dole

Robot sa posunie o 1 bunku nižšie

doľava

Robot sa presunie o 1 bunku doľava

správny

Robot sa posunie o 1 bunku doprava

zafarbiť

Robot vyfarbí bunku, v ktorej sa nachádza

právo zadarmo

Robot skontroluje vykonanie zodpovedajúceho jednoduché podmienky

ponechaný voľný



vrch voľný



dno voľné



bunka je zatienená



klietka čistá



Cyklické algoritmy

Cyklus organizácia opakujúcich sa akcií, kým nie je splnená určitá podmienka .

Telo slučky - súbor opakovateľných akcií.

podmienka - booleovský výraz (jednoduchý alebo komplexný (zložený))
Typy cyklov:

1.Slučka „Opakovať n-krát“ 2. Slučka „Ahoj“
nc n krát dovidenia
. . Telo slučky. . Telo slučky
kts kts

Príklad: dovidenia právo zadarmo


Celkový pohľad na cyklus „Opakujte n-krát:

OPAKOVAŤ n KRÁT

KONIEC
kts

Celkový pohľad na cyklus while:

KÝM UROBIŤ

KONIEC
Zložené podmienky sa tvoria z jednej alebo viacerých jednoduchých podmienok a služobných slov A, ALEBO, NIE.


Zložený stav A a B(kde A, B sú jednoduché podmienky) je splnená, keď je splnená každá z dvoch jednoduchých podmienok v nej zahrnutých.

Nechaj A - zadarmo na vrchu AT - voľný vpravo potom zložená podmienka A a B- zadarmo hore A zadarmo vpravo.


Zložený stav A ALEBO B je splnená, ak je splnená aspoň jedna z dvoch jednoduchých podmienok v nej zahrnutých: top zadarmo ALEBO vpravo zadarmo
Zložený stav NIE A- splnené, keď podmienka A nie je splnená.

Príklad: Nech A je tieňovaná bunka (jednoduchá podmienka).

P Kontrola zloženého stavu NIE A:

a) A – hotovo, NIE A (NIE vytieňované) – nedokončené.

b) A – nedokončené, NIE A (NIE vytieňované) – hotovo.


Príkaz pobočky

Vetvenie - forma organizácie úkonov, pri ktorej sa v závislosti od splnenia alebo nesplnenia určitej podmienky vykonáva buď jeden alebo iný sled úkonov.

Všeobecný pohľad na príkaz IF:

AK POTOM INAK

KONIEC

V jazyku KUMIR:

Úplné vetvenie: Čiastočné vetvenie:
ak potom ak potom

inak

všetky všetky

Algoritmus pomocníka- algoritmus, ktorý rieši nejaký čiastkový problém hlavného problému.

V systéme KUMIR sa pomocné algoritmy píšu na konci hlavného programu (za obslužným slovom kon) sa volajú na vykonanie v hlavnom programe podľa názvu.

AT prieskumy a úlohy

1. Zadajte všetky algoritmy troch príkazov, ktoré presunú robota z jeho pôvodnej polohy do bunky B.

Existuje algoritmus pre túto úlohu, počas ktorej robot robí:

a) dva kroky b) štyri kroky; c) päť krokov; d) sedem krokov?


  1. Petya vytvoril algoritmus, ktorý prenáša robota z bunky A do bunky B s prefarbenými bunkami. Čo by mal Kolya urobiť s týmto algoritmom, aby získal algoritmus, ktorý presunie robota z B do A a vyplní rovnaké bunky?


7. Sú známe dva pomocné robotické algoritmy

Nakreslite, čo sa stane, keď robot vykoná nasledujúce základné algoritmy:


a)

nc 5 krát


vzor_1

správny; správny;


b)

nc 7 krát


vzor_2

správny; správny


v)
správny; správny; správny

hore; hore

správny; správny; správny

cesta dole; cesta dole


G)
správny; správny
správny; správny

8. Vytvorte algoritmy, podľa ktorých bude robot maľovať cez určené bunky:



9. Je známe, že niekde napravo od Robota je stena. Vytvorte algoritmus, pod ktorého kontrolou robot premaľuje niekoľko buniek až po stenu a vráti sa do pôvodnej polohy.

10. Je známe, že niekde napravo od Robota je zatienená bunka.

OD opustite algoritmus, pod ktorého kontrolou Robot vyfarbí niekoľko buniek až po zatienenú bunku a vráti sa do pôvodnej polohy.

11. Je známe, že Robot sa nachádza blízko ľavého vchodu do horizontálnej chodby.

12. Je známe, že Robot je niekde v horizontálnej chodbe. Žiadna z ciel chodby nie je premaľovaná.

Vytvorte algoritmus, pod ktorého kontrolou robot pretrie všetky bunky tejto chodby a vráti sa do pôvodnej polohy.


13. V rade desiatich buniek napravo od robota sú niektoré bunky zatienené.

OD opustite algoritmus, ktorý maľuje bunky:

a) pod každou tieňovanou bunkou;

b) nad a pod každou zatienenou bunkou.


14. Čo možno povedať o správnosti nasledujúceho fragmentu algoritmu?

dovidenia bunka je zatienená

AK právo zadarmo POTOM

správny; zafarbiť

do
c

15. Napíšte program, pomocou ktorého sa Robot dostane do bunky B vo všetkých troch bludiskách.


16. Napíšte program, podľa ktorého bude robot môcť ísť chodbou z ľavého dolného rohu poľa do pravého horného rohu. Chodba má šírku jednej bunky a tiahne sa v smere zľava-dole-vpravo nahor. Príklad možnej chodby je znázornený na obrázku.

W

adachi GIA


  1. Chodba 1. Robot je niekde vo vertikálnej chodbe. Žiadna z ciel chodby nie je premaľovaná. Vytvorte algoritmus, podľa ktorého robot prekreslí všetky bunky tejto chodby a vráti sa do pôvodnej polohy.

  1. Komu
    Nevyhnutné

    Dané
    chodba2. Robot je umiestnený v hornej cele úzkej vertikálnej chodby. Šírka chodby je jedna bunka, dĺžka chodby môže byť ľubovoľná.

Možný variant počiatočného umiestnenia robota je znázornený na obrázku (robot je označený písmenom „P“)

Napíšte algoritmus pre robota, ktorý vyplní všetky bunky v chodbe a vráti robota do jeho pôvodnej polohy. Napríklad na obrázku vyššie by mal robot premaľovať nasledujúce bunky (pozri obrázok):


  1. Na nekonečnom poli je dlhá horizontálna stena. Dĺžka steny nie je známa. Robot je v jednej z klietok priamo nad stenou. Počiatočná poloha robota je tiež neznáma. Jedna z možných pozícií:
H


Nevyhnutné

Dané
Napíšte algoritmus pre robota, ktorý vykreslí všetky bunky nad a priľahlé k stene, bez ohľadu na veľkosť steny a počiatočnú polohu robota. Napríklad pre daný výkres musí robot premaľovať nasledujúce bunky:

Konečná poloha robota môže byť ľubovoľná. Pri vykonávaní algoritmu by sa robot nemal zničiť.



  1. Na nekonečnom poli je dlhá kolmá stena. Dĺžka steny nie je známa. Robot je v jednej z klietok umiestnených priamo napravo od steny. Rovnako nie je známa ani počiatočná poloha robota. Jedna z možných pozícií robota je znázornená na obrázku (robot je označený písmenom „P“): Napíšte algoritmus pre prácu, ktorá prekreslí všetky bunky susediace so stenou: vľavo, počnúc zhora nenatretý a cez jeden; na pravej strane, začínajúc zdola tieňované a cez jeden. Robot musí natrieť iba bunky, ktoré spĺňajú túto podmienku. Napríklad pre vyššie uvedený obrázok musí robot vyplniť nasledujúce bunky (pozri obrázok): Konečné umiestnenie robota môže byť ľubovoľné. Algoritmus musí vyriešiť problém pre ľubovoľnú veľkosť steny a akúkoľvek platnú počiatočnú polohu robota. Pri vykonávaní algoritmu by sa robot nemal zrútiť.


Napíšte algoritmus pre robota, ktorý vyfarbí všetky bunky umiestnené naľavo od zvislej steny a nad vodorovnou stenou a priľahlé k nim. Robot musí natrieť iba bunky, ktoré spĺňajú túto podmienku. Napríklad na obrázku vyššie musí robot premaľovať nasledujúce bunky (pozri obrázok).


H napíšte algoritmus pre robota, ktorý vyfarbí bunky susediace so stenou zhora a zdola, počnúc zľava a cez jednu. Robot musí natrieť iba bunky, ktoré spĺňajú túto podmienku. Napríklad pre daný obrázok a) musí robot premaľovať nasledujúce bunky (pozri obr. b).

Konečná poloha robota môže byť ľubovoľná. Algoritmus musí vyriešiť problém pre ľubovoľnú veľkosť steny a akúkoľvek platnú počiatočnú polohu robota.



R

  1. Na nekonečnom poli je dlhá kolmá stena. Dĺžka steny nie je známa. Robot je v jednej z klietok umiestnených priamo naľavo od steny. Rovnako nie je známa ani počiatočná poloha robota. Jedna z možných pozícií robota je znázornená na obrázku (robot je označený písmenom „P“):
Napíšte pre prácu algoritmus, ktorý prekreslí všetky bunky susediace so stenou:

  • všetko vľavo;

  • vpravo, počnúc zhora nenatretú a cez jednu.
Robot musí natrieť iba bunky, ktoré spĺňajú túto podmienku.

B
1102_GIA2011

Na nekonečnom poli sú dve vodorovné steny. Dĺžka stien nie je známa. Vzdialenosť medzi stenami nie je známa. Robot je umiestnený nad spodnou stenou v klietke umiestnenej na jej ľavom okraji. Napíšte algoritmus pre robota, ktorý vyfarbí všetky bunky umiestnené nad spodnou stenou a pod hornou stenou a priľahlé k nim. Robot musí natrieť iba bunky, ktoré spĺňajú túto podmienku. Napríklad pre vyššie uvedený výkres musí robot vyplniť nasledujúce bunky (pozri obrázok):

Konečné umiestnenie robota môže byť ľubovoľné. Algoritmus musí vyriešiť problém pre ľubovoľnú veľkosť poľa a akékoľvek prípustné umiestnenie stien vo vnútri pravouhlého poľa. Pri vykonávaní algoritmu by sa robot nemal zrútiť.


AT
1103_GIA_2011


Na nekonečnom poli je vodorovná stena. Dĺžka steny nie je známa. Z pravého konca steny sa nadol tiahne zvislá stena, tiež neznámej dĺžky. Robot je umiestnený nad vodorovnou stenou v klietke umiestnenej na jej ľavom okraji. Obrázok ukazuje jeden z možných spôsobov usporiadania stien a Robota (Robot je označený písmenom „P“).

Napíšte algoritmus pre robota, ktorý vyfarbí všetky bunky umiestnené nad vodorovnou stenou a napravo od zvislej steny a priľahlé k nim. Robot musí natrieť iba bunky, ktoré spĺňajú túto podmienku. Napríklad na obrázku vyššie musí robot premaľovať nasledujúce bunky (pozri obrázok).