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

Проектирование программ в среде Рascal с интерфейсом типа "Меню". Разработка и отладка программы сортировки массива данных. Освоение методов проектирования Pascal-программ с использованием графических процедур и функций из стандартного модуля Graph.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 16.01.2015
Размер файла 581,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

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

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

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

(ПГТА)

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

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

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

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

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

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

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

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

Размещено на Allbest.ru


Подобные документы

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

    курсовая работа [336,2 K], добавлен 27.06.2015

  • Различные способы обработки информации и программирование в среде Pascal. История создания языка. Блок схема с использованием заголовка функций задания. Описание подпрограмм. Сущность структурного программирования в аспекте написания алгоритмов программ.

    курсовая работа [331,9 K], добавлен 18.01.2016

  • Строгая типизация и наличие средств структурного (процедурного) программирования императивного языка Pascal. Структура программы, выражения, строки. Правила и описание типов, процедур и функций, операторов ввода - вывода, модулей и подпрограмм.

    курсовая работа [37,3 K], добавлен 28.06.2008

  • Анализ эффективности методов сортировки данных в языке Turbo Pascal. Разработка эскизного и технического проекта программы. Сортировка без и с использованием дополнительной памяти, за исключением небольшого стека (массива). Сортировка связанных списков.

    курсовая работа [359,0 K], добавлен 23.05.2012

  • Основные виды загрузки. Приемы работы в ТР: процесс отладки. Команды редактирования отладки программ с помощью командного меню Pascal. Составление программы с использованием простых операторов ввода, вывода. Сравнения с текстовыми и числовыми условиями.

    отчет по практике [134,7 K], добавлен 02.09.2010

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

    курсовая работа [1,5 M], добавлен 17.03.2014

  • Особенности разработки программ на языке Turbo Pascal на примере программы обработки массива данных с построением диаграммы. Функции программы и основные требования к ней. Состав входных и выходных данных. Использование предметной области "Садовод".

    курсовая работа [789,1 K], добавлен 13.03.2013

  • Файлы BGI и содержимое модуля Graph, инициализация и закрытие графических режимов, их классификация, анализ и управление. Рисование графических примитивов и фигур, управление цветами и шаблонами, вывод текста, выбор шрифта и стиля, сжатия изображения.

    реферат [65,3 K], добавлен 31.05.2010

  • Решения задачи графическим и программным способами. Описание алгоритма решения графическим способом, укрупненная схема алгоритма. Ввод элементов двумерного массива, вывод преобразованного массива, разработка программы на языке pascal, листинг программы.

    курсовая работа [115,5 K], добавлен 22.05.2010

  • Решение циклических программ и программ вычисления функции с условием. Уравнение в табличном редакторе Microsoft Excel и в Turbo Pascal. Вычисление определенного интеграла методом прямоугольников, трапеции, Симпсона. Линейные и нелинейные уравнения.

    курсовая работа [233,6 K], добавлен 27.12.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.