Программирование линейных Алгоритмов
Итак, мы уже знакомы с некоторыми основными (базовыми) понятиями языка Паскаль. Теперь можно приступать к непосредственному изучению программирования на этом языке тех типов алгоритмов, о которых говорилось ранее.
Вспомним, что программа — это упорядоченный список команд на некотором конкретном языке программирования. Запрограммировать некоторый алгоритм означает написать программу, реализующую этот алгоритм. Попробуем для начала программировать алгоритмы линейной структуры.
Напомню, что линейным называется алгоритм, в котором все этапы решения задачи выполняются строго последовательно, т.е. линейный алгоритм выполняется в естественном порядке его написания и не содержит разветвлений и повторений.
Для реализации алгоритмов линейной структуры используются операторы:
+ Оператор (процедура) вывода — Write ( ); или Writln ( ) + Оператор (процедура) ввода — Read ( ); или Readln ( ) + Оператор присваивания —: =
Рассмотрим эти операторы подробнее.
Оператор присваивания. В результате присваивания переменная получает конкретное значение.
Процедуры вывода. Процедура WRITE предназначена для вывода на экран монитора сообщений и значения выражений или переменных.
Для того, чтобы вывести сообщение, нужно заключить его в апострофы (буква Э) в этом случае то, что заключено в апострофы, при работе вашей программы появится на экране монитора без изменений.
write(‘IIpHBeT’);
После выполнения этой строки программы на экране появится надпись:
Если вы хотите вывести на экран результат некоторых ваших вычислений, т.е. не сообщение, а значение, хранимое в некоторой переменной, то апострофы не ставятся.
Например: пусть в некоторой переменной Dok в результате вычислений хранится целое значение = 55, которое вы хотите вывести на экран. Тогда достаточно записать в программе следующую строку:
После выполнения этой процедуры на экране появится:
Если же, например, надо вывести некоторое вещественное значение, то можно использовать форматы вывода.
Например: пусть в некоторой переменной D в результате вычислений хранится значение — 12, 4567, которое вы хотите вывести на экран. Тогда запишем оператор:
Здесь использован формат вывода, где первая цифра означает общее количество знаков в выводимом числовом значении, а вторая цифра — количество знаков после запятой. В результате выполнения этой процедуры на экране появится:
Т.е. последние две цифры не пропечатаются, так как в формате мы указали только две цифры после запятой. Чтобы пропечатать число полностью надо видоизменить оператор:
Тогда после выполнения этой процедуры на экране появится:
12, 4567! Значение переменных перечисляемого типа нельзя
вывести с помощью процедуры write.
Рассмотрим еще один пример. Пусть в переменной kol хранится количество книг в некоторой библиотеке. Например =10675. Выведем это значение на экран, но с пояснением для пользователя вашей программы, т.е. на экране должно появиться:
Всего книг — 10675
Этого можно добиться следующей последовательностью операторов:
Write(‘Bcero книг — ‘);
А можно записать все в одном, разделив параметры в скобках запятой:
Write(‘Bcero книг — ‘, kol);
Результат будет один и тот же.
Процедура Writeln выводит информацию строкой. После того как была выведена информация, записанная в скобках после имени процедуры, курсор переместится на другую строку.
Процедуры ввода. Для ввода данных используют процедуры read, readln.
Процедура read считывает данные, вводимые с клавиатуры, а процедура readln считывает данные и символ
конца строки. Т.е. как и в случае с процедурой вывода, частица In (line) в конце означает, что после выполнений процедуры ввода курсор будет переведен на следующую строку.
Составить программу, которая находит площадь прямоугольника произвольных размеров. Решение: Program Wip; Var Dlina, Shirina, S: real; Begin
Writeln(‘B8eflHTe длину прямоугольника’);
У\/гКе1п(‘Введите ширину прямоугольника’);
\Л/гНе1п(‘Площадь прямоугольника с шириной ‘
, Shirina: 8: 2, ‘H длиной «, Dlina: 8: 2, ‘paBHa’, S: 8: 2);
Кстати, приведенная выше программа реализует алгоритм линейной структуры (алгоритм вычисления площади прямоугольника).
Рассмотрим еще примеры реализации алгоритмов линейной структуры.
Алгоритм Квадрат_числа; Переменные X, Y: вещественные числа; Начало Ввод (X); Y: =X*X; Вывод(У); Конец.
Запишем программу на языке Паскаль, реализующую данный алгоритм; для вычисления квадрата числа здесь используется стандартная арифметическая функция языка Паскаль — sqr( ):
Обратите внимание на использование здесь операторов ввода\вывода.
Во-первых, в начале программы (строки № 4, 5) оператору ввода значения в переменную х (Readln (x); ) предшествует оператор вывода на экран приглашающего сообщения (Write (‘Введите х -> ‘); ). В результате работы этого оператора вывода во время исполнения программы перед пользователем на экране появится сообщение:
Мигающий курсор после сообщения показывает, что машина готова «узнать» ответ пользователя. В месте этого курсора пользователь сможет набрать с клавиатуры число, квадрат которого он хочет рассчитать.
После того как число набрано и будет нажата клавиша Enter, управление перейдет к следующему оператору
(Readln (x); ), который прочитает введенное пользователем сообщение и запишет его в переменную х.
Такой способ общения программы с пользователем часто называют режимом диалога, подразумевая здесь диалог машины (программы) и человека (пользователя).
А операторы ввода\вывода используются в том числе для организации такого режима диалога.
Во-вторых, при выводе результата расчета в операторе вывода (Writeln) через запятую перечислено два параметра: (‘у = ‘, у), первый из которых стоит в апострофах (‘у =’), а второй — без них (у). В чем разница? То, что в параметрах оператора вывода стоит в апострофах, выводится на экран без каких-либо изменений. По сути, это просто строка некоторого сообщения. А второй параметр оператора вывода (без апострофов) выдаст на экран не саму букву у, а значение (в данном случае численное), хранящееся в переменной под именем у. Т.е. на экране появится строка вида:
Кроме того, напомню, что частичка In в конце оператора ввода\вывода означает, что после выполнения заданного оператором действия курсор будет переведен на следующую (пока пустую) строку экрана.
С учетом всего вышесказанного во время работы программы перед пользователем на экране сформируется следующая последовательность записей (например):
Введите х -> 2
Эта последовательность строк называется протоколом работы программы.
Рассмотрим еще один пример. В предыдущих лекциях нами был рассмотрен очень полезный линейный алгоритм. Вспомним его и запишем программную реализацию на языке Паскаль.
Даны переменные А и В. Требуется обменять их значения, т.е. переменная А должна получить значение В, а В — значение А.
1. Исходные данные: А, В. Вспомогательная переменная DOP. Результат: А, В.
2. Метод решения задачи. В ЭВМ каждая величина хранится в отдельном участке памяти (переменной). Поэтому задача заключается в том, чтобы поменять местами содержимое двух ячеек. Решение задачи распадается на три этапа. Запись этого алгоритма с помощью псевдокода:
Алгоритм Перемещение; Переменные А, В, Оор: целые числа; Начало
Вывод(А, В); Конец.
Программная реализация будет иметь вид: Program OBMEN; Var a, b, dop: integer; Begin
Write (‘Введите а -> ‘);
Write (‘Введите b -> ‘);
Writeln (‘a = ‘, а);
Writeln (‘b = ‘, b); End.
В фигурных скобках здесь записаны комментарии к участкам программы, идущим ниже. Комментарии — это некоторые пояснения к программе, которые не являются исполняемыми операторами (т.е. при работе программы не отрабатывают как операторы и, более того, не компилиру-
ются компилятором языка в исполняемый код), а лишь помогают программисту разобраться в самой программе.
Комментарии удобно применять при разработке больших программ или программных продуктов, а так же при работе в группе программистов.
Попробуйте самостоятельно разобраться в этой программе, для чего ответьте на следующие вопросы:
1. Найдите операторы программы, отвечающие за реализацию режима диалога.
2. Что будет выводиться на экран пользователю после выполнения оператора Writeln (‘а = ‘, а); ?
3. В какой части программы происходит собственно реализация алгоритма обмена с помощью дополнительной переменной?
По возможности наберите программу в среде Турбо Паскаль и протестируйте ее исполнение. Протокол работы программы перепишите с экрана в тетрадь.
Попробуем обобщить все вышесказанное.
1. Составной оператор — это последовательность
произвольных операторов программы, заключенная в опе
раторные скобки — зарезервированные слова Begin. .. end.
2. Символ «; » называется пустым оператором и озна
чает окончание предшествующего ему оператора.
3. Для реализации алгоритмов линейной структуры
используются операторы:
+ Оператор (процедура) вывода — Write (); или Writln () + Оператор (процедура) ввода — Read (); или Readln () + Оператор присваивания —: =
Контрольные вопросы______________________
1. Составной оператор — это.
а) последовательность команд, необходимых для реше
ния некоторой задачи;
б) последовательность операторных скобок Begin. .. end;
в) последовательность произвольных операторов про
граммы, заключенная в операторные скобки — зарезер
вированные слова Begin. .. end.
Укажите правильный вариант ответа.
2. Для реализации алгоритмов линейной структуры
используются операторы:
Один из пунктов здесь лишний. Укажите, какой именно.
3. В результате присваивания переменная получает
конкретное значение.
Верно ли данное высказывание?
4. Процедура WRITE предназначена для.
а) вывода на экран монитора сообщений и значения
выражений или переменных;
б) ввода данных значения выражений или переменных.
Укажите правильный вариант ответа.
5. Процедура READ предназначена для.
а) вывода на экран монитора сообщений и значения
выражений или переменных;
б) ввода данных значения выражений или переменных.
Укажите правильный вариант ответа.
6. Какой из нижеперечисленных операторов выведет
на экран сообщение следующего вида: «write(‘Bec одной
пачки = ‘, v: 7: 2); », если переменной V р, о этого было при
своено значение 12, 5674?
а) вес одной пачки = 12, 5674; б)12, 5674;
г) вес одной пачки = 12, 5.
Укажите правильный вариант ответа.
Составить и протестировать на машине программы для решения следующих задач.
1. Построили N домов (пятиэтажных и девятиэтажных), из них Y домов — пятиэтажные. Сколько девятиэтажных домов построили?
2. Даны величины переменных А, В, С, D. Требуется переместить значение переменных следующим образом: в переменную В поместить значение из А, в А — значение из D, в D — значение из С, переменной С присвоить значение суммы А и D.
Программирование линейных алгоритмов
Понятие линейного алгоритма. Примеры написания программ.
- Описание переменных: a,b,c,d,sum – целое, mult – длинное целое.
- Ввод значений переменных a и b, вычисление их суммы и присвоение полученного значения переменной sum, вывод значения sum на экран.
- Ввод значений переменных c и d, вычисление их произведения и присвоение полученного значения переменной mult, вывод значения mult на экран.
Программирование с помощью операторов условного и безусловного перехода
Условный оператор If
Условный оператор обеспечивает выполнение или невыполнение некоторого оператора, группу операторов – в зависимости от заданных условий. Структура условного оператора имеет следующий вид: Ifthenelse; Ifthen; где If,then,else– зарезервированные слова (если, то, иначе); – произвольное выражение логического типа. Оно может быть простым или сложным. Сложные условия образуются с помощью логических операций AND,OR,XOR,NOT. При записи условий могут использоваться все возможные операции отношения; – простой или составной оператор. Составной оператор представляет собой группу из произвольного числа операторов, отделенных друг от друга точкой с запятой, ограниченную операторными скобками – зарезервированные словаBeginиEnd. Формат: Begin; < оператор 2>; . End. На рис.5.1 представлены блок-схемы разветвляющегося алгоритма с использованием условного оператора If. Рис. 5.1 Блок-схема разветвляющегося алгоритма с использованием оператора условного перехода. Примеры использования оператора If. Простое условие. If x> Max then Y:= Max else Y:=x; Переменная Yполучит значение переменнойX, если только это значение не превышаетMax, в противном случаеYстанет равноmax. If x> Max then Max:=X; Y:=x; Переменная Yвсегда будет иметь значение переменнойX, а вMaxзапоминается максимальное значениеX. Примечание. После оператора,стоящего перед зарезервированным словомELSE,символ точка с запятой» (;) не ставится. С использованием сложного условия: If (n>=0) and (n<=15) then Begin WriteLn('значение n лежит в диапазоне 0..15') Else WriteLn ('значение n меньше 0 или больше 15').