Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 Типовые алгоритмы обработки одномерных массив...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
157 Кб
Скачать
☆

Задачи "Разбор предложения на слова"

  1. Заменить слово Slovo1 на слово Slovo2 в предложении. Вывести новое предложение на экран.

Решение задачи на Бейсике:

input "введите предложение"; a$

input "искомое слово"; slovo1$

input "слово-замена"; slovo2$

n=len(a$)

for i=1 to n

if mid$(a$,i,1)=" " then k=k+1

next

k=k+1 dim a$(k)

j=1

for i=1 to n

if mid$(a$,i,1)=" " then j=j+1 else a$(j)=a$(j)+mid$(a$,i,1)

next

for i=1 to k

if a$(i)=slovo1$ then a$(i)=slovo2$

next

for i=1 to k

print a$(i); " ";

next

Решение задачи на Паскале:

var b: array [1..10] of string;

a, a1, a2: string;

n, i, j, k: integer;

begin

writeln ('предложение'); readln (a);

writeln ('искомое слово'); readln (a1);

writeln ('слово-замена'); readln(a2);

n:=length (a);

k:=0;

for i:=1 to n do

if copy(a,i,1)=' ' then k:=k+1;

k:=k+1;

j:=1;

for i:=1 to n do

if copy(a,i,1)=' ' then j:=j+1

else b[j]:=b[j]+copy(a,i,1);

for i:=1 to k do

if b[i]=a1 then b[i]:=a2;

for i:=1 to k do

writeln (b[i]);

end.

Тест:

Дано:

Мама мыла раму

мыла

красила

Результат:

Мама красила раму

  1. Вывести на экран самое длинное и самое короткое слово в предложении.

Идея решения: Введенное с клавиатуры предложение, воспользовавшись типовым алгоритмом "РАЗБОРА" ПРЕДЛОЖЕНИЯ НА СЛОВА помещаем в массив. Затем, применив типовой алгоритм ПОИСКА МАКСИМАЛЬНОГО ЭЛЕМЕНТА найдем самое длинное и самое короткое слово в предложении.

Решение задачи на Бейсике:

input "введите предложение"; a$

n=len(a$)

for i=1 to n

if mid$(a$,i,1)=" " then k=k+1

next

k=k+1

dim a$(k)

j=1

for i=1 to n

if mid$(a$,i,1)=" " then j=j+1 else a$(j)=a$(j)+mid$(a$,i,1)

next

min=len(a$(1))

max=len(a$(1))

for i=1 to k

if len (a$(i))>max then max=len (a$(i)): nmax=i

if len (a$(i))<min then min=len (a$(i)): nmin=i

next

print "самое короткое слово-"; a$(nmin)

print "самое длинное слово-"; a$(nmax)

Решение задачи на Паскале:

var a: array [1..100] of string;

b: string;

nmax, nmin, max, min, n, s, i, j, x, k: integer;

begin

readln (b);

n:=length(b);

k:=0;

for i:=1 to n do

if copy(b,i,1)=' ' then k:=k+1;

k:=k+1;

j:=1;

for i:=1 to n do

if copy(b,i,1)=' ' then j:=j+1

else a[j]:=a[j]+copy(b,i,1);

min:=length(a[1]);

max:=length(a[1]);

for i:=1 to k do

begin

if length(a[i])>max then

begin

max:=length (a[i]);

nmax:=i;

end;

if length(a[i])<min then

begin

min:=length (a[i]);

nmin:=i;

end;

end;

writeln ('самое короткое слово-', a[nmin]);

writeln ('самое длинное слово-', a[nmax]);

end.

Тест:

Дано:

Aaaa ss dddd fffff g hh

Результат:

самое короткое слово-g

самое длинное слово-fffff

  1. Ввести предложение. Выдать его на экран, поменяв порядок следования слов в предложении.

Идея решения: Введенное с клавиатуры предложение, воспользовавшись типовым алгоритмом "РАЗБОРА" ПРЕДЛОЖЕНИЯ НА СЛОВА помещаем в массив. Выводим массив с конца. Для организации хранения в массиве слов в обратном порядке необходимо воспользоваться зависимостью УМЕНЬШАЮЩЕЙСЯ ПЕРЕМЕННОЙ ОТ УВЕЛИЧИВАЮЩЕГОСЯ СЧЕТЧИКА ЦИКЛА и поменять порядок следования слов в массиве (проделайте это самостоятельно).

Решение задачи на Бейсике:

input "введите предложение"; a$

n=len(a$)

for i=1 to n

if mid$(a$,i,1)=" " then k=k+1

next

k=k+1

dim a$(k)

j=1

for i=1 to n

if mid$(a$,i,1)=" " then j=j+1 else a$(j)=a$(j)+mid$(a$,i,1)

next

for i= k to 1 step -1

print a$(i); " ";

next

Решение задачи на Паскале:

var b: array[1..10] of string;

a: string;

n, i, j, k: integer;

begin

writeln ('предложение');

readln (a);

n:=length (a);

k:=0;

for i:=1 to n do

if copy(a,i,1)=' ' then k:=k+1;

k:=k+1;

j:=1;

for i:=1 to n do

if copy(a,i,1)=' ' then j:=j+1

else b[j]:=b[j]+copy(a,i,1);

for i:=k downto 1 do

writeln (b[i]);

end.

Тест:

Дано:

Мама мыла раму

Результат:

раму мыла Мама

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

Идея решения: Введенное с клавиатуры предложение, воспользовавшись типовым алгоритмом "РАЗБОРА" ПРЕДЛОЖЕНИЯ НА СЛОВА помещаем в массив. Инвертируем содержимое каждого элемента массива. В приведенной ниже программе на Паскале в массиве хранится предложение с обратным порядком слов. Изменить порядок слов можно, воспользовавшись зависимостью УМЕНЬШАЮЩЕЙСЯ ПЕРЕМЕННОЙ ОТ УВЕЛИЧИВАЮЩЕГОСЯ СЧЕТЧИКА ЦИКЛА.

Решение задачи на Бейсике:

input "введите предложение"; a$

n=len(a$)

for i=1 to n

if mid$(a$,i,1)=" " then k=k+1

next

k=k+1

dim a$(k)

j=1

for i=1 to n

if mid$(a$,i,1)=" " then j=j+1 else a$(j)=a$(j)+mid$(a$,i,1)

next

rem=инвертируем слова==========================

for i= 1 to k

x$=" "

for j=len (a$(i)) to 1 step -1

x$=x$+mid$ (a$(i),j,1)

next j

a$(i)=x$

next i

for i= 1 to k

print a$(i); " ";

next

Решение задачи на Паскале:

var b: array[1..10] of string;

a: string;

n, i, j, k: integer;

begin

writeln ('предложение'); readln (a);

n:=length (a);

k:=0;

for i:=1 to n do

if copy(a,i,1)=' ' then k:=k+1;

k:=k+1;

j:=1;

for i:=n downto 1 do

if copy(a,i,1)=' ' then j:=j+1

else b[j]:=b[j]+copy(a,i,1);

for i:=k downto 1 do

writeln (b[i]);

end.

Тест:

Дано:

Мама мыла раму

Результат:

амаМ алым умар