Помощь в написании студенческих работ
Антистрессовый сервис

Проектирование Pascal-программ

КонтрольнаяПомощь в написанииУзнать стоимостьмоей работы

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

Проектирование Pascal-программ (реферат, курсовая, диплом, контрольная)

МИНОБРНАУКИ РОССИИ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

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

(ПГТА) Кафедра «Прикладная информатика»

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

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

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

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

Пенза 2013 год

Отчет о выполнении лабораторной работы РАЗРАБОТКА 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-программ с интерфейсом типа «меню».

рascal программа интерфейс

Отчет о выполнении лабораторной работы РАЗРАБОТКА 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

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-программ с помощью сортировки данных.

Отчет о выполнении лабораторной работы РАЗРАБОТКА 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:BPBGI');

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

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:TPBGI');

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

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

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

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-программ с использованием графических процедур и функций.

Показать весь текст
Заполнить форму текущей работой