![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
yar11 |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
program Grafik_funkcii;
uses crt,graph;
var
{координаты графика функции}
x,y,a,b:real;
{Номера типа графического дрaйвера и номера графического режима}
driver,mode:integer;
{cx,cy - координаты центра системы координат на экране,
mx,my - масштаб (количество пикселей на единицу),
ex,ey - координаты точки графика в масштабе экрана}
cx,cy,mx,my,ex,ey,n:integer;
{Описание функции, график которой затем выводится на экран}
function f(x:real):real;
begin
f:=sin(3*x)+cos(x)/exp(x)
end;
procedure DeleniyaX(a:real);
var
stroka:string;x,s:real;
begin
{Деления выставляются в 10-ти точках от -a до a c шагом s}
x:=-a;s:=2*a/10;
repeat
ex:=trunc(cx+x*mx)-10;
ey:=cy+5;
str(x:3:1,stroka);
outtextxy(ex,ey,stroka);
x:=x+s;
until x>a;
end;
procedure DeleniyaY(b:real);
var
stroka:string;y:real;s:integer;
begin
{Деления по оси Y выставляются в 10 точках от -b до b}
s:=trunc((getmaxy-30)/10);ey:=getmaxy-30;
repeat
ex:=cx+5;
y:=b-ey/my;
str(y:3:1,stroka);
if abs(y)>0.5 then outtextxy(ex,ey+5,stroka);
ey:=ey-s;
until ey<10;
end;
{Подпрограмма построения графика}
procedure MyGrafik(a,b:real);
{Процедура строит график от -a до a c шагом s}
var p,n:integer;s,t:real;
strx:string;
begin
{Положение начала координат на экране}
cx:=trunc(getmaxx/2);cy:=trunc(getmaxy/2);
{Цвета фона и текста}
SetBkColor(yellow);SetColor(blue);
line(10,cy,getmaxx-50,cy);{Ось X}
{Стрелочка на оси X}
line(getmaxx-60,cy-5,getmaxx-50,cy);
line(getmaxx-60,cy+5,getmaxx-50,cy);
line(cx,10,cx,getmaxy-20); {Ось Y}
{Рисование стрелочки на оси y}
line(cx-5,20,cx,10);line(cx+5,20,cx,10);
setcolor(magenta);
{Подписи к осям}
outtextxy(cx+10,10,'y');
outtextxy(getmaxx-50,cy-10,'x');
{Определение масштаба по осям X и Y исходя из того,
что X от -a до a}
mx:=trunc((getmaxx)/(2*a));
{Y от -b до b}
my:=trunc((getmaxy)/(2*b));
{Вывод значений по оси X от -a до a}
DeleniyaX(a);
{Вывод значений по оси Y от -b до b}
DeleniyaY(b);
outtextxy(10,50,'График функции');
{x меняется от -a до a c шагом s в n+1 точке}
x:=-a;n:=500;s:=2*a/n;
moveto(trunc(cx+x*mx),trunc(cy-f(x)*my));
Repeat
y:=f(x);
ex:=trunc(cx+x*mx);
ey:=trunc(cy-y*my);
lineto(ex,ey);
x:=x+s;
Until ex>getmaxx-70;
end;
Begin
clrscr;
write('a=');readln(a);
write('b=');readln(b);
{Открытие графического режима}
driver:=detect;
initgraph(driver,mode,'d:\tp\bgi');
{очистка экрана в графическом режиме}
cleardevice;
{выполнение процедуры вывода графика}
MyGrafik(a,b);
{задержка}
repeat
{до нажатия клавиши Enter}
until keypressed;
End.
это программа построения графика функции по точкам почему-то она не работает при данной функции f:=sin(3*x)+cos(x)/exp(x) при значениях b больше 19 пишет ошибку invalid floating point operation может кто подскажет Сообщение отредактировано: volvo - 5.11.2006 19:00 |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата почему-то она не работает при данной функции f:=sin(3*x)+cos(x)/exp(x) при значениях b больше 19 ![]() Задал в программе a := 1; b := 25
все прекрасно отчертилось... Может, потому, что у меня ВСЕГДА используется сопроцессор? (я установил это в опциях IDE) |
yar11 |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
спасибо за совет
Возник вопрос: в каких все-таки случаях надо подключать сопроцессор ведь в данном случае не используются типы переменных double, extended, single |
klem4 |
![]()
Сообщение
#4
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
А какже
x,y,a,b:real;
? ![]() -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
yar11 |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Эмуляция сопроцессора Очень часто у многих возникает вопрос - почему при компиляции у меня возникает ошибка Error 116: Must be in 8087 mode to compile this. Ответ: Вы используете один из следующих вещественных типов: Single, Double, Extended, Comp Для работы с этими типами, необходима эмуляция сопроцессора. Просто добавьте в начало программы директивы: {$E+, $N+} можетя что-то не так понял видимо в моей проге {$N+} используется по какой-то другой причине |
klem4 |
![]()
Сообщение
#6
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Цитата(FAQ) {$N-} - Использование сопроцессора. (Глобальная директива). При указании режима {$N-} генерируется код для программного выполнения всех вещественных вычислений. При режиме {$N+} генерируется код для выполнения таких вычислений аппаратно с помощью сопроцессора. Для корректной работы с числами с плавающей точкой нужна эта директива, сколько же можно обсуждать ! -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
madpanda |
![]()
Сообщение
#7
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Карен Репутация: ![]() ![]() ![]() |
Ребята у меня вот такая вот функция
y=2^x-5*cos(x)-3 Мне нужно построить по точкам. Подойдет ли данная программа для моей функции??? Заранее спасибо. P.S. В Паскале понимаю очень мало. |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
А заменить функцию на твою и попробовать МЫ должны? Почему не ТЫ?
Замени, и прогони программу. Заодно и расскажешь, работает или нет... Мне тоже интересно... |
Сталкер |
![]() ![]()
Сообщение
#9
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: ![]() ![]() ![]() |
Можно ли создавать скрин графика с белым фоном. Если да, то как?
Добавил в приведённой выше программе setBkColor(white); save_bmp(0, 0, getmaxx, getmaxy, 'screen.bmp', 1); Не помогло ![]() Сообщение отредактировано: Сталкер - 19.04.2007 20:13 |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Цитата(Сталкер @ 19.04.2007 19:48) Можно ли создавать скрин графика с белым фоном. И это можно...Добавил в приведённой программе setBkColor(white); save_bmp(0, 0, getmaxx, getmaxy, 'screen.bmp', 1); Не помогло ![]() Еще бы... Ты попробуй добавить: setfillstyle(solidfill, white);
bar(0, 0, getmaxx, getmaxy);
...
save_bmp(0, 0, getmaxx, getmaxy, 'screen.bmp', 1);
Чувствуешь разницу? |
Сталкер |
![]()
Сообщение
#11
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: ![]() ![]() ![]() |
Спасибо.
![]() ![]() |
зайка |
![]()
Сообщение
#12
|
Новичок ![]() Группа: Пользователи Сообщений: 13 Пол: Женский Реальное имя: татьяна Репутация: ![]() ![]() ![]() |
люди помогите плиз, беру самую простую функцию y=x*x;
при любых а,b выдаёт ошибку вот в этом месте Repeat
y:=f(x);
ex:=trunc(cx+x*mx); <=пишет что-то про точки
ey:=trunc(cy-y*my);
lineto(ex,ey);
x:=x+s;
Until ex>getmaxx-70;
. |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Цитата <=пишет что-то про точки Что именно "про точки"? Я вот только что попробовал, мне ничего ни про какие точки не пишет (исправил только функцию F в программе, приведенной в первом посте, и задал A = 1, B = 10) - график построился и с подключенным сопроцессором, и без него (Турбо Паскаль 7). |
зайка |
![]()
Сообщение
#14
|
Новичок ![]() Группа: Пользователи Сообщений: 13 Пол: Женский Реальное имя: татьяна Репутация: ![]() ![]() ![]() |
пишет "invalid floating point operation"
и выставляет курсор в начало строки "ey:=trunc(cy-y*my);" и попробовала поставить a=1 b=10 |
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
Во-первых, какой у тебя компилятор? А во-вторых, прикрепи-ка файл с программой (не надо весь текст копировать, именно прикрепи PAS-файл!!!) сюда, есть смутное подозрение...
Сообщение отредактировано: volvo - 4.07.2008 22:52 |
зайка |
![]()
Сообщение
#16
|
Новичок ![]() Группа: Пользователи Сообщений: 13 Пол: Женский Реальное имя: татьяна Репутация: ![]() ![]() ![]() |
я честно говоря не особо разбираюсь в компиляторах
![]() Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
Угу
![]() Цитата function f(x:real):real;
begin
y:=x*x;
end;
function f(x:real):real;
begin
f:=x*x; { <--- Внимательно - ты же должна вернуть результат ФУНКЦИИ }
end;
|
зайка |
![]()
Сообщение
#18
|
Новичок ![]() Группа: Пользователи Сообщений: 13 Пол: Женский Реальное имя: татьяна Репутация: ![]() ![]() ![]() |
Угу ![]() Замени на function f(x:real):real;
begin
f:=x*x; { <--- Внимательно - ты же должна вернуть результат ФУНКЦИИ }
end;
ой спасибо блин я тормоз ![]() ![]() вот смотри теперь я беру свою огромнейшую функцию 20й степени, которая при х=1 равна 1'200'000 с хвостиком, она мне строит график, но по бокам какие-то вертикальные полосы, при том чем больше значение ф-и тем их меньше. что это может быть? слушай а можешь здесь ещё посмотреть задание функции? пишет "stack overflow error" показывает ошибку у первой проц. степени Добавлено через 17 мин. вот здесь глянь плиз Сообщение отредактировано: зайка - 5.07.2008 10:32 Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#19
|
Гость ![]() |
Цитата а можешь здесь ещё посмотреть задание функции? Еще бы увидеть саму эту функцию, что именно ты пытаешься закодировать - непонятно. А Stack OverFlow у тебя - потому что бесконечная рекурсия:...
for k:=0 to n do
y:=y(x)+y1; { <--- Вот тут... }
...
Где-то стек должен переполниться? Вот в твоем случае он переполняется Цитата у первой проц. степени . |
зайка |
![]()
Сообщение
#20
|
Новичок ![]() Группа: Пользователи Сообщений: 13 Пол: Женский Реальное имя: татьяна Репутация: ![]() ![]() ![]() |
|
![]() ![]() |
![]() |
Текстовая версия | 7.09.2025 18:01 |