Курсовая работа: Приложения технологии языка программирования Паскаль в прикладной механике
Хранение строк. В памяти компьютера строка хранится в виде последовательности из символьных переменных, у них нет индивидуальных имён, но есть номера, начинающиеся с 1). Перед первым символом строки имеется ещё и нулевой, в котором хранится символ с кодом, равным длине строки. Нам абсолютно безразлично, какие символы хранятся в байтах, находящихся за пределами конца строки. Рассмотрим пример. Пусть строка s объявлена как string [9], тогда после присваивания s:=’Привет’; она будет хранится в следующем виде:
Номер байта | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Содержимое | |#6 | ‘П’ | ‘р’ | ‘и’ | ‘в’ | ‘е’ | ‘т’ | ‘ю’ | ‘s’ | ‘%’ |
Для того чтобы в программе получить доступ к n -му символу строки используется запись s[n]. Если поменять значение s[0] то это отразится на длине строки. В следующем примере из строки 'Привет' мы сделаем 'Привет!':
s[0]:=#7; s[7]:='!';.
Сравнение строк. Строки сравниваются последовательно, по символам. Сравниваются первые символы строк, если они равны — то вторые, и т. д. Если на каком-то этапе появилось различие в символах, то меньшей будет та строка, в которой меньший символ. Если строки не различались, а затем одна из них закончилась, то она и считается меньшей. Примеры: 'ананас'<'кокос', 'свинья'>'свинина', ''<'A', 'hell'<'hello'.
Склеивание (конкатенация) строк. К строкам можно применять операцию «+», при этом результатом будет строка, состоящая из последовательно записанных «слагаемых». Пример: после действия s:= 'abc'+'def'+'ghi'; переменная s будет содержать ‘abcdefghi’.
Процедуры и функции для работы со строками. Наиболее часто употребляется функция length(s: string): integer (после двоеточия записан тип значения, возвращаемого функцией, в нашем случае — целое число). Эта функция возвращает длину строки s .
3. Перечисляемый тип
Предположим, что нам требуется переменная для хранения дня недели. В этом случае можно воспользоваться целым типом (например byte ) и хранить дни недели в виде чисел 1, 2, ... 7, но это будет не очень наглядно. Турбо Паскаль предоставляет более удобный вариант, а именно создание перечислимого типа, например, такого:
type Days = (Mon, Tue, Wed, Thu, Fri, Sat, Sun);
После этого можно завести переменную этого типа (var day: Days;) и использовать её. Ниже приведены примеры использования:
day := Wed ;
...
if day > Fri then writeln ('Сегодня выходной');
...
if day=Mon then writeln('Началась рабочая неделя');
Как вы уже заметили значения перечислимого типа можно сравнивать, при этом меньшим считается то, которое объявлено раньше (левее) в определении типа.
Для переменных перечисляемых типов возможно применение функций succ и pred , например, succ(Wed) дает Thu , Pred(Sun) дает Sat . Если попытаться написать Pred(Mon) или Succ(Sun) , то уже на этапе проверки программы компилятором произойдет ошибка.
Хранение значений перечисляемого типа устроено внутри довольно просто: хранятся целые числа от 0 до n , в нашем случае n = 6. Существует функция Ord , которая позволяет получить то число, в виде которого хранится какое-либо значение перечисляемого типа, например Ord(Wed) дает
При необходимости можно получить значение перечисляемого типа по его численному представлению, например, Days(1) есть Tue . После всего сказанного можно заметить, что при сравнении величин перечисляемого типа в действительности сравниваются их порядковые номера (Ord).
Пример использования перечисляемых типов:
Пусть корабль может двигаться только по четырем направлениям: на север, на запад, на юг и на восток, то есть текущее направление движения определяется переменной типа Directions = (North, West, South, East);. Этому кораблю можно подавать приказы следующих типов: вперёд, назад, влево, вправо, то есть любой приказ задать переменной типа Orders = (Ahead, Back, Left, Right); . Пусть корабль двигался по направлению d1 , после чего ему дали приказ p . Программа должна определить, в каком направлении корабль будет двигаться после выполнения приказа.
Program Ship;
type Courses = (North, West, South, East);
Orders = (Ahead, Back, Left, Right);
var d1, d2: Courses;
p: Orders;
i : integer ;
s : string ;
begin {Запрашиваем у пользователя информацию о курсе и приказе}