Файл: Обзор языков программирования высокого уровня).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 25.05.2023

Просмотров: 193

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

С++ – Универсал, эволюционное развитие языка C. Предоставляет возможности функционального и объектно-ориентированного программирования и не потеряв при этом способность низкоуровневого взаимодействия с аппаратным обеспечением. За счёт чего реализуется производительность и гибкость при создании ПО, но и цена соответствует: высокий порог вхождения за счёт сложной спецификации языка, необходимости самостоятельного контроля за ресурсами при выполнении программы. Многие однопользовательское и системное ПО написано с его применением: модули операционных систем (Windows, Symbian…), игры, редакторы (Adobe Photoshop, Autodesk Maya…), базы данных (MSSQL, Oracle…), проигрыватели (WinAmp…) и т. д.

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

ГЛАВА 2. ОСНОВНЫЕ ОПЕРАТОРЫ

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

2.1 Операторы присваивания

В языке Паскаль оператор присваивания обозначается двумя символами «:=», между которыми не ставится пробел. В левой части данного оператора должна стоять переменная, а в правой части – выражение, значение которого будет присвоено переменной.

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

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


Для примера реализации операции присваивания рассмотрим задачу вычисления гипотенузы треугольника по двум известным катетам. Согласно теореме Пифагора, гипотенуза будет рассчитываться по формуле:

(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будет ждать ввода любой клавиши.

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

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

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.

Рисунок 1 – Пример работы с операторами ввода-вывода

Кроме того, в программе используется оператор Readln без параметров, который подтверждает завершение программы. Так, после нажатия любой клавиши программа выдаст сообщение о том, что ее работа завершена (см. рисунок 10).

Рисунок 2 – Пример работы оператора ввода без параметров

2.3 Операторы перехода

В языке Паскаль существует два вида операторов перехода – условный и безусловный.

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

Рассмотрим пример программы с использованием оператора безусловного перехода:

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 в данной программе не исполнится никогда.


Результат исполнения данного кода приведен на рисунке 3.

Рисунок 3 – Пример работы с оператором безусловного перехода

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

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

  • логическое сложение – or;
  • логическое умножение – and;
  • отрицание – not;
  • исключающее «ИЛИ» - xor.

В языке Паскаль существуют условные операторы с одной и двумя ветвями. Если в условном операторе прописаны две ветви, такой оператор называется полным (см. рисунок 4), в противном случае – неполным (см. рисунок 4).

Рисунок 4 – Полное ветвление

Рисунок 5 – Неполное ветвление

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

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), иначе – программа определяет минимальную сторону и выводит ее на экран.

Для примера использования неполного ветвления реализована проверка периметра треугольника. Так, если он больше 50, программа выдаст соответствующее сообщение, в противном случае просто завершит свою работу.


Рисунок 6 – Пример работы оператора полного ветвления

Рисунок 7 – Пример работы оператора неполного ветвления

2.4 Операторы выбора

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

  • использовать вложенные условия;
  • использовать оператор выбора.

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

Case<ключ>of

C_1: <операторы_1>;

C_2: <операторы_2>;

C_N: <операторы_N>;

else<операторы 0>

end;

В данной записи ключом называется выражение порядкового типа, в зависимости от значения которого и принимается решение. Значениями C_1, C_2, …, C_N обозначены константы - возможные варианты значения ключа, которые необходимо рассмотреть при вычислениях. Данным значениям соответствуют блоки операторов, которые исполняются, если значение ключа совпадает со значением C. Если же значение ключа не совпало ни с одной из указанных констант, выполнится блок <операторы_0>. Важно отметить, что этот блок может отсутствовать .

В качестве примера использования оператора выбора рассмотрим задачу определения времени года по введенному месяцу:

Program Op_vybor;

uses crt;

var

m: integer;

begin

write('Введите номер месяца: ');

readln(m);

case m of

1,2,12: writeln('Время года - зима');

3,4,5: writeln('Время года - весна');

6,7,8: writeln('Время года - лето');

9,10,11: writeln('Время года - осень');

elsewriteln('Такого месяца не существует!');

end;

end.

В данной программе реализован оператор выбора, который в качестве констант использует сразу несколько значений, операторы для которых идентичны. Данный подход является очень удобным и позволяет сократить число ветвей программы с 13 до 5. Результат выполнения приведенного кода представлен на рисунке 8.

Рисунок 8 – Пример работы с оператором выбора

2.5 Операторы цикла

Циклическим называется такой алгоритм, в котором задана некоторая последовательность действий для многократного исполнения. Эта последовательность действий называется телом цикла. Заметим, что тело цикла указано в алгоритме один раз, но исполняться оно может многократно. Однократное исполнение тела цикла называется итерацией. В языках программирования высокого уровня, как правило, используют три вида циклов: