Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TURBO PASCAL.doc
Скачиваний:
41
Добавлен:
09.06.2015
Размер:
948.74 Кб
Скачать

Новые типы данных

Помните, мы с вами разговаривали о типах переменных? О том, как присвоить какой-либо тип и зачем это делается? Тогда мы с вами обсуждали всего лишь типы-числа, причем целые числа, дробные значения им присвоить нальзя. Основные из тех типов были Integer, Byte, Word и LongInt, имеющие замый разный диапазон значений (не пишите мне, что вам не ясно, см. выпуск #3), в которых вам нужно научиться ориентироваться.

Здесь я еще сделаю немаловажный комментарий - типы, схожие друг с другом можно вычитать, складывать, умножать и делить. То есть можно писать так:

Program_name;

var

A: Integer;

B: Word;

C: Byte;

begin

A := B - C;

B := C + A;

C := B * A;

end.

* Обращайте внимание на синтаксис! Не забывайте!

Видите, как все происходит? Конечно, это примитивный пример, но он замечательно демонстрирует использование совместимости типов. Если начинаете сейчас путаться, не пугайтесь. Здесь нет абсолютно ничего сложного. Разберем.

Вот, смотрите: Если имеем два числа, A: Integer; B: Word;.

Определимся, что они могут?

Переменная А - может хранить значения от -32000 до +32000 (я примерно пишу)

Переменная В - может хранить значания от 0 до 65500 (тоже не точно, см. зеленую таблицу в 3)

А теперь представьте, число А = 12, а число В = 15. Ну как, мы разве не сможем их сложить? Еще как. А вычесть? Тоже. А умножить? И это у нас выйдет.

Теперь такая ситуация - если результат помещается в переменную В (тип Word), но он отрицательный? (Следите за ходом моих мыслей). Что выйдет? Ведь тип Word не может хранить отрицательные числа, а я только что вел разговор о совместимости.

Выйдет то, что значение числа B будет испорчено. Совместимость есть, Паскаль ошибки не выдаст. Но значение будет потеряно. Поэтому лучше использовать совершенно одинаковые типы, с этим будет меньше проблем, либо точно знать, что за результат будет (по крайней мере его диапазон). Если вы здесь не разобрались, ничего. Дальше все станет ясно, и если что, будете знать где это найти. В общем, информация в копилку.

Нормально напомнил, вспомнили?

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

Гораздо более интересными сейчас будут другие, которые позволяют хранить строки и символы. Тем более, их всего два и они очень простые и понятные.

Итак, зачем же нам иметь переменные, позволяющие хранить символы?

Давайте вспомним приводимый мной как-то пример программы, выводящей Hello, world!, написанной для демонстрации работы процедуры Write. Помните? Она печатала строку, которая как бы слита с программой и не может быть изменена во время ее работы. Давайте перестроим эту программу и напишем ее модифицированный вариант. Действовать будем так (напоминаю, последовательность действий называется алгоритм):

  1. Выведем на экран строку "Введите Ваше имя: "

  2. Прочитаем имя с клавиатуры

  3. Выведем на экран строку "Привет, ИМЯ!"

Начинаем писать программу и как всегда определимся, что нам нужно.

  1. Для того, чтобы вывести строки будем просто использовать Write.

  2. А вот для того, чтобы прочитат, сохранить и вывести имя, используем переменную, которой зададим тип-строку.

Тип "строка" изображается так: String.

И, следовательно для того, чтобы завести такую переменную, запишем в разделе var:

var

Name: String;

Ну а теперь вроде все разобрали, все понятно и можно писать программу. Ее текст будет выглядеть так:

Program Ask_name;

var

Name: String;

begin

Write('Введите Ваше имя: ');

Readln(Name);

Write('Привет, ',Name,'!');

Readln;

end.

Откройте Турбо Паскаль и напечатайте эту программу. Запустите ее и посмотрите, как она работает. Все нормально? Действительно, она выводит имя, введенное при запросе. Это вам конкретный пример использвания типа String. На самом деле возможности использования строк невероятно высоки, вы это дальше поймете.

Не думаю, что стоит разбираться в этой программе по шагам. Если вам не понятно что-то - используемые процедуры или проблемы с синтаксисом (вы только подписались) - то скачивате архив с сайта рассылки и изучите предыдущие уроки Паскаля.

Но хоть разбирать каждую строку и я не буду, все же один прием требует комментариев:

Write('Привет, ',Name,'!');

Эта строка выводит именно "Привет, ИМЯ!". Заметили, восклицательный знак находиться после переменной? То есть переменная получается как бы внутри выводимой строки. Именно для того, чтобы это сделать я использовал несколько параметров процедуры Write; - т.е. чередовал символы с переменной. Так можно напечатать любой текст, содержащий где угодно в себе переменные. Запомните этот прием, а то некоторые ломают голову над этим - используют несколько процедур Write для вывода всех частей строки отдельно и т.д.

В общем, про этот раздел все. Здесь нет ничего сложного или особо непонятного, разбирайтесь. Советую написать несколько программ, использующих тип String - здесь я предоставляю вам полное творчество и очень советую им воспользоваться.

Но приведу несколько примеров возможных модификаций - например, запрашивайте несколько больше данных и выводите их все как результат выполнения; выводите запросы на ввод тоже как строки (придавайте им значение прямо в программе).

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]