Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Занятие 2. Процедуры и функции для работы с типизированными файлами




Вспомним, что типизированный файл – это последовательность элементов одного типа. А раз так, то при последовательном обращении к файлу текущий указатель переходит от элемента к элементу. Возникает вопрос: можно ли игнорировать последовательный доступ к файлу и сразу, например, обратиться к третьему элементу файла? Оказывается, можно.

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

Seek (МуFilе, n)

где n – требуемое положение указателя.

Внимание! Нумерация элементов типизированного файла начинается с нуля.

Поэтому, чтобы обратиться к третьму элементу, нужно записать Seek (МуFilе, 2).

Seek (МуFilе, 0) – устанавливает указатель в начальной позиции (на первый элемент).

Seek (МуFilе, FileSize(МуFilе)) – устанавливает указатель после последнего элемента, то есть на признак конца файла.

Примечание. Функция FileSize(МуFilе) возвращает количество элементов типизированного файла МуFilе.

Текущую позицию указателя дает функция

FilePos (МуFilе).

Рассмотрите пример.

Задача. Составить программу, которая переписывает существующий файл, заменяя все латинские буквы на заглавные.

Рrogram Writing;

Var

FileName: string; {строка, содержащая имя файла}

FVar: file of char; {переменная файлового типа}

Index: integer;

Letter: char; {читаемый из файла символ}

Begin

write('Enter filename: '); {предложение ввести имя файла}

readln (FileName); {ввод имени файла}

assign (FVar,FileName); {связь имени файла и переменной}

{$I-} {отключен контроль ввода/вывода}

reset (FVar); {открытие файла для чтения и записи}

{$I+} {включен контроль ввода/вывода}

if IOResult <> 0 {выход, если файл не открыт}

then

begin

writeln ('Не открыт файл ', FileName);

Halt

end;

while not EOF (FVar) do {цикл до конца файла}

begin

read (FVar, Letter); {чтение символа из файла}

Letter:=Upcase(Letter); (преобразование букв)

Seek(FVar,FilePos(FVar)-1); {перемещение указателя назад на 1 позицию}

write(FVar,Letter); {запись преобразованной буквы}

end; {конец цикла}

close(FVar) {закрыть файл}

End.

Функция IOResult

Как Вы уже заметили в предыдущей программе была использована функция IOResult. Рассмотрим, какую роль выполняет эта функция.

Функция IOResult предназначена для поиска ошибок, возникающих при работе с файлами. Эта функция возвращает результат последней операции ввода/вывода, если автоматический контроль за ошибками, возникающими при выполнении операций ввода/вывода, отключен с помощью директивы компилятора {$I-}. При безошибочном выполнении операций ввода/вывода функция IOResult всегда возвращает результат равный нулю. Поэтому, как правило, ее используют в операции сравнения с нулем. При использовании функции IOResult нужно помнить о том, что она возвращает величину, которую можно интерпретировать как флаг ошибки лишь в том случае, когда эта функция вызывается следом за операцией ввода/вывода. А если Вы хотите провести анализ ошибки позже, Вам придется сохранить возвращаемое значение в некоторой промежуточной переменной.

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

{$I-} {отключение контроля ввода/вывода}

reset (F,'C:\TP7\BIN\Text.txt'); {открытие файла для чтения}

if IOResult <> 0

then

writeln ('Ошибка при открытии файла');

{$I+} {включение контроля ввода/вывода}

В своих программах Вы должны применять функцию IOResult.

Задание. Выберите с учителем одну из предложенных ниже задач.

1. Создайте файл целых чисел (числа вводятся с клавиатуры). Поменяйте местами первый и третий элементы файла, используя в программе процедуру Seek. Выведите на экран содержимое первоначального и измененного файлов. Предусмотрите в программе вывод соответствующего сообщения, если в файле не оказалось третьего элемента.

2. Создайте файл целых чисел (числа вводятся с клавиатуры). Выведите числа

- с четным порядковым номером,

- с нечетным порядковым номером,

- с порядковым номером, кратным 7,

- с порядковым номером, кратным 15,

используя в программе процедуру Seek.

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

3. Создайте файл символов (символы вводятся с клавиатуры). Выведите на экран символы

- с пятого по пятнадцатый,

- с третьего по двадцатый,

- с k-го по s-ый.

Используйте в программе процедуру Seek.

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

4. Создайте файл, содержащий все буквы русского алфавита. Запросите у пользователя числовой промежуток [N, M]. Выведите на экран все символы, коды которых лежат в заданном промежутке. Используйте в программе процедуру Seek.

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

5. Создайте файл, состоящий из строк. Запросите у пользователя порядковые номера двух строк и поменяйте их в файле между собой. Дополнительный файл не создавайте. Используйте в программе процедуру Seek.

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

6. Создайте файл произвольно выбранного типа. Введите в него некоторое количество элементов. С помощью функции FileSize разделите файл на заданное количество частей и соедините их в другом порядке во вновь созданном файле. Содержимое файлов выведите на экран.

7. Создайте файл символьного типа. Используя содержимое этого файла, создайте файл строкового типа. Содержимое файлов выведите на экран.

8. Создайте файл строкового типа. Используя содержимое этого файла, создайте файл символьного типа. Содержимое файлов выведите на экран.

9. Создайте файл, содержащий буквы русского и латинского алфавита. Используя содержимое этого файла, создайте файл кодов символов. Содержимое файлов выведите на экран.

10. Создайте файл типа Integer. Введите в него некоторое количество элементов. С помощью функции FilePos определяя позицию указателя на элемент файла, запишите во вновь созданном файле элементы файла и соответствующие им позиции указателя. Содержимое файлов выведите на экран.

Занятие 3. Самостоятельное решение задач

I Выберите с учителем одну из предложенных ниже задач (тип Integer, real)

1. Создайте файл f целых чисел от А до В (значения вводятся с клавиатуры). Проанализировав в программе созданный файл, создайте еще 3 файла:

- содержащий отрицательные числа,

- содержащий положительные числа,

- содержащий нуль.

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

2. Создайте файл f целых чисел от А до В (значения вводятся с клавиатуры). Проанализировав в программе созданный файл, создайте еще 3 файла:

- содержащий неположительные числа,

- содержащий четные числа,

- содержащий нечетные числа.

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

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

4. Создайте файл f целых чисел (значения вводятся с клавиатуры). Проанализировав в программе созданный файл, создайте файл, содержащий суммы первого и (k div 2)-го числа, второго и (k div 2+1)-го числа, третьего и (k div 2+2)-го числа и так далее. Выведите на экран содержимое файлов. Предусмотрите в программе вывод соответствующего сообщения, если элементов в файле не оказалось.

5. Создайте файл f целых чисел (значения вводятся с клавиатуры). Проанализировав в программе созданный файл, создайте файл, содержащий произведение первого и k-го числа, второго и (k-1)-го числа, третьего и (k-2)-го числа и так далее. Выведите на экран содержимое файлов. Предусмотрите в программе вывод соответствующего сообщения, если элементов в файле не оказалось.

6. Создайте файл f целых чисел (числа вводятся с клавиатуры). Проанализировав в программе созданный файл, создайте отсортированый файл:

- по возрастанию,

- по убыванию,

- по невозрастанию,

- по неубыванию.

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

7. Создайте файл f действительных чисел от А до В с шагом х (значения вводятся с клавиатуры). Проанализировав в программе созданный файл, создайте еще 3 файла:

- содержащий неположительные числа,

- содержащий числа с нулевой дробной частью,

- содержащий модули чисел.

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

8. Создайте файл f действительных чисел от А до В с шагом х (значения вводятся с клавиатуры). Проанализировав в программе созданный файл, создайте два файла:

- содержащий целые части числа,

- содержащий дробные части чисел.

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

9. Создайте два файла действительных чисел. Проанализировав в программе созданные файлы, создайте файл, содержащий суммы соответствующих чисел файлов.

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

10*. Создайте два файла действительных чисел. Проанализировав в программе созданные файлы, создайте файл строкового типа, содержащий суммы соответствующих чисел файлов в виде 2.5+3.4=5.9.

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

II Выберите с учителем одну из предложенных ниже задач (тип char)

1. Создать файл произвольных символов. Удалить из файла каждый второй символ. Вывести на экран начальное и конечное содержимое файла. Предусмотрите в программе вывод соответствующего сообщения, если элементов в файле не оказалось.

2. Создать файл произвольных символов. Вывести на экран содержимое файла. Каждую пятерку символов вывести перевернутой в другой файл. Вывести на экран содержимое полученного файла.

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

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

5. Создать файл произвольных символов. Создать файл символов, встречающихся в заданном файле один раз. Вывести на экран содержимое файлов.

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

7. Создать файл произвольных символов. Удалить из файла элементы, находящиеся между первой и второй точками. Выведите на экран содержимое файла. Предусмотрите в программе вывод соответствующего сообщения, если элементов в файле не оказалось.

8. Создать файл произвольных символов. Заменить в нем каждую из групп стоящих рядом точек одной звездочкой. Дополнительный файл не создавать. Выведите на экран содержимое файла. Предусмотрите в программе вывод соответствующего сообщения, если ни одной группы точек в файле не оказалось.

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

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

III Выберите с учителем одну из предложенных ниже задач (тип string)

1. По введенной дате рождения (день и месяц, форма ввода в файл произвольная) дополнить файл строками соответствующего знака Зодиака:

20.01-18.02 – Водолей 23.07-22.08 – Лев

19.02-20.03 - Рыбы 23.08-22.09 – Дева

21.03-19.04 – Овен 23.09-22.10 – Весы

20.04-20.05 – Телец 23.10-22.11 – Скорпион

21.05-21.06 – Близнецы 23.11-21.12 – Стрелец

22.06-22.07 – Рак 22.12-19.01 – Козерог

2. Создать файл, содержащий произвольные строки. Обработать строки таким образом, чтобы между словами не было больше одного пробела и выполнить правое выравнивание строк файла. Обработанный текст записать в новый файл. Вывести на экран его содержимое.

3. Создать файл, содержащий произвольные строки. Запросите произвольное слово, посчитайте количество таких слов в файле и замените их на другое введенное пользователем слово. Вывести на экран содержимое первоначального и измененного файлов.

4. Создать файл, содержащий произвольные строки. Поменяйте строки файла так, чтобы их порядок был следующим:

1,к,2,к-1,3,к-2,4,к-3,5,к-4,...к/2.

Вывести на экран содержимое первоначального и измененного файлов.

5. Создать файл, содержащий произвольные строки. Поменяйте строки файла так, чтобы их порядок был следующим:

2,1,4,3,6,5,...

Вывести на экран содержимое первоначального и измененного файлов.

6. Создать файл, содержащий произвольные строки. Поменяйте строки файла так, чтобы их порядок был следующим:

к-1,к,к-3,к-2,к-5,к-4,...

7. Создать файл, содержащий строки, представляющие собой арифметические выражения, состоящие из чисел, знаков арифметических действий{+,-,*,/} и открывающихся и закрывающихся круглых скобок. Проверьте его корректность.

8. Создать файл, содержащий произвольные строки. Отсортируйте файл по возрастанию длин строк. Вывести на экран содержимое первоначального и измененного файлов.

9. Создать файл, содержащий произвольные строки. Отсортируйте файл по возрастанию длин строк и каждую строку по возрастанию длин слов. Вывести на экран содержимое первоначального и измененного файлов.

10. Создать файл, содержащий произвольные строки. Проверить правописание сочетаний жи-ши, ча-ща, чу-щу. Если найдены ошибки, исправить их и подчеркнуть исправленный слог. Вывести на экран содержимое первоначального и измененного файлов.

IV Выберите с учителем одну из предложенных ниже задач (тип record)

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

а) показавших лучший результат;

б) показавших три лучших результата,

в) не получивших ни одного призового места.

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

3. Составить список учебной группы, включающей N человек. Для каждого учащегося указать дату рождения, год поступления в техникум, курс, группу, оценки каждого года обучения. Информацию о каждом учащемся оформить в программе в виде записи. Совокупность записей объединить в файл. Составить программу, которая обеспечивает ввод полученной информации, распечатку ее в виде таблицы, а также распечатать список студентов, фамилии которых начинаются на буквы Б и В, и их оценки за последнюю сессию.

4. Составьте список учебной группы, включающей N человек. Для каждого учащегося укажите фамилию, имя, отчество, дату рождения, год поступления в ВУЗ, факультет, отделение, курс, группу. Информацию о каждом учащемся оформите в программе в виде записи. Совокупность записей объедините в файл. Составьте программу, которая обеспечивает ввод полученной информации, распечатку ее в виде таблицы, а также распечатать по выбору пользователя анкетные данные студентов нужного курса.

5. Составьте список учебной группы, включающей N человек. Для каждого учащегося укажите фамилию, имя, отчество, дату рождения, год поступления в ВУЗ, факультет, отделение, курс, группу. Информацию о каждом учащемся оформите в программе в виде записи. Совокупность записей объедините в файл. Составьте программу, которая обеспечивает ввод полученной информации, распечатку ее в виде таблицы, а также распечатайте по выбору пользователя анкетные данные студентов нужного факультета.

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

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

8. Составьте список группы спортсменов, занимающихся легкой атлетикой, включающей N человек. Для каждого спортсмена укажите фамилию, имя, название общеобразовательной школы, класс, результаты по следующим дисциплинам:

- бег 100м,

- бег 3000м,

- прыжки в высоту,

- прыжки в длину,

- прыжки с шестом,

- метание ядра,

- метание копья,

- метание диска.

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

9. Составьте список группы спортсменов, участвовавших в соревнованиях по плаванию, включающей N человек. Для каждого пловца укажите фамилию, имя, название общеобразовательной школы, класс, результаты по следующим дисциплинам:

- кроль на груди,

- кроль на спине,

- баттерфляй,

- комплексное плавание.

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

а) занявших 1 место по каждому стилю плавания;

б) показавших лучшее время по всем видам плавания,

в) не получивших ни одного призового места.

10. Составьте список группы спортсменов, участвовавших в соревнованиях по спортивной гимнастике, включающей N человек. Для каждого гимнаста указажите фамилию, имя, название общеобразовательной школы, класс, результаты по следующим видам:

- кольца,

- брусья,

- перекладина,

- вольные упражнения,

- прыжки на дорожке,

- прыжки через коня.

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

а) показавших лучший результат по каждому виду;

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

в) не получивших ни одного призового места.

Задание. (на усмотрение учителя) Познакомившись с содержанием предыдущих задач придумайте свою интересную задачу и решите ее.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных