Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
22-43_Algoritmizatsia.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
53.43 Кб
Скачать

22. Строковый тип данных (англ. string «нить, вереница») — тип данных, значениями которого является произвольная последовательность (строка) символов алфавита. Каждая переменная такого типа (строковая переменная) может быть представлена фиксированным количеством байтов либо иметь произвольную длину. В Паскале строка может иметь максимальную длину в 255 символов. Для обработки строковых данных можно использовать встроенные процедуры и функции:

  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. Pos (What, Where) - обнаруживает первое появление подстроки What в строке Where.

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

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

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

23. Подпрограмма (процедура) (англ. subroutine) — поименованная или иным образом идентифицированная часть компьютерной программы, содержащая описание определённого набора действий. Подпрограмма может быть многократно вызвана из разных частей программы.Подпрограммы решают три важные задачи:

  • избавляют от необходимости многократно повторять в тексте программы аналогичные фрагменты;

  • улучшают структуру программы, облегчая ее понимание;

  • повышают устойчивость к ошибкам программирования и непредвиденным последствиям при модификациях программы.

Формальные параметры

Pur(x,a:real):

Фактические параметры

Пример

- переменная

y1:= Pur(c,d);

- константа

y2:= Pur(3,4);

- выражение

y3:=Pur(c+sin(c),3*x);

- разного вида

y4:= Pur(с,4);

24. Область действия программных объектов, вложенность подпрограмм, локальные и глобальные описания. Переменная, объявленная глобально (т.е. вне всех блоков), существует на протяжении всего времени выполнения программы. Локальные переменные (т.е. объявленные внутри блока) имеют время жизни только на период выполнения того блока, в котором они объявлены. При написании программ, имеющих вложенные модули, необходимо придерживаться следующих правил:

  1. Описывать идентификаторы в том блоке, где они используются, если это возможно.

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

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

25-26. Подпрограммы-процедуры. Подпрограммы-функции. Общая структура программы выглядит так:

Рrogram hh;   Label; {описание меток}   Const; {описание констант}   Type; {описание типов}   Var; {описание переменных}   Procedure; {описание процедур}   Function; {описание функций} Begin   . . .   . . . end.

Основное различие между процедурой и функцией состоит в том, что процедура только выполняет какую-либо законченную последовательность действий, не возвращая результата работы в основную программу, а функция и выполняет действия, и возвращает результат. Примеры процедур и функций: Function SredArif(A, B:integer):real; Begin   SredArif:=(A+B)/2; {К примеру, Y=SredArif(2,4), где Y будет равен 3. End; Procedure Summa; Begin   x:=x+y; {Переменные X и У объявлены глобально, т.к. процедура ничего не возвращает} End; 27. Множества — это структурированный тип данных, представляющий собой набор взаимосвязанных по какому-либо признаку или группе признаков объектов, которые можно рассматривать как единое целое. Каждый объект в множестве называется элементом множества. Область значений типа множество — набор всевозможных подмножеств, составленных из элементов базового типа. В выражениях на языке Паскаль значения элементов множества указываются в квадратных скобках: [1,2,3,4], ['а',‘b','с'], ['a'..'z']. Переменные множественного типа описываются так: Var <идентификатор> : set of <базовый тип>;

Например:

Var A, D : Set Of Byte;

B : Set Of 'a'..'z';

C : Set Of Boolean;

Объединением двух множеств A и B называется множество, состоящее из элементов, входящих хотя бы в одно из множеств A или B. Знак операции объединения в Паскале «+».Примеры:

1) [1, 2, 3, 4] + [3, 4, 5, 6] => [1, 2, 3, 4, 5, 6]

2) []+[‘a’..’z’]+[‘A’..’E’, ‘k’]  => [‘A’..’E’, ‘a’..’z’]

3) [5<4, true and false] + [true]  => [false, true]

Пересечением двух множеств A и B называется множество, состоящее из элементов, одновременно входящих во множество A и во множество B.

Знак операции пересечения в Паскале «*»

Примеры:

1) [1, 2, 3, 4] * [3, 4, 5, 6] => [3, 4]

2) [‘a’..’z’]*[‘A’..’E’, ‘k’]  => [‘k’]

3) [5<4, true and false] * [true]  => []

Разностью двух множеств A и B называется множество, состоящее из элементов множества A, не входящих во множество B. Примеры:

1a) [1, 2, 3, 4] - [3, 4, 5, 6] => [1, 2]

1b)  [3, 4, 5, 6] - [1, 2, 3, 4]  => [5, 6]

2a) [‘a’..’z’]-[‘A’..’E’, ‘k’]  => [‘a’..’j’, ‘i’..’z’]

2b) [‘A’..’E’, ‘k’] - [‘a’..’z’]  => [‘A’..’E’]

3a) [5<4, true and false] - [true] => [false]

3b) [true] - [5<4, true and false] => [true]

Операция вхождения. Это операция, устанавливающая связь между множеством и скалярной величиной, тип которой совпадает с базовым типом множества. Если x — такая скалярная величина, а M — множество, то операция вхождения записывается так: x in M.

Результат — логическая величина true, если значение x входит в множество M, и false — в противном случае.

Например, 4 in [3, 4, 7, 9] –– true, 5 in [3, 4, 7, 9] –– false.

28. Тип данных запись. Запись — структурированный тип данных. Записи являются неоднородными неупорядоченными структурами с прямым доступом к компонентам. Компоненты записи называют полями записи. Приведем пример описания переменной, имеющей структуру записи:

Var   Address : Record     HouseNumber : Integer;     StreetName : String[20];     CityName : String[20];     PeopleName : String;   End;

Var   Address : Record     HouseNumber : Integer;     StreetName, CityName : String[20];     PeopleName : String;   End;

Присваиваются значения полям записи Address :

Address.StreetName := 'Профсоюзная'; Address.CityName := 'Сургут'; Address.PeopleName := 'Петрова Алла Ивановна';

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

Общая форма записи:

with <имя переменной> do <оператор>

Большой пример! В массиве хранятся данные об учащихся: школа, фамилия, класс. Вывести список учеников, которые учатся в восьмом классе.

Program LipovsevM; Uses   Crt; Type Uchenik=record       Shkola : integer;       Fam : string[15];       Klass : integer;     end; Var   I, n : integer;   Massiv : array[1..100] of Uchenik; Рrocedure Poisk; Begin   for i:=1 to n do     if massiv[i].klass=8       then         with massiv[i] do           writeln(Shkola:5, Fam:16, klass:6); End; Begin   ClrScr;   writeln('Введите число учеников ');   write('->');   read(n);   for i:=1 to n do     begin       writeln('Введите через пробел номер школы и фамилию ученика ');       write('->');       with massiv[i] do         begin           readln(Shkola,Fam);           write('Введите класс ученика (только число) ->');           read(Klass);         end;     end;   writeln('Ученики 8-ых классов:');   writeln('Школа', 'Фамилия':16, 'Класс':6);   writeln('---------------------------------');   Poisk;   ReadKey; End.

29. Файлы. Файлом называется область памяти на диске, имеющая свое имя. Физические файлы можно по-разному представить в программе. Язык Турбо Паскаль предлагает три вида представления файлов:

  • типизированные файлы,

  • текстовые файлы,

  • нетипизированные файлы.

Количество элементов файла может быть любым: число компонентов файла может изменяться (увеличиваться или уменьшаться), то есть, заранее не фиксируется. В файлах можно хранить достаточно большое количество данных. После каждого элемента файла автоматически ставится признак конца элемента, а в конце файла ставится признак конца файла. С каждым файлом можно связать понятие "текущий указатель". Это неявно описанная переменная, которая указывает на конкретный элемент файла. Действия с файлами производятся поэлементно, причем в них участвует тот элемент, на который "смотрит" текущий указатель, перемещающийся в результате выполнения действия на следующий элемент. Общая последовательность работы с файлами такова:   - описать переменную файлового типа;   - связать ее с конкретным физическим файлом процедурой assign;   - открыть файл процедурой reset или rewrite;   - выполнить чтение или запись информации;   - по окончании работы с файлом закрыть файл процедурой close. Процедуры и функции для работы с файлами любого типа

Переменные файлового типа используются в программе только в качестве параметров собственных и стандартных процедур и функций. Все фактические действия с файлами основаны на наборе стандартных процедур языка, входящих в состав модулей System и Dos.

Сначала рассмотрим процедуры модуля System.

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

До начала работы с файлами устанавливается связь файловой переменной МуFilе с именем дискового файла. Очень важно различать собственно файл (область памяти на магнитном носителе с некоторой информацией) и переменную файлового типа в Turbo Pascal-программе. Считается, что файловая переменная является представителем некоторого дискового файла в программе. Для того, чтобы реализовать доступ к файлу на магнитном диске, программа должна связать его с файловой переменной. Для этого необходимо установить соответствие между переменной и именем файла. Это имя представляется в виде строки, содержащей имя файла и, может быть, путь к файлу, который формируется по общим правилам MS-DOS.

Например,

assign (МуFilе, 'с:\МуDirectory\Result.dat');

здесь приведено полное (с указанием пути) имя пользовательского файла Result.dat.

Если путь не указан, программа будет искать файл только в своем рабочем каталоге и, как это принято в системе DOS, по указанным в файле аutoехес.bat путям. Кроме указания имени файла на дисковом накопителе может быть указано стандартное имя одного из устройств ввода-вывода: «соn» - консоль, то есть дисплей и клавиатура, «рrn» - или «lpt1» - принтер.

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

До тех пор, пока файловая переменная не связана с каким-либо дисковым файлом, никакие операции с ней в программе невозможны. Заметим, что можно связать файловую переменную с еще не существующим дисковым файлом. Это делается в случае последующего создания Turbo Pascal-программой файла с данным именем с помощью специальной системной процедуры.

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

Внимание! Нельзя применять процедуру assign к открытому файлу.

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

closе (МуFilе);

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

Открытие нового файла производится процедурой, единственный аргумент которой - переменная файлового типа, например:

rewrite (МуFilе);

Эта процедура создает на диске файл с именем, связанным с переменной МуFilе процедурой Аssign. Указатель работы с файлом устанавливается на начало файла. После выполнения процедуры rewrite файл доступен как для записи, так и для чтения (в случае текстовых файлов – только для записи).

Внимание! Если файл с таким именем уже существует, он удаляется (его содержимое теряется), и создается новый пустой файл с данным именем.

Открытие существующего файла выполняет процедура

reset (МуFilе);

Эта процедура ищет уже существующий файл на диске и открывает его для работы, помещая указатель в начальную позицию. Если файл с установленным в Аssign именем не найден, возникает ошибка ввода/вывода, контроль которой зависит от директивы компилятора {$I} (смотрите здесь). После выполнения процедуры reset файл доступен как для записи, так и для чтения (в случае текстовых файлов – только для чтения).

Запись в файл производится процедурой

write (МуFilе, var1, var2, ...., varN);

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

Чтение из файла производится аналогичной процедурой:

read (МуFilе, var1, var2, ...., varN);

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

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

Функция FileSize(МуFilе) определяет число элементов в файле. Функция неприменима к текстовым файлам. Файл MyFyle должен быть открыт.

Функция логического типа ЕОF(МуFilе) имеет значение Тruе, если указатель указывает на маркер конца файла (End Of File).