Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Стандартные строковые процедуры и функции

Поиск

Delete (Str,Poz,N) — удаление N символов строки Str, начиная с позиции Poz. Если значение Poz > 255, возникает программное прерывание.

Например:

Значение Str Выражение Результат
'абвгде'   'река Волга' Delete(Str, 4, 2);   Delete(Str, 1, 5); 'абве'   'Волга'

Insert (Strl, Str2, Роz) –вставка строки Str1 в строку Str2, начиная с позиции Poz.

Например:

Var

Sl, S2: string[ll];

S1:= ' ЕС ';

S2:= 'ЭВМ1841';

Insert(S1,S2,4);

В результате выполнения последнего выражения значение строки S2 станет равным 'ЭВМ ЕС 1841'.

Str (IBR,St) — преобразование числового значения величины IBR и помещение результата в строку St. После IBR может записываться формат, аналогичный фор­мату вывода. Если в формате указано недостаточное для вывода количество разря­дов, поле вывода расширяется автоматически до нужной длины.

Например:

Значение IBR Выражение Результат
4.8Е+03 Str(IBR:6,St) Str(IBR:10,St) Str(-IBR:3,St) '_1500' '____4800' '—76854'

Val (St,IBR,Code) — преобразует значение St в величину целочисленного или вещественного типа и помещает результат в IBR. Значение St не должно содер­жать незначащих пробелов в начале и в конце. Code — целочисленная переменная. Если во время операции преобразования ошибки не обнаружено, значение Code равно нулю, если ошибка обнаружена (например, литерное значение переводится в цифровое), Code будет содержать номер позиции первого ошибочного символа, а значение IBR не определено.

Например:

Значение St Выражение Результат
'1450' '14.2Е+02' '14.2А+02 Val(St,IBR,Cod) Val(St,lBR,Cod) Val(St,IBR,Cod) Code=0 Code=0 Code=5

Copy (St,Poz,N) — выделяет из строки St подстроку длиной N символов, начиная с по­зиции Poz. Если Poz > Length(St), то результатом будет пробел; если Poz > 255, воз­никнет ошибка при выполнении. Функция Length описана ниже. Poz, N — цело­численные выражения.

Например:

Значение St Выражение Результат
'ABCDEFG' 'ABCDEFG' Copy(St, 2, 3) Copy(St, 4, 10) 'BCD' 'DEFG'

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

Например:

Выражение Результат
Concat('AA','XX','Y') Соnсаt('Индекс','394063') 'AAXXY' 'Индекс 394063'

Length (St) — вычисляет текущую длину в символах строки St. Результат имеет целочисленный тип.

Например:

Значение St Выражение Результат
'123456789' 'System 370' Length(St) Length(St)  

Pos (Strl,Str2) — обнаруживает первое появление в строке Str2 подстроки Strl. Результат имеет целочисленный тип и равен номеру той позиции, где находится первый символ подстроки Strl. Если в Str2 подстроки Strl не найдено, результат равен 0.

Например:

Значение Str1 Выражение Результат
'abcdef ' 'abcdef' Pos('de',Strl) Pos('r',Strl)  

UpCase (Ch) — преобразует строчную букву в прописную. Параметр и резуль­тат имеют литерный тип. Обрабатывает буквы только латинского алфавита.

Значение Ch Выражение Результат
'd' UpCase(Ch) 'D'

 

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

Процедура/Функция Описание
Delete (St,Poz,N) Удаление N символов строки St, начиная с позиции Poz
Insert (Str1,Str2,Poz) Вставка строки Str1 в строку Str2, начиная с позиции Poz
Str (IBR, St) Преобразование числового значения величины IBR и помещение результата в строку St
Val (St,IBR,Cod) Преобразует значение St в величину целочисленного или вещественного типа и помещает результат в IBR. Значение St не должно содержать незначащих пробелов в начале и в конце. Cod - целочисленная переменная, в которой содержится 0, если ошибки не обнаружено, и номер позиции первого ошибочного символа, если произошла ошибка. Значение IBR в этом случае не определено.
Copy (St,Poz,N) Выделяет из строки St подстроку длиной N символов, начиная с позиции Poz.Poz N-целочисленные выражения
Concat (Str1,Str2,…,StrN) Выполняет сцепление строк Str1,Str2,…,StrN в том порядке, в каком они указаны в списке параметров.
Length (St) Вычисляет текущую длину в символах строки St.Результат имеет целочисленный тип.
Pos(Str1,Str2) Обнаруживает первое появление в строке Str2 подстроки Str1. Результат имеет целочисленный тип и равен номеру той позиции, где находится первый символ подстроки Str1.Если в Str2 подстроки Str1 не найдено, то результат равен нулю.
UpCase (Сh) Преобразует строчную букву в прописную. Параметр и результат имеют литерный тип.

Пример программы работы со стандартными строковыми процедурами и функциями

Program DemoString;

Uses Crt;

Var

Stroka:String[80];

Str1,Str2,Str3:String[20];

Search_Str:String[20];

Poz:byte;

Begin

Stroka:='ПРИВЕТ';

Writeln(Stroka);

Str1:=Copy(Stroka,2,3);

Writeln(Str1);

Writeln('Слово ПРИВЕТ состоит из',Length(Stroka):3,' букв');

Delete(Stroka,2,3);

Writeln(Stroka);

writeln;

Str2:='Строка - ';

Stroka:='Это текст!';

Writeln('Новая строка: ', Stroka);

Insert(Str2,Stroka,1);

Writeln(Stroka);

Repeat Until KeyPressed;

End.

Порядок выполнения работы

1. Изучить теоретические сведения по теме “Написание программы на языке Паскаль с использованием стандартных строковых процедур и функций”.

2. Получить у преподавателя индивидуальное задание и разработать программу для работы со стандартными строковыми процедурами и функциями согласно заданному варианту.

3. Показать работающую программу преподавателю.

4. Ответить на контрольные вопросы.

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

1. Понятие строки. Описание строкового типа данных.

2. Представление строки в Паскале. Обращение к символу строки. Длина строки.

3. Стандартные строковые процедуры и функции в языке Паскаль.

 

Лабораторная работа № 24

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

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

Краткие теоретические сведения

Строковые выражения

Выражения, в которых операндами служат строковые данные, называются строковыми выражениями. Они состоят из строковых констант, переменных, указателей функ­ций и знаков операций. Над строковыми данными допустимы операция сцепления и операции отношения.

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

Например:

Выражение 'А'+'Т'+' '+ '386' 'Турбо'+'Паскаль + '7.0' Результат 'AT 386' Турбо Паскаль 7.0'

Следует учитывать, что в операциях сцепления длина результирующей строки не должна превышать 255.

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

 

Выражение 'MS-DOS'<'MS-Dos' 'programm' >'programm' Результат True True

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

Для присваивания строковой переменной результата строкового выражения используется оператор присваивания (:=).

Пример1.

Strl:= 'Группа, учащихся';

Str2:= Strl + ' школы-лицея';

Fio:= 'Бочаров А.А.';

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

Например:

Описание А Выражение Значение А

A: String[6] А:= 'ГРУППА 1'; 'ГРУППА'

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

К отдельным символам строки можно обратиться по номеру (индексу) данного символа в строке. Индекс определяется выражением целочисленного типа, которое записывается в квадратных скобках сразу за идентификатором строковой перемен­ной или константы.

Например, выражения Str2[l+2] и Str2[6] обеспечат доступ к третьему('у') и шестому ('а') символам последнего значения переменной Str2 в приведенном выше примере (см. пример 1).

Запись Str2[0] дает доступ к нулевому байту, содержащему значение текущей длины строки. Значение нулевого байта не должно превышать 255, но нарушение этого правила не вызывает программного прерывания, так как директива компиля­тора R по умолчанию находится в пассивном состоянии {$R-}. Для обеспечения строгого контроля за диапазоном допустимых значений индекса следует перевести директиву R в активное состояние {$R+}. В этом случае компилятор активизирует дополнительные команды для проверки правильности диапазона. Обычно актив­ный режим R устанавливается на стадии отладки программ.

Примеры программ работы со строковыми переменными

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

В реализации данной программы разработаем процедуру ChangeChar, в которой будем просматривать строку с целью поиска позиции буквы "а". Это можно организовать с помощью цикла, используя while и стандартную функцию Pos('a', S). Как только функция Pos обнаруживает первое появление в строке S подстроки "а", она воз­вращает результат — номер позиции буквы "а". Счетчик найденных букв "а" увеличивается на единицу, а в эту позицию вписывается буква "б" и т. д., пока в строке есть буквы "а".

Текст программы может выглядеть следующим образом:

program Change_Letter; {Подсчет и замена букв "а" на "б"}

Var

S: String;

procedure ChangeChar(var S: string); {Процедура замены буквы "а" на "б"}

Var

N: byte;

begin

N:=0; {Обнуление числа букв "а"}

While PoS('a', S) > 0 do {Если найдена буква "а", то}

begin

N:=N+1; {Увеличить счетчик букв "а" на 1}

S[Pos('a', S)]:= 'б'; {Записать в позицию буквы "а" букву "б"}

end;

Writeln ('В слове было ',N, ' букв "а" ');

end;

begin {Основная программа}

Write('Введите исходную строку: ');

Readin (S);

ChangeChar(S); {Вызов процедуры замены "а" на "б"}

Writeln('Получилась строка ', S);

end.

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

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

Действие программы можно представить в виде трех самостоятельных фрагментов: ввод первой и второй строк и преобразование их в число, вывод на экран результата склеивания строк и суммирования чисел. Вывод на экран результатов организуем с помощью стандартных про­цедур вывода Writeln, а для ввода строк и преобразования их в числа создадим процедуру Inp_Str.

Для передачи данных между процедурой и основной программой введем формаль­ные параметры-переменные S типа String и Х типа Integer. Для преобразования введенной строки в число применим стандартную функцию Val, а для анализа операции преобразова­ния строки в число введем локальную переменную Cod целого типа. После преобразования строки в число проверим значение переменной Cod, если оно не равно 0, то в строке не все символы являются цифрами. Значение Cod укажет позицию первого символа в стро­ке, не являющегося цифрой. В этом случае напечатаем на экране сообщение об ошибке и. укажем позицию неверно введенного символа в строке, после чего прервем работу про­граммы, используя стандартную процедуру Halt.

Получим следующий текст программы:

program Demo_Val_Str;

Var

Sl, S2: String;

X1, X2: Integer;

(Процедура ввода строки цифр и преобразования строки в число}

procedure Inp_Str (var S: string; var X:integer);

Var

Cod: Integer; {Результат преобразования строки в число}

begin

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

Readln(S);

Val(S, X, Cod); {Преобразование строки S в целое число X}

if Cod <> 0 then {Если не все символы в строке являются циф­рами}

begin

WriteLn('Ошибка! В позиции',Cod,'введенной строки не циф­ра');

Halt(1); {Прерывание программы}

end;

end;

Begin {Начало основной программы}

Inp_Str(Sl,Xl); {Вызов процедуры ввода строки с фактическими параметрами-переменными S1,X1}

Inp_Str(S2,X2); {Вызов процедуры ввода строки с фактическими параметрами-переменными S2,X2}

Writeln('Результат склеивания строк -> ', Concat(Sl,S2));

Writeln('Сумма введенных чисел= ',Х1+Х2);

end.

Программа 3. Составить программу, определяющую, является ли введенное слово пе­ревертышем. Перевертышем называется слово, которое одинаково читается как сначала, так и с конца, например: шалаш, казак.

Как видно из определения, для выяснения, является ли слово перевертышем, необхо­димо сравнивать 1-й и последний символ в строке, 2-й и предпоследний, 3-й и предпредпоследний символ, и т. д. до середины слова. Если в процессе сравнения будет установлено от­личие сравниваемых символов, т. е. выясняется, что слово читается слева направо иначе, чем справа налево, значит можно сделать вывод, что это слово не является перевертышем. Если в процессе сравнения не будет выявлено отличие сравниваемых символов, значит это слово — перевертыш. Введем следующие переменные: для хранения слов — Word типа String с максимальным размером слов 30 символов и переменную I целого типа, указываю­щую номер позиции сравниваемого символа от начала строки.

Текст программы:

program Perev_Word; {Является ли введенное слово перевертышем?}

Var

I: byte;

Word: string[30];

Begin

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

Readln(Word);

{Проверяем символы пооче­редно от начала до середины слова}

for I:=1 to Trunc (Length (Word)/ 2) do

begin

{Если соответствующие символы не одинаковы}

if Word[I]<>Word[Length(Word)-I+1] then

begin

Writein (' Неперевертыи');

exit {Выход из цикла и завершение программы, дальше не имеет смысла сравнивать }

end;

end;

Writeln (' Перевертыш');

end.

Программа 4. Составить программу, которая обращает введенное слово, т. е. переставляет символы в слове в обратном порядке, например: Петя — ятеП, мама — амам, про-грамма — аммаргорп.

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

Исходя из этих рассуждений, введем следующие переменные: для хранения слова Word типа String с максимальным размером слов 30 символов и переменную I целого типа, ука­зывающую номер позиции сравниваемого символа от начала строки, а также символьную переменную Ch для временного хранения значения символа при обмене.

Текст программы может выглядеть так:

program Obr_Word;

Var

I: byte;

Ch: char;

Word: String[30];

Begin

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

Readln(Word);

{Перебирая символы пооче­редно от начала до середины слова}

for I:=l to Trunc(Length (Word)/2) do

begin {Обмениваем соответствующие символы}

Ch:=Word[I];

Word[I]:=Word[Length(Word)-I+1];

Word[Length(Word)-I+1]:=Ch;

end;

Write('Получилось слово ',Word);

end.

Порядок выполнения работы

1. Изучить теоретические сведения по теме “Написание программы на языке Паскаль с использованием строковых переменных”.

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

3. Показать работающую программу преподавателю.

4. Ответить на контрольные вопросы.

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

1. Понятие строковых выражений.

2. Операции со строковыми данными.

3. Примеры программ работы со строками.

 

Лабораторная работа № 25



Поделиться:


Последнее изменение этой страницы: 2016-08-12; просмотров: 574; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.143.237.203 (0.009 с.)