Var М : Set Of Byte;
В разделе операторов ей присваивается значение
М := [3,4,7,9];
Тогда операции отношения дадут следующие результаты:
М = [4, 7, 3, 3, 9, ] - True;
М <> [7, 4, 3, 9, ] - False;
[3, 4] <= М -True;
[] <= М -True;
М >= [1..10] - False;
М <= [3..9] - True.
Операция вхождения устанавливает связь между множеством и скалярной величиной, тип которой совпадает с базовым типом множества, т. Е. Если х — скалярная величина данного типа, а М — множество, то операция вхождения записывается в виде
х In M.
Результатом здесь будет логическая величина True, если значение x входит в множество M, и False — в противном случае. Для описанного ранее множества М
4 In М - True,
5 In М - False.
Порядок выполнения задания к лабораторной работе № 8П
1. На основании теоретических сведений составьте программу определения количества знаков препинания (. ─ , * : ! ?) в символьной строке (см. п.1 раздела Задание к лабораторной работе № 8П). При решении используйте в условном операторе (в логическом выражении) множественную константу с символьным типом элементов и оператор вхождения.
2. После составления своей программы для проверки правильности сравните ее с одними из возможных вариантов программ, приведенных ниже.
Program Primer1M;
Var S: String; I, K: Byte;
Begin
ReadLn(S); К := 0;
For I := 1 To Length(S) Do
If S[I] In ['.','-',',',';',':','!','?']
Then К := К + 1;
WriteLn('Число знаков препинания равно', К)
End.
3. Произведите отладку своей программы и предъявите отлаженную программу преподавателю.
4. Самостоятельно напишите и отладьте вариант программы без применения множества (см. п.2 раздела Задание к лабораторной работе № 8П), и присвойте ему имя Primer2M. Для написания программы используйте в операторе IF длинное логическое выражение вида
(S[I]='.') Or (S[I]='-') и т. д.,
которое является проверкой вхождения каждого знака препинания в символьную строку. Отлаженную программу предъявите препдавателю.
5. Сравните две программы Primer1M и Primer2M, сформулируйте вывод о целесообразности использования множеств в программах, и обоснуйте свой вывод.
Лабораторная работа № 9П
Файлы в ТурбоПаскале.
Задание к лабораторной работе № 9П
1. Набрать и отладить программу последовательного ввода с клавиатуры 20 вещественных чисел в файловую переменную Fx.
2. Набрать и отладить программу получения в переменной х элемента вещественного файла Fx, полученного по п. 1 Задания, с номером, соответствующим вашему порядковому номеру в журнале по предмету ОАП.
3. Дополнить программу, полученную при выполнении п. 1 данного задания фрагментом, обеспечивающим суммирование всех чисел из файла Fx, и отладить новую программу, дав ей имя Summa.
Краткие теоретические сведения
В Паскале понятие файла имеет два значения:
· поименованная информация на внешнем устройстве (внешний файл);
· переменная файлового типа в Паскаль-программе (внутренний файл).
В программе между этими объектами устанавливается связь. Вследствие этого все, что происходит в процессе выполнения программы с внутренним файлом, дублируется во внешнем файле. С элементами файла можно выполнять только две операции: считывать из файла, записывать в файл.
Файловый тип переменной — структурированный тип, представляющий собой совокупность однотипных элементов, число которых заранее (до исполнения программы) не определено.
Структура описания файловой переменной имеет вид
Var <имя переменной> : File Of <тип элемента>;
Здесь <тип элемента> может быть любым, кроме файлового. Например:
Var Fi : File Of Integer;
Fr : File Of Real;
Fc : File Of Char;
Файл можно представить как последовательную цепочку элементов (Эл.), пронумерованных от 0, заканчивающуюся специальным кодом, называемым маркером конца (М. к.):
Число элементов, хранящихся в данный момент в файле, называется его текущей длиной. Существует специальная ячейка памяти, которая хранит адрес элемента файла, предназначенного для текущей обработки (записи или считывания). Этот адрес называется указателем, или окном, файла.
Любые файлы, а также логические устройства становятся доступны программе только после выполнения особой процедуры открытия файла (логического устройства). Эта процедура заключается в связывании ранее объявленной файловой переменной с именем существующего или вновь создаваемого файла, а также в указании направления обмена информацией: чтение из файла или запись в него.
Файловая переменная связывается с именем файла в результате обращения к стандартной процедуре ASSIGN (FV, <имя файла или л. у.>). Здесь: FV — файловая переменная (правильный идентификатор, объявленный в программе как переменная файлового типа); <имя файла или л. у.> — текстовое выражение, содержащее имя файла или логического устройства (текстовое выражение, как принято в ТурбоПаскале, заключается в апострофы). Пример обращения к процедуре Assign:
Assign(Fx, 'Fx.dat');
Для того чтобы начать запись в файл, его следует открыть для записи. Это обеспечивает процедура Rewrite(FV); (где FV — имя файловой переменной). При этом указатель устанавливается на начало файла. Если в файле до этого была информация, она исчезает.
![]() |
Схематически выполнение процедуры Rewrite можно представить в следующем виде:
Стрелкой снизу отмечается позиция указателя.
Запись в файл осуществляется процедурой Write(FV, V); (где V — переменная того же типа, что и файл FV). Запись происходит в том месте, на которое установлено окно (указатель файла). Сначала записывается значение, затем указатель смещается в следующую позицию. Если новый элемент вносится в конец файла, сдвигается маркер конца.
Схема выполнения данной процедуры следующая:

![]()
Рассмотрим пример 1. Пусть требуется в файловую переменную Fx внести 15 вещественных чисел, последовательно вводимых с клавиатуры. Фрагмент программы для решения данной задачи может иметь следующий вид:
Var Fx : File Of Real;
X : Real; I: Byte;
Begin
Assign(Fx,'Fx. dat');
Rewrite(Fx);
For I := 1 To 15 Do
Begin
Write ('? '); ReadLn(X) ;
Write(Fx, X)
End
End.
Конец примера 1.
Для считывания элементов файла с его начала следует открыть файл для считывания, что выполняется процедурой Reset (FV). В результате указатель устанавливается на начало файла. При этом вся информация в файле сохраняется.
![]() |
Схема выполнения данной процедуры следующая:
Считывние из файла осуществляется процедурой Read(FV, V); (где V — переменная того же типа, что и файл FV). При этом значение текущего элемента файла записывается в переменную V, а указатель смещается к следующему элементу.
![]() |
Схема выполнения данной процедуры следующая:
Доступ к элементам файла может быть последовательным или прямым. В стандартном Паскале допускается только последовательный доступ к элементам.
Принцип последовательного доступа: для того чтобы прочитать n-ю запись файла, сначала следует прочитать все предыдущие записи с 1-й по (n-1)-ю.
Рассмотрим пример 2. Требуется в переменной х получить 12-й элемент вещественного файла Fx. Программа решения такой задачи следующая:
Program А;
Var Fx : File Of Real;
X : Real;
Begin
Reset(Fx) ;
For I := 1 To 12 Do Read(Fx, х)
End.
Конец примера 2.
Функция Eof(FV) проверяет маркер конца файла (end of file). Это логическая функция, которая получает значение True, если указатель установлен на маркер конца, и значение False — в противном случае. Рассмотрим пример 3, где используется функция Eof(FV). Пусть требуется просуммировать все числа из файла Fx, описанного в примере 1. Программа решения следующая:
Reset(Fx) ;
Sx : = 0;
While Not Eof(Fx) Do
Begin
Read(Fx, х);
Sx := Sx + X
End;
Также решить данную задачу можно с помощью цикла Repeat:
Repeat
Read(Fx, х);
Sx := Sx + X
Until Eof(Fx);
Во втором варианте возможна ошибка считывания, если файл Fx пустой. Первый вариант от такой ошибки застрахован, поэтому он предпочтительнее.
Конец примера 3.
Порядок выполнения задания к лабораторной работе № 9П
1. На основании теоретических сведений составьте программу с именем Vvod_kl последовательного ввода с клавиатуры 20 вещественных чисел в файловую переменную Fx (см. п.1 раздела Задание к лабораторной работе № 9П). При решении используйте пример 1, где показано применение процедуры открытия для записи Rewrite и процедуры записи в файл Write.
2. Произведите отладку программы Vvod_kl и предъявите отлаженную программу преподавателю.
3. На основании теоретических сведений составьте программу Elem_N получения в переменной х элемента с номером N из вещественного файла Fx, причем номер N должен соответствовать вашему порядковому номеру в журнале по предмету ОАП (см. п.2 раздела Задание к лабораторной работе № 9П). Для решения этой задачи воспользуйтесь примером 2, где показано применение принципа последовательного доступа для осуществления доступа к n-й записи файла. Естественно, для получения в переменной х элемента с определенным номером необходимо сначала в программе Elem_N создать файловую переменную Fx и записать в нее все элементы, как это было сделано в программе Vvod_kl, и только потом методом последовательного доступа получить значение нужного элемента.
4. Произведите отладку программы Elem_N и предъявите отлаженную программу преподавателю.
5. Дополните программу, полученную при выполнения п. 1 данного задания, фрагментом, обеспечивающим суммирование всех чисел из файла Fx, и дайте новой программе имя Summa. Для решения задания воспользуйтесь примером 3, где показано применение функции Eof(FV) для обработки всех элементов файла.
6. Произведите отладку программы Summa и предъявите отлаженную программу преподавателю.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 |





