Консультация № 195689
21.05.2019, 23:24
0.00 руб.
23.05.2019, 09:44
0 8 1
Здравствуйте! У меня возникли сложности с таким вопросом:

Задание
Построить график функции y(x) и таблицу значений y(x) с шагом измерения аргумента h.
Таблицу значений функции и аргумента необходимо вывести на экран в графическом режиме.
h=0.03
Код
[code lang=pascal h=300]program Grafik;
uses crt,graph; // используем экранный и графический модули
const
h=0.03; // шаг
stx= 2.03; // начальное значение по оси х
type
zn_t=record
x:real;
y:real;
end;
var
tabl:array[1..35] of zn_t; // таблица значений функции
i:integer;
{ инициализация графического режима
VGA, режим VGAHI 640 x 480 }
procedure Graph_init;
var
d,r,err : integer;

begin
d := VGA; r := VGAHI;
InitGraph(d,r,'');
err := GraphResult; //Проверяем результат последней операции с графикой
if (err <> 0) then //Не ноль означает ошибку!
begin // Сообщение об ошибке и досрочный выход из программы
writeln('Ошибка в инициализации графики!!!');
delay(1000);
halt;
end;
ClearDevice;
end;

{ Процедура рисования оси х и у }
procedure Ris_osey;
var // Объявляем переменные
j,j1 : integer;
s : string;
j2 : integer;
begin
setcolor(1); // Выбираем цвет
line(0,0,0,getmaxy - 1); // Рисуем ось Y
line(0,getmaxy - 400,getmaxx,getmaxy - 400); // Рисуем ось X
line(0,0,2,2); // Стрелка оси Y
line(getmaxx,getmaxy - 400,getmaxx - 2,getmaxy - 398); //Стрелка оси X вверх
line(getmaxx,getmaxy - 400,getmaxx - 2,getmaxy - 402); //Стрелка оси X низ
setcolor(2);
outtextxy(3,0,'y'); // Обозначение оси У
outtextxy(getmaxx - 7,getmaxy - 398,'x'); // Обозначение оси X


{ разметка оси Y }
j1 := 48; // Максимальная шкала оси Y

j2 := -4; // Минимальное обозначение цифры шкалы оси Y
for j := 48 downto 1 do // Цикл разметки оси Y
begin
line(0,j*10,2,j*10); // Шкала оси Y
if (j = j1) then
begin
Str(j2, s);// Преобразуем переменную j2 в строковый формат
if (j2 <> 0) then outtextxy(3,j*10 - 2,s); // Координаты цифр шкалы Y
j2 := j2 + 1; // Значение цифр шкалы увеличиваем на 1
j1 := j1 - 10; // Значение штриха шкалы уменьшаем на 10
end;
end;
{ разметка оси X}
j1 := 60; // Максимальная шкала оси X

j2 := 6; // Минимальное обозначение цифры шкалы оси X
for j := 64 downto 0 do // Цикл разметки оси X

begin
line(j*10,getmaxy - 398,j*10,getmaxy - 402); // Шкала оси X
if (j = j1) then
begin
Str(j2, s); );// Преобразуем переменную j2 в строковый формат
outtextxy(j*10,getmaxy - 415,s); // Координаты цифр шкалы X
j2 := j2 - 1; // Значение цифр шкалы уменьшаем на 1
j1 := j1 - 10; // Значение штриха шкалы уменьшаем на 1
end;
end;
end;

{ Процедура рисования графика функции }
procedure Ris_graph;
var // Объявляем переменные
j : integer;
x,y : integer;
begin
setcolor(3); // Выбираем цвет
x := trunc(tabl[1].x * 100); //Получаем координату X точки
y := trunc(tabl[1].y * 100); //Получаем координату Y точки
if (y < 0) then y := y * -1;
y := y + 80;
moveto(x,y); // Перемещаем курсор в точку(x;y)
for j := 2 to 35 do //Цикл по всем значениям аргумента
begin
x := trunc(tabl[j].x * 100); //Получаем координату X точки
y := trunc(tabl[j].y * 100) * -1 + 80; //Получаем координату Y точки
lineto(x,y); // Чертим линию в точку(x;y)
moveto(x,y); // Перемещаем курсор в точку(x;y)
end;
end;

{ Процедура вывода таблицы значений на экран }
procedure List_table;
var // Объявляем переменные
j : integer;
s : string;
j2 : integer;
begin
setcolor(4); // Выбираем цвет
j2 := 110; // Сдвиг по оси Y
outtextxy(490,j2 - 20,'---------------'); // Рисуем горизонтальную линию
outtextxy(490,j2 - 10,'| x'); // Рисуем ячейку «Х»

outtextxy(540,j2 - 10,'| y |'); // Рисуем ячейку «У»
outtextxy(490,j2,'---------------'); // Рисуем горизонтальную линию
for j := 1 to 35 do // Цикл по всем значениям аргумента
begin
Str(tabl[j].x:3:2,s); // Преобразуем значение аргумента в строковый тип
s := '| ' + s; // Добавим вертикальную границу ячейки к значению аргумента
outtextxy(490,j2 + 10,s); // Рисуем ячейку аргумента
Str(tabl[j].y:3:2, s); // Преобразуем значение функции в строковый тип
if (tabl[j].y < 0) then s := '| ' + s + ' |' // Если значение функции //отрицательное, вертикальные границы прочертить по краям значения, если
else s := '| ' + s + ' |'; // положительное – добавить пробел слева
outtextxy(540,j2 + 10,s); // Рисуем ячейку функции
j2 := j2 + 10; // Сдвиг по оси Y
end;
outtextxy(490,j2 + 10,'---------------'); // Рисуем горизонтальную линию,
// завершающую таблицу
end;
begin
{ заполняем таблицу значениями функции }
tabl[1].x := st_x; // Начальное значение аргумента
for i := 1 to 35 do //Цикл по всем значениям аргумента
begin
tabl[i].y := ln(tabl[i].x - 2); // Значение функции
tabl[i].y := round(tabl[i].y * 100 + 0.5) / 100; // Округляем значение
if(i = 35)then break; // Если счётчик равен последнему значению - прервать
tabl[i + 1].x := tabl[i].x + h;// Добавляем шаг к значению аргумента
end;

Graph_init; // Запуск графического режима
Ris_osey; // Запуск рисования осей
Ris_graph; // Запуск рисования графика
List_table; // Запуск вывода таблицы значений

repeat
until keypressed; // Ожидание нажатия любой клавиши

CloseGraph; // Выход из графического режима
end. // Завершение программы
[/code]
что не так? у меня не хочет открывать , для начала выдает : модуль 'graph' не найдет , ставлю graphabc выдает ошибку не известное имя vga ... итд d := VGA; r := VGAHI;

Обсуждение

давно
Профессор
401888
1232
22.05.2019, 07:50
общий
Адресаты:
Напишите какой у Вас Паскаль. Видимо простой АВС или АВС.net?
давно
Посетитель
402696
9
22.05.2019, 07:59
общий
Адресаты:
У меня просто, но походу это задание нужно выполнять в турбопаскале потому что в моем нету graph
давно
Профессор
401888
1232
22.05.2019, 08:08
общий
нужно выполнять в турбопаскале

Но если у вас нет его, то зачем Вам код в ТП, тем более что он у Вас уже есть.
давно
Посетитель
402696
9
22.05.2019, 08:12
общий
Адресаты:
Код в турбопаскале ошибку выдаёт
давно
Профессор
401888
1232
22.05.2019, 08:42
общий
Адресаты:
модуль 'graph' не найдет

Тогда у Вас модуль graph не лежит в папке с программой. Зайдите в папку Units, скопируйте файл Graph.tpu и положите его в папку Bin.
Это все в каталоге ТР 7.0
давно
Профессор
401888
1232
22.05.2019, 09:53
общий
Адресаты:
Вот я исправил ошибки в коде, подредактировал чуть, во вложении pas, exe файлы и необходимые модули
Прикрепленные файлы:
679dd6af4b1303978039a66698fd84c4.rar
давно
Старший Модератор
31795
6196
23.05.2019, 10:37
общий
Адресаты:
Цитата: mustang289
Код в турбопаскале ошибку выдаёт

Это код FP, в ТР нет таких комментариев "//".
Если исправить комментарии и в 135 строке st_x на stx,то получается такой результат.
Прикрепленные файлы:
eec07761b00f1700cf72d1d9cef627e8.jpg
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Профессор
401888
1232
26.05.2019, 07:44
общий
это ответ
Здравствуйте, mustang289!
Зайдите в каталог TP 7.0, в папку Units, скопируйте файл Graph.tpu и положите его в папку Bin.
Вот я исправил ошибки в коде, подредактировал чуть, во вложении pas, exe файлы и необходимые модули
Прикрепленные файлы:
4a180bfd9c3d4986d42e62103ec129c27f3058c7.rar
Форма ответа