Расчетно-графическая работа по «Алгоритмическим языкам и программированию (Программирование на Паскале)»

Автор: Пользователь скрыл имя, 30 Мая 2013 в 17:22, практическая работа

Описание работы

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

Работа содержит 1 файл

РГР.doc

— 161.50 Кб (Скачать)

Министерство  образования и науки Украины

ОДЕССКИЙ  НАЦИОНАЛЬНЫЙ ПОЛИТЕХНИЧЕСКИЙ

УНИВЕРСИТЕТ

Кафедра КСУ

 

 

 

 

 

 

 

 

 

 

 

 

Расчетно-графическая  работа

по дисциплине «Алгоритмические языки и программирование (ПРОГРАММИРОВАНИЕ НА Паскале)»

 

 

 

 

 

 

 

 

 

 

 

 

 

Руководитель В.П. Шилов                        Исполнитель

ст. гр. АТ-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:2,' P=',a[i].p:0:2,' V=',a[i].v:0:2,' IST=',a[i].ist);

     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:2,' P=',a[i].p:0:2,' V=',a[i].v:0:2,' IST=',a[i].ist);

     writeln;

     writeln('Внимание! Существующие в базе данных характеристики прибора №',i,' будут заменены.');

     writeln;

     writeln('Редактирование прибора №',i,':');

     write('Гарантийный срок: '); readln(a[i].g); {ввод a[i].g}

     writeln('Диапазон рабочих температур:');

Информация о работе Расчетно-графическая работа по «Алгоритмическим языкам и программированию (Программирование на Паскале)»