Файл: Сравнительный анализ операторов для различных языков программирования.pdf
Добавлен: 28.03.2023
Просмотров: 82
Скачиваний: 2
- словесное описание;
- построчная запись;
- блок-схема;
- запись на языке программирования.
Рисунок 2 – Формы представления алгоритмов
Словесное описание алгоритма характеризуется минимальным количеством ограничений и представляет собой наименее формализованный вид. Однако, алгоритм, записанный в словесной форме, получается менее строгим и допускает некоторые неопределенности. Кроме того, данная форма записи может оказаться очень объемной и трудной для человеческого восприятия. В качестве примера рассмотрим нахождение наибольшего общего делителя (НОД) двух чисел. Если числа равны, то НОД равняется любому из этих чисел. В противном случае из большего числа требуется вычесть меньшее, запомнить получившуюся разность, подставить ее вместо большего числа и повторить алгоритм.
Построчная запись алгоритма представляет собой запись на естественном языке с соблюдением следующих правил:
- шаги алгоритма должны быть пронумерованы;
- реализация шагов происходит согласно их порядковым номерам, начиная с первого;
- в качестве типичных шагов алгоритма выступает чтение данных, их запись, обработка, проверка какого-либо условия, переход к шагу с определенным номером, завершение вычислений.
Приведем пример записи алгоритма вычисления НОД двух чисел в построчной записи:
- ВводA, B
- ЕслиA = B, переход к шагу 8
- Если A>B, переход к шагу 6
- B = B – A
- Переход к шагу 2
- A = A – B
- Переход к шагу 2
- НОД = А
- Вывод НОД
- Конец
Построчная запись алгоритма сокращает количество неопределенностей. Кроме того, такая запись обеспечивает отработку навыков логически строгого изложения хода решения задачи и облегчает последующее изучение алгоритмических языков программирования. Основным недостатком такой записи является сложность ее восприятия для человека.
Наиболее популярным и наглядным способом представления алгоритмов является их графическое представление в виде блок-схем. Схемы представляют собой последовательность определенных блоков, которые предписывают выполнение некоторых функций. Блоки внутри себя содержат поясняющую информацию, которая и характеризует действия алгоритма.
Схема представляет собой некоторую абстракцию процесса решения задачи, отражая при этом наиболее значимые моменты. Схемы широко применяются с древних времен до настоящего времени - чертежи египетских пирамид, карты завоеванных земель, принципиальные электрические схемы и т.п.
На территории нашей страны действует единая система программной документации (ЕСПД), сформировавшаяся в 1981 г. Данная система описывает условные графические изображения, которые применяются в алгоритмах (ГОСТ 19.003-80 «Схемы алгоритмов и программ. Обозначения условные графические»), а также набор правил, которые следуют соблюдать при записи блок-схем (ГОСТ 19.002-80 «Схемы алгоритмов и программ. Правила выполнения»).
На сегодняшний день существует целое множество программных продуктов, облегчающих построение блок-схем. К ним относятся такие программы, как MicrosoftVisio, Dia, OpenOffice.orgDrawи т.п.
Основные блоки алгоритмов, используемые в блок-схемах, приведены на рисунках 3-8. Именно о данных конструкциях пойдет речь в следующей главе.
Рисунок 3 – Блок ввода/вывода
Рисунок 4 – Вычислительный блок (блок обработки данных)
Рисунок 5 – Блок принятия решения (проверки условия)
Рисунок 6 – Блок начала/конца программы
Рисунок 7 – Блок начала цикла
Рисунок 8 – Блок конца цикла
В рамках данной главы описана история развития языков программирования, приведена их классификация, а также рассмотрено понятие алгоритма.
2. ОСНОВНЫЕ ОПЕРАТОРЫ
Дальнейшее рассмотрение операторов языков программирования высокого уровня будем вести на примере языка Паскаль. Данный выбор обусловлен простотой языка и строгим синтаксисом.
2.1 Операторы присваивания
В языке Паскаль оператор присваивания обозначается двумя символами «:=», между которыми не ставится пробел. В левой части данного оператора должна стоять переменная, а в правой части – выражение, значение которого будет присвоено переменной.
Очень часто в Паскале можно увидеть конструкцию вида p:=p+1. Данная запись не содержит ошибки. Внутри компьютера данный оператор выполняется следующим образом: сначала берется исходное значение переменной, к которому прибавляется единица. После этих действий результат вычислений помещается в переменную p. Таким образом в языке Паскаль реализуется инкремент переменной.
Очень важно следить, чтобы все переменные, которые участвуют в правой части оператора присваивания, были определены к моменту его исполнения. В качестве правых частей для вычисления численных переменных операторы присваивания используют арифметические выражения, состоящие из переменных, констант, знаков операций, скобок и вызовов функций. В общем случае правила построения выражений аналогичны математической записи. Бинарные операции, применимые к целочисленным данным приведены в таблице 1 [19].
Для примера реализации операции присваивания рассмотрим задачу вычисления гипотенузы треугольника по двум известным катетам. Согласно теореме Пифагора, гипотенуза будет рассчитываться по формуле:
(1)
Таблица 1 – Бинарные арифметические операции над типом integer
Операция |
Обозначение |
Пример |
Сложение |
+ |
p + 2 |
Вычитание |
- |
p– 2 |
Умножение |
* |
p * 2 |
Деление нацело |
div |
p div 2 |
Остаток от деления |
mod |
p mod 2 |
Исходный код программы:
Program Op_prisv;
var
a,b,c:real;
begin
a:=3;
b:=4;
c:=sqrt(a*a+b*b);
end.
В данной программе использованы только операторы присваивания. При этом в двух случаях переменным просто присваивается начальное значение – это катеты треугольника. А в третьем случае происходит вычисление выражения, определяющего корень из суммы квадратов катетов.
В результате выполнения данного кода программа вычислит значение гипотенузы треугольника со сторонамиa, b, и занесет это значение в переменную c.
2.2 Операторы ввода-вывода
Ввод и вывод необходимы для связи программы с внешним миром – таким образом можно получать входные данные от пользователя и выводить полученные результаты на экран. Очевидно, программа без вывода не имеет смысла. В предыдущем примере было рассмотрено вычисление гипотенузы прямоугольного треугольника, однако, без использования оператора вывода нельзя узнать результат, полученный при исполнении программы.
В языке Паскаль операторы ввода-вывода правильнее называть процедурами. Они служат для обмена данными между программой и внешними устройствами. Так, например, можно ввести данные с клавиатуры, из файла, вывести данные на экран или в файл.
Для ввода с клавиатуры в языке Паскаль существует два оператора: Readи Readln. Для вывода на экран – Writeи Writeln. Дополнение «ln» произошло от английского слова «line» - строка, линия. Операторы, заканчивающиеся на «ln» в результате своих действий переводят курсор на новую строку. Так, например, при работе оператора Write курсор останется на следующей позиции после последнего выведенного символа. А в случае оператора Read очередные данные будут считываться из той же строки, где стоит курсор.
Традиционная запись данных операторов содержит параметры, однако, их может и не быть. В таком случае оператор Writeln будет реализовывать просто переход на новую строку, а оператор Readlnбудет ждать ввода любой клавиши.
Кроме стандартного вывода данных в языке Паскаль предусмотрен и форматированный вывод, который существует для того, чтобы сделать отображение на экране более понятным. Форматированный вывод содержит количество позиций, которые при выводе необходимо отвести под значение переменной [5].
В качестве примера использования операторов ввода-вывода модифицируем задачу определения гипотенузы прямоугольного треугольника следующим образом:
Program Op_vvod_vyvod;
uses crt;
var
a,b,c:real;
begin
write('Катет a = ');
readln(a);
write('Катет b = ');
readln(b);
c:=sqrt(a*a+b*b);
writeln('Гипотенуза = ',c:3:2);
writeln('Для завершения нажмите любую клавишу...');
readln();
end.
В данной программе используются операторы ввода исходных данных – катетов прямоугольного треугольника. Для вывода результата на экран используется форматированный вывод. Результаты работы программы приведены на рисунке 9.
Рисунок 9 – Пример работы с операторами ввода-вывода
Кроме того, в программе используется оператор Readln без параметров, который подтверждает завершение программы. Так, после нажатия любой клавиши программа выдаст сообщение о том, что ее работа завершена (см. рисунок 10).
Рисунок 10 – Пример работы оператора ввода без параметров
В языке Паскаль существует два вида операторов перехода – условный и безусловный.
Оператор безусловного перехода вызывает передачу управления оператору, которому предшествует соответствующая метка. Важно отметить, что данный подход не рекомендуется к использованию [16].
Рассмотрим пример программы с использованием оператора безусловного перехода:
ProgramOp_goto;
usescrt;
labelm1;
var
a: integer;
begin
a:=5;
goto m1;
a:=a*10;
m1: writeln('a = ', a);
end.
Рассмотрим последовательность действий данной программы. В первую очередь переменной а присваивается значение 5. Затем в программе встречается оператор безусловного перехода, который посылает компьютеру сигналу о том, что следующий оператор, подлежащий исполнению, помечен меткой m1. Следовательно, дальнейшие действия программы – вывод результата на экран, а не умножение значения переменной на 10. Важно отметить, что оператор a:=a*10 в данной программе не исполнится никогда.
Результат исполнения данного кода приведен на рисунке 11.
Рисунок 11 – Пример работы с оператором безусловного перехода
Другой вид оператора перехода – условный переход. Данный оператор служит для выбора одной из двух альтернативных ветвей алгоритма в зависимости от значения некоторого условия [20].
Условия в таких операторах представляют собой некоторые логические выражения, которые могут быть истинны, либо ложны. Выражения при этом могут быть простыми и сложными. Простое выражение включает в себя два операнда и операцию сравнения. Сложные представляют собой последовательность простых условий, которые объединены друг с другом знаками логических операций (больше, меньше, равно и т.п.). В языке Паскаль существует четыре логических операции:
- логическое сложение – or;
- логическое умножение – and;
- отрицание – not;
- исключающее «ИЛИ» - xor.
В языке Паскаль существуют условные операторы с одной и двумя ветвями. Если в условном операторе прописаны две ветви, такой оператор называется полным (см. рисунок 12), в противном случае – неполным (см. рисунок 13) [10].
Рисунок 13 – Полное ветвление
Рисунок 14 – Неполное ветвление
В качестве примера программы, использующей операторы ветвления, рассмотрим следующий код:
Program Op_perehod;
uses crt;
var
a,b,c: integer;
begin
write('Введите стороны треугольника: ');
read(a,b,c);
if (a>=(b+c)) or (b>=(a+c)) or (c>=(a+b))
then writeln ('Такого треугольника не существует!')
else
begin
if (a<b) and (a<c) then writeln ('Минимальнаясторонаа = ',a)
else if (b<a) and (b<c) then writeln ('Минимальнаясторона b = ',b)
else writeln ('Минимальная сторона с = ',c);
if ((a+b+c)>50) then writeln('Периметрбольше 50');
end;
end.
В данной программе реализован запрос ввода данных сторон треугольника. Далее, происходит проверка введенных данных – существует ли треугольник с такими сторонами. В том случае, если он не существует, пользователь получает соответствующее сообщение (см. рисунок 15), иначе – программа определяет минимальную сторону и выводит ее на экран.