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