
- •Оглавление
- •Комбинированный урок №12
- •Алгоритмы обработки символьной информации
- •Типы данных, используемые для обработки символьной информации
- •Операция присваивания
- •Операция сцепления
- •Операции отношения
- •Функции и команды обработки строк Процедуры
- •Функции
- •Примеры программ работы со строковыми данными
- •Вариант 1. Слова в тексте разделены одним пробелом. Тест
- •Var Text : String; {заданный непустой текст}
- •I, Number : Integer; {Number — количество слов в тексте}
- •Вариант 2. Слова в тексте разделены произвольным количеством пробелов.
- •Var Text : String; {заданный текст}
- •I, Number : Integer; {Number - количество слов в тексте}
- •Система тестов
- •If Flag then WriteLn(' — перевертыш. ')
- •Insert(Slovo2, Text, p); {вставка подстроки Slovo2 }
- •Var Words : Array[1..10] of String; {массив слов}
- •I, j, nWords : Integer; {nWords — количество слов}
- •Система тестов
- •Множества
- •Операции над множествами
- •Объединение Пересечение Разность
- •Контрольные вопросы
Insert(Slovo2, Text, p); {вставка подстроки Slovo2 }
{ в строку Text с позиции Р}
P:=Pos(Slovo1, Text); {номер позиции, с которой подстрока Slovo1}
{встречается в строке Text в очередной раз}
end;
WriteLn('Новый текст: ', Text);
ReadLn
END.
Пример 4. Заданную последовательность слов переупорядочить в алфавитном порядке (то есть выполнить лексикографическое упорядочение).
Тест
Данные |
Результат |
Words=(''стул'', ''гора'', ''яма'', ''стол'') |
Words=("гора", "стол", "стул", "яма") |
Program LexOrder;
Uses Crt;
Var Words : Array[1..10] of String; {массив слов}
Tmp : String; {Tmp — вспомогательная переменная}
I, j, nWords : Integer; {nWords — количество слов}
BEGIN
ClrScr;
Write('Количество слов в тексте — ');
ReadLn(NWords);
For i := 1 to NWords do
begin Write(i, '-ое слово : ');
ReadLn(Words[i])
end;
For i := 1 to NWords-1 do {лексикографическое упорядочение слов}
For j := i+1 to NWords do
If Words[i]>Words[j] then
begin
Tmp := Words[i]; Words[i]:=Words[j]; Words[j]:=Tmp
end;
WriteLn; WriteLn('О т в е т');
WriteLn('Лексикографически упорядоченный массив слов:');
For i := 1 to NWords do Write(Words[i], ' ');
WriteLn; ReadLn
END.
Пример 7.5. Проверить, имеется ли в линейной записи заданной математической формулы баланс открывающих и закрывающих скобок.
Система тестов
Номер теста |
Проверяемый случай |
Данные |
Результат |
1 |
При просмотре линейной записи слева направо первой встречается закрывающая скобка |
''a)b+1('' |
''Нет баланса'' |
2 |
Первой встречается открывающая скобка, но число открывающих и закрывающих скобок не совпадает |
''(a+b))'' |
''Нет баланса'' |
3 |
Есть баланс скобок |
''(a+b/(c*d))'' |
''Есть баланс'' |
Program Balance;
Uses Crt;
Var S : String;
Dlina, Flag, i : Integer;
BEGIN ClrScr;
GotoXY(15, 5);
Write('Введите линейную запись математической формулы :');
GotoXY(32,7); ReadLn(S);
i:=1; Flag:=0; Dlina:=Length(S);
While (Flag>=0) and (i<=Dlina) do
begin
If S[i] = '(' then Flag:=Flag + 1;
If S[i] = ')' then Flag:=Flag - 1;
i:=i+1
end;
GotoXY(32, 9); WriteLn('О т в е т');
GotoXY(15,11);
If Flag=0 then Write('Есть баланс ') else Write('Нет баланса ');
WriteLn('открывающих и закрывающих скобок');
ReadLn
END
Записи
При решении научно-технических и экономических задач обработки совокупностей большого количества значений используются массивы. Но при работе с массивами основное ограничение заключается в том, что каждый элемент массива должен иметь один и тот же тип данных. Для решения задач, в которых возникает необходимость хранить и обрабатывать совокупности данных различного типа, используются записи.
Запись - это структурированный тип данных, состоящий из фиксированного числа компонентов одного или нескольких типов, называемых полями записи. Определение типа записи начинается идентификатором Record и заканчивается зарезервированным словом end. Между ними заключен список компонентов, называемых полями, с указанием имен полей и типа каждого поля. Структура объявления типа записи такова:
Type <имя типа> = Record
<имя поля1>: <тип компонентов>;
…
<имя поляN>: <тип компонентов>;
End;
VAR <имя переменной>: <имя типа>;
Пример описания записи:
Type Car=Record
Number:Integer;
Marka:String[20];
FIO:String[40];
Address:String[60];
End;
Var Mashina, Mash : Car;
В данном примере была объявлена запись с именем Car, у которой имеется 4 поля: номер, название марки машины, ФИО владельца и его адрес.
Идентификатор поля должен быть уникален только в пределах записи, однако лучше его сделать уникальным в пределах всей программы. Объем памяти, необходимый для записи, складывается из длин полей. Значения полей записи могут быть использованы в выражениях. Обращение к значению поля осуществляется с помощью идентификатора переменной и идентификатора поля, разделенных точкой. Такая комбинация называется составным именем.
Например, доступ к полям записи Car осуществляется как: Mashina.Marka, Mashina.FIO, Mashina.Number. Составное имя можно использовать везде, где допустимо применение типа поля. Для присваивания полям значений используется оператор присваивания, например:
Mashina. Number:=1645365;
Mashina.Marka:=’Volvo’;
Mashina.FIO:=’Иванов И.И.’;
Mashina. Address:=’ул.Пушкина 12-30’;
Составные имена можно использовать в операторах ввода-вывода:
Read (Mashina. Number, Mashina. FIO, Mashina. Address);
Write(Mashina. Number:4, Mashina. FIO:12, Mashina. Address:25);
Допускается применение оператора присваивания и к записям в целом, если они имеют один и тот же тип. Например, Mash:=Mashina;
После выполнения этого оператора значения полей записи Mash станут равны значениям соответствующих полей записи Mashina.
В ряде задач удобно пользоваться массивами из записей. Их можно описать следующим образом:
Type Car=Record
Number:Integer;
Marka:String[20];
FIO:String[40];
Address:String[60];
End;
Var Mashins : array [1..20] of Car;
Обращение к полям такой записи имеет громоздкий вид. Для решения этой проблемы в языке Паскаль предназначен оператор With, который имеет следующий формат:
With <переменная типа запись> do <оператор>;
Один раз, указав переменную типа запись в операторе With, можно работать с именами полей как с обычными переменными,например:
With Mashina do
Begin
Number:=164536l;
Marka:=’Volvo’;;
FIO:=’Иванов И.И’;
Address:=’ул.Пушкина 12-30’;
End;