§ 2. Алгоритмические конструкции: начало/конец, ввод/вывод, линейные участки

Существует 3 вида алгоритмических конструкций: виды алгоритмических конструкций 1) Линейный участок 2) Ветвление 3) Цикл В линейном участке все команды идут строго одна за другой. Выполнение каждой следующей команды начинается после о...

Информатика 10 класс 10-И-3

§ 2. Алгоритмические конструкции: начало/конец, ввод/вывод, линейные участки

Существует 3 вида алгоритмических конструкций:

виды алгоритмических конструкций

1) Линейный участок

2) Ветвление

3) Цикл

В линейном участке все команды идут строго одна за другой. Выполнение каждой следующей команды начинается после окончания предыдущей, и при любых исходных данных выполняется одна и та же последовательность команд. В случае робота линейный участок может состоять исключительно из команд движения. Например, можно поставить задачу сдвига робота на одну позицию вправо и вверх. Тогда для её решения нужно записать две команды сдвига. Далее можно подавать на вход этому алгоритму любые клетки, кроме крайних верхних и крайних правых, ибо для них поставленная задача решения не имеет.

В Паскале  команды  линейного  участка  отделяются друг от друга точкой с запятой. Пока что мы знаем всего одну команду – это присваивание, хотя в правой части может стоять огромное выражение. Кстати, вычисление Паскалевского выражения, что арифметического, что логического, также является примером линейного алгоритма (вспомните задачи на порядок действий).

В блок-схемы линейный участок обозначается прямоугольником. Все команды, записанные в прямоугольнике, исполняются ровно в том порядке, в котором они записаны (будем считать, что сверху вниз). Аналогично Паскалю, будем отделять команды друг от друга в линейном блоке точкой с запятой. Присваивание также будем обозначать символом «`:=`», а вот арифметическое выражение можно записывать, используя как синтаксис Паскаля, так и математики (этим можно пользоваться при решении задач). Аналогично с арифметическим, логическое выражение можно записывать, используя как синтаксис Паскаля, так и алгебры логики.


Алгоритм на языке блок-схемы всегда начинается с блока начала, затем идёт блок ввода входных данных, если они есть, далее блок вычислений, затем блок вывода результата и блок завершения алгоритма. В качестве примера рассмотрим блок-схему вычисления площади треугольника по длинам его `3` сторон с использованием формулы Герона. Входными данными в этой задаче являются длины сторон, а результатом – значение площади. Соответственно, мы будем решать задачу, используя пять переменных. Три стороны – a, b, c. Площадь – s.  И полупериметр – p. Будем считать, что стороны всегда будут заданы таким образом, что треугольник существует. Рассмотрим блок-схему решения этой задачи:

Теперь для сравнения запишем тот же самый алгоритм на языке программирования Паскаль.

begin

  read(a,b,c);

  p:=(a+b+c)/2;

  s:=sqrt(p*(p-a)*(p-b)*(p-c));

  write(s);

end.


В Паскале вместо блока начала алгоритма пишется слово begin, а вместо блока окончания алгоритма – слово end. (с точкой). Вместо блока ввода пишетcя слово read и далее в круглых скобках указываются имена переменных, которым нужно присвоить входные данные алгоритма. Вместо блока вывода пишется слово write и далее в круглых скобках указываются имена переменных, в которых хранятся результирующие значения работы алгоритма.

Замечание

В рамках этого задания мы не ставим себе цель изучить все тонкости языка программирования. (Иначе это задание получится перегружено большим объёмом информации, которая вряд ли будет воспринята должным образом). Наша цель – научиться записывать на Паскале разные виды алгоритмов. Изучение всех тонкостей языка и написание полных программ – это следующий шаг обучения.

В качестве следующего примера рассмотрим задачу нахождения натурального числа, полученного путём выписывания в обратном порядке цифр исходного пятизначного натурального числа. Эта задача уже решалась в задании про системы счисления, поэтому сейчас нас интересует только оформление. Приведём решение при помощи блок-схемы и на Паскале.


   begin

     read(n);

     c1:= n div 10000;

     c2:= n div 1000 mod 10;

     c3:= n div 100 mod 10;

     c4:= n div 10 mod 10;

     c5:= n mod 10;

     m:= c5*10000+c4*1000+c3*100+c2*10+c1;

     write(m);

   end.