Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль_теория.doc
Скачиваний:
8
Добавлен:
08.11.2018
Размер:
341.5 Кб
Скачать

Тема: “Использование массивов при решении задач на преобразование нечисловой информации. Разделение текста на слова”.

Цель: выработать у учащихся навыки работы со строками и умения использовать массивы при работе с нечисловыми данными.

План работы.

1. Повторить алгоритм разделения произвольного текста на слова.

2. Выполнить практическую часть на компьютере, записав ответы в тетрадь.

3. Ответить на контрольные вопросы.

Ход работы.

1. Алгоритм разделения текста на слова.

Особый интерес представляют задачи, связанные с анализом и преобразованием отдельно каждого из слов, входящих в текст.

В этом случае требуется разделить произвольное предложение на слова с сохранением каждого из них в отдельной ячейке памяти (переменной).

Слова в предложении могут быть разделены различным числом пробелов и знаками препинания, количество слов может быть достаточно большим.

Рассмотрим алгоритм разделения текста на слова для самого простого случая:

Дано произвольное предложение. Слова в нем разделены пробелами (любое количество), а после последнего - точка. Получить на экране в столбик все слова, входящие в это предложение.

Program Slova;

var

Predl: string;

MSlov: array [1..130] of string;

k,ns,i,PDlin,Pn: integer;

Begin

k:=0;

write ('Введите предложение: ');

read (Predl); {вводим предложение}

Predl:=' '+Predl; {ставим пробел перед первым словом}

PDlin:=length (Predl); {измеряем длину предложения}

For i:=1 to PDlin-1 do

Begin

If (Predl[i]=' ') and (Predl[i+1]<>' ')

{если пришли к началу очередного слова,}

then {то}

ns:=i+1; {запомнили позицию его начала}

If (Predl[i]<>' ') and ((Predl[i+1]=' ')

or

(Predl[i+1]='.'))

{если слово закончилось,}

then {то}

Begin

k:=k+1; {увеличили счетчик слов}

MSlov[k]:=Copy (Predl,ns,i-ns+1);

{"вырезаем" слово из предложения и заносим}

{его в массив в ячейку с номером k}

end;

end;

For i:=1 to k do

writeln (MSlov[i]); {выводим слова}

end.

2. Практическая часть.

Задание 1. Наберите заданную программу, выводящую на экран самое длинное слово произвольного предложения, введенного с клавиатуры, и количество символов в нем.

Program dlinnoe_slovo;

var

Predl,dl_slovo: string;

MSlov: array [1..130] of string;

k,ns,i,PDlin,Pn,m,max: integer;

Begin

k:=0;

write ('Введите предложение: ');

read (Predl);

Predl:=' '+Predl;

PDlin:=length (Predl);

For i:=1 to PDlin-1 do

Begin

If (Predl[i]=' ') and (Predl[i+1]<>' ')

then ns:=i+1;

If (Predl[i]<>' ') and

((Predl[i+1]=' ') or (Predl[i+1]='.'))

then

Begin

k:=k+1;

MSlov[k]:=Copy (Predl,ns,i-ns+1);

end;

end;

dl_slovo:= MSlov[1];

max:=length(MSlov[1]);

For i:=1 to k do {открываем цикл по количеству слов}

Begin

m:=length(MSlov[i]);

if m>max then

begin

max:=m;

dl_slovo:= MSlov[i];

end;

end;

writeln(dl_slovo, max:6);

end.

Измените программу таким образом, чтобы на экран выводилось самое короткое слово и его первый символ.

Задание 2. Наберите заданную программу, печатающую на экран все слова произвольного предложения, начинающиеся на букву “а”.

Program slovа_а_1;

var

Predl: string;

MSlov: array [1..130] of string;

k,ns,i,PDlin,Pn: integer;

Begin

k:=0;

write ('Введите предложение: ');

read (Predl);

Predl:=' '+Predl;

PDlin:=length (Predl);

For i:=1 to PDlin-1 do

Begin

If (Predl[i]=' ') and (Predl[i+1]<>' ')

then ns:=i+1;

If (Predl[i]<>' ') and

((Predl[i+1]=' ') or (Predl[i+1]='.'))

then

Begin

k:=k+1;

MSlov[k]:=Copy (Predl,ns,i-ns+1);

end;

end;

For i:=1 to k do {открываем цикл по количеству слов}

if MSlov[i][1]=’а’

{если первый символ i–того слова равен ’а’}

then {то}

writeln(MSlov[i]); {выводим слово}

end.

Измените программу таким образом, чтобы на экран выводились слова, начинающиеся и оканчивающиеся на одну и туже букву.

Задание 3. Наберите заданную программу, печатающую на экран слова произвольного текста, имеющие в своей записи хотя бы одну букву “а”.

Program slovа_s_а;

var

Predl: string;

MSlov: array [1..130] of string;

k,ns,i,PDlin,Pn,n: integer;

Begin

k:=0;

write ('Введите предложение: ');

read (Predl);

Predl:=' '+Predl;

PDlin:=length (Predl);

For i:=1 to PDlin-1 do

Begin

If (Predl[i]=' ') and (Predl[i+1]<>' ')

then ns:=i+1;

If (Predl[i]<>' ') and

((Predl[i+1]=' ') or (Predl[i+1]='.'))

then

Begin

k:=k+1;

MSlov[k]:=Copy (Predl,ns,i-ns+1);

end;

end;

For i:=1 to k do {открываем цикл по количеству слов}

Begin

n:=0;

For j:=1 to length(MSlov[i]) do

{открываем цикл по количеству символов в i–том слове}

if MSlov[i][j]=’а’

{если j-тый символ i–того слова равен ’а’}

then {то}

n:=n+1; {увеличили счетчик символов 'a'}

if n>0 then writeln(MSlov[i]);

end;

end.

Измените программу таким образом, чтобы на экран выводилось слово с максимальным содержанием букв 'a'.