Методические указания и задания к лабораторным работам для учащихся ссуз специальности Т1002 «Программное обеспечение информационных технологий»

Вид материалаМетодические указания

Содержание


Delete (St,Poz,N)
Concat (Str1,Str2,…,StrN)
Length (St)
Пример программы работы со стандартными строковыми процедурами и функциями
Контрольные вопросы
Лабораторная работа № 24 Написание программы на языке Паскаль с использованием строковых переменных
Краткие теоретические сведения
Примеры программ работы со строковыми переменными
S типа String
Word типа String
Подобный материал:
1   ...   19   20   21   22   23   24   25   26   ...   32


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

Процедура/Функция

Описание


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)

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

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


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

    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.