• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

решена задача в паскале правильно или нет?

durachok

Ученик
Регистрация
26 Дек 2008
Сообщения
3
Реакции
0
Баллы
0
решена задача в паскале правильно или нет?

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

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

uses graph,crt;
var Koordx,koordy,x0,y0,dx,dy,dk,gd,gm,i,l,intsn,d,n:integer;
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.
 

Вложения

  • задание.webp
    задание.webp
    15.9 KB · Просмотры: 51
Нет, не правильно. Я попытался ее запустить, и всё, что получил на экране - горизонтальную линию на середине высоты экрана. Я не имею возможности и (простите) желания разбирать Вашу программу, но создается впечатление, что Вы просто попытались скомпилировать что-то из каких-то кусков - накручено сильно много и бездумно. Ну вот, для начала. Вы задаете цикл вида
repeat
writeln('vvedite x1 i x2 (x1<x2)');
readln(x1,x2);
until x2>x1;
АБСОЛЮТНО бессмысленный! Он выполнится заведомо один раз.
Далее. Положение Х-оси Вы задаете посередине высоты экрана - зачем? Ведь экспонента не может иметь отрицательных значений! Скатали у коллеги, которому был задан какой-нибудь синус? Ну и т.д.
 
Все гораздо проще:
запрашиваете пределы для аргумента функции, потом в цикле изменяете координату Х, вычисляете Y и выводите точку. Приращение аргумента советую взять 0.1. Точка выводится командой PutPixel(x,y). Удачи :).
 
Все гораздо проще:
запрашиваете пределы для аргумента функции, потом в цикле изменяете координату Х, вычисляете Y и выводите точку. Приращение аргумента советую взять 0.1. Точка выводится командой PutPixel(x,y). Удачи :).

Да, конечно, только на самом деле - задача сильно муторная. Надо ввести ограничения на Х2 (поскольку функция - положительная экспонента), потом, исходя из Х1, Х2, f(X1), f(X2) оптимально построить координатную сетку и т.д. и т.п. и проч. Все на самом деле просто - как вышивание крестиком :( .
P.S. А для построения кривой IMHO предпочтительна команда LineTo. Но это дело вкуса.
 
спасиб за советы0)
 
Назад
Сверху