Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pascal - лаб. по изучению.doc
Скачиваний:
6
Добавлен:
04.11.2018
Размер:
992.77 Кб
Скачать

5.3 Некоторые алгоритмы решения задач с использованием строковых переменных

Рассмотрим алгоритмы по работе со строковыми переменными на примере некоторых задач.

Задача 1. Задан список из 6 слов. Определить, сколько слов списка начинается на букву «п».

Одно из возможных решений данной задачи имеет следующий вид:

program z1;

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);

end.

 

В приведенной выше программе обработка слов происходит без их последующего хранения, т.е. на каждом шаге цикла переменной s присваивается значение очередного слова и происходит сравнение первой буквы s[1] данного слова s с образцом 'п'.

Примечание. Аналогично можно определить и количество слов, заканчивающихся на ту или иную букву. В этом случае достаточно ввести некоторую промежуточную целочисленную переменную len, служащую для обозначения длины слова s и вычисляемую как length(s), после чего проводить сравнение последней буквы s[len] слова s с образцом.

 

Задача 2. Задан список из 8 слов. Найти самое короткое слово в списке. Если таких слов несколько, то распечатать их в один столбец.

Решение поставленной задачи сводится к нескольким этапам: ввести список слов в виде массива строковых переменных; подсчитать длину каждой строки; определить наименьшую из длин; распечатать те строки массива, длина которых совпадает с наименьшей.

Пример возможного решения поставленной задачи:

program z2;

type t=array[1..8] of string[20];

tt=array[1..8] of integer;

var s: t;

n: tt;

i, min: integer;

begin

for i:=1 to 8 do

begin

writeln('Введите слово');

readln(s[i]);

n[i]:=length(s[i]);

end;

min:=n[1];

for i:=2 to 8 do

if min>n[i] then min:=n[i];

for i:=1 to 8 do

if n[i]=min then writeln(s[i]);

end.

 

В данной программе для обозначения слов используется массив строковых переменных s, для обозначений соответствующих им длин слов – целочисленный массив n. Наименьший элемент массива n хранится в виде переменной min.

 

Задача 3. Задана строка из двух слов, разделенных пробелом. Поменять в данной строке слова местами.

Пример программы-решения задачи:

program z3;

var s: string[40];

s1,s2: string[20];

i,n: integer;

begin

writeln('Введите строку');

readln(s);

n:=length(s);

i:=pos(' ', s);

s1:=copy(s, 1, i);

s2:=copy(s, i+1, n-i);

s:=s2 + ' ' + s1;

writeln(s);

end.

 

В данной программе переменная s служит для обозначения строки из двух слов, переменные s1 и s2 – для обозначения первого и второго слова строки соответственно. Алгоритм решения заключается в том, что сначала с помощью оператора pos выясняется, каким по счету символом в строке s находится пробел. Далее в строке выделяются две подстроки: одна включает все символы левее пробела (первое слово), другая – правее пробела (второе слово). В конце программы слова сцепляются в обратном порядке с использованием разделяющего их пробела.

 

Задача 4. Пусть задана некоторая произвольная цифра. Создать программу, позволяющую вывести на экран название данной цифры в прописном виде, например, «5 – пять», «8 - восемь» и т.д.

Возможное решение задачи:

program z4;

var n:integer;

s:string[30];

begin

writeln('Введите цифру');

readln(n);

case n of

0: s:='ноль';

1: s:='один';

2: s:='два';

3: s:='три';

4: s:='четыре';

5: s:='пять';

6: s:='шесть';

7: s:='семь';

8: s:='восемь';

9: s:='девять';

else

s:=' ­ не является цифрой';

end;

writeln(n,' - ', s);

end.

 

В данной программе используется оператор множественного выбора CASE, позволяющий сопоставить каждой введенной цифре ее название. При попытке ввода чисел, не являющихся цифрами, на экран выдается сообщение «не является цифрой».

 

Задача 5. Задан двумерный строковый массив, состоящий из 3 строк и 4 столбцов. Выяснить, сколько раз встречается латинская буква «а» в первом и последнем столбцах массива и поменять данные столбцы местами.

Пример решения задачи:

program z5;

type mas=array[1..3,1..4] of string[10];

var s: mas;

i, j, k, n_1, n_4: integer;

c: string[10];

begin

for i:=1 to 3 do

for j:=1 to 4 do

begin

writeln('Введите s[', i:2, j:2,']');

readln(s[i,j]);

end;

writeln('исходный массив');

for i:=1 to 3 do

begin

for j:=1 to 4 do write(s[i,j]:10,' ');

writeln;

end;

n_1:=0;

n_4:=0;

for i:=1 to 3 do

for k:=1 to 10 do

begin

if s[i,1][k]='a' then n_1:=n_1+1;

if s[i,4][k]='a' then n_4:=n_4+1;

end;

for i:=1 to 3 do

begin

c:=s[i,1];

s[i,1]:=s[i,4];

s[i,4]:=c;

end;

writeln('В 1-м столбце ',n_1, ' а');

writeln('В 4-м столбце ',n_4, ' а');

writeln('Полученный массив');

for i:=1 to 3 do

begin

for j:=1 to 4 do write(s[i,j]:10,' ');

writeln;

end;

end.

 

Здесь вспомогательная переменная с используется при перестановке местами элементов первого и четвертого столбцов; переменные n_1 и n_4 содержат количество букв «а» в первом и четвертом столбцах матрицы соответственно.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]