Rozważ problem:

Dane wejściowe do programu to liczba naturalna nieprzekraczająca 2 * 10 9 . Określ sumę cyfr tej liczby.

Na pierwszy rzut oka zadanie jest dość proste: musisz konsekwentnie wybierać liczby w liczbie i dodawać je do sumy. Jednocześnie oczywiste jest, że liczba cyfr w liczbie może się zmieniać, więc ostateczna wartość parametru pętli dla okazuje się niezdefiniowana i występują trudności z jej zastosowaniem.

W algorytmach cyklicznych, w których nie można uzyskać liczby powtórzeń określonego zestawu instrukcji przed jego rozpoczęciem, stosuje się pętle warunkowe.

Pętla while

Jedną z takich konstrukcji w języku programowania Kumir jest cykl pa. Cykl ten, często określany jako pętla z warunkiem wstępnym, ma następujący format:

  • nc warunek pożegnania
  • loop_body

Warunek napisany po oficjalne słowo while , jest wyrażeniem logicznym.

Pętla jest wykonywana w następujący sposób:

  1. Wartość wyrażenia logicznego jest oceniana.
  2. Jeśli wynikiem obliczeń jest no , pętla się kończy i Kumir przechodzi do pierwszego polecenia po pętli while. Jeśli wynik obliczeń jest tak, to wykonywany jest korpus pętli, po czym wartość wyrażenia jest ponownie obliczana z nową wartością.

Ważny! W ciele pętli jakaś wartość związana z warunkiem musi się na razie zmienić, aby zapewnić koniec pętli, w przeciwnym razie pętla może okazać się wieczna.

Teraz użyjmy pętli while do rozwiązania naszego problemu.

  • liczba wejściowa
  • nc gdy num > 0
  • suma:= suma + mod(liczba, 10 )
  • liczba:= dz(liczba, 10 )
  • kwota wypłaty

Tak więc podczas każdego wykonania ciała pętli ostatnia cyfra liczby jest dodawana do kwoty, a następnie liczba jest zmniejszana 10 razy. Oczywiście w końcu num będzie równe 0, po czym pętla się zakończy.

Do tego czasu cykl

W Idolu jest jeszcze inny wariant pętli warunkowej, zwany pętlą aż do momentu, która ma następujący format:

  • loop_body
  • kc pod warunkiem

Jeśli w pętli, gdy warunek jest sprawdzany przed ciałem pętli, to w pętli do tego czasu - po. Dlatego ten cykl jest często nazywany pętla z warunkiem końcowym. Ciało takiej pętli zawsze zostanie wykonane przynajmniej raz.

Praca pętli do tego momentu przebiega następująco:

  1. Korpus pętli jest wykonywany
  2. Wartość wyrażenia logicznego jest oceniana. Jeśli wynikiem obliczeń jest no , to ciało pętli zaczyna być ponownie wykonywane itd. Jeśli wynikiem obliczeń jest yes , to pętla się kończy, a Kumir przechodzi do wykonania następnego polecenia po pętla.

Zadanie. Dane wejściowe do programu to ciąg liczb całkowitych zakończony zerem. Znajdź liczbę liczb ujemnych w sekwencji. Gwarantuje się, że sekwencja zawiera co najmniej jedną niezerową liczbę.

(Fragment kodu programu)

  • liczba wejściowa
  • jeśli liczba 0
  • wtedy k:= k + 1
  • kts przy num = 0
  • wyjście k

Algorytm rysowania spirali:

użyj szuflady
alg
wczesny
. przejdź do punktu(3,3)
. opuść pióro
. cewka(1); cewka(3); cewka(5); cewka(7); cewka (9)
. podnieś pióro
kon
skręt(arg w)
wczesny
. przesunięcie o wektor(a, 0)
. przesunięcie o wektor(0, -a)
. przesunięcie o wektor(-a-1,0)
. przesunięcie o wektor(0, a+1)
kon

Zwróć uwagę na blok poleceń:

Cewka(1); cewka(3); cewka(5); cewka(7); cewka (9)

Algorytm pomocniczy „cewka (arg rzecz a)” jest wywoływany 5 razy, ale nie można go wywołać w pętli „N razy”, ponieważ za każdym razem jest wywoływany z różne wartości argument.

Ale widać, że wartości argumentu zmieniają się od 1 do 9, za każdym razem zwiększając się o 2. Możemy więc pomóc pętla z licznikiem. Taki cykl nazywany jest również cyklem „dla”.

Pętla z licznikiem- pętla, w której jakaś zmienna z pewnym krokiem zmienia swoją wartość z podanej wartości początkowej na wartość końcową, a dla każdej wartości tej zmiennej wykonywana jest jednorazowa treść pętli.

Zazwyczaj ta pętla jest używana, jeśli musisz iterować niektóre wartości i wykonać pewne działania dla każdej z nich.

Widok ogólny cyklu z licznikiem:

nc dla<счетчик>z<нач. знач.>zanim<кон. знач.>[krok<знач.>]
<тело цикла (последовательность команд)>
kts

Nie jest konieczne wskazywanie kroku, jeśli nie jest on określony, uważa się go za równy jeden.

Teraz możemy przepisać algorytm „spiralny” w ten sposób:

użyj szuflady
alg
wczesny
. przejdź do punktu(3,3)
. opuść pióro
. cały rozmiar
. nc dla rozmiaru 1 do 9 krok 2
. . cewka (rozmiar)
. kts
. podnieś pióro
kon
skręt(arg w)
wczesny
. przesunięcie o wektor(a, 0)
. przesunięcie o wektor(0, -a)
. przesunięcie o wektor(-a-1,0)
. przesunięcie o wektor(0, a+1)
kon

W tym przykładzie zmienna licznika „rozmiar” otrzyma wartości: 1, 3, 5, 7, 9. Czyli pętla zostanie wykonana 5 razy. Dla każdej wartości zmiennej „size” ciało pętli zostanie wykonane raz, w naszym przykładzie jest to wywołanie algorytmu pomocniczego „coil (arg thing)”.

Przed pierwszym użyciem zmiennej należy ją zadeklarować, tj. jaki to jest typ. Odbywa się to w naszym programie w wierszu „rozmiar całkowity”, tj. wskazujemy, że będziemy używać zmiennej „rozmiar” do przechowywania liczb całkowitych i dlatego musimy przydzielić na to pamięć. Nieco później omówimy więcej o zmiennych.

Schemat blokowy takiego algorytmu wygląda tak:

Spójrzmy na inny przykład:

Najpierw zapamiętajmy i napiszmy algorytm pomocniczy, który narysuje kwadrat w punkcie (x, y). Dla odmiany do rysowania użyjemy polecenia przesunięcie o wektor(w poprzednich przykładach zostały przesunięte do punktu).

Algorytm mógłby wyglądać tak:

alg kwadrat(arg x, y, bok)
wczesny
. przejdź do punktu(x, y)
. przesunięcie o wektor(-bok/2, bok/2)
. opuść pióro
. przesunięcie o wektor(bok, 0)
. przesunięcie o wektor(0, -strona)
. przesunięcie o wektor(-strona, 0)
. przesunięcie o wektor(0, bok)
. podnieś pióro
kon

Korzystając z takiego algorytmu pomocniczego, rysujemy następujący rysunek:

W tym celu korzystamy z pętli „for”. Przestudiuj przykładowy program:

użyj szuflady
alg postać1
wczesny
. liczba całkowita z
. nc dla z od 2 do 10 krok 2
. . kwadrat (0, 0, z)
. kts
kon
alg kwadrat(arg x, y, bok)
wczesny
. przejdź do punktu(x, y)
. przesunięcie o wektor(-bok/2, bok/2)
. opuść pióro
. przesunięcie o wektor(bok, 0)
. przesunięcie o wektor(0, -strona)
. przesunięcie o wektor(-strona, 0)
. przesunięcie o wektor(0, bok)
. podnieś pióro
kon

W tym przykładzie zmienna „z” otrzyma wartości: 2, 4, 6, 8, 10. Czyli pętla zostanie wykonana 5 razy. Dla każdej wartości „z” treść pętli zostanie wykonana raz, w naszym przykładzie jest to wywołanie pomocniczego algorytmu kwadratowego.

Przed pierwszym użyciem zmiennej należy ją zadeklarować, tj. jaki to jest typ. Odbywa się to w naszym programie w wierszu „integer z”, tj. wskazujemy, że będziemy używać zmiennej „z” do przechowywania liczb całkowitych i dlatego musimy przydzielić na to pamięć. Nieco później omówimy więcej o zmiennych.

Jak zauważyłeś, algorytm wykorzystywał nie tylko liczby, ale także wyrażenia algebraiczne, formuły, na przykład „-side/2”. W informatyce wyrażenia te nazywają się arytmetyka. Reguły języka pozwalają, podczas pisania algorytmów, wszędzie tam, gdzie można wpisać liczbę, napisać dowolne wyrażenie arytmetyczne.

Karty zadań

    Znajdź wśród n -liczb całkowitych wpisanych z klawiatury liczbę ujemną

    Dostajesz dwie dowolne liczby. Dopóki ich produkt jest mniejszy niż 100, zwiększaj każdą liczbę o 2 i wyświetlaj końcowe liczby na monitorze

    Kolejno wprowadzane n -liczby całkowite. Znajdź liczbę piątek w sekwencji

    Kolejno wprowadzane n -liczby całkowite. Znajdź różnicę między maksimum a wartości minimalne podane liczby

    Znajdź wśród n -liczb całkowitych wpisanych z klawiatury liczbę ujemną

    Dostajesz dwie dowolne liczby. Dopóki ich produkt jest mniejszy niż 100, zwiększaj każdą liczbę o 2 i wyświetlaj końcowe liczby na monitorze

    Kolejno wprowadzane n -liczby całkowite. Znajdź liczbę piątek w sekwencji

    Kolejno wprowadzane n -liczby całkowite. Znajdź różnicę między maksymalną i minimalną wartością podanych liczb

    Znajdź wśród n -liczb całkowitych wpisanych z klawiatury liczbę ujemną

    Dostajesz dwie dowolne liczby. Dopóki ich produkt jest mniejszy niż 100, zwiększaj każdą liczbę o 2 i wyświetlaj końcowe liczby na monitorze

    Kolejno wprowadzane n -liczby całkowite. Znajdź liczbę piątek w sekwencji

    Kolejno wprowadzane n -liczby całkowite. Znajdź różnicę między maksymalną i minimalną wartością podanych liczb

    Znajdź wśród n -liczb całkowitych wpisanych z klawiatury liczbę ujemną

    Dostajesz dwie dowolne liczby. Dopóki ich produkt jest mniejszy niż 100, zwiększaj każdą liczbę o 2 i wyświetlaj końcowe liczby na monitorze

    Kolejno wprowadzane n -liczby całkowite. Znajdź liczbę piątek w sekwencji

    Kolejno wprowadzane n -liczby całkowite. Znajdź różnicę między maksymalną i minimalną wartością podanych liczb

Zagnieżdżone pętle i rozgałęzienia w systemie KUMIR

Jednym z podstawowych pojęć w informatyce jest koncepcja algorytmu. Pochodzenie terminu „algorytm” związane jest z matematyką. Słowo to pochodzi od Algorithmi - łacińskiej pisowni imienia Muhammada al-Khwarizmi (787 - 850), wybitnego matematyka średniowiecznego Wschodu. W swojej książce „Na koncie indyjskim” sformułował zasady pisania liczb naturalnych za pomocą cyfr arabskich oraz zasady pracy z nimi w kolumnie.

W przyszłości algorytm zaczęto nazywać dokładną receptą, która określa sekwencję działań, która zapewnia uzyskanie wymaganego wyniku z danych początkowych.

Algorytm może być zaprojektowany do wykonywania przez człowieka lub urządzenie automatyczne. Tworzenie algorytmu, nawet najprostszego, to proces twórczy. Jest dostępny wyłącznie dla żywych istot i przez długi czas uważany za przeznaczony tylko dla ludzi. W XII wieku. dokonano łacińskiego tłumaczenia jego traktatu matematycznego, z którego Europejczycy dowiedzieli się o dziesiętnym systemie liczb pozycyjnych i zasadach arytmetyki wielocyfrowej. Zasady te nazywano wówczas algorytmami.

Podanej powyżej definicji algorytmu nie można uznać za ścisłą - nie jest do końca jasne, co to jest „dokładna recepta” lub „sekwencja działań, która zapewnia uzyskanie pożądanego rezultatu”. Dlatego zwykle formułuje się kilka ogólnych właściwości algorytmów, które umożliwiają odróżnienie algorytmów od innych instrukcji.

Te właściwości to:

dyskrecja (nieciągłość, separacja) – algorytm powinien reprezentować proces rozwiązywania problemu jako sekwencyjne wykonanie prostych (lub wcześniej zdefiniowanych) kroków. Każda akcja dostarczona przez algorytm jest wykonywana dopiero po zakończeniu wykonywania poprzedniej.

Pewność - każda reguła algorytmu powinna być jasna, jednoznaczna i nie pozostawiać miejsca na dowolność. Dzięki tej właściwości wykonanie algorytmu ma charakter mechaniczny i nie wymaga żadnych dodatkowych instrukcji ani informacji o rozwiązywanym problemie.

Efektywność (skończoność) – algorytm powinien prowadzić do rozwiązania problemu w skończonej liczbie kroków.

masowy charakter - algorytm rozwiązywania problemu jest opracowany w formie ogólnej, to znaczy musi mieć zastosowanie do pewnej klasy problemów, które różnią się tylko danymi początkowymi. W takim przypadku dane początkowe można wybrać z pewnego obszaru, który nazywa się obszarem stosowalności algorytmu.

Sposoby pisania algorytmów

Do pisania algorytmów używa się różnych środków. O doborze środków decyduje rodzaj wykonywanego algorytmu.

Istnieją następujące główne sposoby pisania algorytmów:

- werbalny gdy algorytm jest opisany w ludzkim (naturalnym) języku. Języki narodowe są naturalne (rosyjski, angielski, niemiecki itp.);

- symboliczny gdy algorytm jest opisany za pomocą zestawu symboli i jest programem (programy są pisane przy użyciu języków programowania);

- graficzny gdy algorytm jest opisany za pomocą zbioru obrazy graficzne(Schemat blokowy).

Powszechnie stosowane metody nagrywania tonotacja graficzna za pomocą schematów blokowych inotacja znakowa za pomocą języka algorytmicznego - programu.

Na sposób graficzny rekordy, kompilowane są schematy blokowe, na których za pomocą symbolika(figury geometryczne) oznaczają różne części algorytmu. Elementy schematów blokowych pokazano na rysunku.

Programowanie systemu KUMIR

Opanowując temat algorytmów, posłużymy się systemem programowania KUMIR.

KuMir (Zestaw Edukacyjnych MIRów) to system programowania przeznaczony do obsługi podstawowych kursów informatyki i programowania w szkołach średnich i wyższych.

System KuMir wykorzystuje szkolny język algorytmiczny ze słownictwem rosyjskim i wbudowanymi executorami Robot i Rysownik itp.

Wchodząc do programu KuMir prowadzi stałą pełną kontrolę jego poprawności, raportując na marginesach programu o wszystkich wykrytych błędach.

Podczas uruchamiania programu w tryb krok po kroku KuMir wyświetla wyniki operacji przypisania oraz wartości wyrażeń logicznych na polach. Pozwala to przyspieszyć proces opanowania podstaw programowania.

Grafik Robot

Graficzny executor Robot pozwala opanować podstawy programowania i zrozumieć działanie głównych struktur algorytmicznych.

Artysta grafikjest obiektem kontrolnym. Paczkabędziemy nimi rządzić.

Wykonawca robota jest w niektórychśrodowisko początkowe - prostokątne pole podzielone na komórki, pomiędzy którymi mogą znajdować się ściany.

Robot może poruszać się po polu, omijając ściany i zamalowując komórki. Robot nie może przejść przez ścianę, ale może sprawdzić, czy obok niego znajduje się ściana. Robot nie może wyjść poza prostokąt ograniczający pole.

R
bot może wykonywać polecenia
: góra, dół, prawo, lewo, zamalowanie.

Robot może sprawdzić warunki : wolna na górze, wolna na dole, wolna po prawej, wolna po lewej, dodanie cząstki nie odwraca warunek. Nie wolny od góry, nie wolny od dołu, nie wolny od prawej, nie wolny od lewicy.

Podstawowe struktury algorytmiczne

    Istnieją trzy podstawowe struktury algorytmiczne (konstrukcje)-liniowy (następujący), rozgałęziony oraz cykl, z którego można zbudować dowolny algorytm.Każda struktura algorytmiczna ma jeden punkt wejścia i jeden punkt wyjścia.

    Napiszemy algorytmy zarówno w języku szkolnym, jak iw formie schematów blokowych.

Struktura liniowa

Struktura liniowa to najprostsza organizacja algorytmów - polecenia wykonywane są sekwencyjnie jedno po drugim

Przykład:

Struktura cykliczna (cykl)

    Struktura cykliczna (cykl) zapewnia wielokrotne wykonywanie tych samych poleceń. Istnieje kilka rodzajów struktur cyklicznych.

    Każda cykliczna struktura składa się z dwóch części -nagłówek oraz ciała rowerowe.

    Zbiór instrukcji powtarzanych podczas wykonywania pętli nazywa sięcykl ciała.

    nagłówek określa liczbę powtórzeń treści pętli.

Pętla liczby powtórzeń (razy)

nc N raz

<команда>

kts

P Przykład:

posługiwać się Robot
alg kolumna

wczesny
.
nc 5 raz
. . przemalować
. . w górę
.
kts

kon

Pętla z warunkiem wstępnym (jeszcze)

(wpis w język algorytmiczny)

nc PA <условие>

<команда>

do c

Przykład:

posługiwać się Robot
alg Linia

wczesny

nc PA góra luźna
przemalować
w górę
kts

kon

Pętla z warunkiem końcowym (at)

(notacja w języku algorytmicznym)

n c

<команда>

cc_at <условие>

Przykład:

posługiwać się Robot
alg Linia

wczesny
nc

przemalować; w górę

cc_at pozostawiony wolny

kon

Struktura oddziału.

    Struktura oddziału. Rozwiązanie niektórych problemów wymaga różnych działań w zależności od spełnienia określonych warunków. W takich przypadkach mówi się o rozgałęzianiu algorytmu.

    Aby wdrożyć strukturę „rozgałęziającą”, stosuje się dwa ustrukturyzowane polecenia szkolnego EL - jeśli i wybór, z których każde może być kompletne i niekompletne.

    W schematach blokowych i języku szkolnym<условие>to wyrażenie logiczne, które może dać w wyniku jedno z dwóch możliwa wartość - PRAWDA lub Fałszywy. W języku szkolnym te wartości są zapisywane jako tak i nie. Języki programowania często używają wartościPrawdziwe oraz Fałszywy. Komputer przechowuje te wartości jako 1 i 0.

Pełna gałąź

(notacja w języku algorytmicznym)

mi jeśli <условие>
. .
następnie <команда1>
. .
Inaczej <команда2>
wszystko

Przykład:

posługiwać się Robot
alg rozgałęzienie_pełne

wczesny
.
jeśli góra luźna
. .
następnie w górę
. .
Inaczej droga w dół
.
wszystko

kon

niepełne rozgałęzienie

(notacja w języku algorytmicznym)

mi jeśli <условие>
. .
następnie <команда1>
wszystko

Przykład:

posługiwać się Robot
alg branching_incomplete

wczesny
.
jeśli góra luźna
. .
następnie w górę
.
wszystko

kon

Algorytm pomocniczy (procedura)

    Algorytm, za pomocą którego rozwiązywane jest pewne podzadanie z zadania głównego i który z reguły jest powtarzany, nazywamy algorytmem pomocniczym.

    Algorytm pomocniczy napisany w języku programowania nazywany jest podprogramem lub procedurą.

    Algorytm pomocniczy jest wywoływany z programu głównego poprzez nazwę. Algorytm pomocniczy jest zapisywany po algorytmie głównym. Algorytm pomocniczy musi mieć nazwę.

posługiwać się Robot
alg
wczesny
droga w dół

kwadrat
droga w dół

droga w dół
kon

alg kwadrat
wczesny

przemalować

prawo

przemalować

droga w dół

przemalować

w lewo

przemalować
kon

Zagnieżdżone pętle i gałęzie

Przy rozwiązywaniu niektórych zadań za pomocą robota konieczne jest użycie zagnieżdżonych pętli lub rozgałęzień.

C ucl jest nazywany zagnieżdżonym, jeśli jest umieszczony wewnątrz innej pętli.

Rozważ pętlę zagnieżdżoną na przykładzie pętli while.

Wiemy, że pętla składa się z nagłówka pętli, który określa liczbę powtórzeń treści pętli.

Treść pętli to część pętli, która jest powtarzana podczas wykonywania pętli.

Treścią pętli może być polecenie, wiele poleceń lub inna pętla lub gałąź.

Gdy treść pętli jest inną pętlą lub gałęzią, są one nazywane zagnieżdżonymi.

zagnieżdżona pętla

W pierwszym przebiegu pętla zewnętrzna wywołuje pętlę wewnętrzną, która działa do końca, po czym sterowanie jest przekazywane do treści pętli zewnętrznej. W drugim przejściu zewnętrzna pętla ponownie wywołuje wewnętrzną. I tak dalej, aż do zakończenia zewnętrznej pętli.

Zagnieżdżona gałąź

Rozważ rozwiązanie problemu z zagnieżdżonymi gałęziami i pętlami:

Zadanie 1 Robot jest na ścianie, która ma dziury, poruszając się wzdłuż ściany w prawo, robot musi zamalować wszystkie komórki, w których są dziury.

posługiwać się Robot alg wczesny
.
nc PA po prawej Z swobodnie
nc PA dół luźny
.przemalować;
prawo
. .
kts
. . prawo
.
kts kon Z
zostawiamy algorytm rozwiązywania problemu z zewnętrzną pętlą while i zagnieżdżoną pętlą while.

R Ten sam problem rozwiązujemy za pomocą zewnętrznej pętli while i zagnieżdżonej gałęzi.

Rozwiążmy ten sam problem za pomocą zewnętrznej pętli while i zagnieżdżonej pętli while.

Robot sterujący Executor w systemie KUMIR

Robot istnieje w określonym środowisku (prostokątne pole w szachownicę). Ściany mogą znajdować się pomiędzy niektórymi komórkami pola. Niektóre komórki mogą być zacienione (ryc. 3.11).

Robot zajmuje dokładnie jedną komórkę pola.

Po komendach w górę, w dół, w lewo i w prawo Robot przechodzi do następnej komórki w określonym kierunku. Jeśli po drodze jest ściana, to następuje awaria - wyświetlany jest komunikat o niemożności wykonania kolejnego polecenia.

Na polecenie zamalowania Robot zamalowuje komórkę, w której stoi. Jeśli komórka została już zamalowana, zostanie zamalowana ponownie, chociaż nie nastąpią żadne widoczne zmiany.

Robot może wykonywać tylko poprawnie napisane polecenia. Jeśli napiszesz zamiast komendy down, Robot nie zrozumie tego wpisu i natychmiast zgłosi błąd.

O
błędy: 1 składniowe; 2. logiczne

Opisy scen są przechowywane w pliki tekstowe format specjalny (format .fil).

Aktualny- środowisko, w którym znajduje się Robot ten moment(w tym informacje o pozycji Robota).

Dom- środowisko, w którym Robot jest wymuszany na początku wykonywania programu z wykorzystaniem Robota.

Procedura operacyjna:


  1. Zapytać się środowisko początkowe zgodnie z zadaniem:
Menu Narzędzia → Zmień środowisko startowe Robota (narysuj środowisko zgodnie z warunkiem zadania, nadaj nazwę, zapisz w folderze Osobisty)

2. Określ Wykonawcę:

Wstaw menu →Użyj robota

3. Napisz algorytm rozwiązania problemu.

4. Uruchom algorytm (Menu Uruchom → Uruchom ciągły / F9)

System poleceń robota wykonawczego w systemie KUMIR


Zespół

Akcja

w górę

Robot porusza się w górę o 1 komórkę

droga w dół

Robot przesuwa się w dół o 1 komórkę

w lewo

Robot przesuwa się o 1 komórkę w lewo

prawo

Robot przesuwa się o 1 komórkę w prawo

przemalować

Robot maluje komórkę, w której się znajduje

prawo za darmo

Robot sprawdza wykonanie odpowiedniego prosty semestry

pozostawiony wolny



góra luźna



dół luźny



komórka jest zacieniona



klatka czysta



Algorytmy cykliczne

Cykl organizacja powtarzających się czynności aż do spełnienia określonego warunku .

Pętla ciała - zestaw powtarzalnych czynności.

Stan - wyrażenie logiczne (proste lub złożone (złożone))
Rodzaje cykli:

1.Pętla „Powtórz n razy” 2. Pętla „Do widzenia”
nc n razy nts pa
. . Pętla ciała. . Pętla ciała
kts kts

Przykład: nts pa prawo za darmo


Widok ogólny cyklu „Powtórz n razy:

REPEAT n RAZY

KONIEC
kts

Ogólny widok pętli while:

KIEDY ZROBIĆ

KONIEC
Warunki złożone utworzony z jednego lub więcej proste warunki i słowa służbowe I LUB NIE.


Warunek złożony A i B(gdzie A, B są prostymi warunkami) jest spełniony, gdy każdy z dwóch prostych warunków w nim zawartych jest spełniony.

Niech A - bezpłatnie na górze W - wolny po prawej to warunek złożony A i B- za darmo na górze ORAZ za darmo po prawej.


Warunek złożony A LUB B jest spełniony, gdy spełniony jest przynajmniej jeden z dwóch zawartych w nim prostych warunków: top za darmo LUB prawo za darmo
Warunek złożony ANI- spełniony, gdy warunek A nie jest spełniony.

Przykład: Niech A będzie zacienioną komórką (warunek prosty).

P Sprawdzanie stanu mieszanki NIE A:

a) A – gotowe, NOT A (NIE zacieniowane) – nie zrobione.

b) A - nie zrobione, NIE A (NIE zacieniowane) - gotowe.


Polecenie oddziału

Rozgałęzienie - forma organizacji działań, w której w zależności od spełnienia lub niespełnienia określonego warunku wykonywana jest jedna lub inna sekwencja działań.

Widok ogólny polecenia JEŻELI:

JEŚLI NASTĘPNIE INACZEJ

KONIEC

W języku KUMIR:

Rozgałęzienia pełne: Rozgałęzienia częściowe:
jeśli następnie jeśli następnie

Inaczej

wszystko wszystko

Algorytm pomocniczy- algorytm, który rozwiązuje pewien podproblem głównego problemu.

W systemie KUMIR algorytmy pomocnicze są zapisywane na końcu programu głównego (po słowie serwisowym) kon) są wywoływane do wykonania w programie głównym według nazwy.

W ankiety i zadania

1. Podaj wszystkie algorytmy trzech poleceń, które przeniosą robota z jego pierwotnej pozycji do komórki B.

Czy istnieje algorytm do tego zadania, podczas którego Robot wykonuje:

a) dwa kroki b) cztery kroki; c) pięć kroków; d) siedem kroków?


  1. Petya stworzył algorytm, który przenosi Robota z komórki A do komórki B z zamalowanymi niektórymi komórkami. Co powinien zrobić Kola z tym algorytmem, aby uzyskać algorytm, który przenosi Robota z punktu B do punktu A i wypełnia te same komórki?


7. Dwa są znane algorytmy pomocnicze Robot

Narysuj, co się stanie, gdy Robot wykona następujące podstawowe algorytmy:


a)

nc 5 razy


wzór_1

prawo; prawo;


b)

nc 7 razy


wzór_2

prawo; prawo


w)
prawo; prawo; prawo

w górę; w górę

prawo; prawo; prawo

droga w dół; droga w dół


G)
prawo; prawo
prawo; prawo

8. Utwórz algorytmy, w ramach których Robot zamaluje wskazane komórki:



9. Wiadomo, że gdzieś na prawo od Robota znajduje się ściana. Wymyśl algorytm, pod kontrolą którego Robot zamaluje kilka komórek aż do ściany i powróci do swojej pierwotnej pozycji.

10. Wiadomo, że gdzieś na prawo od Robota znajduje się zacieniona komórka.

Z pozostawić algorytm, pod kontrolą którego Robot pomaluje liczbę komórek do zacieniowanej komórki i wróci do swojej pierwotnej pozycji.

11. Wiadomo, że Robot znajduje się w pobliżu lewego wejścia do poziomego korytarza.

12. Wiadomo, że Robot znajduje się gdzieś w poziomym korytarzu. Żadna z komórek korytarza nie jest zamalowana.

Wymyśl algorytm, pod kontrolą którego Robot zamaluje wszystkie komórki tego korytarza i powróci do swojej pierwotnej pozycji.


13. W rzędzie dziesięciu komórek na prawo od Robota niektóre komórki są zacienione.

Z pozostaw algorytm, który maluje komórki:

a) poniżej każdej zacienionej komórki;

b) powyżej i poniżej każdej zacienionej komórki.


14. Co można powiedzieć o poprawności poniższego fragmentu algorytmu?

nts pa komórka jest zacieniona

JEŚLI prawo za darmo NASTĘPNIE

prawo; przemalować

do
c

15. Napisz program, za pomocą którego Robot może dostać się do komórki B we wszystkich trzech labiryntach.


16. Napisz program, dzięki któremu Robot będzie mógł przejść korytarzem od lewego dolnego rogu pola do prawego górnego. Korytarz ma szerokość jednej komórki i rozciąga się w kierunku od lewej do dołu do prawej do góry. Przykład możliwego korytarza pokazano na rysunku.

W

adachi GIA


  1. Korytarz1. Robot jest gdzieś w pionowym korytarzu. Żadna z komórek korytarza nie jest zamalowana. Stwórz algorytm, zgodnie z którym Robot zamaluje wszystkie komórki tego korytarza i powróci do swojej pierwotnej pozycji.

  1. Do
    Niezbędny

    Dany
    korytarz2. Robot znajduje się w górnej celi wąskiego pionowego korytarza. Szerokość korytarza to jedna komórka, długość korytarza może być dowolna.

Możliwy wariant początkowej lokalizacji Robota pokazano na rysunku (Robot jest oznaczony literą „P”)

Napisz algorytm dla Robota, który wypełni wszystkie komórki w korytarzu i przywróci Robotowi jego pierwotną pozycję. Na przykład na powyższym obrazku Robot powinien zamalować następujące komórki (patrz rysunek):


  1. Na bezkresnym polu jest długa pozioma ściana. Długość muru nie jest znana. Robot znajduje się w jednej z klatek bezpośrednio nad ścianą. Nieznane jest również początkowe położenie Robota. Jedna z możliwych pozycji:
H


Niezbędny

Dany
Napisz algorytm dla Robota, który maluje wszystkie komórki powyżej i przylegające do ściany, niezależnie od wielkości ściany i początkowej pozycji Robota. Np. dla danego rysunku Robot musi zamalować następujące komórki:

Ostateczna pozycja Robota może być dowolna. Podczas wykonywania algorytmu Robot nie powinien zostać zniszczony.



  1. Na bezkresnym polu jest długa pionowa ściana. Długość muru nie jest znana. Robot znajduje się w jednej z klatek znajdujących się bezpośrednio na prawo od ściany. Nieznane jest również początkowe położenie robota. Jedna z możliwych pozycji robota jest pokazana na rysunku (robot jest oznaczony literą „P”): Napisz algorytm pracy, który maluje wszystkie komórki przylegające do ściany: po lewej stronie, zaczynając od góry niepomalowane i przez jeden; po prawej, zaczynając od dołu zacienionego i przechodząc przez jeden. Robot musi zamalować tylko te komórki, które spełniają ten warunek. Na przykład dla powyższego rysunku robot musi wypełnić następujące komórki (patrz rysunek): Ostateczna lokalizacja robota może być dowolna. Algorytm musi rozwiązać problem dla dowolnej wielkości ściany i dowolnej prawidłowej pozycji początkowej robota. Podczas wykonywania algorytmu Robot nie powinien się zawalić.


Napisz algorytm dla Robota, który maluje wszystkie komórki znajdujące się na lewo od ściany pionowej i powyżej ściany poziomej i przylegające do nich. Robot musi zamalować tylko te komórki, które spełniają ten warunek. Na przykład na powyższym obrazku Robot musi zamalować następujące komórki (patrz rysunek).


H napisz algorytm dla Robota, który maluje komórki przylegające do ściany, od góry i od dołu, zaczynając od lewej i przechodząc przez jedną. Robot musi zamalować tylko te komórki, które spełniają ten warunek. Na przykład dla podanej figury a) Robot musi zamalować kolejne komórki (patrz rys. b).

Ostateczna pozycja Robota może być dowolna. Algorytm musi rozwiązać problem dla dowolnej wielkości ściany i dowolnej prawidłowej pozycji początkowej Robota.



R

  1. Na bezkresnym polu jest długa pionowa ściana. Długość muru nie jest znana. Robot znajduje się w jednej z klatek znajdujących się bezpośrednio na lewo od ściany. Nieznane jest również początkowe położenie robota. Jedna z możliwych pozycji robota jest pokazana na rysunku (robot jest oznaczony literą „P”):
Napisz do pracy algorytm, który maluje wszystkie komórki przylegające do ściany:

  • wszystko po lewej;

  • po prawej, zaczynając od góry niepomalowane i przez jedną.
Robot musi zamalować tylko te komórki, które spełniają ten warunek.

B
1102_GIA2011

Na nieskończonym polu są dwie poziome ściany. Długość murów nie jest znana. Odległość między ścianami nie jest znana. Robot znajduje się nad dolną ścianą w klatce znajdującej się przy jej lewej krawędzi. Napisz algorytm dla Robota, który maluje wszystkie komórki znajdujące się nad dolną ścianą i pod górną ścianą i przylegające do nich. Robot musi zamalować tylko te komórki, które spełniają ten warunek. Na przykład dla powyższego rysunku robot musi wypełnić następujące komórki (patrz rysunek):

Ostateczna lokalizacja robota może być dowolna. Algorytm musi rozwiązać problem dla dowolnej wielkości pola i dowolnego dopuszczalnego położenia ścian wewnątrz pola prostokątnego. Podczas wykonywania algorytmu Robot nie powinien się zawalić.


W
1103_GIA_2011


Na nieskończonym polu jest pozioma ściana. Długość muru nie jest znana. Z prawego końca ściany rozciąga się w dół pionowa ściana, również o nieznanej długości. Robot znajduje się nad poziomą ścianą w klatce znajdującej się przy jej lewej krawędzi. Rysunek przedstawia jeden z możliwe sposoby położenie ścian i Robota (Robot jest oznaczony literą „P”).

Napisz algorytm dla Robota, który maluje wszystkie komórki znajdujące się nad ścianą poziomą i na prawo od ściany pionowej i przylegające do nich. Robot musi zamalować tylko te komórki, które spełniają ten warunek. Na przykład na powyższym obrazku Robot musi zamalować następujące komórki (patrz rysunek).