Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка вторая.doc
Скачиваний:
88
Добавлен:
05.06.2015
Размер:
1.66 Mб
Скачать

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

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

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

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

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

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

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

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

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

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

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

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

  • бег 100м,

  • бег 3000м,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • кольца,

  • брусья,

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

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

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

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

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

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

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

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

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

Решение задач. Процедуры и функции работы с файлами.

Изменение имени файла производится процедурой

  rename(МуFilе, FileName);

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

Уничтожение части файла от текущего положения до конца производится процедурой

  truncate(МуFilе).

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

  erase(МуFilе),

действие которой эквивалентно удалению файла в операционной системе DOS.

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

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

Program Files; Uses   Crt; Var   F,Fnew : file of string;   Name,NewName : string[12];   Text : string;   Ch : char; Procedure ReadText; Begin   repeat     write('Введите имя файла>');     readln(Name);     assign(F,Name);     reset(F);     if IOresult<>0       then         begin           writeln('Ошибка чтения');           close(F);         end;   until IOresult=0;   writeln('Содержание файла ',Name,':');   while not Eof(F) do     begin       readln(F,Tеxt);       writeln(Tеxt);     end;   close(F); End; Procedure EraseFile; Begin   erase(F);   writeln('Файл удален'); End; Procedure ReNameFile; Begin   write('Введите новое имя файла:');   readln(NewName);   rename(F,NewName);   writeln('Файл ',Name,' переименован в файл ',NewName); End; Procedure CopyFile; Begin   write('Введите имя копии файла ',Name,'>');   readln(NewName);   reset(F);   assign(Fnew,NewName);   rewrite(Fnew);   while not Eof(f) do     begin       readln(F,Text);       writeln(Fnew,Text);     end;   close(F);   close(F_new);   writeln('Файл',Name,' скопирован в файл ',NewName); End; Begin   ClrScr;   readTеxt;   repeat     writeln('Удаление файла (D),переименование файла(R)');     writeln('Копирование файла (C), выход из программы (Е)');     write('Введите символ нужной операции - ');     readln(ch);     case ch of       'D','d': EraseFile;       'R','r': ReNameFile;       'C','c': CopyFile;     end;   until (ch='E') or (ch='e');   read; End.

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

  1. Даны два отсортированных типизированных файла (тип выбрать произвольно). Получить новый типизированный файл слиянием двух исходных в отсортированном виде. Алгоритм слияния должен предусматривать, что исходные файлы могут содержать очень большое число элементов.

  2. Проверить, является ли один типизированный файл частью другого. Если является, то его распечатать на принтере.

  3. Сделать один типизированный файл частью другого, начиная с N-ой позиции (N задает пользователь).

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

  5. Сравнить содержание файлов. Количество сравниваемых файлов задает пользователь.

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

Контрольные вопросы

  1. Что называется файлом? как его описать в программе?

  2. Какие действия можно производить с файлами?

  3. Как записать файл? Какие процедуры или функции надо применить? Как производится запись?

  4. Как прочитать файл? Какие процедуры или функции используются? Как происходит чтение данных из файла?

  5. Как закончить работу с файлом?

  6. Как обратиться к компоненте с заданным номером?

  7. Как подсчитать, сколько элементов в данном файле?

  8. Верно ли, что элементы файла должны быть одного типа и что файл отличается от массива только тем, что размер (количество элементов) файла произволен, а размер массива фиксирован?

  9. Можно ли, считав из файла пятый элемент, затем сразу же считать второй? Если нет, то какой можно?

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

  11. В какое место файла можно добавлять новые элементы: в начало, в середину, в конец, куда угодно, никуда?

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

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

  14. Можно ли сравнивать файлы или присваивать один файл другому?

Примеры решения задач.

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

Program TipFile1;

{Задача.Создать файл,содержащий информацию о

работниках:табельный номер,фамилия,оклад.

Создать другой файл,в котором содержится

информация о работнике,имеющем максимальный

оклад.

Решение.Арсланов Ильдар,

ЦНИТ "Северная Звезда"

03.04.2000.}

Uses

Crt;

Type

Dann=Record

number:byte;

Surname:string;

oklad:integer;

End;

Var

Zarpl,Tf:file of Dann;

word:Dann;

i,count:Integer;

namef:string[12];

Procedure VZapZarpl;

Begin

Writeln('Ввод записи ј ',FilePos(Zarpl)+1);

With word do

Begin

Writeln('Работник ',i,'-ый');

Writeln('Табельный номер:');

Readln(number);

Writeln('Фамилия:');

Readln(surname);

Writeln('Оклад');

Readln(oklad);

Write(Zarpl,word);

End;

End;

Procedure File1Vvod;

Begin

Writeln('Введите имя файла:');

Readln(namef);

Assign(Zarpl,namef);

Rewrite(Zarpl);

Writeln('Введите кол-во записей:');

Readln(count);

For i:=1 to count do

VZapZarpl;

Writeln('Ввод информации о рабочих завершен');

Close(Zarpl);

Readln;

End;

Procedure File2Make;

Var

namef1:string[12];

n,max:integer;

surn1:string;

Begin

Max:=0;

Writeln('Введите имя другого файла:');

Readln(namef1);

Assign(Tf,namef1);

Rewrite(Tf);

Assign(Zarpl,namef);

Reset(Zarpl);

While not Eof(Zarpl) do

begin

Read(Zarpl,Word);

For i:=1 to count do

With Word do

If oklad>max

Then

begin

Max:=oklad;

n:=number;

surn1:=surname;

end;

end;

Write(Tf,word);

Close(Zarpl);

Close(Tf);

Reset(Tf);

Seek(Tf,0);

Writeln;

Writeln('Вывод информации из нового файла,содержащего');

Writeln('информацию о работнике,имеющем наибольший оклад');

Writeln;

While not Eof(tf) do

begin

Read(Tf,word);

With Word do

begin

Writeln('Табельный номер ',n);

Writeln('Фамилия ',surn1);

Writeln('Оклад ',max);

end;

end;

Close(Tf);

Read;

End;

Begin

ClrScr;

File1Vvod;

File2Make;

ReadLn;

End.

  1. Создать файл,содержащий информацию о работниках института.Найти средний стаж работы в институте.

Program TipFile2;

{Задача.Создать файл,содержащий информацию о

работниках института.Найти средний стаж

работы в институте.

Решение.Арсланов Ильдар,

ЦНИТ "Северная Звезда"

03.04.2000.}

Uses

Crt;

Type

Dann=Record

stag:byte;

Surname,workname:string;

oklad,year:integer;

End;

Var

Zarpl:file of Dann;

word:Dann;

i,count,max:Integer;

name:string[12];

Procedure VVodZap;

Begin

With word do

Begin

Writeln('Работник ',i,'-ый');

Writeln('Фамилия:');

Readln(surname);

Writeln('Год рождения:');

Readln(year);

Writeln('Стаж работы:');

Readln(stag);

Writeln('Должность:');

Readln(workname);

Writeln('Оклад');

Readln(oklad);

Write(Zarpl,word);

End;

End;

Procedure FileVvod;

Begin

Writeln('Введите имя файла:');

Readln(name);

Assign(Zarpl,name);

Rewrite(Zarpl);

Writeln('Введите кол-во работников:');

Readln(count);

For i:=1 to count do

VVodZap;

Writeln('Ввод информации о работниках завершен');

Close(Zarpl);

Readln;

End;

Procedure FileOpen;

Var

sr:real;

Begin

sr:=0;

Assign(Zarpl,name);

Reset(Zarpl);

While not Eof(Zarpl) do

begin

Read(Zarpl,Word);

With Word do

sr:=max+stag;

end;

Sr:=(sr/count);

Writeln('Средний стаж работы равен:',Sr:1:1,' лет');

Close(Zarpl);

Read;

End;

Begin

ClrScr;

FileVvod;

FileOpen;

ReadLn;

End.

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

Program TipFile3;

{Задача.Создать файл телефонного справочника.

По желанию пользователя можно создать,просмотреть,

дополнить файл справочника,найти номер телефона по

фамилии абонента,удалить компоненты файла-справочника.

Решение.Арсланов Ильдар,

ЦНИТ "Северная Звезда"

3.04.2000.}

Uses

Crt;

Type

sfio=string[20];

Sphone=string[10];

Rbook=record

Fio:sfio;

Phone:sphone;

end;

Var

BFile:File of Rbook;

Work:RBook;

vid:byte;

name:string[12];

Procedure Name_File;

Begin

Write('Введите имя файла:');

Readln(name);

End;

Procedure VvodRec;

Begin

Writeln('Ввод записи ј ',FilePos(bFile)+1);

With Work do

Begin

Write('Введите фамилию:');

Readln(Fio);

Write('Введите номер телефона:');

Readln(phone);

Write(BFile,Work);

End;

End;

Procedure CrBPhone;

Var

i,count:integer;

Begin

Name_File;

Assign(BFile,Name);

Rewrite(BFile);

Writeln('Введите число записей в справочнике ');

Readln(count);

For I:=1 to count do

Vvodrec;

Writeln('Создание справочника завершено');

Close(BFile);

End;

Procedure ProsRec;

Begin

Read(BFile,Work);

With Work do

begin

Writeln('Запись ј ',FilePos(bFile));

Writeln('Фио: ',Fio,' телефон: ',Phone);

end;

End;

Procedure ProsAllRec;

Begin

Name_File;

Assign(BFile,name);

Reset(BFile);

Seek(BFile,0);

Writeln('*******Вывод телефонного справочника**********');

While not Eof(BFile) do

ProsRec;

Writeln;

End;

Procedure IzmRec;

Var

NumRec:longint;

Begin

Name_File;

Assign(BFile,name);

Reset(BFile);

Write('Укажите номер изменяемой записи:');

Readln(NumRec);

Seek(BFile,NumRec-1);

Writeln('Старое значение записи:');

ProsRec;

Seek(BFile,NumRec-1);

Writeln('Новое значение записи:');

VvodRec;

Close(BFile);

End;

Procedure DopolRec;

Var

count,i:integer;

Begin

Name_File;

Assign(BFile,name);

Reset(BFile);

Seek(BFile,FileSize(BFile));

Writeln('Введите число дополнительных записей ');

Readln(count);

For I:=1 to count do

VvodRec;

Writeln('Измененный файл содержит ',FileSize(BFile),' записи');

Close(BFile);

End;

Procedure FindFio;

Var

Maska:sfio;

Flag:boolean;

Begin

Name_File;

Assign(BFile,name);

Reset(BFile);

Writeln('Введите фамилию для поиска: ');

Readln(Maska);

Flag:=False;

While not Eof(BFile) do

begin

Read(BFile,work);

With work do

If Pos(Maska,Fio)<>0

Then

begin

Flag:=True;

Writeln('Фамилия: ',Fio,' телефон: ',phone);

end;

end;

IfnotFlag

Then

Writeln('В справочнике нет абонентов с фамилией ',Maska);

Close(BFile);

End;

Procedure DeleteFile;

Begin

Name_File;

Assign(BFile,name);

Reset(BFile);

Truncate(BFile);

Writeln('Компоненты файла были успешно удалены');

End;

Begin

ClrScr;

Repeat

Writeln('ТЕЛЕФОННЫЙ СПРАВОЧНИК');

Writeln('Выберите вид работы:');

Writeln('1-Создание нового файла');

Writeln('2-Просмотр списка справочника');

Writeln('3-Изменение записи');

Writeln('4-Дополнение справочника');

Writeln('5-Поиск абонента');

Writeln('6-Удаление всех компонентов справочника');

Writeln('0-Выход');

Readln(vid);

Case Vid of

1:CrBPhone;

2:ProsAllRec;

3:IzmRec;

4:DopolRec;

5:FindFio;

6:DeleteFile;

0:Exit;

end;

Writeln;

Until Vid=0;

Read;

End.