- •Лабораторная работа № 7 строки
- •1.Цель работы
- •2. Теоретическая часть
- •2.1 Основные понятия и определения
- •2.2 Операции со строками
- •Процедуры для обработки строк
- •Функции для обработки строк
- •Примеры решения задач обработки строковых данных
- •3.1 Перестановка символов.
- •3.2 Обработка списка строк.
- •3.3 Нахождение наиболее короткого слова списка.
- •Задание для самостоятельного выполнения
- •5.Контрольные вопросы
- •Приложение а. Таблица обмена информацией (фрагмент) ascii code
- •Приложение б Варианты заданий по теме «Обработка строки символов»
- •Приложение в Варианты заданий по теме «Обработка списка строк»
- •Приложение г Варианты заданий по теме «Строковые переменные»
3.2 Обработка списка строк.
Задан список из 6 слов. Определить, сколько слов списка начинается на букву «А».
Одно из возможных решений данной задачи имеет следующий вид:
PROGRAM Spisok;
Var s: string[20];
i, k: integer;
begin
k:=0;
for i:=1 to 6 do
begin
writeln('Введите слово');
readln(s);
if s[1]='А' then k:=k+1 {Сравнение первой буквы слова с буквой А}
end;
writeln(‘k=’,k)
end.
3.3 Нахождение наиболее короткого слова списка.
Задан список из 8 слов. Найти самое короткое слово в списке. Если таких слов несколько, то распечатать их в один столбец.
Решение поставленной задачи сводится к нескольким этапам: ввести список слов в виде массива строковых переменных; подсчитать длину каждой строки; определить наименьшую из длин; распечатать те строки массива, длина которых совпадает с наименьшей.
Пример возможного решения поставленной задачи:
PROGRAM Str_min;
type M_st=array[1..8] of string[20];
M_int=array[1..8] of integer;
var s: M_st;
n: M_int;
i, min: integer;
begin
for i:=1 to 8 do
begin
writeln('Введите слово');
readln(s[i]);
n[i]:=length(s[i]) {Вычисление количества букв в i-ом слове }
end;
min:=n[1];
for i:=2 to 8 do
if min>n[i] then min:=n[i]; {Нахождение наименьшего из количеств букв}
writeln(‘Наиболее короткое слово’);
for i:=1 to 8 do
if n[i]=min then writeln(s[i]) {Печать слов, состоящих из наименьшего количества букв}
end.
В данной программе для обозначения слов используется массив строковых переменных s, для обозначений соответствующих им длин слов – целочисленный массив n. Наименьший элемент массива n хранится в виде переменной min.
3.4 Разработать программу, удаляющую из вводимой с клавиатуры строки пробелы между словами и записывающую в массив N длину (число символов) каждого слова. Длина текста – не более 80 символов. Число слов – не более 10. Наличие более одного символа ‘пробел’ подряд свидетельствует о конце строки.
Используемые в программе идентификаторы приведены в таблице 3.1.
Табл. 3.1
Обозначения |
Тип данных |
Примечание |
A |
STRING |
Исходный текст, символьные данные |
K |
INTEGER |
Количество символов в слове |
L |
INTEGER |
Порядковый номер слова |
I |
INTEGER |
Параметр цикла |
A[I] |
|
Текущий символ исходного текста |
N |
ARRAY [1…10] OF INTEGER |
Массив, содержащий значения длины каждого слова исходного текста |
N[L] |
|
Значение длины слова номер L |
J |
INTEGER |
Параметр цикла, используемого для перемещения всех следующих символов исходного текста на одну позицию влево после того, как обработано очередное слова. |
PR |
INTEGER |
Переменная для управления повторной работой программы |
OTVET |
BYTE |
Переменная для управления началом обработки введенной строки |
Текст программы
Program Prim1;
Uses Crt;
Label 4;
VAR
N: ARRAY [1..10] OF INTEGER;
I, J, K, L: INTEGER;
A: STRING [80];
PR, OTVET:BYTE;
BEGIN
CLRSCR;
REPEAT
REPEAT
WRITELN (' Введите через пробел');
READLN (A);
WRITELN('Исходная строка');
WRITELN(A);
WRITELN ('Работаем дальше? 1 -да,0 -нет');
READLN (OTVET);
UNTIL OTVET=1;
K:=0;
L:=0;
PR:=0;
FOR I:=1 TO length(a) DO
IF (A[I]= ' ') THEN
BEGIN
L:=L+1;
N[L]:=K;
IF (A[I+1]=' ')THEN GOTO 4;
FOR J:=i TO length(a) DO
A[J]:= A[J+1];
K:=1
END
ELSE
begin
K:=K+1;
N[L+1]:= K-l;
end;
4:WRITELN ('Результирующая строка');
WRITELN (A);
WRITELN ('№ слова число букв');
FOR I:=1 TO L+1 DO
WRITELN (' N[',I,'] =',N[I]:6);
WRITELN('Обработать еще одну строку? 1 –да 0 -нет');
READLN(PR);
UNTIL PR=0
END.