Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль(методичка).doc
Скачиваний:
36
Добавлен:
09.11.2019
Размер:
1.27 Mб
Скачать

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

Программа 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

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

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

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

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

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

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

Запись-это структурированный тип данных, состоящий из фиксированного числа компонентов, называемых полями записи. Определение типа записи начинается идентификатором Record и заканчивается зарезервированным словом end. Между ними заключен список компонентов, называемых полями, с указанием имен полей и типа каждого поля.

Структура объявления типа записи такова:

Type

<имя типа> = Record

<имя поля>: <тип компонентов>;

<имя поля>: <тип компонентов>;

End;

VAR

<имя переменной>: <имя типа>;

Пример описания записи:

Type

Car=Record

Number:Integer;

Marka:String[20];

FIO:String[40];

Address:String[60];

End;

Var

Mashina: Car;

В данном примере была объявлена запись с именем Car, у которой имеется 4 поля: номер, название марки машины, ФИО владельца и его адрес.

Идентификатор поля должен быть уникален только в пределах записи, однако лучше его сделать уникальным в пределах всей программы. Объем памяти, необходимый для записи, складывается из длин полей. Значения полей записи могут быть использованы в выражениях. Обращение к значению поля осуществляется с помощью идентификатора переменной и идентификатора поля, разделенных точкой. Такая комбинация называется составным именем.

Например, доступ к полям записи Car осуществляется как: Mashina.Marka, Mashina.FIO, Mashina.Number. Составное имя можно использовать везде, где допустимо применение типа поля. Для присваивания полям значений используется оператор присваивания.

Пример присваивания полям записи Mashina:

Mashina. Number:=164536l;

Mashina.Marka:=’ГАЗ-24’;

Mashina.FIO:=’Иванов И.И’;

Mashina. Address:=’ул.Пушкина 12-30’;

Составные имена можно использовать в операторах ввода-вывода:

Read (Mashina. Number, Mashina. FIO, Mashina. Address);

Write(Mashina. Number:4, Mashina. FIO:12, Mashina. Address:25);

Допускается применение оператора присваивания и к записям в целом, если они имеют один и тот же тип. Например,

Mash:=Mashina;

После выполнения этого оператора значения полей записи Mash станут равны значениям соответствующих полей записи Mashina.

В ряде задач удобно пользоваться массивами из записей. Их можно описать следующим образом:

Type

Car=Record

Number:Integer;

Marka:String[20];

FIO:String[40];

Address:String[60];

End;

Var

Mashins: array [1..20] of Car;

Обращение к полям такой записи имеет громоздкий вид, для решения этой проблемы в языке Паскаль предназначен оператор With, который имеет следующий формат:

With <переменная типа запись> do <оператор>;

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

Пример присвоения значения полям записи Car с помощью оператора With.

With Mashina do

Begin

Number:=164536l;

Marka:=’ГАЗ-24’;

FIO:=’Иванов И.И’;

Address:=’ул.Пушкина 12-30’;

End;