- •Работа с массивами чисел
- •6.1. Структурированные типы данных Turbo Pascal 7.0
- •6.2. Массивы
- •Каждый элемент массива имеет свой индекс.
- •6.3. Фрагменты программ обработки массивов
- •6.3.1 Заполнение массивов
- •6.3.2 Вывод элементов массива на экран
- •6.3.3. Подсчет отрицательных и положительных элементов, их сумм и средних значений
- •6.3.4. Нахождение минимального и максимального элементов двумерного массива
- •6.3.5. Сортировка массива
- •7. Лабораторные задания и методические указания по их выполнению
- •9. Контрольные вопросы
- •6.1. Символьный (char) и строковый (string) тип данных
- •6.2.1. Основные задачи обработки текста
- •6.2.3. Выделение слов из текста (слова разделены несколькими пробелами)
- •6.2.4. Выделение символов в строке и расположение их по алфавиту
- •6.2.5. Выделение символов в строке и подсчет их вхождения
- •6.2.6. Выделение символов в строке и подсчет слов в строке
- •6.2.7. Выделение слов и упорядочение их по длине
- •6.2.8. Расположение слов по алфавиту
- •6.3. Файлы
- •Текстовые файлы определяются в разделе Var следующим образом:
- •7. Лабораторные задания и методические указания по их выполнению
- •9. Контрольные вопросы
6.2.1. Основные задачи обработки текста
Наиболее типичными задачами обработки текстов являются задачи синтаксического анализа, которые сводятся к выделению слов из предложений и анализу этих слов. В частности, такие задачи решаются при трансляции и компиляции программ с языков высокого уровня. Основными особенностями структур данных при этом являются следующие.
1. Строка текста или одно слово – одномерный массив символов, а несколько слов – это массив строк (двумерный массив символов).
2. Длина слов в тексте неодинакова. Обычно для разделения слов используются пробелы. Найти пробел в предложении можно, просматривая последовательно каждый его символ. Если очередной пробел найден, то предыдущее слово закончилось.
Формирование отдельных слов может быть осуществлено посимвольно, путем объединения слова (строки) с очередным символом, отличным от пробела (вначале формируемое слово должно быть пустым).
Возможны 2 способа представления текстов:
1) слова разделены всегда одним пробелом;
2) слова разделены одним или несколькими пробелами.
В наиболее часто встречающихся задачах обработки слов выделенные слова (массивы слов) обрабатываются в соответствии с условиями задачи, например, определяются длина слов или осуществляется анализ букв слов.
6.2.2. Выделение слов из текста (слова разделены одним пробелом)
Ввести предложение, в котором слова разделены одним пробелом. Выделить слова, переписать их в массив слов и вывести на экран.
Текст программы, реализующей эту задачу, приведен ниже.
Program GetSl1;
CONST
m = 50; {Максимальное количество слов в предложении}
VAR
Predl : string; {Предложение}
Slovo : array[1..m] of string; {Массив для слов}
n, k, i: integer; {Вспомогательные переменные}
BEGIN
WriteLn('Введите предложение:');
ReadLn(Predl);
n := Length(Predl);
k := 1;
Slovo[k] := ''; {Пустое слово – 2 апострофа подряд}
For i := 1 to n do
If predl[i] <> ' ' then
Slovo[k] := Slovo[k] + Predl[i]
Else
begin
k := k + 1;
Slovo[k] := '';
end;
WriteLn('Слова из предложения: ');
For i := 1 to k do
WriteLn(Slovo[i]);
Readln;
END.
6.2.3. Выделение слов из текста (слова разделены несколькими пробелами)
Ввести предложение, в котором слова могут быть разделены несколькими пробелами. Выделить слова и вывести их на экран.
В этом случае номер слова меняется при встрече с первым пробелом, а все последующие пробелы пропускаются.
Текст программы, реализующей эту задачу, приведен ниже.
Program GetSl2;
Const m = 50;
Var Predl : string;
Slovo : array [1..m] of string;
n,k,i : integer;
Begin
WriteLn('Введите предложение:');
ReadLn(Predl);
n := Length(Predl);
k := 1;
Slovo[k] := '';
i := 1;
While i<=n do
If predl[i] <> ' ' then {символ – не пробел}
begin
Slovo[k] := slovo[k] + predl[i];
i := i + 1;
end
Еlse {символ – пробел}
begin
k := k + 1;
slovo[k] := '';
While (predl[i]=' ') and (i <= n) do i := i + 1;
end;
WriteLn('Слова из предложения:');
For i := 1 to k do WriteLn(slovo[i]);
END.
6.2.4. Выделение символов в строке и расположение их по алфавиту
Ввести в ЭВМ строку из n символов латинского алфавита (n<30). Расположить их по алфавиту.
Буквы латинского алфавита 'A' – 'Z', 'a' –'z' имеют коды, значения которых возрастают. Для решения задачи можно применять алгоритм сортировки "пузырьком".
Текст программы, реализующей эту задачу, приведен ниже.
Program Sorts;
Var s : string;
sr : char;
n, i, k : integer;
Begin
writeln('Введите строку');
readln(s);
n := length(s);
for k := 1 to n-1 do
for i := 1 to n-k do
if s[i]>s[i+1] then
begin
sr :=s[i];
s[i] := s[i+1];
s[i+1] := sr;
end;
writeln('Строка с упорядоченными символами:');
writeln(s);
readln;
End.