Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Контрольная работа по дисциплине Информатика и программирование Выполн

Работа добавлена на сайт samzan.net:


PAGE   \* MERGEFORMAT2

МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«Пензенская государственная технологическая академия»

(ПГТА)

Кафедра «Прикладная информатика»

Контрольная работа

по дисциплине «Информатика и программирование»

Выполнил: студент гр.

Проверил: Долгушева Л.Н.

Пенза  2013 год

Отчет о выполнении лабораторной работы 8,9

РАЗРАБОТКА PASCAL-ПРОГРАММ С ИНТЕРФЕЙСОМ ТИПА

«МЕНЮ»

Цель работы: Освоение методов проектирования Pascal-программ с интерфейсом типа «меню».

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

Блок – схема программы:

Описание программы:

1. Выводит сообщения о назначении программы.

2. Ввод данных происходит в режиме диалога.

3. Все функции программы реализованы в модуле UNIT.

4. Головной модуль программы использует процедуры из модулей типа UNIT.

5. Выводит запросы на ввод исходных данных.

6. Производит контроль исходных данных и коррекцию ошибочно введенных значений переменных.

7. Выводит результаты на экран.

Законченная программа будет иметь вид:

unit m_unit;

interface

type

 m_rec = ^my_record;

 my_record = record

   Num  :Integer;

   FIO  :string;

   OKL  :real;

   Prc  :real;

   Next  :m_rec;

 end;

procedure menu   ; {Процедура вывода меню}

procedure init_s ; {Процедура производит при старте заполнение начальных параметров}

procedure new_s  ; {Процедура добавления сотрудника в список}

procedure view_s ; {Процедура просмотра списка сотрудников}

procedure del_s  ; {Процедура удаления сотрудника из списка}

procedure clear_s; {Процедура очищает список}

var

 Head:m_rec;      {Указатель на начало списка}

implementation

uses crt,graph;

procedure init_s; {Процедура производит при старте заполнение начальных параметров}

begin

 Head:=NIL;      {Список изначально пуст}

end;

procedure menu;

var

 ch:Char;

begin

 Init_s;

 repeat

   textcolor(11);   

   TextBackground(1);   

   clrscr;

   

   writeln('Добавить Просмотр Удалить ESC-Выход');

   textcolor(12);

   gotoxy(1,1);

   Write('Д');

   gotoxy(10,1);

   Write('П');

   gotoxy(19,1);

   Write('У');

   gotoxy(1,2);

   textcolor(11);   

   ch :=ReadKey;

   if (ch=#27) then exit;

   case ch of

     'Д':new_s  ;

     'П':view_s ;

     'У':del_s  ;

     'д':new_s  ;

     'п':view_s ;

     'у':del_s  ;

     'l':new_s  ;

     'g':view_s ;

     'e':del_s  ;

     'L':new_s  ;

     'G':view_s ;

     'E':del_s  ;

   end;

 until ch = #27;

end;

{*****************************************************************}

procedure new_s;  {Процедура добавления посетителя в список}

var

 tmp,ends:m_rec;

begin

 clrscr;

 textcolor(10); {зел цвет}

 if Head = Nil then

 begin

   new(head);

   head^.next := NIL;

   tmp := head;

 end

 else

 begin

   tmp := Head;

   while (tmp^.Next<>NIL) do

   begin

     tmp := tmp^.Next;

   end;

   ends:=tmp;

   new(tmp);

   ends^.next := tmp;

   tmp^.Next := NIL;

 end;

{Заполним поля структуры}  

 { Num  :Integer;

   FIO  :string;

   WORK :string;

   OKL  :real;

   Perc :real;}

 

 write('Номер комнаты');

 readln(tmp^.Num);

 write('фио');

 readln(tmp^.FIO);

 write('Количество суток:');

 readln(tmp^.OKL);

 write('Цена суток');

 readln(tmp^.Prc);

 

 {Для автотестов}

 {  tmp^.Num  :=1;   

   tmp^.FIO  := 'asdasd';

   tmp^.OKL  :=123;

   tmp^.Prc :=1;}

 

 

 textcolor(14);   

 writeln('Добавлена запись');

 textcolor(10);   

 

{Шапка}  

 writeln('|----|---------------------------|-------|-----|--------|');

 textcolor(10);   

 write('||');textcolor(13);write(' N  ');

 textcolor(10);

 write('||');textcolor(13);write('ФИО сотрудника ');

 textcolor(10);

 write('||');textcolor(13);write('Суток');

 textcolor(10);

 write('||');textcolor(13);write('Цена');

 textcolor(10);

 write('||');textcolor(13);write('Итого');

 textcolor(10);

 writeln('||');

 

{Вывод текущей записи}    

 writeln('|------|-------------------------|------------|-------|---------|');

 textcolor(10);   

 write('||');textcolor(15);write(tmp^.num:4);

 textcolor(10);

 write('||');textcolor(15);write(tmp^.FIO:20);

 textcolor(10);

 

 write('||');textcolor(15);write(tmp^.OKL:8:2);

 textcolor(10);

 write('||');textcolor(15);write(tmp^.Prc:5:2);

 textcolor(10);

 write('||');textcolor(15);write(tmp^.OKL*tmp^.Prc:8:2);

 textcolor(10);

 writeln('||');

 

 

{подвал}  

 writeln('|-------|-----------------------------|------------|-------|----------|');

 

 textcolor(11);   

 

 write('Для продолжения нажмите любую клавишу');

 readkey;

end;

{*****************************************************************}

{*****************************************************************}

{*****************************************************************}

procedure view_s; {Процедура просмотра списка сотрудников}

var

 tmp:m_rec;

begin

clrscr;

textcolor(10);

{Шапка}  

 writeln('|------|-------------------------------|-----------|-----|-------|');

 textcolor(10);   

 write('||');textcolor(13);write(' N  ');

 textcolor(10);

 write('||');textcolor(13);write('ФИО сотрудника');

 textcolor(10);

 write('||');textcolor(13);write('Суток');

 textcolor(10);

 write('||');textcolor(13);write('Цена');

 textcolor(10);

 write('||');textcolor(13);write('Итого');

 textcolor(10);

 writeln('||');

 

 tmp :=head;

 while (tmp<> NIL) do

 begin

{вывод текущей записи}    

 writeln('|-----|---------------------------|----------|-------|---------|');

 textcolor(10);   

 write('||');textcolor(15);write(tmp^.num:4);

 textcolor(10);

 write('||');textcolor(15);write(tmp^.FIO:20);

 textcolor(10);

 

 write('||');textcolor(15);write(tmp^.OKL:8:2);

 textcolor(10);

 write('||');textcolor(15);write(tmp^.Prc:5:2);

 textcolor(10);

 write('||');textcolor(15);write(tmp^.OKL*tmp^.Prc:8:2);

 textcolor(10);

 writeln('||');

 

 tmp := tmp^.next;

 end;

 

{подвал}  

 writeln('|------|------------------------------|-----------|------|-----------|');

 

 textcolor(11);   

 

 write('Для продолжения нажмите любую клавишу');

 readkey;

end;

{*****************************************************************}

{*****************************************************************}

{*****************************************************************}

procedure del_s;  {Процедура удаления из списка}

var

 t1,t2:m_rec;

 num:integer;

begin

 clrscr;

 textcolor(10);

 write('Номер комнаты');

 textcolor(13);

 readln(num);

 textcolor(10);

 t1:=head;

 t2:=head;

 while(t1<>nil) do

 begin

   if t1^.num = num then

   begin

     if t1 = head then

     begin

       if t1^.Next = NIL then

       begin

         dispose(head);

         head := NIL;

         break;

       end

       else

       begin

         head := t1^.next;

         dispose(t1);

         

       end

     end

     else

     begin

       if t1^.next <> NIL then

       begin

         t2^.Next:=t1^.next;

         dispose(t1);

         t1:=t2;

       end

       else

       begin

         t2^.next:=Nil;

         dispose(t1);

         t1:=t2;

       end;

     end;

     

   end;  

   t2:=t1;

   if t1<> NIL then

   begin

     t1:=t1^.next;

   end;

 end;

 write('Для продолжения нажмите любую клавишу');

 readkey;

end;

{*****************************************************************}

{*****************************************************************}

{*****************************************************************}

procedure clear_s; {Процедура очищает список}

var

 tmp:m_rec;

begin

 tmp:=Head;

 while (tmp<>NIL) do

 begin

   Head:=tmp^.next;

   dispose(tmp);

   tmp:=Head;

 end;

 head := NIL;

end;

end.

Ответы на контрольные вопросы:

1. Каково назначение модуля UNIT?

Модуль типа UNIT в Turbo Pascal - это отдельно хранимая и независимо компилируемая программная единица, в отличие от подпрограмм, которые, являясь структурным элементом Pascal-программы, не могут существовать вне ее.

2. Какова структура модуля UNIT?

В соответствии с вышеизложенным модуль типа UNIT имеет следующую структуру:

Unit {служебное слово} Unit_Name {имя модуля};

Interface { начало интерфейсной части }

Описание объектов, видимых из других программных модулей:

Const ...... (определение констант)

Type ...... (определение типов переменных)

Var ...... (определение переменных)

Procedure ...... (только заголовки процедур)

Function ...... (только заголовки функций)

Implementation { начало части реализации }

Описание объектов, скрытых от других программных модулей

Const ........... (определение констант)

.........................

Procedure ...... (полные описания процедур и

Function ..... функций, включая процедуры

и функции из интерфейсной секции)

Begin

Операторы инициализации переменных

перед использованием модуля UNIT_NAME

End;

End. { Окончание модуля }

3. Каковы структура и назначение части Interface?

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

4. Каковы структура и назначение части Implementation?

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

5. Для чего нужен раздел инициализации переменных?

Этот раздел используется для открытия файлов.

6. Какое расширение имеет модуль UNIT (исходный модуль)?

Имя модуля выбирается по общим правилам и должно совпадать с именем дискового файла содержащего исходный текст модуля. Расширение в имени модуля (.pas) не указывается  оно задается по умолчанию.

7. Какое расширение имеет откомпилированный модуль типа UNIT?

Модуль компилируется точно таким же образом, как и обычные программы, но так как модуль не является непосредственно выполняемой единицей, то в результате его компиляции образуется дисковый файл с расширением .TPU (Turbo Pascal Unit ), а не с расширением .EXE. При компиляции модуля имя файла (NAME.TPU) берется из имени файла с исходным текстом модуля (NAME.PAS).

8. Может ли модуль UNIT выполняться самостоятельно?

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

9. Каковы правила обращения к модулю UNIT?

Чтобы основная программа могла воспользоваться константами, перемен-ными, процедурами и другими объектами, описанными в интерфейсной секции используемого модуля, необходимо указать в программе имя нужного TPU-файла.

Выводы о проделанной лабораторной работе: Входе выполнения работы были освоены методы проектирования Pascal-программ с интерфейсом типа «меню».


Отчет

о выполнении лабораторной работы 13

РАЗРАБОТКА PASCAL-ПРОГРАММ СОРТИРОВКИ ДАННЫХ

Цель работы: Освоение методов проектирования Pascal-программ сортировки данных.

Задание на лабораторную работу:

Разработать и отладить программу сортировки массива данных. Струк-туру данных взять из лабораторной работы №8.

Блок – схема программы:

Описание программы:

1.Выводит сообщения о назначении программы;

2. Ввод данных происходит в режиме диалога;

3. Производит контроль вводимых числовых данных и коррекцию ошибочно введенных данных;

4. Выводит запросы на ввод исходных данных;

5. Выводит результаты на экран.

Законченная программа будет иметь вид:

unit m_unit;

interface

const

 NN=5;

type

 

 my_record = record

   Num  :Integer;

   FIO  :string;

   OKL  :real;

   Prc  :real;

   

 end;

procedure menu   ; {Процедура вывода меню}

procedure init_s ; {Процедура производит при старте заполнение начальных параметров}

procedure new_s  ; {Процедура добавления в массив}

procedure view_s ; {ЏаПроцедура просмотра массив}

procedure sort_s;

var

 arr:array[1..NN] of my_record;      

 CNT:integer;

implementation

uses crt,graph;

procedure init_s; {Процедура производит при старте заполнение начальных параметров}

begin

CNT:=0;  

end;

procedure menu;

var

 ch:Char;

begin

 Init_s;

 repeat

   textcolor(11);   

   TextBackground(1);   

   clrscr;

   

   writeln('Добавить Просмотр Сортировка ESC-Выход');

   textcolor(12);

   gotoxy(1,1);

   Write('Д');

   gotoxy(10,1);

   Write('П');

   gotoxy(19,1);

   Write('С');

   

   gotoxy(1,2);

   textcolor(11);   

   ch :=ReadKey;

   if (ch=#27) then exit;

   case ch of

     'Д':new_s  ;

     'П':view_s ;

     'С':sort_s ;

     'д':new_s  ;

     'п':view_s ;

     'с':sort_s ;

     

     'l':new_s  ;

     'g':view_s ;

     'c':sort_s ;

     'L':new_s  ;

     'G':view_s ;

     'C':sort_s ;

   end;

 until ch = #27;

end;

{************************************************************}

procedure new_s;  {Процедура добавления посетителя в массив}

var

 i:integer;  

 isUse:boolean;

begin

 clrscr;

 textcolor(10); {зел цвет}

 if CNT < NN then

 begin  

   inc(cnt);

   repeat

   

   write('Номер комнаты [1..9]:');

   readln(arr[CNT].Num);

   isUse:=false;

   for i:=1 to CNT-1 do

   begin

     if Arr[i].Num = arr[CNT].Num then

     begin

       isUse:=true;

       writeln('Номер ',arr[CNT].Num, 'занят');

     end;

   end;

   until ((arr[CNT].Num >0) and (arr[CNT].Num<10) and IsUse = False);

   

   write('ФИО');

   readln(arr[CNT].FIO);

   write('Количество суток:');

   readln(arr[CNT].OKL);

   write('Цена суток:');

   readln(arr[CNT].Prc);

   

   textcolor(14);   

   writeln('Добавлена запись:');

   textcolor(10);   

   

 {Шапка}  

   writeln('|------|------------------------|---------|-----|--------|');

   textcolor(10);   

   write('||');textcolor(13);write(' N  ');

   textcolor(10);

   write('||');textcolor(13);write('ФИО сотрудника');

   textcolor(10);

   write('||');textcolor(13);write('Суток');

   textcolor(10);

   write('||');textcolor(13);write('Цена');

   textcolor(10);

   write('||');textcolor(13);write('Итого');

   textcolor(10);

   writeln('||');

   

 {Вывод текущей записи}    

   writeln('|-------|---------------------------|----------|-------|---------|');

   textcolor(10);   

   write('||');textcolor(15);write(arr[CNT].num:4);

   textcolor(10);

   write('||');textcolor(15);write(arr[CNT].FIO:20);

   textcolor(10);

   

   write('||');textcolor(15);write(arr[CNT].OKL:8:2);

   textcolor(10);

   write('||');textcolor(15);write(arr[CNT].Prc:5:2);

   textcolor(10);

   write('||');textcolor(15);write(arr[CNT].OKL*arr[CNT].Prc:8:2);

   textcolor(10);

   writeln('||');

   

 {Подвал}  

   writeln('|------|--------------------------------|----------|-------|----------|');

   

   textcolor(11);   

 end

 else

 begin

   writeln(Нельзя добавить! Достигнут максимум')

 end;

 write('Для продолжения нажмите любую клавишу');

 readkey;

end;

{************************************************************}

{************************************************************}

{************************************************************}

procedure view_s; {Процедура просмотра списка сотрудников}

var

 i:integer;

begin

clrscr;

textcolor(10);

{Шапка}  

 writeln('|-----|--------------------------------|---------|-----|--------|');

 textcolor(10);   

 write('||');textcolor(13);write(' N  ');

 textcolor(10);

 write('||');textcolor(13);write('ФИО сотрудника');

 textcolor(10);

 write('||');textcolor(13);write('Суток');

 textcolor(10);

 write('||');textcolor(13);write('Цена');

 textcolor(10);

 write('||');textcolor(13);write('Итого');

 textcolor(10);

 writeln('||');

 

 

 for i:=1 to CNT do

 begin

{Вывод текущей записи}    

 writeln('|------|-------------------------------|-----------|------|-----------|');

 textcolor(10);   

 write('||');textcolor(15);write(arr[i].num:4);

 textcolor(10);

 write('||');textcolor(15);write(arr[i].FIO:20);

 textcolor(10);

 

 write('||');textcolor(15);write(arr[i].OKL:8:2);

 textcolor(10);

 write('||');textcolor(15);write(arr[i].Prc:5:2);

 textcolor(10);

 write('||');textcolor(15);write(arr[i].OKL*arr[CNT].Prc:8:2);

 textcolor(10);

 writeln('||');

 

 end;

 

{Подвал}  

 writeln('|------|-----------------------------|----------|------|-----------|');

 

 textcolor(11);   

 

 write('Для продолжения нажмите любую клавишу');

 readkey;

end;

{************************************************************}

{************************************************************}

{************************************************************}

procedure sort_s;

var

 B:array[1..9] of integer;

 A:Array[1..NN] of my_record;

 i,j,k:integer;

 Max:integer;

 Min:integer;

begin

 if CNT >1 then

 begin

   for i:=1 to 9 do

   begin

     B[i]:=0;

   end;

   Max:=Arr[1].Num;

   Min:=Arr[1].Num;

   for i:=1 to CNT do

   begin

     if Arr[i].Num>Max then Max:=Arr[i].Num;

     if Arr[i].Num<Min then Min:=Arr[i].Num;

   end;

   for i:=1 to CNT do

   begin

     j:=Arr[i].Num-Min+1;

     B[j]:=B[j]+1;

   end;

   

   i:=0;

   for j:=1 to 9 do

   begin

     if B[j]<>0 then

     begin

       for k:=1 to B[j] do

       begin

         i:=i+1;

         A[i].NUM:=j+Min-1;

       end;

     end;

   end;

   

   for i:=1 to CNT do

   begin

     for j:=1 to CNT do

     begin

       if A[i].Num = Arr[j].Num then

       begin

         A[i].FIO := Arr[j].FIO;

         A[i].OKL := Arr[j].OKL;

         A[i].Prc := Arr[j].Prc;

       end;

     end;

   end;

   for i:=1 to CNT do

   begin

    Arr[i].Num := A[i].Num;

    Arr[i].FIO := A[i].FIO;

    Arr[i].OKL := A[i].OKL;

    Arr[i].Prc := A[i].Prc;

   end;

 end;

 textcolor(11);   

 write('Отсортировано. Для продолжения нажмите любую клавишу');

 readkey;

end;

end.

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

1. В чем суть алгоритма сортировки выбором?

Вначале отыскивается запись с наименьшим значением ключа и она помещается на первое место. Эта запись исключается из дальнейшего анализа. Затем отыскивается запись с наименьшим значением ключа в оставшейся части массива, помещается на второе место и исключается из дальнейшего анализа и т.д.

2. В чем суть алгоритма сортировки обменом?

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

3. В чем суть алгоритма сортировки вставками?

Массив рассматривается состоящим из двух частей: отсортированной части и неотсортированной части.

На первом шаге отсортированная часть содержит первый по порядку

элемент (запись) массива, неотсортированная - остальные. Шаг в данном

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

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

4. В чем суть алгоритма цифровой сортировки?

Этот метод еще называется сортировкой "вычерпыванием". Он удобен для сортировки целых чисел (ключей), имеющих сравнительно небольшой диапазон.

Пусть даны N целых чисел в массиве А, принадлежащих диапазону от Amin до Amax включительно.

Каждому числу Ai поставим в соответствие j-й элемент массива L; при этом индекс элемента определяется по формуле

j= Ai - Amin + 1.

Необходимо, чтобы массив L имел длину не менее K = Amax-A min+1.

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

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

6. В чем суть алгоритма сортировки подсчетом?

Идея алгоритма заключается в том, чтобы попарно сравнить значения всех ключей массива К и при этом для каждого ключа Ki подсчитать количество меньших его ключей Ci. Затем каждый i-й элемент (запись) исходного массива К устанавливается на место, номер которого равен Ci+1 в массиве А.

7. В чем суть алгоритма сортировки слияние?

Этот алгоритм применим для внешней и внутренней сортировки. Рассмотрим вариант для внешней сортировки.

Даны два файла A и B, содержащие упорядоченные по возрастанию целые числа, длины файлов различны. Требуется сформировать файл С, содержащий данные из файлов А и В в порядке возрастания.

Основные шаги алгоритма:

1) прочитать по одному элементу из файлов А и В;

2) сравнить прочитанные элементы, меньшее записать в файл С;

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

4) если один из файлов закончился, то остаток второго добавить к сформированной части файла С.

Выводы о проделанной лабораторной работе: В ходе выполнения работы я освоил методы проектирования Pascal-программ с помощью сортировки данных.


Отчет

о выполнении лабораторной работы 14

РАЗРАБОТКА PASCAL-ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ ГРАФИЧЕСКИХ ПРОЦЕДУР И ФУНКЦИЙ

Цель работы: Освоение методов проектирования Pascal-программ с использованием графических процедур и функций.

Задание на лабораторную работу:

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

Блок – схема программы:

Описание программы:

1. Выводит сообщения о назначении программы;

2. Ввод данных производится в режиме диалога;

( при этом можно использовать текстовый режим);

3. Происходит обработка ошибок при вводе данных и инициализация графического режима;

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

5. Выводит надписи над графиком: " График функции Y = ...";

6. Выводит начальных и конечных значений аргумента и функции около осей координат (Xн, Xк, Yн, Yк).

Законченная программа будет иметь вид:

unit m_unit;

interface

procedure draw_s ;

procedure show_s ;

var

 cnt: Integer;

 Xmin,Xmax:real;

 a,b,c:real;

implementation

uses crt,graph;

function InitGraf:Integer;   {Функция инициализирует графический режим}

var

 CodeError:Integer;         {0 – Нет ошибок. Или код ошибки}

 gd,gm:integer;        {Драйвер и режим}

begin

 CodeError:= 0;       {Первичная инициализация, предпологается что все пройдет без ошибок}

 gd:=detect;

 InitGraph(gd,gm,'d:\BP\BGI\');

 If GraphResult <> grOk then

 begin

   CodeError :=GraphResult;     { Возвращается код ошибки }

 end

 else

 begin

   CodeError := 0;               { Возвращается 0, ошибок нет }

 end;

 InitGraf:=CodeError;

end;

{***************************************************************}

{***************************************************************}

{***************************************************************}

procedure draw_s; {Процедура вывода диаграммы на экран}

begin

 clrscr;

 if InitGraf = 0 then

 begin

   Show_s;

   CloseGraph;

 end

 else

 begin

   textcolor(12);

   writeln('Ошибка инициализации видеодрайвера');

   readkey;

 end;

end;

{***************************************************************}

{***************************************************************}

{***************************************************************}

function f(x:real):real;

begin

 if cos(b*x) = 0 then f:=0

 else f:=a*(sin(b*x)/cos(b*x))-c;

end;

procedure show_s; {Процедура прорисовки диаграммы}

var

 Ht : integer; {Высота экрана}

 Wt : integer; {Ширина экрана}

 deltax:real;

 i  : integer;

 ZmY: real   ; {Масштаб по Y}

 ZmX: real   ; {Масштаб по X}

 x0,y0:integer;

 X,Y:real;

 MM:Real;  {макс}

 MMM:Real; {мин}

 MinusY:integer;

 s:string;

begin

 Wt:=GetMaxX;

 Ht:=GetMaxY;

 MinusY:=50;

 deltax:=(Xmax-Xmin)/cnt;

 X:=Xmin;

 MM:=F(x);

 MMM:=F(x);

 while X<Xmax do

 begin

   

   if F(x) > MM then MM:=F(X);

   if F(x) < MMM then MMM:=F(X);

   X:=X+deltax;

 end;

 ZmY:=(Ht-2*MinusY)/ABS(MM-MMM);

 

 ZmX:=Wt/(2*(Xmax-Xmin));

 X:=Xmin;  

 X0:=Trunc(wt/2)+trunc(X*ZmX);

 Y0:=Ht-MinusY-trunc(F(X)*ZmY);

 MoveTo(X0,Y0-MinusY);

 

 SetTextStyle(1, HorizDir, 1);

 

 MoveTo(X0,Y0);

 for i:=1 to CNT do

 begin

   X:=X+deltax;

   X0:=Trunc(wt/2)+trunc(X*ZmX);

   Y0:=Ht-2*MinusY-trunc(F(X)*ZmY);

   if F(X)<>0 THEN lineto(X0,Y0)

   else

   begin

     X:=X+deltax;

     X0:=Trunc(wt/2)+trunc(X*ZmX);

     Y0:=Ht-2*MinusY-trunc(F(X)*ZmY);

     MoveTo(X0,Y0);

   end;

 end;

 {Рисуем оси}  

 X:=0;

 X0:=Trunc(wt/2)+trunc(X*ZmX);

 Y0:=Ht-2*MinusY;

 MoveTo(X0+10,Y0+10);

 outtext('0');

 MoveTo(X0,Y0);

 lineto(X0,Ht);

 MoveTo(X0,Y0);

 lineto(X0,2*MinusY);

 outtext('Y');

 

 MoveTo(X0,Y0);

 lineto(0,Y0);

 

 MoveTo(X0,Y0);

 lineto(Wt,Y0);

 MoveTo(Wt-50,Y0-30);

 outtext('X');

 

 X0:=Trunc(wt/4);

 Y0:=MinusY;

 moveto(X0,Y0);

 SetTextStyle(5, HorizDir, 1);

 outtext('Function Y=a*tg(b*x)-c;');

 readkey;

end;

end.

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

1. Какие процедуры используются для инициализации графического режима?

В настоящее время более 50 стандартных графических процедур и функ-ций содержится в стандартном модуле Graph.tpu. Чтобы воспользоваться возможностями модуля GRAPH.tpu, необходимо иметь компьютер, осна-щенный видеоадаптером. В состав модуля Graph входит ряд программ-драйверов для наиболее распространенных видеоадаптеров: CGA, MCGA, EGA, VGA, SVGA, Hercules, AT&T, 3270 PC. Эти драйверы хранятся в файлах с расширением .BGI (Borland Graphic Interface). Для множества символов имеются файлы описаний с расширением .CHR.

2. Какова структура графической Pascal-программы?

Любая программа Turbo Pascal, использующая графические процедуры и функции из модуля Graph, имеет следующую типовую структуру:

Program prog_graph;

uses Graph, Crt, ...... ;

var grDriv, grMod : integer;

код графического режима

код видеографического устройства

.....................

{ Процедуры и функции }

function F(var x : real) : real

begin

..........

end;

.....................

begin

...............................

Write ('Введите XN, XK :'); { Ввод исходных данных }

Readln (Xn, Xk); { в текстовом режиме }

Write ('Введите количество точек графика : ');

Readln(N);

{ Вычисление Yn и Yk и шага изменения аргумента h }

...............................

{--------------- Инициализация графического режима ------------}

grDriv := Detect;

InitGraph(grDriv, grMod, 'D:\TP\BGI');

{ путь к графическому драйверу}

{--------- Проверка успешного завершения инициализации --------}

if GraphResult <> GrOK then

begin

writeln(' Ошибка !!!');

{... обработка кода ошибки .....}

delay(1000);

exit

end;

{---------------- Основная часть программы --------------------}

XNE:=...; { Задание области вывода графика; }

YNE:=...; {можно вводить с клавиатуры или задавать}

Xke:=...; {в программе }

Yke:=...;

Mx:=...; { Расчет масштабов }

My:=...;

........... { Установка цветов, типов линий и др.}

x:=xn; { Переход в начало графика }

x:=x+h;

while x < xk do

begin

85

y:=F(x);

...

... { Черчение отрезка прямой от предыдущей точки к }

... { точке (x, y)}

x:=x+h

end;

.......... { Черчение осей координат }

.......... { Вывод текста }

repeat

until KeyPressed;

{---------------- Завершение графического режима --------------}

CloseGraph

end.

3. В чем суть алгоритма построения графика функции?

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

4. Как задается код графического режима и код графического устройства?

Задание графического режима и кода графического устройства имеет следующую типовую структуру:

Program prog_graph;

uses Graph, Crt, ...... ;

var grDriv, grMod : integer;

код графического режима

код видеографического устройства

5. Какие графические процедуры и функции относятся к управляющим?

InitGraph

CloseGraph

GraphResult

GraphErrorMsg

6. Какие графические процедуры и функции используются для формирования экрана, окна, страницы?

ClearDevice

SetViewPort

ClearViewPort

SetVisualPage

SetActivePage

GetMaxX

GetMaxY

7. Какие графические процедуры и функции используются для работы с точечными изображениями?

PutPixel

GetPixel

GetX

GetY

8. Какие графические процедуры и функции используются для работы с графическими примитивами типа "линия"?

Line 

LineTo 

LineRel 

MoveTo 

SetLineStyle 

9. Какие графические процедуры и функции используются для работы с дугами, фигурами, штриховкой?

Arc

Circle

Rectangle

Bar

Bar3d

DrawPoly

FillPoly

SetFillStyle

SetFillPattern

FloodFill

Pieslice

Ellipse

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

SetBkColor

SetColor

11. Какие графические процедуры и функции используются для работы с текстом?

OutText

OutTextXY

SetTextStyle

SetUserCharSize

InstallUserFont

12. В чем суть алгоритма поиска экстремумов нелинейных функций?

Чтобы график заданной функции входил в предоставленное для его изображения окно, необходимо точно рассчитать масштабы Мx и Мy. Точность масштаба по оси Y (Мy) зависит от того, насколько точно будет произведен расчет граничных значений (экстремумов) функции Yфmin и Yфmax в заданном диапазоне (Хн ..Хк).

Выводы о проделанной лабораторной работе: В ходе выполнения работы я освоил методы проектирования Pascal-программ с использованием графических процедур и функций.




1.  Взаимосвязь философии культуры и мировоззрения
2. Статья- Сделки между супругами
3. Лабораторна робота 3 Дослідження лінійних систем 1
4. Развивающиеся страны позиция в мировой экономике
5. Основные черты и стадии антикризисного управления
6. Экспериментальная и теоретическая физика ОПРЕДЕЛЕНИЕ СКОРОСТИ ЗВУКА В ВОЗДУХЕ МЕТОДОМ СТО
7.  Звичка оголюватися Власне відображення в дзеркалі без прикриття светри або нічної сорочки має стати для
8. а и logos ~ слово учение
9. На тему- Абай Кунанбаев Подготовила- Полтушева Г
10. Создание заполнение и редактирование таблиц в MS ccess 4 Практическая работа 2
11. К о м п а н и я Б А Й Т Представляет Вашему вниманию
12. Ройса; Почему Наполеон проиграл в шахматы первому роботу 26 марта 2007 002
13. Основные экономические понятия
14. Гробница Тутанхамона
15. Тематика и методические указания по выполнению курсовой работы для студентов обучающихся по специально
16. Сестринское дело в педиатрии 1Ребенок начинает удерживать голову в возрасте мес
17. Темы для контрольных работ.html
18. НЕЗАВИСИМОСТЬ РОССИЙСКАЯ НЕЗАВИСИМОСТЬ
19. Эссе о демократии
20. лучевая трубка лучевой трубка модулятор напряжение История развития В 1859 году Юлиус Плюккер открыл кат