В прошлом выпуске мы с вами изучили новый тип, позволяющий работать со строками символов. Это был тип String, с его помощью можно хранить любые данные в текстовом виде, запрашивать программой строки будь то имя, фамилия или что-нибудь еще. Очень полезная возможность, не так ли? Но вот давайте представим, что мы решили запросить не целую строку, а один символ, например в качестве ответа на такой вопрос:
Повторить действие? (Y/N):
Здесь видно, что ввести нужно всего лишь одну букву - Y или N. Заводить для этого целую строку нецелесообразно, хотя и можно. Но при этом программа получается более громоздкой - целая строка используется для хранения всего лишь одного символа. При этом мы теряем память, засоряя ее; работа несколько замедляется, так как строки долго обрабатываются. В общем, здесь встает вопрос оптимизации, который волнует абсолютно всех программистов на свете.
Именно для таких целей - оптимизации - существует один тип, тоже символьный, он более простой, чем строки. Это тип Char.
Char - Переменная этого типа способна хранить всего лишь один символ. Это как бы строка, но с максимальной длиной, равной единице. Он очень удобен для некоторых случаев: невероятно экономит память, ускоряет работу и позволяет легче состалять программу.
Вот примеры присваивания значений переменной типа Char:
Program UseCHAR;
var
C: Char;
begin
C := 'Y';
Write(C);
C := ':';
Write(C);
Readln(C);
If C <> 'Y' Then Write('C не является буквой Y!');
Readln;
end.
Посмотрите внимательно на пример. Он очень простой, введите его в Паскале и посмотрите, что он делает. При его работе выводиться: Y: после чего программа ждет ввода. Если введенный символ не буква Y, то об этом сообщается пользователю. Необходимые пояснения к типу Char.
1. Переменной типа Char можно прямо в программе присвоить значение. Это делается посредством знака присваивания: ":=", после которого должен находиться символ, заключенный в одиночные кавычки (апострофы): 'A'.
2. Переменную можно с успехом использовать в конструкциях сравнения;
3. Ее можно читать с клавиатуры. При этом если мы введем строку, состоящую из нескольких символов, то значением переменной Char станет только 1-й символ.
4. Его можно прибавлять к строке:
Program UseCHAR;
Var
C: Char;
S: String;
Begin
Write('Введите строку: ');
Readln(S);
Write('Введите символ: ');
Readln(C);
S := S + C;
Write('Если это сложить, получиться: ',S);
Readln;
end.
Но вычитать нельзя!!! Запомните это.
5. Переменная типа Char может хранить совершенно любой символ, в том числе и букву русского языка (знак кириллицы).
Ну а теперь, напоследок, напишем программу, которая будет очень хорошо демонстрировать использование строк, символов, сравнения и goto.
Программа будет читать символы с клавиатуры, пока не прочитает символ "!" - восклицательный знак. Он будет служить сигналом окончания ввода. Все читаемые символы будут записываться в строку, которая по окончанию действия выведстя на экран. Начнем?
Для начала, как всегда, запишем алгоритм программы, то есть определимся, что она будет делать и расскажем это простым человеческим языком. Условимся, что мы имеем две переменных
- S: String; - в нее будут записываться все вводимые символы;
- C: Char; - этот символ будет постоянно читаться с клавиатуры.
А теперь алгоритм:
1. Читаем символ с клавиатуры;
2. Проверяем - если это не "!", то:
1. Добавляем введенный символ в строку (прибавляем его к строке);
2. Переходим у вводу символа - пункту 1.
Иначе (символ = !):
3. Выводим составленную строку на экран;
4. Ставим Readln; тем самым затормаживая программу;
5. Завершаем программу;
Вот вроде и все. Теперь текст программы:
Program Primer;
label
A;
var
C: Char;
S: String;
begin
A;
Write('Введите символ: ');
Readln(С);
If C <> '!' Then
begin
S := S + C;
Goto A;
end
else
Write('Вы ввели эти символы: ',S);
Readln;
end.
Введите эту программу и запустите. Как вам ее работа? Она делает все то, что и планировалось, помещает вводимые символы в строку и выводит ее на экран. Объяснять эту программу по шагам я не буду, разбирайтесь сами, это будет очень полезно. Советую написать что-нибудь самостоятельно в этом роде; придумайте условие и реализуйте его.
А пока на сегодня про Паскаль все, осталась небольшая практика.