Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Прикладное программирование. Учебное пособие
.pdf
где наименьшее значение находится дальше от начала того массива. Полученный массив С распечатать на экране.
Вариант 27
Задача 1. Ввести с экрана 1-мерный массив А целого типа. Заменить все
отличные от нуля элементы массива минимальным элементом массива А. Полученный массив распечатать на экране.
Задача 2. Ввести два 1-мерных массива А и В целого типа. Сформировать
новый массив С, переписав в него все элементы того Массива, у которого
больше четных элементов. Полученный массив С распечатать на экране.
Вариант 28
Задача 1. Ввести с экрана 1- мерный массив А целого типа. Найти количество положительных массива А и их индексы. Распечатать на экране найденные индексы положительных элементов и их количество.
Задача 2. Ввести 1-мерный массив А целого типа. Сформировать новый
массив В, переписав в него все нулевые и кратные 5 элементы массива А в порядке их следования. Полученный массив В распечатать на экране.
Вариант 29
Задача 1. Ввести с экрана 1-мерный массив А целого типа. Найти сумму
кратных 5 элементов массива А. Полученный результат распечатать на экране.
Задача 2. Ввести 1-мерный массива А целого типа. Сформировать два новых массива В и С, переписав массив В все элементы массива А больше 10, а в
массив С – все элементы массива А меньше 10. Полученные массивы В и С
распечатать на экране.
Вариант 30
Задача 1. Ввести с экрана 1-мерный массив А целого типа. Найти максимальный элемент среди положительных элементов массива А. Полученный результат распечатать на экране.
Задача 2. Ввести 2 1-мерных массива А и В целого типа. Сформировать
новый массив С, переписав в него все элементы того массива (А или В), у ко-
51

торого максимальный элемент наибольший. Полученный массив С распечатать
на экрана
Пример отчета «Одномерный массив»
Задача 1. Ввести с экрана 1-мерный массив А целого типа. Заменить нулями все четные элементы массива и найти их количество. Полученный массив А
и количество распечатать на экране.
Цель работы: закрепить основные понятия языка Паскаль.
Программный код (рисунок 3.)
Program ttt;
Const n=5;
Var i,k: integer;
A: array[1..n];
Begin
K:=0;
For i:=1 to n do
Begin
Write (‘a[‘,i,’]’);
Readln a[i];
If a[i] mod 2 =0 then
Begin
A[i]:=0;
K:=k+1;
End;
End;
For i:=1 to n do
Writeln (a[i]);
Writeln (‘количество четных элементов =’,k);
Readln;
End.
52

Схема алгоритма
конец
k
A[i] mod
A[i]=0
k=k+1
n
I=1,n
начало
K=0
A[i]
A[i]
I=1,n
k
Рисунок 3. Схема алгоритма поставленной задачи
Пример: при a[1]=1, a[2]=2, a[3]=46, a[4]=5, a[5]=8,
Новый массив: 1, 0, 0, 5, 0.
Количество четных элементов = 3.
53

Типизированные файлы
Файл — единственная структура данных, которая хранится во внешней
памяти компьютера.
Файл — структура данных, состоящая из упорядоченной совокупности
произвольного числа однотипных компонент, хранящихся в поименованной
области памяти на диске. Каждый файл данных хранится во внешнем запоминающем устройстве (ВЗУ), а обрабатывается в оперативно запоминающем
устройстве (ОЗУ), поэтому существует два понятия файла: Физический файл –
фактический файл, хранящийся на ВЗУ.
Логический файл, то есть тип данных принадлежащий конкретной программе с заданным способом обработки
Физический файл — это поименованная совокупность компонент, выступающая как единое целое при хранении и поиске данных. Он состоит из компонент или записей. Компоненты имеют определенную длину, зависящую от информации, которая будет храниться в файле. Например, если это вещественные
числа, то компонента будут состоять из 6 байт, для целых чисел – компоненты
длины 2 байта и т. д.
В файлах размещаются данные для длительного хранения, а также для обработки их различными программами. Каждому файлу, размещенному на диске, присваивается уникальное имя, длина которого не должна превышать восьми символов. Полезно также применять расширение файла в соответствии с соглашениями операционной системы. Длина расширения файла не должна превышать трех символов. Перед именем файла можно указать полный путь к
файлу. Путь к файлу может включать в себя указание имени диска (например,
с:, d: — для жесткого диска или а:, b: — для гибких дисков), а затем цепочку
имени каталогов файла, отделяемых от имени диска и друг от друга символом
V Таким образом, полная спецификация файла:
<имя_диска>:\<каталог1>\<кат2>\.. .<катN>\<имя_файла>. <расширение>
Пример: d:\users\TT152\prog.pas
54

Существует ряд имен файлов, зарезервированных для стандартных
устройств, например:
Ргn — устройство печати, Con — консоль (клавиатура и дисплей) и некоторые другие (LPT1, LPT2, LPT3.COM 1, COM2, AUX, NUL…). В качестве
имен файлов на жестком диске не рекомендуется использовать любые зарезервированные слова.
При формировании имени файла используется смысловая мнемоника.
Например, файл с данными по кадрам — KADR.FIO, KADR.ADR и др.
Логический файл не существует, как некоторая реальная структура данных. Дело в том, что нет смысла физический файл полностью считывать с диска в ОЗУ (прежде всего этой памяти может не хватить). Логический файл некоторая абстракция, созданная для удобства рассмотрения при программировании
физического файла. В Паскале различают следующие файловые типы:
типизированные файлы (файлы, состоящие из записей постоянной дли-
ны);
текстовые файлы,
нетипизированные файлы (файлы, представляющие собой неструктури-
рованный поток байтов).
При работе с файлами устанавливается связь между логическим и физическим файлами с помощью файловой переменной (ФП).
Файловая переменная не является представлением одного конкретного
файла. Она является таким же обобщением, как и формальный параметр блока:
указывается во всех программных действиях с файлом и запись этих действий
применима к любому файлу из группы однотипных файлов. Нужно лишь связать файловую переменную с именем этого файла.
В языке Паскаль реализована возможность организации, хранения и вывода информации в последовательных файлах.
Существенной особенностью всех рассмотренных до сих пор значений
производных типов является наличие в них конечного, наперед заданного числа
компонент. Так, в значении многомерного массива это число можно опреде-
55

лить, зная количество компонент по каждому измерению, а в значении записи
это число определяется количеством и типом полей. Таким образом, заранее,
еще до выполнения программы, по этому описанию можно выделить необходимый объем памяти машины для хранения значений переменных этих типов.
Но существует определенный класс задач и определенные ситуации, когда
количество компонент (пусть даже одного и того же из известных уже типов)
заранее определить невозможно, оно выясняется только в процессе решения задачи. Поэтому возникает необходимость в специальном типе значений, которые
представляют собой произвольные последовательности элементов одного и того же типа, причем длина этих последовательностей заранее не определяется, а
конкретизируется в процессе выполнения программы. Этот тип значений получил название файлового типа. Условно файл в Паскале можно изобразить как
некоторую ленту, у которой есть начало, а конец не фиксируется. Элементы
файла записываются на эту ленту последовательно друг за другом:
где F—имя файла, а F1, F2, F3, F4 – его элементы. Файл во многом напоминает магнитную ленту, начало которой заполнено записями, а конец пока
свободен. В программировании существует несколько разновидностей файлов,
отличающихся методом доступа к его компонентам: файлы последовательного
доступа и файлы произвольного доступа.
Методы доступа к элементам файла
Метод доступа — это способ достижения той или иной компоненты при
операциях обмена. Известно, что файлы в языке Паскаль — последовательные,
отсюда следует естественный метод доступа — последовательный, так как после считывания или записи очередной компоненты текущий указатель устанавливается на следующую компоненту.
Для того чтобы напрямую обратиться к требуемой компоненте для чтения
или записи ее, необходимо выполнить специальную процедуру по изменению
положения текущего указателя записи. Для этого используют процедуру seek.
56

Формат:
Наименование
функции
Формат
Тип
результата
Результат
Определение
конца файла
eof
(<файл_перем>
)
boolean
true – если конец файла,
false – в
противном случае
Определение
позиции
файла
filepos
(<файл_перем>
)
longint
Номер текущей компонен-
ты файла
Определение
размера файла
filesize (<файл
перем>)
longint
Число компонент в
файле
seek (<файловая_переменная>,<номер_компоненты>);
Пример:
seek (f,0); {указатель на начало файла}.
Полезно использовать следующие функции для доступа к элементам файла
Таблица 3 Функции доступа к элементам файла
Пример:
seek (f, filepos (f) -1); (указатель на предыдущую компоненту!
seek (f, filepos (f) +1); {указатель на следующую)
seek (f, filesize (f)-l); {указатель на последнюю компоненту файла)
seek (f, filesize (f)); {указатель на конец файла}
L:=fiiesize (f); {определение числа компонент в файле}
Номера компонент файла будут меняться от 0 до L-1, так как компоненты
номеруются с нуля.
Этот способ будем называть прямым доступом.
Для чтения компонент файла используется процедура Read.
Формат:
Read (<файловая_переменная>,<список_переменных>);
57

Пример:
Read (f, а); {чтение компоненты в переменную а}
Read (f, b, с); {«чтение компонент в переменные b и с)
Значения переменных вводятся через пробел или ENTER. После ввода последнего значения обязательно нажать клавишу ‘ENTER’.
Для записи компонент в файл используется процедура Write.
Формат:
Write (<файловая_переменная>, <список_переменных>);
Пример:
Write (m, с); {записать значение переменной с в файл ш|
Переменные, указанные в процедурах Read и Write, должны быть того же
типа, что и компоненты файла, с которым связана файловая переменная
Иногда требуется отсечь часть файла, начиная с текущей позиции, а для
этого существует процедура Truncate.
Формат:
Truncate (<файловая_переменная>):
При этом файл должен быть открыт, а для настройки на конкретную компоненту файла, с которой следует удалить его часть, можно воспользоваться
процедурой Seek.
Основные режимы обработки файла:
1. создание файла на диске;
2. чтение файла с диска;
3. обновление файла на диске:
4. поиск компоненты по заданному номеру или признаку;
5. исключить из файла компоненту с заданным номером или признаком:
6. добавить в конец файла одну или несколько компонент,
7. добавить в файл новую компоненту после компоненты с заданным но-
мером и признаком;
8. отсечь концевую часть файла, начиная с компоненты с заданным номе-
ром и признаком;
58

9. заменить одну или несколько компонент новыми значениями
Таким образом, простейший метод доступа состоит в том, что по файлу
можно двигаться только последовательно, начиная с первого его элемента, и,
кроме этого, всегда существует возможность начать просмотр файла с его
начала. Таким образом, чтобы добраться до пятого элемента файла, необходимо, начав с первого элемента, пройти через предыдущие четыре. Такие файлы
называют файлами последовательного доступа. У последовательного файла доступен всегда лишь очередной элемент. Если в процессе решения задачи необходим какой-либо из предыдущих элементов, то необходимо вернуться в начало файла и последовательно пройти все его элементы до нужного.
Файлы произвольного доступа Паскаля позволяют вызывать компоненты в
любом порядке по их номеру.
Важной особенностью файлов является то, что данные, содержащиеся в
файле, переносятся на внешние носители. Файловый тип Паскаля – это единственный тип значений, посредством которого данные, обрабатываемые программой, могут быть получены извне, а результаты могут быть переданы во
внешний мир. Это единственный тип значений, который связывает программу с
внешними устройствами ЭВМ.
Работа с файлами в Паскале
Любой файл имеет три характерные особенности. Во-первых, у него есть
имя, что дает возможность программе работать одновременно с несколькими
файлами. Во-вторых, он содержит компоненты одного типа. Типом компонентов может быть любой тип Паскаля, кроме файлов. Иными словами, нельзя создать «файл файлов». В-третьих, длина вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только емкостью устройств
внешней памяти.
Файловый тип или переменную файлового типа в Паскале можно задать
одним из трех способов:
Type <имя_ф_типа>=file of<тип_элементов>;
59

<имя_ф_типа>=text;
<имя_ф_типа>=file;
Здесь <имя_ф_типа> – имя файлового типа (правильный идентификатор);
File, of — зарезервированные слова (файл, из); <тип_элементов> — любой тип
Паскаля, кроме файлов.
Пример описания файлового типа в Паскале
Type
Product= record
Name: string;
Code: word;
End;
Text80= file of string[80];
Var
F1: file of char;
F2: text;
F3: file;
F4: Text80;
F5: file of Product;
В зависимости от способа объявления можно выделить три вида файлов
Паскаля:
типизированные файлы Паскаля (задаются предложением file of..);
текстовые файлы Паскаля (определяются типом text);
нетипизированные файлы Паскаля (определяются типом file).
Следует помнить, что физические файлы на магнитных дисках и переменные файлового типа в программе на Паскале – объекты различные. Переменные
файлового типа в Паскале могут соответствовать не только физическим файлам, но и логическим устройствам, связанным с вводом/выводом информации.
Например, клавиатуре и экрану соответствуют файлы со стандартными именами Input, Output.
60
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
