Министерство образования и науки Республики Казахстан

Средняя общеобразовательная профильная школа

дифференцированного обучения №17 города Павлодара

Символьные и строковые величины

Методические указания

по дисциплине «Информатика»

к выполнению практической работы №7

программирование в Turbo Pascal

(для внутришкольного пользования)

Павлодар, 2009 год

СОГЛАСОВАНО:

Заместитель директора по УВР

Руководитель методического объединения учителей математики, информатики, физики

«20» августа 2007г.

УТВЕРЖДАЮ:

Директор СОПШДО №17 города Павлодара


«20» августа 2007г.

Автор: Преподаватель математики и информатики

СОПШДО №17 г. Павлодара

Практическая работа №7

Тема: Символьные и строковые величины в Паскале

Цель: получение навыков работы с символами и со строками в Паскале

1.  Теоретический материал

Тип данных char. Операции над символами

В большинстве применений компьютера алфавитно-цифровая информация используется наряду с числовой информацией. Прежде чем мы сможем написать программу, которая манипулирует алфавитно-цифровыми знаками (литерами), нам потребуется тип данных для их представления. для этих целей в языке Паскаль предусмотрен тип данных char.

Так же, как переменная типа integer может хранить одно целое число, переменная типа char может хранить один символ.

Например,

Var

Alpha : char;

Begin

Alpha :='p'

Alpha :='+'

Alpha :='3'

Alpha :=' '

Alpha :=''''

Первый оператор присваивания записывает в переменную Alpha литеру р.

Второй делает Alpha равной литере плюса (+).

Третий делает Alpha равной символу 3. Заметим, что чисвол 3 отличается от целого числа 3 тем, что она не может быть использована в арифметических операциях.

Четвертый оператор присваивания делает Alpha равной литере пробела. Хотя литера пробела при печати не изображается, она является обыкновенным значением типа char.

Последний оператор присваивания делает Alpha равной литере апострофа, это специальный случай, так как знак апострофа используется для ограничения значения типа char.

Мы будем пользоваться множеством литер, находящимся в таблице кодов, называемой ASCII – американский стандартный код обмена информацией.

Все символы упорядочены, т. к. имеют свой личный номер. Важно, что соблюдаются следующие отношения:

'A' < 'B' < 'C' < ... < 'X' < 'Y' < 'Z' '0' < '1' < '2' < ... < '7' < '8' < '9'

Для проверки равенства или неравенства переменных типа char могут использоваться операторы булевого сравнения.

Задача. Написать программу, которая считывает две литеры и печатает больше, равна или меньше первая литера второй.

Program Sravnenie;

Var

First, Second : char;

Begin

write ('Введите две литеры через пробел ');

readln (First, Second);

write ('Первая литера ');

if First > Second

then

write ('больше второй. ');

else

if First = Second

then

write ('равна второй. ');

else

write ('меньше второй. ');

Еnd.

Так как char – порядковый тип, то к его значениям применимы следующие функции.

Succ – возвращает следующий символ литерного множества;

Pred – возвращает предыдущий символ литерного множества;

Ord – возвращает значение кода литеры;

Chr – возвращает значение литеры, является обратной по отношению к функции Ord.

Например,

Succ('0')='1' – символ, следующий за символом 0, равен символу 1.

Pred('3')='2' – символ, предшествующий символу 3, равен 2;

Chr(65)='A' – символ, соответствующий коду 65, равен А;

Ord('A')=65 – код символа А равен 65

Строка. Тип данных string. Строковые переменные, их описание. Длина строки. Операции над строками

Строка (string) – это последовательность литер. Литерные строки уже использовались нами в качестве аргументов оператора Write при изучении темы "Ввод-вывод".

Тип данных (string) определяет строки с максимальной длиной 255 символов. Переменная этого типа может принимать значения переменной длины.

Например,

MaxLine : string;

City : string[30]

Строковая переменная может иметь атрибут длины, определяющий ее максимальную длину.

Текущая длина строковой переменной может быть определена с помощью встроенной функции Length. для заданного значения типа string эта функция возвращает целое значение, показывающее количество литер в строке.

Выражения, в которых операндами служат строки, называются строковыми выражениями.

Над строками определены две операции:

1. Операция сцепления (+) применяется для сцепления нескольких строк в одну.

Например,

SumStr := 'Турбо'+'Паскаль'+'7.0'

2. Операции отношения (=, <>, >, <, >=, <=) проводят сравнение двух строк слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в стандартной таблице обмена информацией. Результат выполнения операций отношения над строками всегда имеет булевой тип.

Например, выражение 'MS-DOS'<'MS-Dos' имеет значение True

Если строки имеют различную длину, но в общей части символы совпадают, считается, что более короткая строка меньше, чем более длинная.

НЕ нашли? Не то? Что вы ищете?

Строки считаются равными, если они совпадают по длине и содержат одни и те же символы на соответствующих местах в строке.

Для присваивания строковой переменной результата строкового выражения используется оператор присваивания. Если значение переменной после выполнения оператора присваивания превышает по длине максимально допустимую при описании величину, то все лишние символы справа отбрасываются.

Допускается смешение в одном выражении операндов строкового и символьного типа.

К отдельным символам строки можно обратиться по номеру (индексу) данного символа в строке.

Например, чтобы обратиться к третьему символу строки SumStr надо записать SumStr[3]. Запись SumStr[0] дает значение текущей длины строки.

Для эффективного программирования алгоритмов обработки текстов необходимо хорошо понимать внутреннюю структуру представления строк в памяти. Строки реализованы достаточно просто. Для хранения строковых переменных выделяется память, на единицу большая максимальной длины строки. Начальный байт этой памяти отводится для хранения текущей длины строки, следующие байты - для символов самой строки. Так как элементы строк стандартно нумеруются целыми числами, начиная с единицы, байт с длиной строки можно считать нулевым ее элементом. Такая структура памяти допускает прямой доступ к ее элементам.

Важно отметить, что имеется возможность динамически управлять текущей длиной строки. Следующая программа показывает автоматическое изменение длины строки после тех или иных операций с нею. Обратите внимание, что общий (определяемый с помощью стандартной функции SizeOf) размер памяти, отведенной для хранения строки все время остается неизменным.

Program StringLength;

Var

S : string; {макс. длина строки = 255}

Begin

S:=''; {пустая строка}

writeln (S,' ',SizeOf(S),' ',Length(S)); {размер=256, длина=0}

S:='Пример длинной строки'; {присваиваем строке некоторое значение}

writeln (S,' ',SizeOf(S),' ',Length(S)); {размер=256, длина=21}

Delete(S,7,8); {удаляем из строки 8 символов, начиная с 7}

writeln (S,' ',SizeOf(S),' ',Length(S)); {размер=256, длина=13}

S:=S+' символов'; {добавляем к строке строку}

writeln (S,' ',SizeOf(S),' ',Length(S)); {размер=256, длина=22}

End.

Внимание! При решении задач со строковыми переменными Вы можете столкнуться с распространенной трудноуловимой ошибкой, когда после присваивания некоторым элементам строки символов ни содержимое, ни длина строки не изменяются.

Очень важно понимать, что при доступе к некоторому элементу строки значение ее текущей длины не проверяется. Это иллюстрирует следующая программа:

Program StringElements;

Var

S : string; {макс. длина строки = 255}

Begin

S:='ABCD'; {инициализация строки}

writeln (S,' ',Length(S)); {вывод строки и ее длины}

S[5] := 'E'; {присваивание элементу строки}

writeln (S,' ',Length(S)); {ни сама строка, ни ее длина не изменились}

End.

Присваивание пятому элементу строки некоторого значения не изменяет длину строки, что подтверждает вывод на экран ее содержимого и длины (конечно само присваивание реально произошло, но на значение текущей длины строки в нулевом байте это никакого влияния не оказало). Работа с элементами строки без учета ее текущей длины и является ошибкой программиста. Посмотрите следующую программу:

Program StringElements2;

Var

Str : string[26]; {длина строки = 26}

i : integer;

Begin

Str:='A';

for i := 1 to 26 do

Str[i] := Chr (Ord('A')+i-1);

writeln(Str);

End.

Предполагается, что данная программа должна сформировать строку из 26 символов, содержимым которой является последовательность заглавных букв латинского алфавита. Однако вызов процедуры writeln показывает, что содержимым переменной Str будет строка из одного символа 'А'. Природа совершенной ошибки заключается в том, что присваивание значений элементам строки не влияет не текущую длину, которая была установлена равной 1 при первом присваивании. Поэтому правильной будет следующая программа:

Program stringElements3;

Var

Str : string[26]; {длина строки = 26}

i : integer;

Begin

S:='';

for i := 'A' to 'Z' do

Str := Str + i;

writeln(Str);

End.

Операция конкатенации, как и все стандартные операции, работающие со строками, в отличие от поэлементного присваивания, изменяет длину строки, что дает корректный результат. Кроме того, вторая программа работает непосредственно с символами букв. Наконец, не следует забывать инициализировать строку перед ее заполнением (первый оператор программы). В противном случае, так как начальная длина строки является неопределенной, можно получить произвольный результат; не стоит рассчитывать на то, что в нулевом байте стоит ноль.

Для обработки строковых данных можно использовать встроенные процедуры и функции:

1. Delete (Str, Poz, N) – удаление N символов строки Str, начиная с позиции Poz.

2. Insert (What, Where, Poz) – вставка строки What в строку Where, начиная с позиции Poz.

3. Copy (Str, Poz, Nstr) – выделяет строку длиной Nstr, начиная с позиции Poz, из строки Str.

4. Concat (Str1,Str2,...,StrN) – выполняет сцепление строк в том порядке, в каком указаны в списке параметров.

5. Poz (What, Where) – обнаруживает первое появление подстроки What в строке Where.

6. UpCase (Ch) – преобразует строчную букву в прописную.

7. Str (Number, Stroka) – преобразует число в строку.

8. Val (Stroka, Number, Code) – преобразует строку в число и выдает код правильности преобразования.

Стандартные функции для работы со строками
(concat, copy, length, pos, upcase).

Функция Length

Встроенная функция Length (длина) позволяет определить фактическую длину текстовой строки, хранящейся в указанной переменной (а не величину предельного размера строки, установленную при декларации):

Program DemoFunctionLength;

Var

Word : string;

Begin

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

readln(Word);

writeln('Это слово состоит из ',Length (Word),' букв');

End.

Примечание. При подсчете фактической длины строки учитываются все входящие в нее символы, в том числе и пробелы.

Функция Upcase

Функция Upcase позволяет преобразовывать символ любой литеры из строчного в прописной. Эта функция рассчитана на обработку отдельного символа. Поэтому для обработки строки символов с помощью этой функции приходится организовывать цикл.

Program DemoFunctionUpcase;

Var

Word : string;

i : Byte;

Begin

Word := 'фирма Microsoft';

for i := 1 to Length (Word) do

Word[i] := UpCase (Word[i]);

writeln(Word); {выводится текст 'фирма MICROSOFT'}

End.

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

Примечание. Русские литеры не могут обрабатываться этой функцией.

Для того, чтобы преобразовать в заглавные строчные буквы русского алфавита, применяют оператор выбора Case:

. . .

case Word[i] of

'a' : Word[i] := 'A';

'б' : Word[i] := 'Б';

'в' : Word[i] := 'В';

. . .

end;

. . .

Функция Copy

Функция Copy позволяет копировать фрагмент некоторой строки из одной переменной в другую. Вызывая эту функцию нужно указать следующие параметры:

• имя строки, из которой должен извлекаться копируемый фрагмент,

• позицию в строке, начиная с которой будет копироваться фрагмент,

• число копируемых символов.

Program DemoFunctionCopy;

Var

Word : string;

Word1 : string[20];

Begin

Word := 'фирма Microsoft';

writeln(Word); {выводится текст 'фирма MICROSOFT'}

Word1 := Copy (Word,1,5);

writeln(Word1); {выводится текст 'фирма'}

End.

Примечание. Если начальная или конечная позиции копируемого текста находятся вне пределов исходной строки символов, то сообщение об ошибке не выдается. Результатом выполнения операции в первом случае будет строка нулевой длины, во втором - фрагмент от начальной позиции копирования до конца исходной строки.

Функция Pos

C помощью функции Pos Вы можете осуществить поиск некоторого фрагмента в строке. Если заданный фрагмент в строке присутствует, то функция возвращает номер позиции, с которой он начинается. Если фрагмент не найден, то функция возвращает нуль.

Program DemoFunctionPos;

Var

Word : string;

SearchWord : string[20];

Position : Byte;

Begin

Word := 'фирма Microsoft';

writeln(Word); {выводится текст 'фирма MICROSOFT'}

writeln ('Введите искомый текст ');

readln (SearchWord);

Position := Pos(SearchWord, Word);

if Position <> 0

then

begin

write ('Фрагмент <',SearchWord,'> содержится в строке <',Word);

writeln ('>, начиная с позиции ',Position );

end

else

writeln('Фрагмент <',SearchWord,'> не содержится в строке <',Word); End.

Примечание. Функция Pos требует полного совпадения искомого фрагмента и фрагмента строки, в которой производится поиск. Причем большие и маленькие буквы считаются различными символами.

Функция Concat

Функция Concat (Str1,Str2,...,StrN) выполняет конкатенацию (или сцепление) строк Str1,Str2,...,StrN в том порядке, в каком они указаны в списке параметров. Сумма символов всех сцепленных строк не должна превышать 255.

Program DemoFunctionConcat;

Var

Word : string;

Word1, Word2 : string[20];

Begin

Word1 := 'фирмы ';

Word2 := 'Microsoft';

Word := Concat('Компьютеры ',Word1,Word2);

writeln(Word); {выводится текст 'Компьютеры фирмы Microsoft'}

End.

Стандартные процедуры для работы со строками
(delete, insert, str, val).

Процедура Insert

Процедура Insert вставляет в исходную строку, начиная с указанной позиции, какую-либо другую строку. Оператор Insert (Word1,Word2,5) указывает, строку Word1 необходимо вставить в строку Word2, начиная с 5-ой позиции.

Процедура Delete

Процедура Delete удаляет в исходной строке фрагмент определенной длины, начиная с указанной позиции. Так, оператор Delete(Word1,2,3) удаляет из указанной строки фрагмент, длиной в три символа, начиная со второго.

Процедура Str

Общий вид Str(Chislo, Stroka)

Процедура Str преобразовывает числовое значение переменной Chislo в строковую переменную Stroka. После первого параметра может указываться формат, аналогичный формату вывода.

Program DemoProcedureStr;

Var

Word : string;

Chislo : integer;

Begin

Chislo := 1560;

Str(Chislo:8, Word);

writeln(Word); {выводится строка ' 1500'}

End.

Процедура Val

Общий вид Val(Stroka, Chislo, Code)

Процедура Val преобразует значение строки Stroka в величину целочисленного или вещественного типа и помещает результат в Chislo. Значение строковой переменной Stroka не должно содержать пробелов в начале и в конце. Code ­ целочисленная переменная. Если во время операции преобразования ошибки не обнаружено, значение Code равно нулю, если же ошибка обнаружена, Code будет содержать номер позиции первого ошибочного символа, а значение Chislo будет не определено.

Program DemoProcedureVal;

Var

Word : string;

Chislo, Code : integer;

Begin

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

readln(Word);

Val(Word, Chislo, Code); {преобразование строки в число}

if Code <> 0

then

writeln('Ошибка! В позиции ',Code,' не цифра!',);

End.

2. Решение задач

№ 1. Дана строка, состоящая из L символов (10<L£80). Вывести на экран в алфавитном порядке только строчные буквы русского алфавита (буква выводится на столько раз, сколько раз она встречается в строке).

Решение. Перебирая все строчные буквы русского алфавита для каждой будем проверять: если она есть – выводим на экран, а в позиции, где она стоит – удаляем, и опять проверяем наличие этой буквы. Если буквы уже нет (или не было вообще) – берем следующую по алфавиту букву.

Program RusLit;

Var St:String;

C:Char;

Begin Write (¢Введите строку¢);

Readln(St);

For C:= ‘a’ To ‘я’ Do {Внешний цикл перебирает буквы};

While Not(Pos(C, St) = 0) Do {Внутренний цикл проверяет наличие}

Begin Delete(St, Pos(C, St),1); {буквы в строке}

Write(C)

End;

Writeln

End.

2. Дана строка, содержащая N слов (2£N£10), разделенных пробелами. Вывести на экран те слова, у которых первая буква входит него второй раз.

Решение. Так как слова разделены пробелами, задачу можно решить, циклически повторяя действия: 1) выделяем из строки первое слово (все символы до первого пробела); 2) если слово удовлетворяет заданному условию, выводим его на экран; 3) удаляем первое слово из строки, чтобы второе слово стало первым, что позволит с ним проводить вышеперечисленные действия.

Program SI;

Var St, St1:String;

L:Integer;

Begin Write (‘Введите строку:’);

Readln(St);

While Not(Pos(‘ ‘,St) =0 ) do

Begin St1:=Copy(St,1,Pos(‘ ‘,St)-1); {Выделяем все слово из строки}

If Not(Pos(St1[1],Copy(St1,2,Length(St1)-1))=0) Then

Writeln(St1);

{Выводим на экран слово, если оно удовлетворяет условию}

Delete(St,1,Length(St1)+1) {Удаляем из строки первое слово}

End;

{В St осталось одно слово; необходимо проверить, удовлетворяет

ли оно условию}

If Not (Pos(St[1],Copy(St,2,Length(St)-1))=0) Then Writeln(St)

End.

№ 3. Программа убирает пробелы. Если введена пустая строка – программа выдает сообщение.

Program DelSpace;

Var St:String;

Begin Write (¢Введите строку¢);

Readln(St);

If Length(St) = 0 Then Writeln (¢Введена пустая строка¢);

else Begin While St[Length(St)] = ¢ ¢ Do Delete(St, Length(St),1);

Writeln((¢Результат:¢, St)

End;

End.

№ 4. Бегущая строка. Пример программы осыпающихся букв. Строки в графическом режиме.

Перед Вами две программы. Рассмотрите операторы, какова их роль?

Program A;

Uses

Crt;

Type

Stroka = string [100];

Var

Vhod, St1, InStr : Stroka;

Begin

St1 := ' Поставьте мне пятерку!!!!';

ClrScr;

InStr := ' ';

St1:= St1+InStr;

for i := 1 to length(St1) do

begin

Delete(St1,1,1);

GoTo(1,10);

write(St1);

Delay(5);

Sound(1000);

Delay(90);

NoSound;

DelLine;

end;

End.

№ 4.1. Program A1;

Uses

Crt;

Var

y, i : integer;

Name, Bukva : string;

Begin

ClrScr;

write ('Введите что-нибудь ');

read (Name);

for i := Length(Name) downto 1 do

begin

Bukva := Name[i];

Delete(name, i,1);

for y := 1 to 25 do

begin

Window(19,1,80,25);

GotoXY(i, y);

write(Bukva);

Delay(50);

ClrScr;

write(Name);

end;

end;

End.

Примечание. При анализе алгоритмов Вам потребуются знания о некоторых операторах.

GoTo – оператор, устанавливающий курсор в заданное параметрами знакоместо в текстовом режиме. Первый параметр – номер столбца, второй – номер строки. Общее количество строк 25, а столбцов – 80.

Delay – оператор задержки вывода на экран информации. Параметр равный 1000 соответствует 1 секунде.

Sound – оператор, включающий динамик компьютера с заданной частотой в виде параметра.

NoSound – оператор, выключающий динамик.

DelLine – оператор, выводящий строку из пробелов в строку, в которой находится курсор.

Window – оператор, организующий окно в текстовом режиме с координатами верхнего левого и правого нижнего углов, переданными как параметры.

№5. Программа спрашивает имя у пользователя, а затем приветствует его:
program Hello;
var s: string;
begin
write('Как Вас зовут: ');
readln(s);
write('Привет, ',s,'!');
readln;
end.

№6. Подсчитать в строке число букв А и В, если букв А больше, чем В, то удалить в строке все символы В.

program borlpasc;

var s:string;

k, l,i:integer;

begin

readln(s);k:=0;l:=0;

for i:=1 to length(s) do

begin if s[i]='?' then k:=k+1;

if s[i]='?' then l:=l+1

end;

writeln('A=',k);

writeln('B=',l);

if k>l then

begin for i:=1 to length(s) do

if s[i]='‚' then begin delete(s, i,1);

i:=i-1

end;

end;

write(s)

end.

№7. Дана символьная строка. Подсчитать в ней количество букв r, k, t.

program borlpasc;

var s:string;

a, b,c, i:integer;

begin

readln(s);

a:=0;b:=0;c:=0;

for i:=1 to length(s) do

begin if s[i]='r' then a:=a+1;

if s[i]='k' then b:=b+1;

if s[i]='t' then c:=c+1

end;

writeln('r=',a);

writeln('k=',b);

writeln(' t=',c);

end.

№8. Подсчитать количество слов в строке.

program borlpasc;

var s:string;

k, i:integer;

begin write('введите строку');

readln(s);

s:=' '+s;

for i:=1 to length(s) do

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

writeln(k);

end.

№9. Строка содержит английский текст. Подсчитать количество слов, начинающихся на букву b.

program borlpasc;

var s:string;

i, k:integer;

begin write('введите строку');

readln(s);

s:=' '+s; k:=0;

for i:=1 to length(s) do

if (s[i]=' ')and(s[i+1]='b') then k:=k+1;

writeln(k);

end.

№10. Определить, сколько раз в строке встречается данное слово.

program borlpasc;

var s, sl:string;

k, i:integer;

begin write('введите строку');

readln(s);

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

readln(sl);

k:=0;

while pos(sl, s)>0 do

begin k:=k+1;

delete(s, pos(sl, s),length(sl));

end;

writeln(k);

end.

№11. Дана символьная строка, заканчивается точкой. Найти длину самого длинного и самого короткого слова.

program borlpasc;

uses Crt;

var s, max, min, a,sl:string;

i:integer;

begin
ClrScr;
write('введите текст');

readln(a); s:=a; max:=''; min:='';

for i:=1 to length(s) do

begin

if s[i]=' ' then

begin if max<sl then max:=sl;

delete(s,1,length(sl)-i+1);

sl:=''

end

else sl:=sl+s[i];

end;

sl:='';i:=1;

repeat sl:=sl+a[i];

i:=i+1

until s[i]=' ';

for i:=pos(' ',a) to length(a) do

begin

if a[i]=' ' then

begin if sl<min then min:=sl;

delete(a, pos(' ',a),length(sl)-i+1);

sl:=''

end

else sl:=sl+a[i];

end;

writeln(max,' ',min);

end.

№12. Имеется строка символов, содержащая буквы латинского алфавита и цифры. Найти длину нибольшей последовательности цифр, идущих подряд.

program borlpasc;

var s, max, ch:string; i:integer; c:char;

begin

repeat

write('введите строку'); readln(s);

ch:=''; max:='';

for i:=1 to length(s) do

begin if (s[i]>=#48) and (s[i]<=#57) then ch:=ch+s[i]

else begin if length(ch)>length(max) then max:=ch;

ch:=''

end;

end;

writeln(length(max));

writeln('продолжить? (y/n)');

readln(c);

until c='n'

end.

№13. Преобразовать строку, заменив все : (двоеточия), встречающиеся среди первых n/2 символов и заменив точками все! (восклицательные знаки), встречающиеся среди символов, стоящих после n/2 символов.

program borlpasc;

var s:string; i:integer;

begin write('введите строку'); readln(s);

for i:=1 to length(s) do

if i<=0.5*length(s) then

begin if s[i]=':' then s[i]:='.'

end

else if s[i]='!' then s[i]:='.';

writeln(s)

end.

№14. Найти слова, начинающиеся и заканчивающиеся на одну и ту же букву

program borlpasc;

var sl, s:string; i:integer;

begin write('введите строку'); readln(s);

sl:=''; i:=1; s:=s+'.';

repeat

{for i:=1 to length(s) do}

if (s[i]=' ') or (s[i]=',') or (s[i]=';') or (s[i]='.') or (s[i]='!') or (s[i]='?')

then begin if sl[1]=sl[length(sl)] then writeln(sl);

sl:='';

end

else sl:=sl+s[i];

i:=i+1

until i>length(s);

end.

№15. Перевод числа из 2-ой в 10-ую систему счисления.

program borlpasc;

var s:string;

n, l,i:integer;

function stepen(x, y:integer):integer;

begin if y>0 then stepen:=stepen(x, y-1)*x

else stepen:=1

end;

Function Transl(A : String) : Integer;

Var L : Byte;

Begin

If A = ''

Then Transl := 0

Else Begin

L := length(A);

Case A[1] Of

'0' : Transl := Transl(Copy(A, 2, L - 1));

'1' : Transl := Stepen(2, L - 1) + Transl(Copy(A, 2, L - 1));

End

End

End;

begin write('введите число');

readln(s);

writeln('результат= ', Transl(S))

end.

№16. Проверить: содержит ли строка символов слово из трёх букв.

program borlpasc;

var s, slovo:string;

i, k:integer;

p:boolean;

begin write('введите строку');

readln(s);

i:=1;

p:=true;

slovo:='';

k:=0;

while s[i]<>'.' do

begin if s[i]<>' '

then begin slovo:=slovo+s[i];

k:=k+1

end

else begin if k=3

then begin writeln(slovo);

p:=false

end;

slovo:='';

k:=0;

end;

i:=i+1

end;

if k=3 then begin writeln(slovo);

p:=false

end;

if p then writeln('слово из 3 букв не найдено');

end.

№17. Подсчитать количество пробелов.

program borlpasc;

VAR S:STRING;

I:INTEGER;

BEGIN

WRITE('введите текст');

READLN(S);

i:=1;

repeat

BEGIN write(s[i]);

IF S[I]='*' THEN

BEGIN

DELETE(S, I,1);

I:=I-1

END

ELSE

BEGIN

INSERT(S[I],S, I);

I:=I+1

END

END;i:=i+1

until i>length(s);

writeln(s)

END.

№18.Программа: Упорядочение по алфавиту. Вводится последовательность латинских букв, признаком конца которой является пробел. Напечатать эту последовательность, упорядоченную по алфавиту.

uses crt;

var

c:array [1..255] of char;

k, j,i:byte;

x:char;

begin

clrscr;

i:=1;

while c[i]<>#32 do

begin

i:=i+1;

c[i]:=readkey;

clrscr;

if c[i]=#32 then exit;

for j:=2 to i do

begin

x:=c[j];

k:=j-1;

while (x<c[k]) and (k>0) do

begin

c[k+1]:=c[k];

k:=k-1;

end;

c[k+1]:=x;

end;

for j:=2 to i do write(c[j]);

end;

end.

№19. Программа считывает символы и затем запрашивает строку на ввод. Проверяет можно ли из введенных символов составить данную строку.

uses crt;

var

mas:Array[1..10]of Char;

s, s2:String;

i, b:Byte;

begin

clrscr;

Writeln('введите 10 символов ');

for i:=1 to 10 do

begin

write('№',i,': ');

readln(mas[i]);

end;

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

readln(s);

for i:=1 to Length(s) do

for b:=1 to 10 do

if s[i]=mas[b] then

begin

s2:=s2+mas[b];

mas[b]:=' ';

b:=10;

end;

if s2=s then write('из этих символов можно составить слов ',s)

else write(' из этих символов нельзя составить слов ',s);

readln;

end.

№20. Программа считывает строки и затем выводит самые длинные строки. Если их несколько, то выводятся все.

uses crt;

var

mas:Array[1..5]of String;

i:Byte;

begin

clrscr;

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

for i:=1 to 5 do

begin

write('строка № ',i,': ');

readln(mas[i]);

end;

writeln;

writeln('самые длинные введенные строки');

writeln;

for i:=2 to 5 do

begin

if Length(mas[1])=Length(mas[i]) then writeln(mas[i]);

if Length(mas[1])<Length(mas[i]) then mas[1]:=mas[i];

end;

writeln(mas[1]);

readln;

end.

№21. Ввести две строки, изъять из первой строки все слова, которые встречаются во второй.

program strings;

uses crt;

var

S1,S2,S3:string;

key:char;

flag:boolean;

t:byte;

procedure about;

var i: byte;

begin textcolor(15);

writeln(' Made by W. S. aka MunCHkin');

begin textcolor(15);

for i:=1 to 80 do write(chr(196));

end; textcolor(13);

writeln(' Task: From first string del all words that were found in second sring.');

begin

textcolor(15);

for i:=1 to 80 do write(chr(196));

end;

end;

function words:string;

var w, w1,l:string; b, i:byte;

begin

w1:='';

repeat

i:=random(16);

case i of

1:w:='absolute'; 9:w:='not';

2:w:='begin'; 10:w:='packed';

3:w:=' '; 11:w:='writeln';

4:w:='not'; 12:w:='uses';

5:w:='external'; 13:w:='MunCHkin';

6:w:='function'; 14:w:='FIOT';

7:w:='uses'; 0:w:='IS21';

8:w:='label'; 15:w:=' ';

end;

if (length(w1)+length(w))<78

then

begin

w1:=w1+w+' '; l:=w1;

end

else break;

until false;

{ b:=length(l);

repeat

begin

if l[b-1]=' ' then delete(l, b,1);

b:=length(l);

end;

until l[b-1]<>' '; }

words:=l;

end;

procedure rwords(flag:boolean;var r:string);

begin

if flag=false

then

begin

textcolor(10);

writeln(' 1st string:');

writeln; textcolor(15);

r:=words;

writeln(' ',r);

end

else if flag=true then

begin

writeln; textcolor(10);

writeln(' 2nd string:');

textcolor(15);

writeln;

r:=words;

writeln(' ',r);

end;

end;

procedure calc(m, n:string);

var max, i,f, b :integer;

q, rez, l :string;

begin

q:='';

while m[1]=' ' do delete(m,1,1);

n:=' '+n; m:=m+' ';

begin

repeat

m:=m+' ';

while m[1]=' ' do delete(m,1,1);

max:=pos(' ',m)-1;

rez:=copy(m,1,max);

if pos(rez+' ',n)<>0 then

begin

while pos(rez+' ',m)<>0 do

delete(m, pos(rez+' ',m),max+1);

end

else

begin

q:=q+copy(m,1,max)+' ';

delete(m, pos(rez+' ',m),max+1);

end;

repeat

b:=length(m);

if m[b]=' ' then delete(m, b,1);

until m[b]<>' ';

until m=''

end;

writeln; textcolor(10);

writeln(' New 1st string:');

textcolor(15);

writeln;

writeln(' ',q);

end;

begin

repeat

randomize;

clrscr;

about;

begin

rwords(false, s1);

rwords(true, s2);

calc(s1,s2);

end;

writeln;writeln;writeln;writeln;

writeln; writeln;

writeln;

writeln;

write(' Pres Enter to continue or Esc to end: ');

key:=readkey;

until key=#27;

end.

№22. Преобразование строчных букв в прописные.

program toupper;

const

BSIZE=80;{ Предельная длина строки }

var

buf:array[1..BSIZE] of char;

n:integer;{ длина вводимой строки }

i:integer;

begin

n:=0;

write('-> ');

repeat

if not EOLN

then begin

n:=n+1;

read(buf[n]);

end;

until EOLN or(n=BSIZE);

for i:=1 to n do

begin

case buf[i] of

' '..'Ї':buf[i]:=chr(ord(buf[i])-32);

'а'..'п':buf[i]:=chr(ord(buf[i])-80);

end;

end;

writeln;

for i:=1 to n do

write(buf[i]);

end.

№23. Удаление начальных пробелов строки.

program dledspa;

var

st:string[30];

begin

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

readln(st);

while (pos(' ',st) = 1) and (length(st)>0) do

delete(st,1,1);

write('строка без начальных пробелов',st);

end.

№24. Пример использования val для контроля вводимых с клавиатуры данных.

program month;

var

mon:integer;

buf:string[10];

code:integer; { код ошибки преобразования строки в число}

begin

repeat

write('Месяц->');

readln(buf); { вводится номер месяца как строка}

val(buf, mon, code);{ преобразуем строку в число }

if code<>0 { введенная строка не число  }

then writeln('Ошибка. Месяц следует задавать числом');

until code=0;

end.

№25. Проверить, является ли введенное слово палиндромом (перевертышем).

Program Primer;

Var

S, S1, S2: String;

I: Integer;

Begin

WriteLn;

WriteLn ('Vvedite frazy:');

ReadLn (S);

For I:=1 To Length(S) Do

S1:=S1+(S[I]);

WriteLn ('S1 = ',S1);

For I:=Length(S) DownTo 1 Do

S2:=S2+(S[I]);

WriteLn ('S2 = ',S2);

If S1=S2 Then WriteLn ('YES, Palindrom ')

Else Write ('No, Ne Palindrom');

ReadLn; End.

№26. Утроение всех букв строки.

Program Primer;

Var

A, S: String[50];

N, I: Integer;

Begin

WriteLn ('Vvedite imay: ');

ReadLn (A);

WriteLn ('Old imay = ', A);

S:='';

N:=Length (A);

For I:=1 To 3*N Do

S:=S+A[I]+A[I]+A[I];

Write('New imay = ', S);

ReadLn;

End.

№27. Десятикратное увеличение элементов строка.

Program Primer;

Var

S:String[10];

I:Integer;

Begin

WriteLN ('Kak vas zovyt?');

WriteLn ('Vvedite vashe imay');

ReadLn (S);

WriteLn ('Menya zovyt: ');

For I:=1 To 10 Do

WriteLn (S);

ReadLn;

End.

№28. Вывод элементов строки в обратном порядке.

Program Zadacha;

Var

S: String;

N, I: Integer;

Begin

S:='12345';

N:= Length(S);

For I:= N DownTo 1 Do

Write (S[I]);

ReadLn;

End.

№29. Расшифровка текста.

Program Primer_66;

Const

N=10;

Var

M: Array[1..N] Of String;

I, V, Cod: Integer;

S, S1, S2: String[30];

R2: Char;

Begin

WriteLn; WriteLn ('* RACSHIFROVKA TEXTA *');

For I:=1 To N Do

Begin

WriteLn ('Vvedite ', i, ' cod frazi: ');

ReadLn (M[I]);

S1:=S1+M[I];

Val(M[I], V, Cod);

S:=Chr(V);

S2:=S2+S;

End;

WriteLn; Write ('SHIFROVKA = ', S1);

WriteLn; Write ('RACSHIFROVKA = ' , S2);

ReadLn;

End.

3. Задание

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

Группа А (Тип данных char)

1. Вывести в одну строку AaBbCcDd.

2. Запросите у пользователя символ и выведите на экран 5 символов, следующих за ним в таблице американских стандартных кодов обмена информацией.

3. Запросите у пользователя символ и выведите на экран 5 символов, предшествующих данному в таблице американских стандартных кодов обмена информацией.

4. Определите и выведите на экран коды латинских прописных букв.

5. Определите и выведите на экран коды латинских заглавных букв.

6. Вывести в одну строку ZZYY...AA...ZY…A.

7. Составьте программу, проверяющую, является ли введенный символ буквой латинского алфавита или скобкой (учесть круглые, фигурные и квадратные скобки)

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

9. Вывести в одну строку ABCD...ZAABBCCDD…ZZ.

10. Вывести треугольник

Аяяяяяяяя…я

Бюююю…ю

Вээээээ…э

. . .

Эввв

Юбб

Яа.

11. Вывести треугольник

A B C...Y Z

B C …Y Z

C...Y Z

Группа B
(Тип данных string)

1. Запросите у пользователя числа, преобразуйте их в строки, произведите их сцепление в разных сочетаниях и вывод на экран. Не забудьте поставить между строками пробел, в конце точку и начать с заглавной буквы.

2. Запросите у пользователя несколько строк и выведите на экран их длину, результат конкатенации в некотором порядке и произведите проверку.

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

4. Запросите у пользователя две строки и сравните их длину.

5. Напишите алгоритм, проверяющий, является ли частью данного слова слово "сок". Если ответ отрицательный, то добавьте к введенному слову слово "нет" в начало и конец. Если ответ "да", то проверьте, не является ли оно словом «сокол».

6. Задайте пользователю вопрос, требующий однозначного ответа. Проверьте его правильность. Дайте пользователю несколько подсказок и попыток. Если он угадал, то спросите его имя, и выведите на экран поздравление, являющееся конкатенацией нескольких строк, дважды употребив его имя.

7. Запросите у пользователя строку и символ и выведите на экран сообщение, имеется ли среди символов строки заданный пользователем символ. Если – нет, то добавьте в его строку этот символ по выбору: в начало или в конец строки.

8. Загадайте пользователю детскую загадку. Дайте ему возможность трижды попробовать отгадать Вашу загадку. Сопровождайте работу программы диалогом с пользователем. Примените конкатенацию введенных строк.

9. Заставьте компьютер случайным образом загадать букву латинского алфавита. Предложите пользователю отгадать загаданную букву, помогая ему следующим образом. Если в очередной попытке пользователем введена буква, стоящая ближе к загаданной, чем предыдущая, то выводите пользователю сообщение "Горячее!", а если дальше – "Холоднее!".

10. Заставьте компьютер случайным образом загадать букву латинского алфавита. Предложите пользователю отгадать загаданную букву, помогая ему следующим образом. Если пользователем введена буква, стоящая слева от загаданной, то выводите пользователю сообщение "Правее!", а если справа – "Левее!".

Группа С
(Стандартные функции для работы со строками)

1. Задано существительное 1-го склонения, оканчивающееся на “а”. Проверьте правильность ввода. Напечатайте это слово во всех падежах. Применяйте подпрограммы.

2. Проверьте правописание “ча” и “ща” в тексте. Выведите на экран количество сделанных ошибок и исправленную строку. Применяйте подпрограммы.

3. Напишите алгоритм, подсчитывающий, сколько раз в данном слове х встречается данное слово у. Если слово у длиннее, чем х, то результат должен быть равен нулю. Применяйте подпрограммы.

4. Выясните, сколько раз встречается каждая буква алфавита в предложенном тексте. Применяйте подпрограммы.

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

6. Заданы фамилия, имя и отчество учащегося, разделенные пробелом. Напечатайте его фамилию и инициалы. Применяйте подпрограммы.

7. Проверьте правописание “жи” и “ши” в тексте. Выведите на экран количество сделанных ошибок и исправленную строку. Применяйте подпрограммы.

8. Запросите произвольное предложение и имя. Найдите ошибки употребления имени и исправьте их. Выведите на экран количество сделанных ошибок и исправленную строку. Применяйте подпрограммы.

9. Посчитайте количество цифр в веденной строке символов. Применяйте подпрограммы.

10. Посчитайте количество букв в введенной строке символов. Применяйте подпрограммы.

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

Группа D
(Стандартные процедуры для работы со строками)

1. Составьте алгоритм приписывания к каждому слову в начало заданной буквы в данной строке. Выведите полученную строку на экран. Используйте подпрограммы для решения каждой частной задачи.

2. Составьте алгоритм замены в какой-нибудь литерной величине всех букв "а" на буквы "б" и наоборот (при такой замене, например, из слова "баба" должно получиться слово "абаб"). Выведите полученную строку на экран. Используйте подпрограммы для решения каждой частной задачи.

3. Составьте алгоритм, утраивающий каждую букву в заданном тексте (при этом, например, из слова "кот" должно получиться слово "кккоооттт"). Выведите полученную строку на экран. Используйте подпрограммы для решения каждой частной задачи.

4. Составьте алгоритм, выясняющий, является ли данное слово "перевертышем" (так называются слова, читающиеся одинаково слева направо и справа налево, например: ПОТОП, КАЗАК). Используйте подпрограммы для решения каждой частной задачи.

5. Составьте алгоритм, вычеркивающий из данного текста любую букву. Выведите полученную строку на экран. Если такого символа нет, то выведите соответствующее сообщение. Используйте подпрограммы для решения каждой частной задачи.

6. Составьте алгоритм, который каждую встреченную в слове букву "б" заменял бы сочетанием букв "ку". Если такого символа нет, то выведите соответствующее сообщение. Выведите полученную строку на экран. Используйте подпрограммы для решения каждой частной задачи.

7. Как только в строке встретится символ "*", удалить все символы в строке после "*". Выведите полученную строку на экран. Если такого символа нет, то выведите соответствующее сообщение. Используйте подпрограммы для решения каждой частной задачи.

8. Вставить в строку слово по условию:

а) в конец строки

б) в начало строки

в) после первого слова.

Выведите полученную строку на экран. Используйте подпрограммы для решения каждой частной задачи.

9. В строке удалить все буквы "б","с","д",".". Если такого символа нет, то выведите соответствующее сообщение. Выведите полученную строку на экран. Используйте подпрограммы для решения каждой частной задачи.

10. Все слова, в которых буква “а” встречается более 2-х раз, удалить из текста. Выведите полученную строку на экран. Если такого символа нет, то выведите соответствующее сообщение. Используйте подпрограммы для решения каждой частной задачи.

11. Из строки удалить среднюю букву, если длина строки нечетная, иначе - удалить две средние буквы. Выведите полученную строку на экран. Используйте подпрограммы для решения каждой частной задачи.

Группа Е
(Задания повышенной трудности)

1. В тексте содержащем, несколько (много) предложений, найти все вхождения заданного слова и распечатать все включающие его предложения. Принять, что каждое предложение заканчивается точкой.

2. Дана строка символов до точки. Группы символов в ней между группами пробелов считаются словами. Определить, сколько слов содержат ровно 3 буквы "е".

3. Дан текст, состоящий из нескольких предложений. В каждом предложении найти самое короткое и самое длинное слова.

4. Дан текст. Посчитать количество слов в тексте.

5 Дан текст. Посчитать количество слов, заканчивающихся на заданную букву и перенести их в другую строку, написав через запятую. Вывести полученную строку на экран.

6. Даны 2 текста. Найти одно из общих слов, встречающихся в текстах.

7. Напишите программу, изменяющую порядок слов в строке по Вашему алгоритму.

8. Для каждого слова заданного предложения указать долю согласных. Определить слово в котором доля согласных максимальна.

9. Составьте программу шифрования текстового сообщения. Можно использовать такой способ шифровки. Шифровальщик задает ключ шифровки - целое число, которое определяет величину смещения букв русского алфавита, например ключ =3, тогда в тексте буква “а” заменяется на “г” и т. д. Используются все буквы русского алфавита.

10. В заданном предложении удалите каждое второе слово, а оставшиеся слова переверните. (Например, из текста “А роза упала на лапу азора” должен получиться текст “азор ан ароза”).

11. Составьте программу дешифрования текстового сообщения, зашифрованного программой задачи № 9.

Группа F

1.  Дана последовательность слов, разделенных между собой пробелами. Определите, сколько слов в последовательности начинается на букву М.

2.  Дана последовательность слов, разделенных пробелами. Вывести на экран те из них, которые содержат букву А.

3.  Дана последовательность слов, разделенных пробелами. Вывести слова в обратном порядке.

4.  Var St, St1, St2:String;

В переменную St помещено предложение, в котором слова разделены пробелами. В переменную St1 поместить слова, стоящие на нечетных местах, а в St2 – слова, стоящие на четных местах. Вывести значения St1 и St2 на экран.

5.  Дана последовательность слов, разделенных пробелами. Вывести на экран те из них, которые совпадают с начальным отрезком латинского алфавита (ab, abc, abcd и т. д.).

6.  Дана последовательность слов, разделенных пробелами. Вывести на экран те из них, которые совпадают с конечным отрезком латинского алфавита (yz, xyz и т. д.).

7.  Дана последовательность символов. Разбить ее на четыре последовательности: буквы русского алфавита, буквы латинского алфавита, цифры и другие символы.

8.  Дана последовательность слов, разделенных пробелами. Вывести на экран эти слова в алфавитном порядке.

9.  Дано арифметическое выражение, имеющее вид:

<число><знак><число>=<число>,

где <число> – любое целое положительное число, а <знак> – арифметический знак +, –, , /. (Например, 38+43=81, 56*43=275). Проверить, не является ли данное арифметическое выражение тождеством.

10.  Дана последовательность символов. Вывести их на экран по одному разу.

11.  Дана последовательность символов. Вывести на экран те из них, которые входят в последовательность два, три и более раз.

12.  Дана последовательность символов. Вывести на экран те из них, которые встречаются два раза.

13.  Дана последовательность слов. Вывести на экран те из них, которые встречаются три, четыре и более раз.

14.  Дана последовательность слов, разделенных пробелами. Вывести на экран все слова, предварительно перенеся последнюю букву в начало слова.

15.  Дана последовательность символов. Вывести на экран тот символ, который в последовательности встречается чаще остальных.

16.  Дано слово. Замените каждую букву слова числом, соответствующим позиции буквы в алфавите (а-1, … , г-4, …). Найти сумму этих чисел (например, слово математика даст результат 14+1+20+6+14+1+20+10+12+1=99).

17.  Из последовательности слов St, разделенных пробелами, вывести на экран те слова, которые следуют за данным словом Sl, в алфавитном порядке.

18.  Из последовательности слов St, разделенных пробелами, вывести на экран те слова, которые предшествуют данному слову, занесенному в переменную Sl, в алфавитном порядке.

19.  В строковую переменную St занесена последовательность чисел, разделенных запятыми. Определить, образуют ли эти числа арифметическую прогрессию (например: 2,4,6,8,10,12; 13,10,7,4,1).

20.  Дан текст из букв и цифр. Определить, равна ли длина текста сумме числовых значений цифр, входящих в текст.

Группа G

(Задачи для дополнительного решения)

1. Выясните, какая из букв (первая или последняя) встречается в заданном слове чаще.

2. Сколько букв "у" в слове стоит на четных местах?

3. В тексте, состоящем из латинских букв и заканчивающемся точкой, подсчитайте количество гласных букв.

5. Вычеркните i-ую букву слова.

6. Вычеркните из слова Х те буквы, которые встречаются в слове Z.

7. Напишите программу, которая вводит строку и выводит ее, сокращая каждый раз на 1 символ до тех пор, пока в строке не останется 1 символ.

8. Составьте программу вычисления суммы мест, на которых в слове Х стоят буквы "в" и "п".

9. Дана строка символов. Дано слово. Удалить из строки это слово.

10. Дана строка символов. Выделить подстроку между первой и второй точкой.

11. Дана строка символов до точки. Группы символов в ней между группами пробелов считаются словами. Определить, сколько слов начинается и кончается одной и той же буквой.

12. Дана строка символов до точки. Группы символов в ней между группами пробелов считаются словами. Определить, сколько слов содержат хотя бы одну букву "е".

13. Дана строка текста. В данной строке поменять местами каждые два слова из четырех первых. Если количество слов меньше заданного, то вывести об этом сообщение.

14. В заданном тексте найти и распечатать слово максимальной длины.

3. Написать (в порядке появления в тексте) все слова, длина которых попадает в интервал
[X, Y]. Здесь X и Y целые числа, задающиеся пользователем.

15. В данном предложении найти количество слов, содержащих удвоенную согласную (буквы латинские). Слова в предложении разделяются пробелами, в конце предложения - точка.

16. Предложите пользователю ввести дату в предложенном формате ДД-ММ-ГГ. День и месяц могут быть указаны одиночными числами, т. е. 1-5-94, а не . Выделите числа представляющие день, месяц и год, и выведите каждое число с соответствующей поясняющей надписью на экран.

17. Предложите пользователю ввести число в интервале от 1 до 5 включительно. Ваша программа должна позволять пользователю вводить любую последовательность символов. Организуйте проверку ввода, и если ввод не длиннее одного символа, либо нецифровой, либо не попадает в допустимый интервал, тогда выведите сообщение об ошибке. Если ввод неправилен, тогда предложите пользователю повторить попытку.

18. Даны два текста А и Б. Проверьте, можно ли из букв, входящих в А, составить Б. (Буквы можно переставлять, но каждую букву можно использовать не более одного раза).

19. В строке, любое количество подряд следующих пробелов замените единственным пробелом.

20. Вычислите длину самого короткого слова в предложении из трех слов, разделенных пробелами.

21. Написать (в порядке появления в тексте) все слова, длина которых попадает в интервал [X, Y]. Здесь X и Y целые числа, указывающие, соответственно, наибольшую и наименьшую длину

22. Составьте программу, вычеркивающую каждую третью букву слова Х в заданном предложении. В заданном предложении указать слово, в котором доля гласных (A, E, I, O) максимальна. Слова удобно хранить в строковом массиве.

4. Отчёт

Приготовьте для проверки все Ваши листинги
и файлы с решенными задачами по каждой теме.

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

1.  Как описываются строковые переменные?

2.  Как можно занести значение в строковую переменную?

3.  Соединение строк.

4.  Как найти необходимую подстроку в строке?

5.  Удаление символов из строки.

6.  Как сравниваются строки?

6. Контрольная работа

Вариант 1

1. Результатом вычисления функции Copy('программирование',4,5) будет слово

a)  миров

b)  грамм

c)  программ

d)  программа

e)  грамми

2. Результатом работы программы:

Var x : string[6];

Begin

x := ‘мим’+’озадаченный’; writeln(x);

End.

будет слово:

a)  мим озадаченный

b)  мимозадаченный

c)  мимоза

d)  озадаченный мим

e)  озадаченныймим

3. Составьте подпрограмму для решения задачи:

Выясните, какая из букв (первая или последняя) встречается в заданном слове чаще.

Вариант II

1. Результатом работы программы:

Program DemoUpcase;

Var

Word : string;

i : Byte;

Begin

Word := 'фирма Microsoft';

for i := 1 to Length (Word) do

Word[i] := UpCase (Word[i]);

writeln(Word); {выводится текст 'фирма MICROSOFT'}

End.

будет предложение:

a)  'Фирма MICROSOFT'

b)  'ФИРМА MICROSOFT'

c)  'фирма Microsoft

d)  'фирма MICROSOFT'

e)  'фирма microsoft

2. Вызывая функцию Copy не нужно указывать:

a)  •имя строки, из которой должен извлекаться копируемый фрагмент,

b)  •позицию в строке, начиная с которой будет копироваться фрагмент,

c)  •число копируемых символов;

d)  имя строки, в которую копируется данный фрагмент

e)  имя функции.

3. Составьте подпрограмму для решения задачи:

Сколько букв "у" в слове стоит на четных местах?

Вариант III

1. Результатом работы программы:

Program DemoFunctionLength;

Var

Word : string[9];

Begin

Word := 'Я люблю программировать';

writeln(Length (Word));

End.

будет:

a)  9

b)  23

c)  'Я люблю программировать'

d)  'Я люблю '

e)  256

2. Результатом работы программы:

Program DemoFunctionPos;

Var

Word : string;

SearchWord : string[20];

Position : Byte;

Begin

Word := 'Карл у Клары украл кораллы. Клара у Карла украла кларнет.';

SearchWord := 'Карл';

Position := Pos(SearchWord, Word);

writeln (Position );

End.

будет:

a)  1 и 37

b)  37

c)  28

d)  1

e)  0

3. Составьте подпрограмму для решения задачи:

Вычеркните i-ые буквы текста и посчитайте в нем количество введенных повествовательных предложений.

Вариант IV

1. Встроенная функция Length позволяет определить:

a)  фактическую длину текстовой строки, хранящейся в указанной переменной,

b)  величину предельного размера строки,

c)  предполагаемую величину строки,

d)  начальную длину строки,

e)  длину строки, заранее заданную пользователем.

2. Результатом работы программы:

Program DemoFunctionConcat;

Var

Word : string;

Word1, Word2 : string[20];

Begin

Word1 := ' Microsoft ';

Word2 := ' фирмы';

Word := Concat('Компьютеры ',Word1,Word2);

writeln(Word);

End.

будет текст:

a)  ' фирмы Компьютеры Microsoft',

b)  ' Microsoft Компьютеры фирмы ',

c)  'Компьютеры фирмы Microsoft',

d)  'Компьютеры Microsoft фирмы ',

e)  'Компьютеры Microsoft фирмы '.

3. Составьте подпрограмму для решения задачи:

Вычеркните из слова Х те буквы, которые встречаются в слове Z.

Вариант V

1. При подсчете фактической длины строки

a)  учитываются все входящие в нее символы,

b)  учитываются все входящие в нее символы, кроме пробелов,

c)  учитываются не все входящие в нее символы,

d)  учитываются все входящие в нее символы, исключая служебные символы,

e)  учитываются все входящие в нее символы, имеющиеся на клавиатуре.

2. Результатом работы программы:

Program DemoProcedureStr;

Var

Word : string;

Chislo : integer;

Begin

Chislo := 1560;

Str(Chislo:8, Word);

writeln(Word);

End.

будет текст:

a)  '1500',

b)  ' 1560',

c)  ' 1560',

d)  ',

e)  ''.

3. Составьте подпрограмму для решения задачи:

Напишите программу, которая вводит строку и выводит ее, сокращая каждый раз на 1 символ до тех пор, пока в строке не останется 1 символ.

Вариант VI

1. C помощью функции Pos Вы можете осуществить поиск некоторого фрагмента в строке. Если заданный фрагмент в строке присутствует, то:

a)  функция возвращает количество фрагментов в строке,

b)  функция возвращает нуль,

c)  функция вырезает найденный фрагмент из строки,

d)  функция заменяет найденный фрагмент на введенный ранее,

e)  функция возвращает номер позиции, с которой начинается фрагмент.

2. Результатом работы программы:

Program DemoProcedureVal;

Var

Word : string;

Chislo, Code : integer;

Begin

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

readln(Word);

Val(Word, Chislo, Code); {преобразование строки в число}

if Code <> 0

then

writeln(‘??????????????’);

End.

должно быть следующее сообщение:

a)  'Ошибка! В позиции ',Code,' не ноль!',

b)  'Ошибка! Цифра Code,' не закодирована!',

c)  'Прекрасно! Число в переменной ',Code,' !',

d)  'Ошибка! В позиции ',Code,' не цифра!',

e)  'Прекрасно! Число в переменной ', Chislo,' !'.

3. Составьте подпрограмму для решения задачи:

Составьте программу вычисления суммы мест, на которых в слове Х стоят буквы "в" и "п".

7. Список литературы

1.  . Turbo Pascal 7.0. Начальный курс. Учебное пособие – М: «Нолидж», 1997 .

2.  , , Трифонова в язык Паскаль. Учебное пособие. – М: Наука Гл. ред. физ.-мат. лит., 2000.

3.  . Язык программирования Turbo Pascal 6.0. – Мн.: Высшая школа, 2003.

4.  Ян Белецкий. Турбо Паскаль с графикой для ПК. – М.: Машиностроение, 2001.

5.  . Турбо Паскаль (в 3 книгах) – М.: Наука, 1992г.

6.  . Система программирования. Турбо Паскаль. – М.: Радио и связь, 1992.

7.  и др. Программирование в среде Турбо Паскаль 6.0. М.: Высшая школа, 1992

8.  Дональд Алкок. Язык Паскаль в иллюстрациях. – Мир, 1991.

8. Приложение

9.  Справочный материал

Идентификатор

Длина, байт

Диапазон (множество) значений

Целые типы

Integer

2

-32768 … 32767

Byte

1

0 … 255

Word

2

0 … 65535

Shortint

1

-128 … 127

Longint

4

- …

Вещественные типы

Real

6

2,9*10-39 … 1,7*1038

Single

4

1,5*10-45 … 3,4*1038

Double

8

5*10-324 … 1,7*10308

Extended

10

3,4*10-4932 … 1,1*104932

Логический тип

Boolean

1

true, false

Символьный

Char

1

все символы кода ASCII

Знак

Выражение

Типы операндов

Тип результатов

Операция

+

A + B

R, R

R

Сложение

I, I

I

I, R ; R, I

R

-

A - B

R, R

R

Вычитание

I, I

I

I, R ; R, I

R

*

A * B

R, R

R

Умножение

I, I

I

I, R ; R, I

R

/

A / B

R, R

R

Вещественное деление

I, I

R

I, R ; R, I

R

div

A div B

I, I

I

Целочисленное деление

mod

A mod B

I, I

I

Остаток от целочисленного деления

Функция

Тип аргумента

Тип результата

Результат

MaxInt

-

I

32767

Pi

-

R

Число p = 3.E+00

Abs(x)

I, R

I, R

Модуль аргумента x

Arctan(x)

I, R

R

Арктангенс x (радианы)

Cos(x)

I, R

R

Косинус x (радианы)

Exp(x)

I, R

R

ex - экспонента

Frac(x)

I, R

R

Дробная часть x

Int(x)

I, R

R

Целая часть x

Ln(x)

I, R

R

Натуральный логарифм x

Random

-

R

Псевдослучайное число в интервале [0, 1)

Random(x)

I

I

Псевдослучайное число в интервале [0, x)

Round(x)

R

I

Округление до ближайшего целого

Sin(x)

I, R

R

Синус x (радианы)

Sqr(x)

I, R

I, R

Квадрат x

Sqrt(x)

I, R

R

Корень квадратный из x

Trunc(x)

R

I

Ближайшее целое, не превышающее x по модулю