Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 27.12.2008, 09:26   #1 (permalink)
durachok
Новичок
 
Регистрация: 26.12.2008
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию решена задача в паскале правильно или нет?

задание прикреплено снизу

------------------------------------------------------------------

uses graph,crt;
var Koordx,koordy,x0,y0,dx,dy,dk,gd,gm,i,l,intsn,d,n:i nteger;
x1,x2,x,y,sn,xx:real;
s:string;
begin
repeat
writeln('vvedite x1 i x2 (x1<x2)');
readln(x1,x2);
until x2>x1;
gd:=detect;
initgraph(gd,gm,'');
dx:=round((getmaxx-2*20)/(x2-x1));
dy:=3*dx div 2;
X0:=round(20-dx*x1);
Y0:=getmaxY div 2;
setcolor(white);
line(0, Y0, getmaxx, Y0);
OutTextXY(getmaxx-10, Y0-15, 'X');
if trunc(x2) - round(x1) > 20 then
dk:=(trunc(x2) - round(x1)) div 20 +1
else dk:=1;
for i:=round(x1) to trunc(x2) do
if i mod dk = 0 then
begin
str(i,s);
Line(X0+round(i*dx), Y0-5,X0+round(i*dx), Y0+5);
OutTextXY(X0+round(i*dx), Y0+5, s);
end;
if x1*x2<0 then
begin
Line(X0, 1,X0, getmaxy);
OutTextXY(X0+5, 5, 'Y');
end;
setcolor(green);
n:=600; xx:=(x2-x1)/(N-1);
x:=x1; y:=sin(x);
KoordX:=X0+round(x*dx);
KoordY:=Y0-round(y*dy);
MoveTo(KoordX,KoordY);
for i:=1 to N-1 do begin x:=x+xx; y:=sin(x);
KoordX:=X0+round(x*dx);
KoordY:=Y0-round(y*dy);
LineTo(KoordX,KoordY);
end;
repeat until keypressed;
closegraph;
end.
Миниатюры
caaeaiea.jpg  
durachok вне форума   Ответить с цитированием

Старый 27.12.2008, 09:26
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Рекомендую обратить внимание на аналогичные темы

Задача на Паскале и С++
Задача на Паскале
Задача на Паскале
Задача на Паскале

Старый 27.12.2008, 11:15   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Нет, не правильно. Я попытался ее запустить, и всё, что получил на экране - горизонтальную линию на середине высоты экрана. Я не имею возможности и (простите) желания разбирать Вашу программу, но создается впечатление, что Вы просто попытались скомпилировать что-то из каких-то кусков - накручено сильно много и бездумно. Ну вот, для начала. Вы задаете цикл вида
repeat
writeln('vvedite x1 i x2 (x1<x2)');
readln(x1,x2);
until x2>x1;
АБСОЛЮТНО бессмысленный! Он выполнится заведомо один раз.
Далее. Положение Х-оси Вы задаете посередине высоты экрана - зачем? Ведь экспонента не может иметь отрицательных значений! Скатали у коллеги, которому был задан какой-нибудь синус? Ну и т.д.
Vladimir_S вне форума   Ответить с цитированием
Старый 27.12.2008, 11:35   #3 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Все гораздо проще:
запрашиваете пределы для аргумента функции, потом в цикле изменяете координату Х, вычисляете Y и выводите точку. Приращение аргумента советую взять 0.1. Точка выводится командой PutPixel(x,y). Удачи .
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 27.12.2008, 14:22   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от AlexZir Посмотреть сообщение
Все гораздо проще:
запрашиваете пределы для аргумента функции, потом в цикле изменяете координату Х, вычисляете Y и выводите точку. Приращение аргумента советую взять 0.1. Точка выводится командой PutPixel(x,y). Удачи .
Да, конечно, только на самом деле - задача сильно муторная. Надо ввести ограничения на Х2 (поскольку функция - положительная экспонента), потом, исходя из Х1, Х2, f(X1), f(X2) оптимально построить координатную сетку и т.д. и т.п. и проч. Все на самом деле просто - как вышивание крестиком .
P.S. А для построения кривой IMHO предпочтительна команда LineTo. Но это дело вкуса.
Vladimir_S вне форума   Ответить с цитированием
Старый 27.12.2008, 19:00   #5 (permalink)
durachok
Новичок
 
Регистрация: 26.12.2008
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

спасиб за советы0)
durachok вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 22:29.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.