Робот за контрол на изпълнителя в системата КУМИР

Роботът съществува в определена среда (правоъгълно карирано поле). Между някои клетки на полето могат да бъдат разположени стени. Някои клетки може да са защриховани (фиг. 3.11).

Роботът заема точно една клетка от полето.

При команди нагоре, надолу, наляво и надясно, роботът се придвижва до следващата клетка в указаната посока. Ако има стена по пътя, тогава възниква повреда - показва се съобщение за невъзможността за изпълнение на следващата команда.

При команда за боядисване, роботът боядисва клетката, в която стои. Ако клетката вече е била боядисана, тя ще бъде боядисана отново, въпреки че няма да настъпят видими промени.

Роботът може да изпълнява само правилно написани команди. Ако запишете вместо командата down, тогава роботът няма да разбере този запис и веднага ще съобщи за грешка.

О
грешки: 1 синтактична; 2. логичен

Описанията на сцените се съхраняват в текстови файловеспециален формат (.fil формат).

Текущ- средата, в която се намира роботът този момент(включително информация за позицията на робота).

У дома- средата, в която Роботът е принудително поставен в началото на изпълнението на програмата, използваща Робота.

Оперативна процедура:


  1. питам начална средаспоред задачата:
Меню Инструменти → Промяна на началната среда на робота (начертайте средата според условието на задачата, дайте име, запишете в личната папка)

2. Посочете Изпълнителя:

Вмъкване на меню → Използване на робот

3. Напишете алгоритъм за решаване на задачата.

4. Стартирайте алгоритъма (Меню Изпълнение → Изпълнение непрекъснато / F9)

Системата от команди на робота-изпълнител в системата KUMIR


Екип

Действие

нагоре

Роботът се придвижва с 1 клетка нагоре

път надолу

Роботът се придвижва надолу с 1 клетка

наляво

Роботът се премества 1 клетка наляво

точно

Роботът се премества с 1 клетка надясно

боядисайте

Роботът рисува клетката, в която се намира

точно безплатно

Роботът проверява изпълнението на съответния простоусловия

оставен свободен



отгоре свободен



дъно хлабаво



клетката е засенчена



клетка чиста



Циклични алгоритми

Цикълорганизиране на повтарящи се действия, докато определено условие е вярно .

тяло на примка -набор от повтарящи се действия.

състояние -булев израз (прост или сложен (съставен))
Типове цикли:

1.Цикъл "Повторете n пъти" 2. Цикл "Чао"
nc n пъти nts чао
. . Тяло на примка. . Тяло на примка
kts kts

Пример: nts чаоточно безплатно


Общ изглед на цикъла "Повторете n пъти:

ПОВТОРЕНИЕ n ПЪТИ

КРАЙ
kts

Общ изглед на цикъла while:

ДОКАТО ДА НАПРАВИТЕ

КРАЙ
Сложни условияобразувани от един или повече прости терминии служебни думи И, ИЛИ, НЕ.


Съставно състояние А и Б(където A, B са прости условия) е изпълнено, когато всяко от двете прости условия, включени в него, е изпълнено.

Нека А - безплатно отгоре AT - свободно вдяснослед това сложното условие А и Б- свободно отгоре И свободно отдясно.


Съставно състояние А ИЛИ Б е изпълнено, когато е изпълнено поне едно от двете прости условия, включени в него: отгоре безплатно ИЛИ отдясно безплатно
Съставно състояние НЕ А- изпълнено, когато условие А не е изпълнено.

Пример:Нека A е защрихована клетка (просто условие).

П Проверка на сложното условие НЕ A:

а) А - готово, НЕ А (НЕ защриховано) - не е готово.

б) А - не е направено, НЕ А (НЕ е защриховано) - направено.


Разклонителна команда

Разклоняване -форма на организация на действията, при която в зависимост от изпълнението или неизпълнението на определено условие се извършва една или друга последователност от действия.

Общ изглед на командата IF:

АКО ТОГАВА В ПРОТИВЕН СЛУЧАЙ

КРАЙ

На езика КУМИР:

Пълно разклонение: Частично разклонение:
ако тогава ако тогава

в противен случай

всички всички

Помощен алгоритъм- алгоритъм, който решава някакъв подзадача на основния проблем.

В системата KUMIR спомагателните алгоритми се записват в края на основната програма (след служебната дума кон) се извикват за изпълнение в основната програма по име.

AT анкети и задачи

1. Дайте всички алгоритми на трите команди, които ще преместят робота от първоначалната му позиция в клетка B.

Има ли алгоритъм за тази задача, по време на който роботът прави:

а) две стъпки б) четири стъпки; в) пет стъпки; г) седем стъпки?


  1. Петя направи алгоритъм, който прехвърля робота от клетка А в клетка Б, като някои клетки са боядисани. Какво трябва да направи Коля с този алгоритъм, за да получи алгоритъм, който отвежда робота от B до A и попълва същите клетки?


7. Известни са два алгоритъма на спомагателни роботи

Начертайте какво се случва, когато роботът изпълнява следните основни алгоритми:


а)

nc 5 пъти


модел_1

дясно; дясно;


б)

nc 7 пъти


модел_2

дясно; точно


в)
дясно; дясно; точно

нагоре; нагоре

дясно; дясно; точно

път надолу; път надолу


G)
дясно; точно
дясно; точно

8. Създайте алгоритми, при които роботът ще рисува върху посочените клетки:



9. Известно е, че някъде вдясно от робота има стена. Съставете алгоритъм, под управлението на който роботът ще рисува няколко клетки до стената и ще се върне в първоначалната си позиция.

10. Известно е, че някъде вдясно от робота има защрихована клетка.

ОТ напуснете алгоритъма, под управлението на който роботът ще рисува определен брой клетки до защрихованата клетка и ще се върне в първоначалната си позиция.

11. Известно е, че Роботът се намира близо до левия вход на хоризонталния коридор.

12. Известно е, че роботът е някъде в хоризонталния коридор. Нито една от клетките на коридора не е боядисана.

Направете алгоритъм, под контрола на който роботът ще рисува върху всички клетки на този коридор и ще се върне в първоначалната си позиция.


13. В ред от десет клетки вдясно от робота някои клетки са защриховани.

ОТ оставете алгоритъма, който рисува клетките:

а) под всяка защрихована клетка;

б) над и под всяка защрихована клетка.


14. Какво може да се каже за коректността на следния фрагмент от алгоритъма?

nts чаоклетката е засенчена

АКОточно безплатно ТОГАВА

дясно; боядисайте

да се
° С

15. Напишете програма, с която роботът може да стигне до клетка B и в трите лабиринта.


16. Напишете програма, след която роботът ще може да премине по коридора от долния ляв ъгъл на полето до горния десен. Коридорът е с ширина една клетка и се простира в посока от ляво-долу-дясно-нагоре. Пример за възможен коридор е показан на фигурата.

У

adachi GIA


  1. Коридор1. Роботът е някъде във вертикалния коридор. Нито една от клетките на коридора не е боядисана. Създайте алгоритъм, при който роботът ще рисува върху всички клетки на този коридор и ще се върне в първоначалната си позиция.

  1. Да се
    Необходимо

    дадени
    коридор 2. Роботът се намира в горната клетка на тесен вертикален коридор. Ширината на коридора е една клетка, дължината на коридора може да бъде произволна.

Възможен вариант на първоначалното местоположение на робота е показан на фигурата (роботът е обозначен с буквата "P")

Напишете алгоритъм за робота, който запълва всички клетки в коридора и връща робота в първоначалната му позиция. Например, за снимката по-горе, роботът трябва да рисува върху следните клетки (вижте снимката):


  1. На безкрайното поле има дълга хоризонтална стена. Дължината на стената е неизвестна. Роботът е в една от клетките точно над стената. Първоначалната позиция на робота също е неизвестна. Една от възможните позиции:
з


Необходимо

дадени
Напишете алгоритъм за робота, който рисува всички клетки над и в съседство със стената, независимо от размера на стената и първоначалната позиция на робота. Например, за дадения чертеж, роботът трябва да рисува върху следните клетки:

Крайната позиция на робота може да бъде произволна. При изпълнение на алгоритъма, Роботът не трябва да бъде унищожен.



  1. На безкрайното поле има дълга вертикална стена. Дължината на стената е неизвестна. Роботът е в една от клетките, разположени точно вдясно от стената. Първоначалната позиция на робота също е неизвестна. Една от възможните позиции на робота е показана на фигурата (роботът е отбелязан с буквата "P"): Напишете алгоритъм за работа, който рисува върху всички клетки, съседни на стената: отляво, като започнете отгоре небоядисани и през един; вдясно, като се започне от долната засенчена и през една. Роботът трябва да боядисва само клетките, които удовлетворяват това състояние. Например, за горната фигура, роботът трябва да попълни следните клетки (вижте фигурата): Крайното местоположение на робота може да бъде произволно. Алгоритъмът трябва да реши проблема за произволен размер на стената и всяка валидна начална позиция на робота. При изпълнение на алгоритъма, роботът не трябва да се срива.


Напишете алгоритъм за робота, който рисува всички клетки, разположени отляво на вертикалната стена и над хоризонталната стена и съседни на тях. Роботът трябва да боядисва само клетките, които отговарят на това условие. Например, за горната снимка, роботът трябва да рисува върху следните клетки (вижте снимката).


з напишете алгоритъм за робота, който рисува съседните на стената клетки отгоре и отдолу, започвайки отляво и през една. Роботът трябва да боядисва само клетките, които отговарят на това условие. Например, за дадената фигура a) Роботът трябва да рисува върху следните клетки (виж Фиг. b).

Крайната позиция на робота може да бъде произволна. Алгоритъмът трябва да реши проблема за произволен размер на стената и всяка валидна начална позиция на робота.



Р

  1. На безкрайното поле има дълга вертикална стена. Дължината на стената е неизвестна. Роботът е в една от клетките, разположени точно вляво от стената. Първоначалната позиция на робота също е неизвестна. Една от възможните позиции на робота е показана на фигурата (роботът е обозначен с буквата "P"):
Напишете за работа алгоритъм, който рисува върху всички клетки, съседни на стената:

  • всичко отляво;

  • вдясно, започвайки отгоре небоядисани и през един.
Роботът трябва да боядисва само клетките, които отговарят на това условие.

б
1102_GIA2011

На безкрайното поле има две хоризонтални стени. Дължината на стените е неизвестна. Разстоянието между стените е неизвестно. Роботът е разположен над долната стена в клетка, разположена в левия му край. Напишете алгоритъм за робота, който рисува всички клетки, разположени над долната стена и под горната стена и съседни на тях. Роботът трябва да боядисва само клетките, които отговарят на това условие. Например, за горния чертеж, роботът трябва да попълни следните клетки (вижте фигурата):

Крайното местоположение на робота може да бъде произволно. Алгоритъмът трябва да реши задачата за произволен размер на полето и всяко допустимо разположение на стените вътре в правоъгълно поле. При изпълнение на алгоритъма, роботът не трябва да се срива.


AT
1103_GIA_2011


На безкрайното поле има хоризонтална стена. Дължината на стената е неизвестна. От десния край на стената се простира вертикална стена надолу, също с неизвестна дължина. Роботът е разположен над хоризонтална стена в клетка, разположена в левия й край. Фигурата показва един от възможни начиниместоположението на стените и робота (роботът е обозначен с буквата "P").

Напишете алгоритъм за робота, който рисува всички клетки, разположени над хоризонталната стена и вдясно от вертикалната стена и съседни на тях. Роботът трябва да боядисва само клетките, които отговарят на това условие. Например, за горната снимка, роботът трябва да рисува върху следните клетки (вижте снимката).

Хирянов Тимофей Федорович

ако-тогава-друго-всичко

Общ изглед на отбора:

ако условие
след това серия 1
известен още като серия 2
всичко

Серия 2заедно с официалната дума в противен случайможе да липсва. В този случай командата изглежда така:

ако условие
след това серия 1
всичко

При изпълнение на командата акоКумир първо проверява състояниезаписано между акои тогава. Ако това условие е изпълнено, серия 1, в противен случай - серия 2(ако съществува), след което Kumir продължава да изпълнява командите, записани след думата всичко.
Ако условието не е изпълнено и серия 2, заедно с друго, отсъства, тогава KuMir незабавно продължава да изпълнява командите, записани след думата всички.

Пример 1

ако тогава
b:=b-a
p:=p+q
в противен случай
a:=a-b
q:=q+p
всичко

Пример 2

ако x > m
тогава
m:= x
n:= n+1
всичко

Пример 3 (Робот изпълнител)

ако правото е свободно
тогава
точно
всичко

избор-ако-иначе-всичко

Общ изглед на отбора:

избор
при условие 1: серия 1
при условие 2: серия 2

състояние n: серия n
иначе серия n+1
всичко

Ключова дума в противен случайзаедно със съответната поредица от команди може да липсват:

избор
при условие 1: серия 1
при условие 2: серия 2

състояние n: серия n
всичко

Кумир първо проверява състояние 1. Ако се наблюдава, тогава KuMir изпълнява команди от серия 1, след което се преминава към изпълнение на командите, изписани след думата всичко. Иначе KuMir прави същото с условие 2и екипи от серия 2и т.н.
Команди, написани след думата в противен случайсе изпълняват, ако нито едно от условията не е изпълнено.
В команда за избор винаги се изпълнява най-много една поредица от команди, дори ако са изпълнени няколко условия. Изпълнението на командата select приключва, след като бъде намерено първото (по ред) условие със стойност yes (и се изпълни съответната поредица от команди).

Пример 1

избор
за a > 1: i:= i + 1
за< 0: j:= j - 1
в противен случай t:= i; i:= j; j:= t
всичко

Алгоритъм за рисуване на спирала:

използвайте чекмеджето
алг
рано
. придвижете се до точка(3,3)
. спуснете писалката
. намотка (1); намотка (3); намотка (5); намотка (7); бобина (9)
. повдигнете писалката
кон
alg turn(arg w)
рано
. изместване по вектор(a, 0)
. изместване по вектор(0, -а)
. изместване по вектор(-a-1.0)
. изместване по вектор(0, a+1)
кон

Обърнете внимание на командния блок:

Намотка (1); намотка (3); намотка (5); намотка (7); бобина (9)

Спомагателният алгоритъм "coil (arg thing a)" се извиква 5 пъти, но не може да бъде извикан в цикъла "N times", защото всеки път, когато се извиква с различни стойностиаргумент.

Но можете да видите, че стойностите на аргумента се променят от 1 на 9, като всеки път се увеличават с 2. Така че можем да помогнем цикъл с брояч. Също така, такъв цикъл се нарича цикъл "за".

Примка с брояч- цикъл, в който някаква променлива променя стойността си от дадена първоначална стойност до крайна стойност с някаква стъпка, като за всяка стойност на тази променлива тялото на цикъла се изпълнява веднъж.

Обикновено този цикъл се използва, ако трябва да повторите някои стойности и да извършите някои действия за всяка от тях.

Общ изглед на цикъла с брояч:

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

Не е необходимо да посочвате стъпката, ако не е посочена, тогава се счита за равна на единица.

Сега можем да пренапишем "спиралния" алгоритъм по следния начин:

използвайте чекмеджето
алг
рано
. придвижете се до точка(3,3)
. спуснете писалката
. цял размер
. nc за размери от 1 до 9 стъпка 2
. . намотка (размер)
. kts
. повдигнете писалката
кон
alg turn(arg w)
рано
. изместване по вектор(a, 0)
. изместване по вектор(0, -а)
. изместване по вектор(-a-1.0)
. изместване по вектор(0, a+1)
кон

В този пример променливата на брояча "size" ще получи стойностите: 1, 3, 5, 7, 9. Тоест, цикълът ще бъде изпълнен 5 пъти. За всяка стойност на променливата "size", тялото на цикъла ще бъде изпълнено веднъж, в нашия пример това е извикване спомагателен алгоритъм"намотка (арг нещо а)".

Преди първото използване на променлива, тя трябва да бъде декларирана, т.е. какъв тип е. Това се прави в нашата програма в реда „integer size“, т.е. посочваме, че ще използваме променливата „size“ за съхраняване на цели числа и следователно трябва да отделим памет за нея. Ще говорим повече за променливите малко по-късно.

Блоковата схема на такъв алгоритъм изглежда така:

Нека да разгледаме друг пример:

Нека първо си припомним и напишем спомагателен алгоритъм, който ще начертае квадрат в точката (x, y). За промяна на чертежа ще използваме командата изместване по вектор(в предишните примери те бяха изместени до точка).

Алгоритъмът може да бъде така:

алг квадрат (арг x, y, страна)
рано
. придвижете се до точка(x, y)
. изместване по вектор(-страна/2, страна/2)
. спуснете писалката
. изместване по вектор(страна, 0)
. изместване по вектор(0, -страна)
. изместване по вектор(-страна, 0)
. изместване по вектор(0, страна)
. повдигнете писалката
кон

Използвайки такъв спомагателен алгоритъм, рисуваме следната фигура:

За да направим това, използваме цикъла "for". Разгледайте примерната програма:

използвайте чекмеджето
alg фигура1
рано
. цяло число z
. nc за z от 2 до 10 стъпка 2
. . квадрат (0, 0, z)
. kts
кон
алг квадрат (арг x, y, страна)
рано
. придвижете се до точка(x, y)
. изместване по вектор(-страна/2, страна/2)
. спуснете писалката
. изместване по вектор(страна, 0)
. изместване по вектор(0, -страна)
. изместване по вектор(-страна, 0)
. изместване по вектор(0, страна)
. повдигнете писалката
кон

В този пример променливата "z" ще получи стойностите: 2, 4, 6, 8, 10. Т.е. цикълът ще бъде изпълнен 5 пъти. За всяка стойност „z“ тялото на цикъла ще бъде изпълнено веднъж, в нашия пример това е извикване на спомагателния квадратен алгоритъм.

Преди първото използване на променлива, тя трябва да бъде декларирана, т.е. какъв тип е. Това се прави в нашата програма в реда "integer z", т.е. посочваме, че ще използваме променливата "z" за съхраняване на цели числа и следователно трябва да отделим памет за нея. Ще говорим повече за променливите малко по-късно.

Както забелязахте, алгоритъмът използва не само числа, но и алгебрични изрази, формули, например "-страна/2". В компютърните науки тези изрази се наричат аритметика. Правилата на езика позволяват, когато пишете алгоритми, където можете да напишете число, напишете произволен аритметичен израз.

1. Въведение

системата "КуМир" (наименованието идва от думите "Комплект образователни светове"), с която ще ви запознае тази електронна версия на учебника.
Разработчиците на езика "KuMir" преследваха целта да създадат прост език за началния курс на компютърни науки, който отговаря на съвременните технологии за програмиране и позволява производствена употреба. За основа беше взет училищният алгоритмичен език. Езикът беше допълнен с някои функции, които го превръщат от образователен в производствен. Езикът има:
видове цяло, нещо, лит; традиционният набор от операции върху данни от тези типове (включително операции върху низове и стандартен комплектматематически функции);
масиви ( раздел) определени видове; структурни управляващи структури на цикли, разклонения и др.
Kumir е отворен - свързването на външни изпълнители обогатява езика с нови функции: от управление на база данни и работа с геометрични обекти до разширяване на набора от валидни числови типове (в този случай езикът ще позволи смесване на нови типове със съществуващи числови типове в изрази).
Модерна технологияПрограмирането ни учи да разделяме програма не само на подпрограми, но и на по-големи единици: набори от програми, които работят с общи данни. AT различни езиципрограмиране, такива единици се наричат ​​по различен начин, в KuMir такава единица се нарича "Изпълнител". Концепцията за изпълнител е изключително важна в практическата работа и трябва да се въведе на възможно най-ранните етапи на обучението.
Опитът от използването на KuMir в преподаването и за разработване на образователен софтуер показа, че езикът е лесен за научаване и в същото време достатъчно мощен, за да разшири широк клас производствени задачи.
Подобно на E-workshop, KuMir е интегрирана система, която включва текстов редактор, инкрементален компилатор с нулево време за реакция, както и прост и удобен дебъгер. хубаво имеза система от този вид - "Редактор-Компилатор": докато въвеждате програмата си, компилаторът я обработва и във всеки един момент програмата е готова за изпълнение без ни най-малко забавяне.

2. Наименования и видове ценности. Операции на KuMir

За писане на имена на променливи могат да се използват всякакви знаци от руската и латинската азбука, както и цифри. Името не трябва да започва с цифра. Няма строги ограничения за дължината на имената в системата KuMir, но за по-лесно редактиране и за избягване на препълване на редове, променливите и алгоритмите не трябва да получават твърде дълги имена. Обикновено името се избира така, че да можете да разберете за какво е предназначен алгоритъмът. Когато редактирате програми, трябва също да се помни, че руските и латинските букви, сходни по правопис, се различават от компютрите. Например, ако при описване на променлива с име A, потребителят е написал "A" на латиница и в текста на алгоритъма той се опитва да получи достъп до тази променлива, като напише името й на руската азбука, тогава в този ред " името не е дефинирано" съобщение ще се появи в "полетата".
AT алгоритмичен езикПрограмната система KuMir използва три типа стойности: цели числа ( цяло), истински ( нещо) и с букви ( литас).
Тип стойност- дефинира набора от стойности, които една стойност може да приеме, и набора от действия, които могат да бъдат извършени с тази стойност.
Стойносте единичен информационен обект, който има име, стойност и тип.

Постоянна стойност (константа) не променя стойността си по време на изпълнение на алгоритъма.
Променливата може да променя стойността си по време на изпълнение на алгоритъма.
Изразяване- запис, който определя последователността от действия върху стойностите. Изразът може да съдържа константи, променливи, знаци за операции, функции.
Следните символи се използват за писане на изрази в Kumir:

За обозначаване на знаци логически операциисе използват символи:
= равен;
< >не е равно;
< меньше;
> повече;
< = меньше или равно;
> = по-голямо или равно;
За протокола трудни условияоперации като: И, ИЛИ НЕ.
И -
едновременно изпълнение на горните условия (Х > 0 и Х< = 2);
ИЛИ- изпълнение на поне едно от условията (X > 0 или Y > 0);
НЕ- отказ.

3. Вградени функции на езика KuMir

Ето пример за вградени функции:

Обжалване

функция

Видове

Аргумент

Функции

SIN(х) защото (х) Т. Г. (х) EXP(х) LN (х) КОРЕМНИ МУСКУЛИ (х) SQRT(х) MOD (а,б) int(х) ПИ

синус х косинус x допирателна х
показател x (ex) природа. логаритъм х
модул x
корен квадратен x
остатък от делене (А до Б)
цялата част от числото
числото "пи" - 3.14159

нещо
нещо
нещо
нещо
нещо
нещо
нещо
нещо, цел
нещо
нещо

нещо
нещо
нещо
нещо
нещо
нещо
нещо
цяло
цяло
без аргумент

Пример за писане на аритметични изрази на алгоритмичен език:

4. Команди INPUT / OUTPUT

Често се изисква да се организира обмен на информация ("диалог") между човек и компютър в процеса на изпълнение на алгоритъм. За целта в алгоритмичния език има специални команди за ИЗХОД на информация от паметта на компютъра на екрана и ВЪВЕЖДАНЕ на информация от клавиатурата (от човек) в паметта на компютъра.
ENTER команда -команда, чрез която се задават стойностите на променливите чрез устройства за въвеждане (клавиатура).
Команда OUTPUT- команда, чрез която стойността на стойността се отразява на изходното устройство на компютъра (екран на монитора).
Тъй като стойностите се използват в алгоритмичния език за съхраняване на информация, командите за вход / изход показват имената на количествата, чиито стойности трябва да бъдат показани (показани на екрана) или въведени (запомнени в паметта на компютъра).
Пример:

Официална дума НС (нова линия) казва на компютъра, че информацията трябва да бъде изведена на нов ред.

5. Команда за присвояване. Създаване и редактиране на програми за линейни структури

За да запомните или промените стойността на дадено количество, има специална команда в алгоритмичния език - инструкция за задание, което е написано като:

ИМЕ НА СТОЙНОСТ: = ИЗРАЗ

Знакът ":=" (двоеточие, последвано от равенство) се нарича знак задачи и се чете като "присвояване" (например командата "n:=e" се чете "n присвояване e"). Когато изпълнява команда за присвояване, компютърът първо изчислява израза, написан от дясната страна (заменяйки имената на величините с техните стойности), и след това записва получената стойност на израза в паметта.

Алгоритмите, които представляват проста последователност от действия, се наричат ​​алгоритми с линейна структура.
Помислете за процеса на създаване линеен алгоритъмна примера за изчисляване на израза:
1. Пресметнете сбора на две числа
2. Напишете програма за намиране на хипотенузата на правоъгълен триъгълник с два катета
3. Намерете обема на куб, ако е известна страната му

6. Създаване и редактиране на програми за разклонена структура

Решаването на проблеми не винаги може да бъде представено като линеен алгоритъм. Има задачи, при които се изисква да се организира изборът за извършване на последователност от действия в зависимост от всякакви условия. Такива алгоритми се наричат алгоритми за разклонена структура.В системата за програмиране KuMir за създаване на алгоритъм за разклонена структура са предвидени конструкциите "АКО - ТОГАВА - ИНАЧЕ - ВСИЧКИ" и "ИЗБОР - АКО - ВСИЧКИ".

Команда за клон: АКО – ТОГАВА – ИНАЧЕ – ВСИЧКИ

Команда разклоняване - разделя алгоритъма на два пътя в зависимост от дадено условие; тогава изпълнението на алгоритъма преминава към общо продължение. Разклоняването бива пълно и непълно.

Графична схема на конструкцията " ако"

Служебни думи "ако", "тогава", "в противен случай" имат обичайното значение. Думата " всичко" означава край на строителството. Между " тогава" и " в противен случай" - в един или повече редове - се записва последователност от команди на алгоритмичния език (серия 1). Между " в противен случай" и " всичко"е записана друга последователност от команди (серия 2). Серия 2 заедно със служебната дума " в противен случай" може да липсва. При изпълнение на " ако"Компютърът първо проверява условието, написано между " ако" и " тогава". В резултат на проверката също ДА, или НЕ.Ако е възможно ДА,тогава се изпълнява СЕРИЯ 1 и ако НЕ, -след това СЕРИЯ 2 (ако има такава) .
Ако условието не е изпълнено (ще се окаже НЕ), и серия 2 заедно с " в противен случай" липсва, тогава компютърът незабавно продължава да изпълнява командите, написани след думата " всичко".

7. Видове цикли в програмната система КуМир

Алгоритми, чиито отделни действия се повтарят многократно, се наричат ​​алгоритми с циклична структура. Наборът от действия на алгоритъма, свързани с повторение, се нарича цикъл.
Loop командаосигурява многократно изпълнение на поредица от команди (тяло на цикъл) според някакво условие.
За програмиране на алгоритми с циклична структура в системата за програмиране KuMir са предвидени два вида цикли: цикъл с предварително условие (цикъл за докато) и цикъл с параметър (цикъл за).

Цикъл с предварително условие (while цикъл)

Цикъл с предварително условие (while цикъл) е цикъл, чието изпълнение се повтаря, докато условието на цикъла е вярно. Служебни думи NC(началото на цикъла) и KC(край на цикъла) са написани строго един под друг и свързани вертикална лента. Отдясно на този ред е написана повтаряща се последователност от команди (тялото на цикъла).

Когато се изпълни, компютърът циклично повтаря следните действия:
а) чекове, написани след думата чаосъстояние;
б) ако условието не е изпълнено (условието е невярно), тогава изпълнението на цикъла приключва и компютърът започва да изпълнява командите, записани след KC. Ако условието е изпълнено (условието е вярно), тогава компютърът изпълнява тялото на цикъла, проверява отново условието и т.н.
Ако условието в цикъла чаоне се наблюдава от самото начало, тогава тялото на цикъла никога не се изпълнява.
Коментирайте. Изпълнение на цикъл чаоможе да не приключи, ако условието е вярно през цялото време (тази ситуация се нарича цикъл). Следователно, за да се избегнат подобни ситуации, тялото на цикъла трябва да съдържа команди за промяна на условието.

Дадено е положително цяло число N. Изчислете факториела на това число: Н! = 1 * 2 * 3 * ... * Н.

Цикъл с параметър (цикл за)

Цикъл с параметър(цикъл за) - повтарящо се изпълнение на тялото на цикъла, докато целочисленият параметър преминава през набора от всички стойности от началния (i1) до крайния (in):

Тук i е променлива от тип цяло число, наречена параметър на цикъл: i1, in са началните и крайните стойности на параметъра на цикъла, които могат да бъдат зададени или чрез произволни цели числа, или чрез изрази с цели стойности; h - стъпка на промяна на стойността на параметъра на цикъла, стойността на стъпката може да бъде всяко цяло число (положително и отрицателно). Записът „стъпка h“ в първия ред може изобщо да липсва, докато стойността по подразбиране на стъпката е 1.
При изпълнение на цикъл за,тялото му се изпълнява за i = i1, i = i1 + h, i = i1 + 2*h, . . . , i = в. Правилата на алгоритмичния език позволяват задаване на всякакви цели числа i1, in, h. По-специално, in може да бъде по-малко от i1. Ако освен това стойността на h< 0, то цикл выполняется нужное количество раз, а если h имеет положительное значение, то этот случай не считается ошибочным - просто тело цикла не будет выполнено ни разу, а ЭВМ сразу перейдет к выполнению команд, записанных после KC. За h = 0 възниква зацикляне.

Пример: Дадено е положително цяло число N. Изчислете факториела на това число: N! = 1 * 2 * 3 * ... * N.

8. Алгоритми за рекурентни изрази

В математиката и компютърните науки често има последователности, в които всеки следващ член се изчислява чрез предходните.
AT аритметична прогресия, например всеки следващ член е равен на предходния, увеличен с разликата на прогресията:

ai =ai-1 +д

В последователност 1, 1, 2, 3, 5, 8, 13, ... ( нарича се последователност на Фибоначи) всеки следващ член е равен на сумата от двата предходни. За тази последователност

ai = ai-1 + ai-2, a1 = a2 =1

Формули, които изразяват следващия член на последователност чрез един или повече предишни членове, се наричат повтарящи се отношения.

9. Таблица със стойности и работа с тях

За записване на алгоритми, които работят с голямо количество информация, в алгоритмичния език има специални таблични стойности, наречени таблици (масиви).
Стойностите на таблицата са съставени от други стойности, обикновено цели числа или реални стойности, наречени елементи. Елементите в таблицата могат да бъдат подредени по различни начини. Алгоритмичният език на системата за програмиране KuMir използва 2-та най-често срещани вида таблици: линейни и правоъгълни таблици.

Работа с линейни таблици (едномерни масиви)

Като всяка стойност линейна масазаема място в паметта на компютъра, има име, стойност и вид. KuMir използва таблици от цели (celtab) и реални (vehtab) типове. Например:

Записът celtab A [ 1: 5 ] означава, че стойността A е таблица (tab), състояща се от цели числа (цели числа), елементите на тази таблица имат индекси от 1 (долна граница) до 5 (горна граница). Стойността на А е пет цели числа: 3, 15, 0, -10.101.
Елементите на таблицата нямат отделни имена. За обозначаване на i-тия елемент от таблица A се използва записът A [ i ]. Например, при изпълнение на командата A [ 3 ] : = A [ 2 ] + A [ 4 ] компютърът ще замени вместо A [ 2 ] и A [ 4 ] стойностите на 2-ри и 4-ти елемент от таблица A , т.е. числото 15 и -10, ги събираме и присвояваме получената стойност на 3-тия елемент, като по този начин вместо 0 на мястото на 3-тия елемент в таблицата ще се появи стойност 5 вместо 0.
Като стойности на границата на таблицата могат да се използват всякакви (както положителни, така и отрицателни) цели числа, както и 0. Стойността на долната граница трябва да е по-малка от стойността на горната граница; ако са равни, таблицата се счита за съставена от един елемент. Ако в описанието на таблицата, поради печатна грешка, долната граница се окаже по-голяма от горната, например celtab [ 3: 1], тогава това няма да се счита за грешка и при въвеждане на алгоритъма , в „полетата“ няма да се появяват съобщения. В този случай ще се счита, че в тази таблица няма нито един елемент и при първия достъп до тази таблица ще се появи съобщението "лош индекс".

Задача.

Работа с правоъгълни таблици (матрици)

Подобно на линейна таблица, матрицата заема място в паметта на компютъра, има име, стойност и тип. KuMir използва таблици от цели (celtab) и реални (vehtab) типове.

Нотацията celtab A [ 1: 5, 1: 2 ] означава, че стойността A е таблица (таб), състояща се от цели (цели) числа, елементите на тази таблица имат индекси от (първа колона, първи ред) до (последен колона, последен ред). Стойността на A е десет цели числа: 3, 15, 0, -10, 101, 200, -45, 50, 10, 222.
Елементите на таблицата нямат отделни имена. За обозначаване на i-тия елемент от таблица A се използва записът A [ i, j ]. Например, при изпълнение на командата A [ 3, 1 ] : = A [ 2, 1 ] + A [ 4, 1 ] компютърът ще замени вместо A [ 2, 1 ] и A [ 4, 1 ] стойностите ​​на 2-ри и 4-ти елемент от първата колона на таблица A, т.е. числата 15 и -10, ще ги събере и ще присвои получената стойност на 3-тия елемент в първия ред, така че вместо 0, стойността 5 ще се появи на мястото на 3-тия елемент от първия ред в таблицата.
Като стойности на границата на таблицата могат да се използват всякакви (както положителни, така и отрицателни) цели числа, както и 0. Стойността на долната граница трябва да е по-малка от стойността на горната граница; ако са равни, таблицата се счита за съставена от един елемент. Ако в описанието на таблицата, поради печатна грешка, долната граница се окаже по-голяма от горната, например celtab [ 3: 1, 5: 2], тогава това няма да се счита за грешка и няма да се появяват съобщения в "полетата" при въвеждане на алгоритъма. В този случай ще се счита, че в тази таблица няма нито един елемент и при първия достъп до тази таблица ще се появи съобщението "лош индекс".

Задача.В дадената таблица Б определете индекса и стойността на максималния елемент.

Приложение: Задачи

Линейни алгоритми

Задача №1

Намерете сумата на две числа - a и b
Решение:

алг сума
рано нещо a, b, c
заключение "въведете стойността на 2 числа"
вход а, б
c:= a + b
заключение ns , "сума от числа", a, "и", b, "равно на", c
кон

Задача №2

Намерете разликата на две числа
Решение:

алг разлика
рано нещо a, b, c
заключение "въведете стойности на променливи"
вход а, б
c:= a - b
изход ns, " разлика на числата", a, "и", b, "равно", c
кон

Задача №3

Намерете произведението на произволни две естествени числа
Решение:

цяло a, b, c

алг работа
рано
заключение
" въведете две числа"
вход
а,bc:=а +b
изход ns,
"
произведение на числа", a, "и", b "е равно", c
кон

Задача №4

Намерете частното на две естествени числа
Решение:

нещо a, b, c

алг частен
рано
заключение"
въведете дивидент и делител"
вход
а, б
c:= a / b
изход ns,
"частно", a, "и", b, "равно на", c
кон

Задача №5

Намерете средноаритметичната стойност на пет произволни числа
Решение:

нещо а б В Г Д Е

алг аритметика
започнете нещата а б В Г Д Е
заключение „Въведете произволни 5 числа“
вход а б В Г Д
f:=(a + b + c + d + e)/ 5
заключение ns ," средноаритметичното на 5 числа е", f
кон

разклоняване

Задача №1

Намерете най-голямото сред 3 цели числа (числата са произволни)

алг максимум
ранна цел a B C
заключение „Въведете три произволни числа“
вход a B C
ако a>b>c
тогава заключението е ns ," максималният брой е", и
всичко
ако а<б>с
тогава заключението е ns ," максималният брой е", b
всичко
ако а<б<с
тогава заключението е ns ," максималният брой е", с
всичко
кон

Задача №2

Дадени са ви две произволни числа. Ако първото число е по-голямо от второто, присвоете сумата им към него и техния продукт към второто число. Ако второто число е по-голямо от първото, присвоете техния продукт на първото число, а сумата им на второто.

алг състояние
започнете нещата а, б
заключение „Въведете две числа“
вход а, б
ако a > b
тогава a:= a + b
b := a * b
в противен случай a:= a * b
b := a + b
заключение ns , а, б
кон

Задача #3:

Намерете минималното сред 4 произволни числа
Решение:

алг минимум
започнете нещата a, b, c, e
заключение „Въведете 4 произволни числа“
вход коремни мускули. д
ако a>b>c>e
тогава заключението е ns ," максимален брой-", и
всичко
ако а<б>c>e
тогава заключението е ns ,"максимален брой -",b
всичко
ако
а<б<с>д
тогава заключението е ns ," максимален брой -", s
всичко
ако
а<б<с<е
тогава заключението е ns , "максимален брой -", напр
всичко
кон

Задача №4

Дадени са 2 катета (2 cm и 2 cm) на равнобедрен триъгълник и неговата основа (2,82 cm). Определете дали триъгълникът е правоъгълен.
Решение:

алг триъгълник
започнете нещата i, h, s
i:= 2
h:= 2
с:= 2,82
ако c**2= (i**2)+(h**2)
след това изхода "истина"
в противен случай изход "Невярно"
всичко
кон

Задача №5

Отпечатайте съобщението "true", ако произведението на две отрицателни числа е по-голямо от нула, в противен случай отпечатайте съобщението "false"
Решение:

алг отрицателен
започнете нещата i, h, s, m
заключение „Въведете две отрицателни числа“
вход аз з
c:=0
m := i*h
ако м>с
тогава заключението е ns , "вярно"
в противен случай изведете ns ,"Невярно"
всичко
кон

Цикъл "за"

Задача №1

намирам Факториалестествено числон ( Факториел на естествено число n е произведението на всички естествени числа между 1 и н ) Решение:

алг факториел
започнете нещата
а. b
цяло
n и
заключение

вход
н
а:= 1
nc за
и от 1 преди н
заключение ns,
"въведете номера"
вход
b
a:= a * b
kts
заключение ns
,
"факториал",n,"от цели числа е", и
кон

Задача №2

Намерете максималната стойност средn - цели числа
Решение:

алг максимум
започнете нещата
а, б
цяло
i, n
заключение
„Въведете броя на целите числа за сравнение“
вход
н
а:=0
nc за
и от 1 преди н
заключение ns,
"въведете номера"
вход
b
ако
b>a
тогава
a:=b
всичко
kts
заключение ns,
"максималния брой сред данните е число", и
кон

Задача №3

Намерете средn-цели числа брой отрицателни
Решение:

алг съвпадение
започнете нещата
a, b, c
цяло
n, i, s
заключение "
въведете броя на естествените числа"
вход
н
заключение ns,
"въведете номера"
вход
b
n:= n - 1
h:= 0
nc за
и от 1 преди н
заключение ns,"
въведете номера"
вход
с
ако
c = b
тогава
s:= s + 1
всичко
kts
заключение ns
,

кон

Задача №4

Последователно въведени n-цели числа. Намерете броя на съвпаденията с първото число
Решение:

започнете нещата a, b, c
цяло
n, i, s
заключение
„Въведете броя на естествените числа“
вход
н
заключение ns,
"въведете номера"
вход
b
n:= n - 1
h:= 0
nc за
и от 1 предин
заключение ns,
"въведете номера"
вход
с
ако
c = b
тогава s:= s + 1
всичко
kts
заключение ns
,
"броят на съвпаденията с първото число е", z
кон

Задача №5

Последователно въведени n-цели числа. Намерете разликата между максимума и минимални стойностидадени числа
Решение:

алг разлика
започнете нещата
а. b, s, d
цяло
n и
заключение
„Въведете брой числа“
вход
н
a:= 0
c:=0
nc за
и от 1 предин
заключение ns,
"въведете номера"
вход
д
ако
e>s
тогава
c:=d
всичко
ако
д<а
тогава
a:= d
всичко
kts
b:= c - a
заключение ns,
"разликата между минималните и максималните стойности е равна", b
кон

Цикълът while

Задача №1

Намерете сбора на всички числа между 1 и 5
Решение:

алг числа
започнете нещата а, б
заключение „Въведете две числа, така че второто да е по-голямо от първото“
вход а, б
nts чао а<б
a:= a + 1
kts
заключение ns
, а
кон

Задача №2

Дадени са две числа, така че второто число да е по-голямо от първото. Необходимо е да добавите 1 към първото число, докато стане равно на второто число, изведете го на монитора.
Решение:

алг сума
започнете нещата a, b, c
заключение "въведете интервал на сумиране"
вход а, б
c:= a
nts чао а< б
a:= a + 1
c:= c + a
kts
заключение ns
," сумата от числата на дадения интервал е", с
кон

Задача №3

Дадени са ви две произволни числа. Докато техният продукт е по-малък от 100, увеличете всяко число с 2 и покажете крайните числа на монитора
Решение:

алг работа
започнете нещата a, b, c
заключение „Въведете две произволни числа“
вход а, б
c:= 100
nts чао а*б< с
a:= a + 2
b := b + 2
kts
заключение ns
, а, б
кон

Едномерни масиви

Задача №1

Попълнете масив с произволни числа и изведете елементите му Решение:

алг масив 2
ранна цел
n,i
нещо
b, макс
нож за дрехи
a [ 1:n ]
заключение
"попълване на масив"
вход
н
макс.:= 0
nc за
i от 1 предин
заключение ns,
"въведете елемент от масив"
вход
b
ако
b > макс
тогава макс.:=б
всичко
kts
заключение ns
,

кон

Задача №2

Намерете максималния елемент от масива и го покажете на монитора Решение:

алг масив 2
рано
цяло n,i
нещо
b, макс
нож за дрехи a [ 1:n ]
заключение
"попълване на масив"
вход
н
макс.:= 0
nc за
i от 1 предин
заключение ns,
"въведете елемент от масив"
вход
b
ако
b > макс
тогава макс.:=б
всичко
kts
заключение ns
,
"максималния елемент на този масив е", макс
кон

Задача №3

Намерете сумата от елементите на едномерен масив Решение:

алг сума
рано цяло
n,i
нож за дрехи
a [ 1:n ]
нещо
Б з
заключение
" въведете броя на елементите на масива "
вход
н
z:= 0
nc за i от 1 предин
заключение ns,
"въведете елемент от масив"
вход
b
z:= z + b
kts
заключение ns
,
"сума", n, "елементи на масива е равно", z
кон

Задача №4

Намерете произведението на елементите на едномерен масив Решение:

алг работа
ранна цел
i, n
нещо
s, d
нож за дрехи
a [ 1:n ]
заключение
"въведете броя на елементите на масива"
вход
н
d:= 1
nc за
i от 1 предин
заключение ns,
"въведете номера"
вход
с
d:= d*s
kts
заключение ns
,"
продукт", n, "елементи е равно", d
кон

Масиви

Задача №1


Попълнете матрицата със случайни числа Решение:

алг масивът е двуизмерен
цяло
n, j, h, v
стартирайте нож за дрехи
а
заключение
"въведете броя на елементите в таблицата"
вход
н
h:= 0
v:= 0
заключение ns,
"попълване на масив"
вход
а
nc за
й от 1 предин
ако а > 0
тогава
h:= h + 1
в противен случай
v:= v + 1
kts
заключение ns,
а
кон


Задача №2


Изчислете броя на положителните и отрицателните елементи на първия ред на матрицата Решение:

алг масив 2
рано
нещо b, x, z
цяло
i, n
заключение

вход
н x:=0
z:= 0
nc за
i от 1 предин
заключение
ns," въведете номера"
вход
b
ако
b > 0
тогава
x:= x + 1
в противен случай
z:= z + 1
всичко
kts
заключение ns
,

заключение ns,

кон


Задача №3


Изчислете сумата от елементите на всеки ред Решение:

алг масив 3
започнете нещата
b, x, z, y
цяло
i, n
нож за дрехи
a[ 1:n, 1:n]
заключение
"въведете брой колони"
вход
н x:=0
z:= 0
nc за
i от 1 предин
заключение ns,
"попълване на масив"
вход
a[ 1:n, 1:n]
b:= a[ 1,i ]+a[ n, i ]
kts
заключение ns
,
"броят на положителните числа е", x
заключение ns,
"броят на отрицателните числа е", z
кон


Задача №4


Изчислете сумата от трите числа във втория ред на матрица три по три Решение:

алг матрица
рано цяло
i, n
нож за дрехи a[1:3, 1:3]
заключение "попълване на масив"
вход a[1:3, 1:3]
n:=0
nc за i от 1 преди 3
n:= n + a[ 2,i]
kts
заключение ns,
"сумата на числата във втория ред на масива е", n
кон

Карти със задачи

    Намерете сред n -цели числа, въведени от клавиатурата, броя на отрицателните

    Дадени са ви две произволни числа. Докато техният продукт е по-малък от 100, увеличете всяко число с 2 и покажете крайните числа на монитора

    Последователно въведени n -цели числа. Намерете броя на петиците в редица

    Последователно въведени n -цели числа. Намерете разликата между максималните и минималните стойности на дадените числа

    Намерете сред n -цели числа, въведени от клавиатурата, броя на отрицателните

    Дадени са ви две произволни числа. Докато техният продукт е по-малък от 100, увеличете всяко число с 2 и покажете крайните числа на монитора

    Последователно въведени n -цели числа. Намерете броя на петиците в редица

    Последователно въведени n -цели числа. Намерете разликата между максималните и минималните стойности на дадените числа

    Намерете сред n -цели числа, въведени от клавиатурата, броя на отрицателните

    Дадени са ви две произволни числа. Докато техният продукт е по-малък от 100, увеличете всяко число с 2 и покажете крайните числа на монитора

    Последователно въведени n -цели числа. Намерете броя на петиците в редица

    Последователно въведени n -цели числа. Намерете разликата между максималните и минималните стойности на дадените числа

    Намерете сред n -цели числа, въведени от клавиатурата, броя на отрицателните

    Дадени са ви две произволни числа. Докато техният продукт е по-малък от 100, увеличете всяко число с 2 и покажете крайните числа на монитора

    Последователно въведени n -цели числа. Намерете броя на петиците в редица

    Последователно въведени n -цели числа. Намерете разликата между максималните и минималните стойности на дадените числа