Автор: Пользователь скрыл имя, 30 Мая 2013 в 17:22, практическая работа
C помощью программы вводится база из 15 приборов, из которой потом выбираются нужные пользователю по определённым характеристикам. Составить программу, формирующую списки приборов, выпускаемых заводом в соответствии с заданиями, приведенными в таблице1. При написании программы использовать такие структуры, как файлы, записи и множества. Запись - это структура данных, состоящих из фиксированного числа компонентов, называемых полями записи. В отличие от массива, компоненты (поля) записи могут быть различного типа.
Министерство образования и науки Украины
ОДЕССКИЙ НАЦИОНАЛЬНЫЙ ПОЛИТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ
Кафедра КСУ
Расчетно-графическая работа
по дисциплине «Алгоритмические языки и программирование (ПРОГРАММИРОВАНИЕ НА Паскале)»
Руководитель В.П. Шилов Исполнитель
ст. гр. АТ-082 Муращенко А. Ю.
« »__________2009 г.
Аннотация
C помощью программы
вводится база из 15 приборов, из
которой потом выбираются
Условие задачи
Составить программу,
формирующую списки приборов, выпускаемых
заводом в соответствии с заданиями,
приведенными в таблице1. При
написании программы
Приборы выпускаемые заводом, характеризуются:
1. Стоимостью S( до 10 у.е., от 11 у.е..более 100 у.е.,).
2. Гарантийным сроком G(1 год, 1.5 г., 2 г.).
3. Диапазоном рабочих температур T(-30 - +20 ,0 - 40 , 15 - 70 ).
4. Цветом CV (белый, серый, черный).
5. Весом P (до 5 кг, от 5 до 10 кг, более 10 кг ).
6. Потребляемой энергией Е (до 100 Вт, более 100 Вт )
7. Обьемом V (до 0.1 м , от 0.1 до 0.2 м и более).
8. Источником питания (батарея, сеть).
Таблица 1
№ пп |
Признаки |
Условия формирования выходных множеств. |
36. |
2, 3, 5, 7, 8 |
1) G=2, 0< =T< =40, p< =20, V< =0.1, батарея;2) G=1.5 или 2, T>40, 10< =P< =30, V=2, батарея и сеть |
Введение
Записи.
Запись - это структура данных, состоящих
из фиксированного числа компонентов,
называемых полями записи.
В отличие от массива, компоненты (поля)
записи могут быть различного типа. Чтобы
можно было ссылаться на тот или иной компонент
записи, поля именуются.
Описание записи имеет вид:
< имя типа >= Record < список полей > End
Список полей
содержит описания полей с указанием
их имен и типов. Тип определяется
от имени двоеточием, описания полей
определяются друг от друга точкой
с запятой. Описания нескольких полей одного типа можно объединить,
перечислив через запятую их имена и затем
указав их общий тип.
Пример:
Type
birthday = Record
day : 1..31;
month : 1..12;
year: Integer;
end;
Var a,b: birthday;
.......
В этом примере тип birthday (день рождения)
содержит три поля с именами day, month, year (день
месяц и год), переменные a и b содержат записи
типа birthday.
К каждому из компонентов записи можно
получить доступ, если использовать составное
имя, т.е. указать имя переменной, затем
точку и имя поля:
a.day := 27; b.year := 1984;
Поля могут быть любого
типа (кроме файла), в том числе
и типа запись
Var c : Record
name : String;
bd : birthday;
End;
.........
If c.bd.year=1984 Then . . .
Имена полей
должны быть уникальными в пределах
той записи, где они объявлены,
однако, если записи содержат поля-записи,
то имена могут повторяться на
разных уровнях вложенности.
Файлы.
В языке Паскаль файл
- это состоящая из некоторого числа компонент
одного типа структура данных со следующими
особенностями:
- число компонент файла не фиксируется
(в отличие от массива) и не ограничивается
сверху некоторым числом (в отличие от
строк и множеств);
- доступ к компонентам файла возможен
только путем их последовательного перебора
от начала файла (с первой компоненты);
- компоненты файла создаются только процедурой
вывода и доступны только процедуре ввода.
В Паскале определены файлы двух видов,
описываемые следующим образом:
< имя > = File Of < тип > ;
< имя > = Text ;
Первые называются типизированными
файлами, а вторые -текстовыми.
В Турбо-Паскале описанные
выше файлы называются логическими
(кроме того, в системе Турбо-Паскаль есть
логические файлы третьего вида - не типизированные).
Основное назначение логического файла
- обеспечить программе средства для обмена
данными с периферийными устройствами
компьютера. В связи с этом вводится понятие
физического файла, как совокупности данных
во внешней памяти (дискета, жесткий диск,
магнитная лента и др.) Кроме того, в качестве
физического файла могут использоваться
и сами периферийные устройства, например,
принтер).
Средством установления связи между логическими
и физическими файлами в Турбо-Паскале
является процедура Assign.
Assign (< ф.п. >, < имя файла >);
< ф.п. > - файловая переменная
(переменная файлового типа), описанная
в программе (имя логического файла).
< имя файла > - текстовое
выражение, значением которого является
записанное по правилам операционной
системы MS DOS имя файла (имя физического
файла). Типы компонент логического и физического
файла должны совпадать. Затем необходимо
инициализировать файл, указав для него
направление передачи данных, т.е. открыть
файл для записи или чтения.
Для чтения файл открывается стандартной
процедурой Reset (< ф.п. >); при этом
специальная переменная-указатель устанавливается
на начало файла.
Стандартная процедура Rewrite (< ф.п. >) открывает
файл для записи, при этом файл всегда
создается заново, с потерей информации
в данном физическом файле, если она была
туда ранее записана.
Стандартная процедура Append(< ф.п. >)
открывает для записи существующий текстовой
файл с целью его расширения, при этом
переменная-указатель ставится в конец
файла.
Чтение и запись происходят при помощи
уже знакомых нам процедур ввода-вывода Read и Write, с тем лишь
отличием, что в них необходимо указать
в качестве первого параметра файловую
переменную. После каждой операции переменная-
указатель перемещается на одну компоненту.
После завершения в программе операций
по обмену данными с файлом его необходимо
закрыть стандартной процедурой. Close(< ф.п. >).
При работе с файлами используется функция Eof(< ф.п. >), которая
возвращает значение True, если переменная-указатель
стоит в конце файла, и False - в противном
случае.
Пример 1.
Дан файл f компоненты
которого являются целыми числами. Получить
в файле g все четные
компоненты файла f, а в файле h все нечетные.
Program Dfile;
Var f,h,g: File Of Integer;
i: Integer;
Begin {Установка связи между файловыми
переменными и соответствующими именами
файлов}
Assign( f ,’Data.dat’);
Assign(g , ‘Chet.dat’);
Assign(h , ‘Nechet.dat’);
{Открытие файлов для чтения
и записи}
Reset(f); Rewrite(h); Rewrite(g);
While Not(Eof(f)) Do
Begin
Read( f, i); {чтение из файла f}
If Odd(i)
Then Write(h,i) {запись в файл h}
Else Write(g, i) {запись в файл g}
End; {Закрытие файлов}
Close(f); Close(g); Close(h);
End.
Пример 2.
Дан текстовой файл. Получить копию файла.
Program CopyFile;
Var f,g: Text;
s: String;
Begin
{установка связи файловых
переменных с именами файлов}
Assign(f, ‘data1.txt’);
Assign(g, ‘data2.txt’);
{открытие файлов для чтения
и записи}
Reset(f); Rewrite(g);
While Not(Eof(f)) Do
Begin
Readln(f,s); {чтение из файла в строку}
Writeln(g,s) {запись в файл из строки}
End;
{закрытие файлов}
Close(f); Close(g)
End.
Процедуры и функции для текстовых файлов
Обращение |
Действие |
Append(f) |
Открывает файл для добавления в конец файла |
Read(f, СписокВвода) |
Считывает из файла одно или более значений в одну или более переменных |
ReadLn(f, СписокВвода) |
То же с переходом к следующей строке файла |
Write(f, СписокВывода) |
Записывает одно или несколько значений в файл, заранее открытый для вывода |
WriteLn(f, СписокВывода) |
То же с выводом маркера – признака конца строки |
SetTextBuf(f, Буфер [, Размер]) |
Назначает буфер ввода/вывода для файла (по умолчанию размер буфера – 128 байт) |
Flash(f) |
Выталкивает буфер файла вывода |
Eoln(f) |
Возвращает признак конца строки |
SeekEoln(f) |
Возвращает признак конца строки, предварительно пропустив все пробелы и символы табуляции |
SeekEof(f) |
Возвращает признак конца файла, предварительно пропустив все пробелы, символы табуляции и признаки конца строки |
Блок-схема
описание
меток, типов и
переменных
label cancel
label cancel
Код программы
program RGR;
uses crt; {подключение библиотеки crt}
label start, exit; {объявление меток}
type device=record {объявление записи device}
g,t1,t2,p,v: real;
ist: string;
end;
var {объявление переменных}
a: array[1..15] of device;
db: file of device;
i: integer;
key: char;
procedure rwdb(w: boolean); {процедура связывания файла базы данных и рабочего массива даных}
begin {тело процедуры}
if w {проверка режима работы процедуры}
then
begin
rewrite(db); {открытие файла db для записи}
for i:=1 to 15 do {оператор цикла}
write(db,a[i]); {запись a[i] в файл db}
end
else
begin
reset(db); {открытие файла db для чтения}
for i:=1 to 15 do {оператор цикла}
read(db,a[i]); {чтение a[i] из файла db}
end;
close(db); {закрытие файла db}
end; {конец тела процедуры}
procedure createdb; {процедура создания базы данных}
label cancel; {объявление метки}
begin {тело процедуры}
writeln('Создание базы данных.');
writeln;
writeln('Внимание! После завершения ввода всех приборов содержимое базы данных будет заменено.');
writeln('Для продолжения нажмите любую клавишу, для отмены - ESC.');
if readkey=#27 then goto cancel; {если ESC - перейти на метку cancel}
clrscr;
writeln('Создание базы данных.');
writeln;
writeln('Внимание! После завершения ввода всех приборов содержимое базы данных будет заменено.');
writeln('Создание новой базы данных можно отменить нажатием ESC после завершения ввода текущего прибора.');
writeln;
writeln('Введите характеристики приборов.');
for i:=1 to 15 do {оператор цикла}
begin {подцикловый составной оператор}
writeln;
writeln('Прибор №',i,':');
write('Гарантийный срок: '); readln(a[i].g); {ввод a[i].g}
writeln('Диапазон рабочих температур:');
write('От '); readln(a[i].t1); {ввод a[i].t1}
write('До '); readln(a[i].t2); {ввод a[i].t2}
write('Вес: '); readln(a[i].p); {ввод a[i].p}
write('Объём: '); readln(a[i].v); {ввод a[i].v}
write('Источник питания: '); readln(a[i].ist); {ввод a[i].ist}
if readkey=#27 then goto cancel; {если ESC - перейти на метку cancel}
end; {конец тела составного оператора}
rwdb(true); {вызов процедуры связывания файла базы данных и рабочего массива даных в режиме записи из массива в файл}
writeln;
writeln('Нажмите любую клавишу для перехода в главное меню.');
readkey; {чтение кода нажимаемой клавиши}
cancel:end; {конец тела процедуры}
procedure editdb; {процедура редактирования базы данных}
label cancel; {объявление метки}
begin {тело процедуры}
writeln('Редактирование базы данных.');
writeln;
writeln('Для продолжения нажмите любую клавишу, для отмены - ESC.');
if readkey=#27 then goto cancel; {если ESC - перейти на метку cancel}
clrscr;
writeln('Редактирование базы данных.');
writeln;
rwdb(false); {вызов процедуры связывания файла базы данных и рабочего массива даных в режиме чтения из файла в массив}
writeln('Введите номер прибора, характеристики которого хотите изменить.');
writeln;
readln(i); {ввод номера прибора для редактирования}
clrscr;
writeln('Редактирование базы данных.');
writeln;
{вывод характеристик i-го прибора}
writeln(i,') G=',a[i].g:0:1,' T=',a[i].t1:0:2,'-',a[i].t2:0:
writeln;
writeln('Внимание! Существующие в базе данных характеристики прибора №',i,' будут заменены.');
writeln('Для редактирования характеристик прибора №',i,' нажмите любую клавишу, для отмены - ESC.');
if readkey=#27 then goto cancel; {если ESC - перейти на метку cancel}
clrscr;
writeln('Редактирование базы данных.');
writeln;
{вывод характеристик i-го прибора}
writeln(i,') G=',a[i].g:0:1,' T=',a[i].t1:0:2,'-',a[i].t2:0:
writeln;
writeln('Внимание! Существующие в базе данных характеристики прибора №',i,' будут заменены.');
writeln;
writeln('Редактирование прибора №',i,':');
write('Гарантийный срок: '); readln(a[i].g); {ввод a[i].g}
writeln('Диапазон рабочих температур:');