
- •1. Основы работы на компьютере
- •1.1. Операционная система ms dos
- •Работа с каталогами
- •Работа с файлами
- •1.2. Программа-оболочка norton commander
- •Работа с каталогами
- •Работа с файлами
- •Управляющее меню программы
- •2. Основы алгоритмизации
- •Основы программирования на turbo pascal
- •Типы данных
- •Программирование разветвляющихся процессов
- •Программирование циклических процессов
- •Работа со сложными типами данных
- •4.1. Массивы
- •4.2. Строки типа string
- •4.3. Множества
- •4.4. Комбинированный тип данных – записи
- •Тема 1. Операционная система ms dos
- •Варианты задания
- •Тема 2. Программы-оболочки
- •Пример выполнения задания
- •Варианты задания
- •Тема 3. Основы алгоритмизации
- •Пример выполнения задания
- •Варианты задания
- •Тема 4. Программирование линейных и разветвляющихся процессов Пример выполнения задания
- •Варианты задания
- •Пример выполнения задания
- •Варианты задания
- •Тема 6. Работа с массивами Пример выполнения задания
- •Варианты задания
- •Тема 7. Записи Пример выполнения задания
- •Варианты задания
- •Библиографический список
- •Приложения
- •Основная таблица кода ascii
- •Альтернативная таблица (коды со 128 по 255)
- •Оглавление
- •1. Основы работы на компьютере ……………………………………….……. 1
- •1.1. Операционная система ms dos ………………………………………… 1
Программирование разветвляющихся процессов
Реализация действий в программе в соответствии с некоторым условием предполагает использование объектов еще одного стандартного типа данных - логического типа. Логический или булевский тип (по имени создателя формальной логики ирландского математика 19 века Д. Буля) описывается служебным словом boolean и характеризуется двумя значениями - false (ложь) и true (истина). Указанные значения получаются в результате применения операций отношения (сравнения). В языке имеются также стандартные логические операции, которые позволяют вместе с операциями отношения строить сложные логические выражения. Логические операции представлены ниже в таблице в порядке убывания их приоритета: отрицание (НЕ - not), конъюнкция (И - and), дизъюнкция (ИЛИ - or) и исключающее ИЛИ - xor. При составлении сложных логических выражений с участием логических операций следует использовать круглые скобки: (x>=0) and (y<=0). Turbo Pascal 7.0 для совместимости с другими языками и с Windows использует также логические типы Bytebool, Wordbool, Longbool, под значения которых отводятся соответственно 1, 2 и 4 байта памяти.
Таблица истинности операций Not, And, Or и Xor
X |
Y |
not X |
X and Y |
X or Y |
X xor Y |
False |
false |
true |
false |
false |
false |
False |
true |
true |
false |
true |
true |
True |
false |
false |
false |
true |
true |
True |
true |
false |
true |
true |
false |
Логические операции можно применять также к объектам целого типа. В этом случае операции носят поразрядный характер. Например, применение логических операций «И» и «ИЛИ» к одному и тому же числу 33 дает следующие результаты: 33 and 1 = 1, 33 or 1 = 33.
К
поразрядным операциям с целыми числами
относятся также сдвиговые операции Shl
и Shr:
<Число>
shl
k
и <Число>
Shr
k
. Операции производят арифметический
сдвиг двоичных разрядов числа
соответственно на k
разрядов влево и вправо, что равносильно
умножению и делению числа на
.
Например, 72 shr
3 = 72 div
= 9, 7 shl
3 = 7
= 56.
С помощью стандартной функции Odd(n) можно установить нечетность числа n. Если n - нечетное число, то функция возвращает значение true.
Значения булевского типа нельзя вводить с клавиатуры, используя для этого операторы стандартных процедур ввода read и readln, но они могут быть выведены на экран процедурами write или writeln.
В состав логических выражений могут входить объекты еще одного стандартного типа данных - символьного. Этот тип описывается служебным словом Char. Ниже приведен пример описания переменных символьного и булевского типов.
var c1,cs : char; q, p : boolean;
Простой тип char включает в себя полный набор символов американского стандартного кода для обмена информацией - American Standard Code for Information Interchange (ASCII). В таблице под определенными номерами расположены 256 символов. Каждый из них представлен в двоичном коде в памяти компьютера и занимает 1 байт. Первые 128 из общего набора символов - это собственно ASCII. Остальные символы расширяют таблицу кодировки символами национальных алфавитов, символами псевдографики (блоковая графика) и некоторыми другими знаками представления информации. Символы с кодом от 0 до 31 - это управляющие символы, не имеющие привычного начертания при письме. Такие символы, впрочем как и все остальные, могут быть представлены в программе по их коду, который записывают в десятичной или шестнадцатеричной формах после символа #, например: #1, #100 или #$64 и т.п. Остальные символы записывают в апострофах: f, _, - сам апостроф ().
Функция Chr(номер символа) преобразует код в соответствующий символ. Обратное преобразование осуществляет функция Ord(символ). Эта функция преобразует также значение порядкового типа в значение целого типа LongInt, например Ord(false) = 0. Для переменных порядкового типа применимы также функции Pred(k) и Succ(k), возвращающие соответственно предыдущее и последующее значения переменной, например: pred(true) false, succ(-4) -3, pred(chr(#$65) d. Для символьного типа применима функция Upcase(символ), которая возвращает прописную латинскую букву, если символом была строчная латинская буква, а иначе - аргумент.
Особо следует сказать о вводе значений символьного типа с клавиатуры. При этом каждый символ становится значимым, в том числе и пробел. Даже нажатие клавиши ENTER соответствует вводу двух символов: #13 - возврат каретки и #10 - перевод строки. Поэтому, во избежание ошибок ввода, следует использовать посимвольный ввод данных с помощью процедуры readln(c).
Д ля реализации необходимых действий в зависимости от выполнения некоторого условия используют блок выбора (альтернативы), которому в языке соответствует оператор условного перехода IF:
IF
<логическое выражение>
ДА Условие НЕТ THEN <Оператор 1>
ELSE <Оператор 2>;
Условие в операторе записывается в виде логического выражения. Если последнее принимает значение true, то выполняется оператор 1, в противном случае - оператор 2. В качестве операторов могут быть использованы любые операторы языка, в том числе и другой оператор IF. Если необходимо выполнение нескольких действий в ветви, то используют составной оператор - группу операторов, заключенных в операторные скобки begin … end. Оператор IF предполагает возможность использования краткой его формы:
I
F
<Условие> THEN
<Оператор>; y
y
= x
Пример 1. Установить принадлежность точки
(x,y) области на плоскости XY между прямой
y=x и параболой . 0 x
program tochka;
var x, y : real;
begin
writeln(‘Введите через пробел координаты x и y точки’) ; readln(x,y);
if (y<=x) and (y>=x*x)
then writeln(‘Точка принадлежит указанной области’)
else writeln(‘Точка вне области’)
end.
Для организации в программе вариативных действий используют блок варианта и реализующий его оператор CASE - OF - END:
Селектор варианта
Список
значений 1 Сп. знач. 2 Сп. знач. i Иначе
Вариант Вариант Вариант Вариант действий
действий 1 действий 2 действий i для значений вне
списков
Case <переменная-селектор > of
z1_1, z1_2, …, z1_n : <Оператор 1>;
z2_1, z2_2, …, z2_k : <Оператор 2>;
. . .
zi_1, zi_2, … , zi_m : <Оператор i>
[ else <оператор> ] end;
Переменная, используемая в операторе в качестве селектора, может быть любого порядкового типа. В соответствии с принимаемым ею до оператора CASE значением (z1_1 … zi_m) выполняется один из операторов (1 … i). Если селектор принимает значение, не указанное ни в одном из списков, то выполняется оператор, следующий за служебным словом ELSE. Последняя часть конструкции может отсутствовать, в этом случае никаких альтернативных действий не производится.
Пример 2. Смоделировать работу калькулятора для четырех действий.
program calc;
var o1,o2,rez : real; {Операнды и результат выполнения операции}
d : char; {Выполняемое арифметическое действие}
begin
writeln(‘Введите через пробел два операнда’); readln(o1,o2);
writeln(‘Введите выполняемое действие’); readln(d);
case d of
‘+’ : begin rez:= o1+o2; writeln(‘Сумма = ’,rez) end;
‘-’ : begin rez:= o1-o2; writeln(‘Разность = ’,rez) end;
‘*’ : begin rez:= o1*o2; writeln(‘Произведение = ’,rez) end;
‘/’ : begin rez:= o1/o2; writeln(‘Частное = ’,rez) end
else writeln(‘Введен неверный символ операции’) end;
end.