Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Паскаль / Методические разработки Turbo Pascal

.pdf
Скачиваний:
19
Добавлен:
28.03.2015
Размер:
517.8 Кб
Скачать

3

{Замена всех пробелов нулями} while Pos(' ', S) > 0 do

S[Pos(' ', S)] := '0'; writeln(S); {000123.5} end.

5.2.5 Функция UpCase(C: char):char преобразует строчную латинскую букву в прописную. Любые другие символы возвращаются без преобразования.

Пример: program pr7; var

s : string; begin s:='red';

s[1] := UpCase(s[1]);

writeln(s);

{Red}

end.

 

5.2.6 Процедура Delete(var S: string; Index, Count: integer) удаляет количество Count символов из строки S,

начиная с символа с номером Index. Пример использования процедуры: program pr8;

var

s: string; begin

s := 'Иванов Петр'; Delete(s,8,4);

writeln(s); {Иванов} end.

5.2.7 Процедура Insert(SubS: string; var S: string; Index: integer) вставляет подстроку SubS в строку S,

начиная с символа с номером Index. Пример:

program pr9; var

S: string; begin

S := 'Петр Иванов'; Insert('Петрович ', S, 6);

writeln(S);

{Петр Петрович Иванов}

end.

 

5.2.8 Процедура Str(X [:Width [:Decimals]]; Var S: string) преобразует число Х в строку символов S. Параметры Width и Decimals задают формат преобразования (общую ширину поля и количество символов в дробной части соответственно).

Пример: program pr10; var

S: string[12]; begin Str(5461, S);

writeln('Результат: '+S+' балл'); {Результат: 5461 балл} end.

5.2.9 Процедура Val(S: String; var X; var Code: integer) преобразует строковое значение S в его численное представление X типа Real или Integer. Параметр Code содержит признак ошибки преобразования (0 – нет ошибки), например:

program pr11;

var I, Code: Integer; S:string;

begin S:='7908';

Val(S, I, Code);

4

writeln(I,' ',Code);

{7908 0}

end.

 

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.

5

Задача 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];

6

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

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

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. Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. – М.: Нолидж, 2000. – 576 с.

7

2.Зуев Е.А. Система программирования Turbo Pascal. – М.: Радио и связь, 1992. – 288 с.

3.Рубенкинг Н. Турбо Паскаль для Windows. – М.: Мир, 1994. – 535 с.

4.Информатика. Базовый курс/ Под ред. С.В.Симоновича СПб: Питер, 2000. – С.560 - 611.

Приложение А Варианты заданий для выполнения

1.Определить, сколько фамилий в списке начинаются с буквы «А».

2.Определить, сколько фамилий в списке имеют окончание «ов».

3.Определить, сколько фамилий в списке заканчиваются на букву «н».

4.Определить, сколько букв в самой длинной фамилии списка.

5.Определить, сколько букв в самой короткой фамилии списка.

6.Найти самую длинную фамилию в списке. Если таких фамилий несколько, то распечатать их в одну строку.

7.Найти в списке все фамилии, начинающиеся с букв «В» или «Г».

8.Найти в списке все фамилии, имеющие окончание «ев».

9.Найти в списке все фамилии, начинающиеся со слога «Ма».

10.Определить, сколько фамилий в списке состоят менее чем из 6 букв.

11.Определить, сколько фамилий в списке состоят более чем из 8 букв.

12.Определить, сколько фамилий в списке состоят из 8 или 9 букв.

13.Найти в списке все фамилии, состоящие из 6 или 7 букв.

14.Выяснить, имеется ли в списке фамилия «Ганеев». Если имеется, то исправить ее на «Ганиев».

15.Выяснить, сколько раз в списке встречается фамилия «Иванов».

16.Поменять местами первую и последнюю фамилии в списке.

17.Заменить вторую фамилию в списке на «Нигматуллин» и удалить из списка третью фамилию.

18.Выяснить, имеются ли в списке фамилии «Петров». Если имеются, то удалить их из списка.

19.Упорядочить список в алфавитном порядке.

20.Определить, имеются ли в списке однофамильцы.