Как написать линейный алгоритм

Каждый человек на протяжении своей жизни решает множество задач разной сложности. Но даже самые простые из задач выполняются последовательно, то есть за несколько шагов. Эту последовательность можно назвать алгоритмом. Последовательности бывают разные, но начинать их изучение лучше всего с линейных.

Algo_970x90-20219-0c5b45.png

Прежде чем приступить к рассмотрению основной темы статьи, следует сделать краткое отступление и сказать несколько слов про алгоритмический язык.

Алгоритмический язык

Представьте, что человеку, работающему за компьютером, поставлена некая вычислительная задача. В языке программирования решение этой задачи выполняется с помощью алгоритмизации. Решение предполагает:
— разбиение на этапы;
— разработку алгоритма;
— составление программы решения на алгоритмическом языке;
— ввод данных;
— отладку программы (возможны ошибки — их надо исправить);
— выполнение на ПК;
— анализ результатов.

Алгоритмический язык является средством описания алгоритмов, а уже алгоритм, в свою очередь, представляет собой чёткое описание определённой последовательности действий, направленных на решение необходимой задачи.

Свойства алгоритма

Их несколько:
конечность. Любой алгоритм должен быть завершённым, а окончание наступает после выполнения определённого числа шагов;
однозначность, понятность. Не допускается разных толкований, неопределённости и двусмысленности — всё должно быть чётко и ясно, а также понятно исполнителю — и правила выполнения действий линейного алгоритма, и сами действия;
результативность. Итог работы — результат, полученный за конечное число шагов;
универсальность, массовость. Качественный алгоритм способен решать не одну задачу, а целый класс задач, имеющих схожую постановку/структуру.

Линейная структура

Любой алгоритм составляется из ряда базовых структур. Простейшей базовой структурой является следование — структура с линейными характеристиками. Из этого можно сформулировать определение.

Линейный алгоритм — это алгоритм, образуемый командами, которые выполняются однократно и именно в той последовательности, в которой записаны. Линейная структура, по сути, проста. Записать её можно как в текстовой, так и в графической форме.

Представим, что у нас стоит задача пропылесосить ковёр в комнате. В текстовой форме алгоритм будет следующим:
— принести пылесос к месту уборки;
— включить;
— пропылесосить;
— выключить;
— унести пылесос.

И каждый раз, когда нам надо будет пылесосить, мы будем выполнять один и тот же алгоритм.

Теперь поговорим про графическую форму представления.

Algo_970x90-20219-0c5b45.png

Блок-схема

Для изображения алгоритма графически используют блок-схемы. Они представляют собой геометрические фигуры (блоки), соединённые стрелками. Стрелки показывают связь между этапами и последовательность их выполнения. Каждый блок сопровождается надписью.

Рассмотрим фигуры, которые используются при визуализации типичной линейной последовательности.

Блок начала-конца:

Screenshot_1-1801-a35d16.png

Блок ввода-вывода данных (отображает список вводимых и выводимых переменных):

Screenshot_2-1801-52cab0.png

Арифметический блок (отображает арифметическую операцию/группу операций):

Screenshot_3-1801-df500e.png

Условный блок (позволяет описать условие). Алгоритмы с таким блоком используются при графической визуализации алгоритмов с ветвлением:

Screenshot_4-1801-3103cc.png

Условного блока нет в классическом линейном алгоритме, так как в нём, как уже было сказано ранее, все операции выполняются последовательно, то есть одна за другой. В линейном алгоритме размещение блоков выглядит следующим образом:

Screenshot_5-1801-f1511b.png

А вот, как решается задача по нахождению площади треугольника по формуле Герона. Здесь a, b, c – это длины сторон, S – площадь треугольника, P – периметр.

Screenshot_6-1801-c010e2.png

Следует обратить внимание, что запись «=» — это не математическое равенство, а операция присваивания. В результате этой операции переменная, стоящая слева от оператора, получает значение, которое указано справа. Значение не обязательно должно быть сразу определено (a = 3) — оно может вычисляться посредством выражения (a = b + z), где b = 1, a z = 2.

Примеры линейных алгоритмов

Если рассмотреть примеры решения на языке Pascal (именно этот язык до сих пор используется для изучения основ алгоритмизации и программирования), то можно увидеть следующую картину:

Screenshot_7-1801-f9ba66.png

И, соответственно, блок-схема программы линейной структуры будет выглядеть следующим образом:

Screenshot_8-1801-8a0c1b.png

Как составить программу линейной структуры?

Порядок следующий:
— определите, что именно относится к исходным данными, а также каков типы/класс этих данных, выберите имена переменных;
— определите, каков тип данных будет у искомого результата, выберите название переменных (переменной);
— определите, какие математические формулы связывают результат и исходные данные;
— если требуется наличие промежуточных данных, определите класс/типы этих данных и выберите имена;
— опишите все используемые переменные;
— запишите окончательный алгоритм. Он должен включать в себя ввод данных, вычисления, вывод результатов.

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

Algo_970x550-20219-265dfd.png

Источники:
• https://inep.sfedu.ru/wp-content/uploads/2018/05/25/lection_27.pdf;
• https://www.sites.google.com/site/415ict/textbooks/prog-9/02-linejnyj-algoritm.

Алгоритм линейной структуры

Любой алгоритм можно составить из нескольких базовых структур. Простейшей из них является линейная (следование).

Линейный алгоритм (следование) образуется командами, выполняемыми однократно в той последовательности, в которой они записаны.

Пример программы линейной структуры

Программа на языке Pascal

program line;

var a, b, c: integer;

begin

readln(a, b);

c := 2 * a + b;

writeln(‘c=’, c);

end.

Элементы программы

1. Заголовок

2. Объявление переменных

3. Начало блока операторов

4. Ввод исходных данных

5. Вычисление по формуле

6. Вывод результата

7. Конец блока операторов

Чтобы составить программу линейной структуры…

    1. Определить, что является исходными данными, какие будут у них типы. Выбрать имена переменных.
    2. Определить, что является искомыми результатами, какие будут у них типы. Выбрать имена переменных.
    3. Определить, какие формулы связывают исходные данные с результатами.
    4. Если нужны промежуточные данные, определить их типы и выбрать имена вспомогательных переменных.
    5. Описать все используемые переменные.
    6. Записать алгоритм, который должен включать:
        1. ввод всех исходных данных;
        2. вычисления;
        3. вывод результатов.
      1. Будьте внимательны: вспомогательная переменная должна получить значение до того, как она будет использована в вычислениях.
    7. Подобрать данные для тестирования программы (проверки правильности ее работы).

Для ввода данных в языке Pascal используются процедуры

read(переменные); например, read(a, b, c);

readln(переменные); например, readln(a, b, c);

Для вывода данных в языке Pascal используются процедуры

write(выражения); например, write(‘a =’, a, ‘b + c =’, b + c);

writeln(выражения); например, writeln(‘a =’, a, ‘b + c =’, b + c);

Процедуры readln и writeln отличаются от read и write тем, что после ввода/вывода производят перевод строки.

Математические операции и функции

В языке программирования Pascal имеется 6 арифметических операции и несколько встроенных функций. Обратите внимание, что существуют довольно строгие ограничения на использование арифметических операций с разными типами данных.

Запись любой функции (независимо от того, как она записывается в математике) состоит из имени функции и её параметра (аргумента), указанного в скобках после имени.

1. Определите результат вычисления следующего выражения. Какой тип будет у этого результата?

а) 2 * 4 + 10

б) 3.5 * 2 — 17

в) 48 + 16 mod 5

а) 46 div 12 — 7

б) 24 — 50 * 6

в) 3 + 4 * 2.25

2. Попробуйте определить, какие типы у параметров и результатов каждой из встроенных функций Pascal (см. таблицу).

3. Запишите по правилам Pascal следующие выражения:

4. Составьте на языке Pascal программу для вычисления:

Длины окружности и площади круга.

Для справки:

Скорости свободно падающего тела и пройденного им пути .

Для справки:

Линейный алгоритм (следование) — это алгоритм, который описывает последовательно выполняющиеся действия.

Рассмотрим простой пример линейного алгоритма.

Алгоритм «Открой дверь».

  1. Начало.
  2. Достань ключ из кармана.
  3. Вставь ключ в замочную скважину.
  4. Поверни ключ два раза.
  5. Вытащи ключ.
  6. Конец.

Изобразим данный алгоритм графически, с помощью блок-схемы.

следование.png

Алгоритм с ветвлением (разветвляющийся) — это алгоритм, в котором в зависимости от результатов проверки условия выполняется либо одно действие, либо другое.

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

Общий вид: ЕСЛИ <условие> ТО <действие (1)> ИНАЧЕ <действие (2)>.

Рассмотрим пример алгоритма «Купи мороженное».

мороженое.png

Повседневная жизнь каждого человека состоит из решения огромного количества задач разной сложности на работе или во время учебы. Некоторые задачи настолько просты, что, выполняя их, мы выполняем определенные действия автоматически, даже не задумываясь об этом. Решение любой задачи, даже самой простой, обычно осуществляется последовательно в несколько этапов. Этот тип последовательности при поиске и устранении неисправностей называется алгоритмом. Сегодня мы увидим, что такое линейные алгоритмы, как представлена ​​их структура, как они решаются и программируются.

Содержание

  • 1 Алгоритмический язык
  • 2 Свойства алгоритма
  • 3 Линейные алгоритмы. Информатика 9 класса
  • 4 Линейный алгоритм в виде блок-схемы
  • 5 Линейные вычислительные алгоритмы
  • 6 Пример решения линейного алгоритма
  • 7 Графическая форма решения
  • 8 Линейный алгоритм. Его программирование
  • 9 Операторы ввода, вывода в языке программирования Паскаль

Алгоритмический язык

Это понятие является точным предписанием исполнителю выполнить определенную последовательность действий, которая направлена ​​на решение проблемы.линейные алгоритмы

Этот язык является средством описания алгоритмов, которые обычно ориентированы на пользователя.

Если говорить на компьютерном языке, это точный рецепт, определяющий вычислительный процесс. Это, в свою очередь, ведет от исходных данных, которые меняются, к исходному результату.

Разработка алгоритма — довольно сложный и трудоемкий процесс. Это методика составления (разработки) последовательности действий, предназначенных для решения проблем с помощью компьютера.

Свойства алгоритма

Среди свойств:

  • определенность (однозначность) — представляет собой уникальность трактовки правил выполнения действий, а также порядка их выполнения;
  • массовость — алгоритмы должны уметь решать целый класс конкретных задач с общей постановкой задачи.
  • конечность — заключается в выполнении работы всего алгоритма за определенное конечное число фаз (шагов);
  • понятность — инструкции должны быть понятны исполнителю;
  • оперативность: получение требуемого результата за конечное количество шагов;

Линейные алгоритмы. Информатика 9 класса

Мы уже рассмотрели определения и свойства этого понятия. Теперь поговорим о его видах:решение линейных алгоритмов

  • линейный;
  • с петлей.
  • ветвление;

Нас интересуют линейные алгоритмы. Какие они? Они содержат команды, которые необходимо выполнять одну за другой в четкой последовательности.

Линейная структура алгоритма может быть записана в устной и графической форме.

Возьмем такой пример, записанный в устной форме. Итак, задача: подготовиться к школе. Решение:

  • Делайте упражнения.
  • Конец.
  • Стоя.
  • Завтракать.
  • Вымойтесь.
  • Одеться.
  • Начинать.
  • Соберите портфель.

Графическая форма описанного выше процесса будет представлять следующее:линейные компьютерные алгоритмы

Линейный алгоритм в виде блок-схемы

Блок-схема представляет собой иллюстративное представление алгоритма, в котором каждый отдельный шаг представлен с использованием блоков, представленных в виде множества геометрических фигур. Кроме того, взаимосвязь между фазами (другими словами, последовательность выполнения по фазам) указывается стрелками, соединяющими фигуры (блоки). Каждый блок сопровождается надписью. Для типовых действий в линейном алгоритме используются следующие геометрические фигуры:

  • Начальный и конечный блоки алгоритма. На блоке написано «начало» или «конец».
  • Арифметический блок или блок принятия решений. Соответствует прямоугольнику. На блоке должна быть надпись: «операция», «группа операций».
  • Блок данных ввода-вывода. Этот блок представлен в виде параллелограмма. На нем размещены следующие надписи: «вход», «выход», «печать». Они также сопровождаются списком входных или выходных переменных соответственно.

Здесь с помощью таких блок-схем проиллюстрировано решение линейных алгоритмов. Далее поговорим об особенностях присвоения значений.

Линейные вычислительные алгоритмы

Основное элементарное действие в алгоритме расчета — присвоить переменной определенное значение. В случае, если значение константы определяется типом ее обозначения, переменная получит конкретное значение только после присвоения. Это можно сделать двумя способами: с помощью команды assign; используя команду ввода.

Пример решения линейного алгоритма

Вот пример описания правил деления обыкновенных дробей по линейному алгоритму, который в школьных учебниках имеет следующее содержание:

  • числитель дроби 1 нужно умножить на знаменатель дроби 2;
  • необходимо написать дробь, где числитель — результат выполнения 1 балла, а знаменатель — результат выполнения 2 баллов. Алгебраическая форма этого правила следующая:
  • знаменатель дроби 1 нужно умножить на числитель дроби 2;

a / b: c / d = (a * d) / (b * d) = m / n.структура линейного алгоритма

Итак, построим алгоритм деления дробей для компьютера. Чтобы не запутаться, будем использовать одинаковые обозначения для переменных приведенной выше формулы a, b, c, d — исходные данные в виде целочисленных переменных. Также получатся целые числа. Решение на алгоритмическом языке будет следующим:

alg Деление на дроби

скоро

неповрежденный a, b, c, d, m, n

вход а, б, в, г

m: = a * d

п: = b * c

выход m, n

с участием

Графическая форма решения

Схема описанного выше линейного алгоритма выглядит так:схема линейного алгоритма

Команда присваивания имеет следующий формат:

Переменная: = выражение.

Знак «: =» читается как назначить.

Назначение — это команда, которую компьютер должен выполнить:

  • оценить выражение;
  • присвоение переменной полученного значения.

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

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

В приведенном примере алгоритма также присутствует команда ввода:

Введите a, b, c, d.

Команда ввода на блок-схеме записывается в виде параллелограмма, то есть в блоке ввода-вывода. Выполняя эту команду, процессор останавливает свою работу до тех пор, пока пользователь не выполнит определенные действия. А именно: пользователь должен ввести входные переменные (их значения) на устройстве ввода (клавиатуре) и нажать Enter, которая является клавишей ввода. Важно, чтобы значения вводились в том же порядке, что и соответствующие переменные в списке ввода.

Линейный алгоритм. Его программирование

Как упоминалось в начале этой статьи, линейные программы могут включать в себя следующие операторы:

  • назначение;
  • производство.
  • вход;

То есть с помощью перечисленных операторов программируются линейные алгоритмы.

Итак, оператор присваивания на языке программирования записывается следующим образом:

Пусть A = B, где A — переменная, B — выражение. Например, A = Y + 20.

Оператор ввода выглядит так:

ВХОД, например: ВХОД C

Оператор вывода данных, значений записывается в следующем виде:

НАЖМИТЕ. Например, PRINT C.

Возьмем простой пример. Мы должны написать программу, которая находит сумму чисел A и B, введенных с клавиатуры.алгоритмы линейных вычислений

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

Операторы ввода, вывода в языке программирования Паскаль

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

При вводе данных эти операторы используются для обозначения стандартной процедуры ввода данных, уже встроенной в программу.

Прочтите (A, B, C), где A, B, C — переменные, которые необходимо вставить в ОЗУ для хранения.

Readlnn (x1, y, x2) — после завершения ввода курсор перемещается в начало новой строки.

Леггилнн; — указывает на ожидание нажатия «Enter». Обычно этот оператор вставляется в текст перед последним «End», чтобы сохранить результаты выполнения программы на экране содержимого.

Отображение данных на экране монитора осуществляется с помощью следующих операторов:

Тип (A, B, C) — после указания значений A, B, C в строке курсор не покидает текущую строку.

Наберите n (z, y, z2) — после завершения отображения значений курсор в этой позиции переместится на новую строку.

Пишу; — указывает на пропуск строки и переход к началу новой.

именно с помощью таких простых операторов осуществляется ввод и вывод данных на языке Паскаль.

Линейными
называют
алгоритмы, в которых операции выполняются
последовательно одна за другой, в
естественном и единственном порядке.

Рассмотрим
реализацию простейшего линейного
алгоритма и приведем полный текст
программы на языке Рascal.
В таких алгоритмах все блоки имеют
последовательное соединение логической
связью передачи информационных потоков.
В них могут использоваться все блоки,
за исключением блоков проверки условия
и модификации. Линейные алгоритмы, как
правило, являются составной частью
любого алгоритмического процесса.

Пример
3

Вычислить значение
функции

Очевидно,
что функцию Y
целесообразно
вычислять
в такой последовательности:
предварительно введя исходные данные
a
,
b
, c
и присвоив
значение переменной
х
, вначале
найдем значение выражения, которое
обозначим переменной z,
и далее определим выражение Y.
Используя общепринятые символы блоков
(рисунок 1),
изобразим схему разрабатываемого
алгоритма (рисунок 2) и составим программу
при
значении аргумента x=1.5
и произвольных значениях переменных
a,
b,
c.

Program
Primer3;

Var
b,c:integer;

a,x,y,z:real;

BEGIN

Writeln(’ВВЕДИТЕ
a,b,c’);

Readln(a,b,c);

x:=1.5;

z:=(a*x*x+b)/c;

y:=Arctan(Sqrt(Z)+Ln(z));

Writeln(’Y=’,y:8:4);

END.

Рисунок 2 – Схема
алгоритма
линейной структуры

После
запуска программы на выполнение вводим
численные значения исходных данных a,
b,
c
с клавиатуры,
разделяя числа пробелами. После выполнения
программы на экране появится результат
вычислений. Результат выполнения
программы представлен на рисунке 3.

Рисунок 3 – Результат
выполнения Примера3

Рассмотрим
реализацию простейшего линейного
алгоритма на языке Pascal
и приведем
полный текст программы.

Пример 4

Вычислить
значение функции Y
по формуле

для
заданных переменных a,
x,
b
(a
= 1.5, x
= 2, b
= 5).

Program
Primer4;

Var
x,b:integer;

a,Y:real;

BEGIN

Writeln(’ВВЕДИТЕ
a,b,x’);

Readln(a,b,x);

Y:=Sin(a*a)+4*a*x*x*x+Abs(a-b);

Writeln(’Y=’,Y:8:4);

END.

Рисунок
4 –
Схема
алгоритма линейной структуры
Примера 4

После
запуска программы на выполнение вводим
численные значения исходных данных a,
b,
x
с клавиатуры, разделяя числа пробелами.
Результат выполнения программы
представлен на рисунке 5.

Рисунок
5 – Результат
выполнения Примера 5

2. Индивидуальные задания

  1. Составить
    схемы алгоритмов решения задач (используя
    графический способ описания алгоритма).
    Записать пояснения к схемам алгоритмов.

  2. Составить
    программы на языке Turbo
    Pascal.

  3. Проверить
    выполнение составленных программ на
    конкретном примере, приняв упрощенные
    значения исходных данных по своему
    усмотрению.

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

При составлении
схем алгоритма:

  • четко определите
    для себя, что является исходными данными
    и в каком виде должен получиться
    результат решения задачи;

  • попытайтесь
    словесно сформулировать действия,
    которые на ваш взгляд необходимо
    выполнить для получения результата
    решения задачи, а потом запишите
    последовательность действий с помощью
    блоков в виде схемы алгоритма.

Вариант
1

  1. Составить
    схему алгоритма и программу для
    вычисления выражения

Убедиться,
что при заданных численных значениях
исходных данных x=
4.2,
y
= 3.1, z
=
6 результат вычисления D
= 3.837.

2.
Для уборки зерна используется D
комбайнов производительностью R
га/час.
Определить, какую площадь S
(га)

уберут комбайны за 16 часов.

Вариант
2

  1. Составить
    схему алгоритма и программу для
    вычисления выражения

Убедиться,
что при заданных численных значениях
исходных данных x=
1.5,
y
= 4.7, z
=
0.3 результат вычисления V
= 0.3542.

2.
Прямоугольный участок со стороной B
м
и длиной X
м
надо
огородить сеткой. Определить, сколько
метров сетки для этого потребуется,
если на участке имеется калитка шириной
C
м.

Вариант 3

1.
Составить схему алгоритма и программу
для вычисления выражения

Убедиться,
что при заданных численных значениях
исходных данных x=
0.3,
y
= 9, z
=
2.2 результат вычисления Q
= 3.7341.

2.
Ферма содержит в хозяйстве M
коров и N
телят. Суточное потребление сена коровой
составляет A
кг, теленка – в 2 раза меньше. Определить,
сколько килограммов сена необходимо
для коров и телят на 30 дней.

Вариант 4

1.
Составить схему алгоритма и программу
для вычисления выражения

Убедиться,
что при заданных численных значениях
исходных данных x=
0.5,
y
= 1.8, z
=
4 результат вычисления W
= 9.0105.

2.
Лесное
озеро имеет форму круга. Лесник обходит
периметр озера со средней скоростью X
км/ч за T
часов. Определить площадь озера.

Вариант 5

1.
Составить схему алгоритма и программу
для вычисления выражения

Убедиться,
что при заданных численных значениях
исходных данных x=
8.4,
y
= 9, z
=
12 результат вычисления P
= 6.8121.

2.
За один день грузовой автомобиль
проезжает по городу N
км, а по трассе – Z
км. Средний расход топлива по городу
составляет 22 литра на 100 км, по трассе –
18 литров на 100 км. Определить, сколько
топлива расходует грузовой автомобиль
за рабочую неделю.

Вариант 6

1.
Составить схему алгоритма и программу
для вычисления выражения

Убедиться,
что при заданных численных значениях
исходных данных x= 6,
y
= 5.5, z
=
2 результат вычисления S
= -2.0175.

2.
Ячменем засеяна площадь S
га. Урожайность этой культуры составляет
N
ц/га. Для доставки зерна на элеватор
используются автомобили грузоподъемностью
M
тонн. Определить, сколько автомобилей
требуется для доставки на элеватор
всего ячменя. 1
т = 10 ц.

Вариант 7

1.
Составить схему алгоритма и программу
для вычисления выражения

Убедиться,
что при заданных численных значениях
исходных данных x=
6.3,
y
= 4, z
=
0.25 результат вычисления H
= -0.5817.

2.
Автохозяйство имеет M
грузовых автомобилей. Плановый пробег
за месяц эксплуатации одного автомобиля
составляет L
км. Норма расхода дизтоплива для грузового
автомобиля составляет 22 литра на 100 км.
Определить годовую потребность P
автохозяйства
в топливе в литрах.

Вариант
8

1.
Составить схему алгоритма и программу
для вычисления выражения

Убедиться,
что при заданных численных значениях
исходных данных x=
2.1,
y
= 4.6, z
=
3.7 результат вычисления R
= 1.3462.

2.
Для уборки зерна используется R
комбайнов производительностью W
га/час. Продолжительность рабочего дня
комбайнов составляет K
часов.
Определить, какую площадь S
га уберут комбайны за 5 дней.

Вариант
9

1.
Составить схему алгоритма и программу
для вычисления выражения

Убедиться,
что при заданных численных значениях
исходных данных x=
0.6,
y
= -3.2, z
=
4 результат вычисления F
= -0.3484.

2.
Садовый участок имеет форму прямоугольника,
ширина которого A
м, длина – B
м. Участок по периметру огорожен забором,
высота которого 1,8 м. Определить, сколько
килограммов краски потребуется для
окрашивания забора. Расход краски
составляет
P
грамм
на 1 м2.

Вариант
10

1.
Составить схему алгоритма и программу
для вычисления выражения

Убедиться,
что при заданных численных значениях
исходных данных x= 12,
y
= 6, z
=
0.37 результат вычисления D
= -1.2917.

2.
Поле имеет форму квадрат со стороной C
м. На ручной уборке картофеля задействована
группа из 25 студентов. Скорость уборки
картофеля одним студентом составляет
R
м2
за 1 час. Определить, сколько дней D
необходимо запланировать на уборку
поля, если продолжительность рабочего
дня составляет 8 часов.

Вариант
11

1.
Составить схему алгоритма и программу
для вычисления выражения

Убедиться,
что при заданных численных значениях
исходных данных x=
0.2,
y
= 4.1, z
=
6.7 результат вычисления C
= 8.089.

2.
На молочно-товарной ферме 200 коров. Удой
каждой коровы составляет Z
литров в сутки. При охлаждении молока
на каждый литр расходуется 6 литров
холодной воды. Определить, сколько
литров L
воды
будет израсходовано за месяц.

Вариант
1
2

1.
Составить схему алгоритма и программу
для вычисления выражения

Убедиться,
что при заданных численных значениях
исходных данных x=
0.5, y
= 1.8, z
=
2 результат вычисления T
= 0.3496.

2.
Комнату, ширина которой составляет A
м, длина – L
м,
необходимо отклеить обоями. Высота
потолков в комнате – В
м.
Определить, сколько потребуется трубок
обоев. Длина трубки обоев – 10,5
м,
ширина трубки – X
см.

Вариант
13

1.
Составить схему алгоритма и программу
для вычисления выражения

Убедиться,
что при заданных численных значениях
исходных данных x=
0.2, y
= 1.7, z
=
4 результат вычисления U
= -0.6832.

2.
Участок имеет форму прямоугольника.
Ширина участка составляет R
метров, площадь участка – S
м2.
Определить, сколько потребуется пролетов
забора для ограждения участка, если
длина одного пролета составляет 3 метра.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

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

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

Алгоритмы в зависимости от цели, начальных условий задачи, путей ее решения, определения действий исполнителя подразделяются следующим образом:

Линейный алгоритм — набор команд (указаний), выполняемых последовательно друг за другом.

Основным элементарным действием в линейных алгоритмах является присваивание значения переменной величине. Если значение константы определено видом ее записи, то переменная величина получает конкретное значение только в результате присваивания. Присваивание может осуществляться двумя способами: с помощью команды присваивания и с помощью команды ввода.

Рассмотрим пример. В школьном учебнике математики правила деления обыкновенных дробей описаны так:

  1. Числитель первой дроби умножить на знаменатель второй дроби.
  2. Знаменатель первой дроби умножить на числитель второй дроби.
  3. Записать дробь, числитель которой есть результат выполнения пункта 1, а знаменатель — результат выполнения пункта 2.

В алгебраической форме это выглядит следующим образом:

Построим алгоритм деления дробей для ЭВМ. В этом алгоритме сохраним те же обозначения для переменных, которые использованы в записанной выше формуле. Исходными данными являются целочисленные переменные а, Ь, с, d. Результатом — также целые величины m и n. Блок-схема и текст алгоритма на языке программирования (ЯП) Kotlin приведены ниже.

namespace oap
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Enter a, b, c, d: ");
            var a = int.Parse(Console.ReadLine());
            var b = int.Parse(Console.ReadLine());
            var c = int.Parse(Console.ReadLine());
            var d = int.Parse(Console.ReadLine());
            var m = a * d;
            var n = b * c;
            Console.WriteLine($"m={m}, n={n}");
        }
    }
}

Формат команды присваивания следующий:

Знак «=» нужно читать как «присвоить».

Команда присваивания обозначает следующие действия, выполняемые компьютером:

  1. Вычисляется выражение.
  2. Полученное значение присваивается переменной.

В приведенном выше алгоритме присутствуют две команды присваивания. В блок-схемах команда присваивания записывается в прямоугольнике. Такой блок называется вычислительным блоком.

В описаниях алгоритмов необязательно соблюдать строгие правила в записи выражений. Их можно писать в обычной математической форме. Это еще не язык программирования со строгим синтаксисом.

В приведенном алгоритме присутствуют команды ввода:

var a = int.Parse(Console.ReadLine());
var b = int.Parse(Console.ReadLine());
var c = int.Parse(Console.ReadLine());
var d = int.Parse(Console.ReadLine());

В блок-схеме команда ввода записывается в параллелограмме — блоке ввода-вывода. При выполнении данной команды процессор прерывает работу и ожидает действий пользователя. Пользователь должен набрать на устройстве ввода (клавиатуре) значения вводимых переменных и нажать на клавишу ввода Enter. Обычно с помощью команды ввода присваиваются значения исходных данных, а команда присваивания используется для получения промежуточных и конечных величин.

Полученные компьютером результаты решения задачи должны быть сообщены пользователю. Для этих целей предназначена команда вывода:

Console.WriteLine($"m={m}, n={n}");

С помощью этой команды результаты выводятся на экран или на устройство печати на бумагу.

Поскольку присваивание является важнейшей операцией в вычислительных алгоритмах, обсудим ее более подробно.

Рассмотрим последовательное выполнение четырех команд присваивания, в которых участвуют две переменные величины a и b.

В приведенной ниже таблице напротив каждой команды присваивания указываются значения переменных, которые устанавливаются после ее выполнения.

Команда a b
a=1 1
b=a*2 1 2
a=b 2 2
b=a+b 2 4

Этот пример иллюстрирует три основных свойства команды присваивания:

  • пока переменной не присвоено значение, она остается неопределенной;
  • значение, присвоенное переменной, сохраняется в ней вплоть до выполнения следующей команды присваивания этой переменной;
  • новое значение, присваиваемое переменной, заменяет ее предыдущее значение.

Рассмотрим один очень полезный алгоритм, который приходится часто использовать при программировании. Даны две величины: Х и Y. Требуется произвести между ними обмен значениями. Например, если первоначально было Х=1, Y=2, то после обмена должно стать: Х=2, Y=1.

Хорошей моделью для решения этой задачи является следующая ситуация: имеются два стакана — один с молоком, другой с водой. Требуется произвести обмен их содержимым. Всякому ясно, что в этом случае нужен дополнительный третий пустой стакан. Последовательность действий будет следующей: 1) перелить из первого стакана в третий; 2) перелить из второго в первый;
3) перелить из третьего во второй. Цель достигнута!

По аналогии для обмена значениями двух переменных нужна третья дополнительная переменная. Назовем ее Z. Тогда задача обмена решается последовательным выполнением трех команд присваивания:

Команда X Y Z
ввод X, Y 1 2
Z = X 1 2 1
X = Y 2 2 1
Y = Z 2 1 1

Аналогия со стаканами не совсем точна в том смысле, что при переливании из одного стакана в другой первый становится пустым. В результате же присваивания (Х = Y) переменная, стоящая справа (Y), сохраняет свое значение.

Алгоритм для деления дробей имеет линейную структуру. В нем все команды выполняются в строго однозначной последовательности, каждая по одному разу. Линейный алгоритм составляется из команд присваивания, ввода, вывода и обращения к вспомогательным алгоритмам (об этом позже).

При описании алгоритмов в блок-схемах типы, как правило, не указываются (но подразумеваются). В алгоритмах для всех переменных типы указываются явно. В них используются следующие обозначения типов: Int — целый тип, Float — вещественный тип, String — символьный (литерный) тип, Boolean — логический тип. В алгоритме для деления дробей для всех переменных указан тип Int.

Разветвляющийся алгоритм — алгоритм, содержащий хотя бы одно условие, в результате проверки которого ЭВМ обеспечивает переход на один из двух возможных шагов.

Циклический алгоритм — алгоритм, предусматривающий многократное повторение одного и того же действия (одних и тех же операций) над новыми исходными данными. К циклическим алгоритмам сводится большинство методов вычислений, перебора вариантов. Цикл программы — последовательность команд (серия, тело цикла), которая может выполняться многократно (для новых исходных данных) до удовлетворения некоторому условию.

Составим алгоритм решения квадратного уравнения: ax2+bx+c=0

Задача хорошо знакома из математики. Исходными данными здесь являются коэффициенты а, b, с. Решением в общем случае будут два корня х1 и х2, которые вычисляются по формуле:

namespace oap
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Введите a, b, c: ");
            var a = int.Parse(Console.ReadLine());
            var b = int.Parse(Console.ReadLine());
            var c = int.Parse(Console.ReadLine());
            var d = b * b - 4 * a * c;
            var x1 = (-b + Math.Sqrt(d)) / (2 * a);
            var x2 = (-b - Math.Sqrt(d)) / (2 * a);
            Console.WriteLine($"x1={x1}, x2={x2}");
        }
    }
}
Введите a, b, c:
3
2
1
x1=NaN, x2=NaN

Слабость такого алгоритма видна невооруженным глазом. Он не обладает важнейшим свойством, предъявляемым к качественным алгоритмам, — универсальностью по отношению к исходным данным. Какими бы ни были значения исходных данных, алгоритм должен приводить к определенному результату и завершать работу. Результатом может быть число, но может быть и сообщение о том, что при определенных данных задача решения не имеет. Недопустимы остановки в середине алгоритма из-за невозможности выполнить какую-то операцию. Упомянутое свойство называют результативностью алгоритма (в любом случае должен быть получен какой-то результат).

Чтобы построить универсальный алгоритм, сначала требуется тщательно проанализировать математическое содержание задачи.

Решение уравнения зависит от значений коэффициентов а, b, с. Вот анализ рассмотренной выше задачи (ограничиваемся только поиском вещественных корней):

если а = 0, b = 0, с = 0, то любое х — решение уравнения;
если а = 0, b = 0, с <> О, то уравнение действительных решений не имеет;
если а = 0, b <> О, то это линейное уравнение, которое имеет одно решение х = -c/b;
если а<>0 и d=b2-4ac >= 0, то уравнение имеет два вещественных корня (формулы приведены выше);
если a<>0 и d<0, то уравнение не имеет вещественных корней.

Этот же алгоритм на Kotlin:

fun main(){
    println("Введите a, b, c:")
    val a = readLine()!!.toInt()
    val b = readLine()!!.toInt()
    val c = readLine()!!.toInt()

    var x1: Float

    if(a==0){
        if(b==0){
            if(c==0) println("любое X")
            else println("нет решений")
        } else {
            x1 = -c.toFloat()/b
            println("X=$x1")
        }
    } else {
        val d = b*b-4*a*c
        if(d<0) println("нет вещественных корней")
        else{
            x1 = (-b+sqrt(d.toFloat()))/(2*a)
            val x2 = (-b-sqrt(d.toFloat()))/(2*a)
            println("x1=$x1, x2=$x2")
        }
    }
}

В этом алгоритме многократно использована структурная команда ветвления. Общий вид команды ветвления в блок-схемах и на ЯП следующий:

if (условие) {серия1}
else {серия2}

Вначале проверяется условие (вычисляется отношение, логическое выражение). Если условие истинно, то выполняется серия 1 — последовательность команд, на которую указывает стрелка с надписью «да» (положительная ветвь). В противном случае выполняется серия 2 (отрицательная ветвь). В языке Kotlin условие записывается после служебного слова if, положительная ветвь — сразу после условия, отрицательная — после слова else.

Если на ветвях одного ветвления содержатся другие ветвления, то такой алгоритм имеет структуру вложенных ветвлений. Именно такую структуру имеет алгоритм «Корни квадратного уравнения».

Рассмотрим следующую задачу: дано целое положительное число n. Требуется вычислить n! (n-факториал). Вспомним определение факториала:

Ниже приведена блок-схема алгоритма. В нем используются три переменные целого типа: n — аргумент; i — промежуточная переменная; F — результат. Для проверки правильности алгоритма построена трассировочная таблица. В такой таблице для конкретных значений исходных данных по шагам прослеживается изменение переменных, входящих в алгоритм. Данная таблица составлена для случая п = 3.

Шаг n F i Условие
1 3
2 1
3 1
4 1<=3, да
5 1
6 2
7 2<=3, да
8 2
9 3
10 3<=3, да
11 6
12 4
13 4<=3, нет
14 вывод

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

fun main(){
    println("Введите n:")
    val n = readLine()!!.toInt()
    var F = 1
    var i = 1
    while (i<=n){
        F *= i  // F = F*i
        i++     // i = i+1
    }
    println("F=$F")
}

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

цикл с предусловием

while (условие) {
  //серия
}

Выполнение серии команд (тела цикла) повторяется, пока условие цикла истинно. Когда условие становится ложным, цикл заканчивает выполнение.

Цикл с предусловием — это основная, но не единственная форма организации циклических алгоритмов. Другим вариантом является цикл с постусловием. Вернемся к алгоритму решения квадратного уравнения. К нему можно подойти с такой позиции:

если а = 0, то это уже не квадратное уравнение и его можно не рассматривать. В таком случае будем считать, что пользователь ошибся при вводе данных, и следует предложить ему повторить ввод. Иначе говоря, в алгоритме будет предусмотрен контроль достоверности исходных данных с предоставлением пользователю возможности исправить ошибку. Наличие такого контроля — еще один признак хорошего качества программы.

решение квадратного уравнения, блок-схема

fun main(){
    var a: Int
    do {
        println("Введите a:")
        a = readLine()!!.toInt()
    } while(a!=0)

    val d = b*b-4*a*c
    if(d<0) println("нет вещественных корней")
    else{
        val x1 = (-b+sqrt(d.toFloat()))/(2*a)
        val x2 = (-b-sqrt(d.toFloat()))/(2*a)
        println("x1=$x1, x2=$x2")
    }
}

В общем виде структурная команда цикл с постусловием или цикл — до представляется так:

цикл с постусловием

do {
  //серия
} while (условие)

Здесь используется условие окончания цикла. Когда оно становится истинным, цикл заканчивает работу.

Составим алгоритм решения следующей задачи: даны два натуральных числа М и N. Требуется вычислить их наибольший общий делитель — НОД(M, N).

Эта задача решается с помощью метода, известного под названием алгоритма Евклида. Его идея основана на том свойстве, что если M>N, то НОД(М, N) = НОД(М-N,N). Другой факт, лежащий в основе алгоритма, тривиален — НОД(М, М) = М. Для «ручного» выполнения этот алгоритм можно описать в форме следующей инструкции:

  1. Если числа равны, то взять их общее значение в качестве ответа; в противном случае продолжить выполнение алгоритма
  2. Определить большее из чисел
  3. Заменить большее число разностью большего и меньшего значений
  4. Вернуться к выполнению пункта 1

блок-схема НОД

fun main(){
    println("Введите m, n: ")
    var m = readLine()!!.toInt()
    var n = readLine()!!.toInt()
    while (m!=n){
        if(m>n) m = m-n
        else n = n-m
    }
    println("НОД = $m")
}

Алгоритм имеет структуру цикла с вложенным ветвлением. Проделайте самостоятельно трассировку этого алгоритма для случая М = 18, N = 12. В результате получится НОД = 6, что, очевидно, верно.

Вспомогательные алгоритмы и процедуры

В теории алгоритмов известно понятие вспомогательного алгоритма. Вспомогательным называется алгоритм решения некоторой подзадачи из основной решаемой задачи. В таком случае алгоритм решения исходной задачи называется основным алгоритмом.

В качестве примера рассмотрим следующую задачу: требуется составить алгоритм вычисления степенной функции с целым показателем у = хк, где к — целое число, х<>0. В алгебре такая функция определена следующим образом:

Для данной задачи в качестве подзадачи можно рассматривать возведение числа в целую положительную степень.

Учитывая, что 1/х-n = (1/х)-n, запишем основной алгоритм решения этой задачи.

fun main(){
    println("Введите x, n: ")
    var x = readLine()!!.toFloat()
    var n = readLine()!!.toInt()
    var y: Float

    if(n==0) y = 1F
    else {
        if(n>0) y = stepen(x, n)
        else y = stepen(1/x, -n)
    }
   
    println("y = $y")
}

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

В котлине вспомогательные алгоритмы оформляются в виде функций. Запишем функцию stepen.

fun stepen(x: Float, n: Int): Float {
    var res = 1F
    var i = 1
    while(i<=n){
        res = res * x
        i++
    }
    return res
}

Заголовок вспомогательного алгоритма начинается с ключевого слова fun, после которого следует имя функции, в скобках — список формальных параметров и после скобок тип результата (не обязателен). В списке параметров перечисляются переменные-аргументы с указанием их типов. Здесь x и n — формальные параметры-аргументы. Следовательно, процедура stepen производит вычисления по формуле ак. В основном алгоритме «Степенная функция» обращение к процедуре производится путем указания ее имени с последующим в скобках списком фактических параметров. Между формальными и фактическими параметрами процедуры должны выполняться следующие правила соответствия:

  • по количеству (сколько формальных, столько и фактических параметров)
  • по последовательности (первому формальному соответствует первый фактический параметр, второму — второй и т.д.)
  • по типам (типы соответствующих формальных и фактических параметров должны совпадать)

Фактические параметры-аргументы могут быть выражениями соответствующего типа.

Обращение к процедуре инициирует следующие действия:

  1. Значения параметров-аргументов присваиваются соответствующим формальным параметрам.
  2. Выполняется тело процедуры (команды внутри процедуры).
  3. Значение результата возвращается командой return, и происходит переход к выполнению следующей команды основного алгоритма.

В функции stepen нет команд ввода исходных данных и вывода результатов. Здесь присваивание начальных значений аргументам (x, n) производится через передачу параметров-аргументов. А получение результата происходит командой return. Таким образом, передача значений параметров процедур — это третий способ присваивания (наряду с командой присваивания и командой ввода).

Использование процедур позволяет строить сложные алгоритмы методом последовательной детализации.

Программы для графического отображения алгоритмов

https://draw.io (онлайн)
Microsoft Visio
Dia (бесплатная)


КОНТРОЛЬНЫЕ ВОПРОСЫ

  1. Линейный алгоритм
  2. Разветвляющийся алгоритм
  3. Циклический алгоритм
  4. Вспомогательные алгоритмы и процедуры

Понравилась статья? Поделить с друзьями:
  • Как написать лик святого
  • Как написать лик на иконе пошагово
  • Как написать лик маслом
  • Как написать лизочка на английском
  • Как написать лизочка или лизачка правильно