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