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

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

Задача 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('vvedite s[', i:2, j:2,']');

readln(s[i,j]);

end;

writeln('ishodnii masiv');

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('V 1-m stolbze ',n_1, ' а');

writeln('V 4-m stolbze ',n_4, ' а');

writeln(‘Poluchenii masiv');

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 содержат количество букв «а» в первом и четвертом столбцах матрицы соответственно.

Контрольные вопросы

1) Для чего служит тип STRING?

2) Как задать количество символов в строковой переменной?

3) Сколько символов могут содержать строковые переменные a и b, если они были описаны как var a: string; b: string[15]?

4) Как можно обратиться в программе к первому символу строковой переменной s?

5) Как происходит сравнение строковых переменных?

6) Какими способами можно сцепить строковые переменные?

7) Поясните назначение и формат оператора Length.

8) Чему равно значение функции Length('program')?

9) Как удалить несколько символов из строковой переменной?

10) Как добавить несколько символов в строковую переменную?

11) Поясните назначение операторов Str и Val.

12) Для чего служит оператор UpCase?


Приложение А

  1. В существующем типизированном файле, элементами которого являются числа, изменить на заданное число: первый элемент.
  2. В существующем типизированном файле, элементами которого являются отдельные слова, изменить на заданное слово: первое слово.
  3. Изменить все элементы существующего типизированного файла, в котором записаны числа. Новые значения вводятся с клавиатуры. Рассмотреть: известно, что в существующем файле записано 10 чисел.
  4. Элементами типизированного файла являются отдельные слова. Изменить все его элементы на другие слова (их значение вводиться с клавиатуры). Рассмотреть: известно, что в существующем файле записано 12 слов.
  5. Имеется типизированный файл с числами. Изменить все его элементы, порядковый номер которых кратен трем. Новые значения вводятся с клавиатуры. Рассмотреть: известно, что в существующем файле записано 20 чисел.
  6. Имеется типизированный файл с целыми числами. Все его четные элементы заменить нулями.
  7. Имеется типизированный файл с числами. Найти: сумму первого и второго чисел файла.
  8. Имеется типизированный файл, элементы которого являются отдельные слова.. Определить, есть ли в файле слова, начинающиеся на букву к. В случае положительного ответа напечатать порядковый номер первого из них.
  9. Имеется типизированный файл, элементами которого являются отдельные буквы, составляющие последовательность орпцессор. Получить новый файл, в котором буквы слова процессор будут расположены правильно.
  10. Имеется типизированный файл, элементами которого являются отдельные буквы, составляющие последовательность кадировко. Получить новый файл, в котором буквы слова кодировка будут расположены правильно.
  11. Имеется типизированный файл, элементами которого являются отдельные буквы, составляющие последовательность олгаритм. Получить новый файл, в котором буквы слова алгоритм будут расположены правильно.
  12. Напечатать все элементы типизированного файла, каждая запись которого-число. Рассмотреть: известно, что в существующем файле 10 чисел.
  13. Напечатать все элементы типизированного файла, каждый элемент которого - отдельное слово. Рассмотреть: известно, что в существующем файле записано 12 слов.
  14. Имеется файл, в котором записано 12 вещественных чисел. Переписать все числа файла в массив в том же порядке.
  15. Имеется файл, элементы которого являются отдельные буквы. Получить слово, образованное этими буквами.
  16. Имеется типизированный файл с числами. Напечатать все его элементы с нечетным порядковым номером. Рассмотреть: известно, что в существующем файле записано 20 чисел.
  17. Имеется типизированный файл с числами. Напечатать все его элементы. Большие числа а. Рассмотреть: известно, что в существующем файле записаны 13 чисел.
  18. Имеется типизированный файл, элементами которого являются отдельные слова. Напечатать все слова, начинающиеся на букву с. Рассмотреть: известно, что в существующем файле записаны 30 слов.
  19. Имеется типизированный файл, в котором 18 целых чисел. Переписать все положительные числа файла в массив в том же порядке.
  20. Имеется типизированный файл, элементы которого являются отдельные буквы. Получить слово, образованное элементами файла, имеющими четный порядковый номер

Приложение Б

  1. Имеется текстовый файл. Напечатать: Все его строки, начинающиеся с буквы «Г»
  2. Имеется текстовый файл. Найти: количество строк, начинающихся с буквы «А» и «а».
  3. Имеется текстовый файл. Найдите длину самой длинной строки.
  4. Имеется текстовый файл. Выяснить, имеется ли в нем строка, начинающаяся с буквы «Т». Если да, то определите номер первой из этих строк.
  5. Имеется текстовый файл. Напечатать: первый символ первой строки.
  6. Имеется текстовый файл, в каждой строке которого первые два символа являются буквами. Получить: слово, образованное первыми буквами каждой строки.
  7. Имеется текстовый файл. Напечатать: его пятую строку.
  8. Имеется текстовый файл, содержащий 20 строк. Переписать каждую из его строк в массив в том же порядке.
  9. Имеется текстовый файл. Добавить в него строку из двенадцати черточек (------------), разместить ее после пятой строки.
  10. Удалить из текстового файла всю информацию. Дополнительный файл не использовать.
  11. Имеется текстовый файл. Переписать его строки в другой файл. Порядок строк во втором файле должен совпадать с порядком строк в заданном файле.
  12. Имеется текстовый файл. Переписать его строки в обратном порядке (справа налево) в другой файл. Порядок строк во втором файле должен совпадать с порядком строк в заданном файле.
  13. Имеется текстовый файл. Получить текст, в котором в конце каждой строки из заданного файла добавлен восклицательный знак.
  14. Имеется текстовый файл. Переписать в другой файл те его строки, в которых имеется более 30-ти символов.
  15. Имеется текстовый файл. Переписать в другой файл все его строки с заменой в них символа 0 на символ 1 и наоборот.
  16. Имеется текстовый файл. Все четные строки этого файла записать во второй файл, а нечетные в третий файл. Порядок следования строк сохраняется.
  17. Имеется два текстовых файла с одинаковым числом строк. Переписать с сохранением порядка следования строки первого файла - во второй, а строки второго файла - в первый. Использовать вспомогательный файл.
  18. Имеются два текстовых файла с одинаковым числом строк. Выяснить, совпадают ли их строки. Если нет, то получить номера первой строки, в которой эти файлы отличаются друг от друга.
  19. Имеется текстовый файл. Напечатать: первый символ, второй строки.
  20. Имеется текстовый файл, в каждой строке которого первые два символа являются буквами. Получить: последовательность символов, образованную s-ми символами каждой строки.

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  




Подборка статей по вашей теме: