7.1. Ввод, вывод, присваивание
строковых величин
Современные компьютеры способны обрабатывать данные, представленные различными способами: числа, тексты, графику, звуки. Вы уже знаете, как на языке программирования Pascal можно работать с целыми и вещественными числами, выполнять простейшие графические построения.
Обработка текстовых данных является сегодня наиболее актуальной — это обработка различных поисковых запросов в Интернете, перевод текстов с одного языка на другой, озвучивание компьютером печатного текста и др.
В языке Pascal для работы с текстовыми данными используется тип string (строка). Строки состоят из набора последовательно расположенных символов и используются для хранения текста. Они могут иметь произвольную длину. Строка, в которой нет ни одного символа, называется пустой.
Строка описывается следующим образом:
var <имя строки>: string;
Для ввода и вывода строки используются те же команды, что и для ввода и вывода чисел: read (readln) и write (writeln) (пример 7.1).
Ввод данных всегда заканчивается нажатием клавиши Enter, которой соответствует специальный символ: ¶.
Команда read считывает символы в строку до тех пор, пока не встретится этот специальный символ. Команда readln отличается тем, что считывает не только данные в строку, но и символ нажатия Enter. Сам символ ¶ к строке не приписывается.
Переменной строкового типа можно присвоить значение с помощью команды присваивания. Значение строковой величины записывается в апострофах.
Пустая строка задается следующим образом: s := ”;
Запись поясняющего текста при выводе в команде write является строковой константой. К символам в строке можно обращаться, используя индекс. Нумерация символов начинается с единицы, s[i] соответствует i-му символу в строке s (пример 7.2).
Пример 7.3. Написать программу, которая спросит имя пользователя и выведет приветствие, обращаясь по имени.
Этапы выполнения задания
I. Исходные данные: imja — строка, в которой будет храниться введенное имя.
II. Результат: строка с приветствием.III. Алгоритм решения задачи.
1. Ввод имени.
2. Вывод строки с приветствием.
IV. Описание переменных: imja — string.
7.2. Сравнение и сложение строковых величин
Так же как и для других типов данных, для строк определены свои операции — действия, которые можно выполнять с данными типа string. Для строкового типа такими операциями являются сравнение и сложение.
Для сравнения строк нужно уметь сравнивать символы. Все символы записаны в таблице символов (в документе Word эту таблицу вы использовали для вставки символа, отсутствующего на клавиатуре). Каждый символ в таблице имеет свой код (номер), и при сравнении символов сравниваются их коды — номера в таблице символов.
В таблице символов, которую использует PascalABC, 65536 символов (стандарт Юникод — англ. Unicod1). Запомнить, в каком порядке записаны символы, невозможно. Достаточно знать, как расположены группы наиболее часто употребляемых символов.
В примере 7.4 приведены некоторые группы символов в порядке их расположения в таблице.
Строки сравниваются посимвольно. Сначала сравниваются первые символы двух строк. Если символы различны, то больше та строка, символ которой имеет больший номер. Если символы одинаковые, то переходят к сравнению следующих символов.
Сравнение заканчивается, когда найдены различные символы или в одной из строк закончились символы — в этом случае больше та строка, в которой символы остались. Если при сравнении символов различия не найдены и строки закончились одновременно, то они равны (пример 7.5). Порядок, в котором меньшая строка предшествует большей, называют лексикографическим. Это название он получил по аналогии с размещением по алфавиту в словаре.
При сравнении строк следует помнить, что заглавные и строчные буквы — это разные буквы, поскольку имеют различные номера в таблице символов. Поэтому строки ‘мама’ и ‘Мама’ будут различными, а неравенство ‘мама’ > ‘Мама’ будет верным (у буквы ‘м’ код 236, а у ‘М’ — 204).
Для проверки правильности сравнения строк можно воспользоваться программой из примера 7.6.
Пример 7.7. Написать программу, которая спросит имя пользователя, его пол, а затем поздоровается с ним, выводя красным цветом женские имена, а синим — мужские.
Этапы выполнения задания
I. Исходные данные: переменные imja (имя пользователя) и pol (пол пользователя).
II. Результат: строка с приветствием.
III. Алгоритм решения задачи.
Частично задача совпадает с примером 7.3, поэтому возьмем решение из этого примера и изменим его. Цвет для текста можно задавать только в графическом окне, поэтому подключим графический режим.
1. Ввод исходных данных.
2. Сравнение переменной pol со значением ‘ж’. Если результат сравнения — истина, то устанавливаем красный цвет, иначе — синий.
3. Вывод строки.
IV. Описание переменных: imja, pol — string.
Для строк определена операция сложение (конкатенация). Обозначается операция знаком «+». В результате сложения двух строк получается новая строка, в которой после символов первой строки будут записаны символы второй строки. Результат данной операции зависит от порядка слагаемых (пример 7.8).
Пример 7.9. Написать программу, которая просит ввести название государства и его столицу, затем выводит
сообщение:
Столица государства … — город … .
Вместо многоточия должны быть выведены соответствующие значения.
Этапы выполнения задания
I. Исходные данные: переменные
str (название государства) и gor (название города).
II. Результат: переменная s (итоговая строка).
III. Алгоритм решения задачи.
1. Ввод исходных данных.
2. Создание итоговой строки.
3. Вывод строки.
IV. Описание переменных: str, gor, s — string.
|
|
В первых языках программирования строкового типа данных не было; программист должен был сам строить функции для работы со строками.
В 1962 г. был разработан язык SNOBOL (StriNg Oriented symBOlic Language), ориентированный на работу со строками. В конце 60-х гг. ХХ в. строковые типы данных появились в языках Algol и Fortran.
Две строки, в отличие от двух чисел, нельзя прочитать с помощью одной команды read, поскольку пробел для строк не разделитель, а такой же символ, как и все остальные. Необходимо использовать две команды readln.
Если использовать две команды read, то первая строка будет считана так, как нужно, а вторая строка будет пустой (она не будет вводиться). Это происходит потому, что первая команда read считывает данные до нажатия клавиши Enter. Вторая команда read прочитает один символ — символ нажатия клавиши Enter.
В PascalABC есть тип char, который позволяет хранить один символ.
Над символами определены операции сравнения «<», «>», «<=», «>=», «=», «<>», которые сравнивают коды символов. Функция ChrUnicode(n) возвращает символ с кодом n (тип char), а функция OrdUnicode(с) — код символа (тип byte).
Пример 7.7.
V. Программа:
uses GraphABC;
var imja, pol: string;
begin
writeln (‘Как тебя зовут?’);
readln(imja); writeln(imja);
writeln(‘Введи свой пол (м/ж).’);
readln(pol); writeln(pol);
SetFontColor(clgreen);
write(‘Привет, ‘);
if pol = ‘ж’ then
SetFontColor(clred)
else
SetFontColor(clblue);
writeln (imja);
end.
VI. Тестирование.
Результат для имени Никита: Пример 7.8. Примеры сложения
строк.
var s1, s2, s3, s4: string;
begin
s1 := ‘Петя’;
s2 := ‘Иванов’;
s3 := s1 + ‘ ‘ + s2;
s4 := s2 + ‘ ‘ + s1;
writeln(s3);
writeln(s4);
end.
Результат: Пример 7.9.
V. Программа:
var str, gor, s: string;
begin
writeln(‘Введите название государства’);
readln(str);
writeln(‘Введите название столицы’);
readln(gor);
s := ‘Столица государства ‘+ str + ‘ — город ‘ + gor;
writeln(s);
end.
VI. Тестирование.
Запустить программу и ввести значения Республика Беларусь и Минск.
Результат: |
|