Привет вам, админы!!! Ваши проги привели моих однокурсников в шок))) А преподы, кажется, что-то задумали...( В общем мне нужен совет по поводу графика функции...
Нужно протабуллировать функцию y=arccos(x) в области [-0.99; 0.99], результаты занести в файл, а потом из этого же файла по результатах построить график...нужно чтоб сам график рисовался точками толщиной в 3 пикселя, тёмно-серым цветом, а подписи к обозначениям длины на осях были в стиле Gothic...фух...вот это загнули...я сам чуть не лишился дара речи от такого...оси примерно такие как в файле, который добавляю...
Lapp
24.01.2009 5:14
Цитата(yakudza_m @ 23.01.2009 23:08)
Привет вам, админы!!!
Почему только админам привет??.. А остальным что?
М
Ознакомься с Правилами, п.8.
Расцениваю это как неуважение к участникам Форума. Либо извинишься, либо тема будет закрыта.
amega
24.01.2009 16:54
Цитата
А преподы, кажется, что-то задумали...(
Цитата
вот это загнули...
помню была такая ситуация и у меня дак как я из нее вышел когда мне дали очередное задание тежелое когда зделал сказал а вы сможете мне показать готовое решение этой задачи для тестирование правильно ли я зделал они улибнулись и больше меня не трогали)
соб по задаче
Цитата
результаты занести в файл
можно задать координаты точок как запись и очередную переменную записать в файл потом при постройке графике брать очередное значение.
Тоеть
Type Trecord = record x:real; y:real; end; Tfile = file of Trecord;
.... var a:trecord; ... {при считывание переменная а будет имметь вид a.x a.y при табулирование функции очередное значение заносим просто в файл потом считываем переменную а и строим график}
yakudza_m
24.01.2009 19:48
Цитата(Lapp @ 24.01.2009 0:14)
Почему только админам привет??.. А остальным что?
Расцениваю это как неуважение к участникам Форума. Либо извинишься, либо тема будет закрыта.
ой, сори, всем остальным тож привет))) Lapp, не обижайся, я так больше не буду...
Добавлено через 3 мин.
Цитата
Type Trecord = record x:real; y:real; end; Tfile = file of Trecord;
.... var a:trecord; ... {при считывание переменная а будет имметь вид a.x a.y при табулирование функции очередное значение заносим просто в файл потом считываем переменную а и строим график}
это нужно вводить вначале проги??
а как мне реализовать ввод и вывод значений из файла?
amega
24.01.2009 20:45
Цитата
а как мне реализовать ввод и вывод значений из файла?
ты можеш выложить табулирование функции (часть кода там где считаются очередные х у для постройки графика), я тебе напишу как потом работать с файлом
yakudza_m
25.01.2009 0:54
Цитата(amega @ 24.01.2009 15:45)
ты можеш выложить табулирование функции (часть кода там где считаются очередные х у для постройки графика), я тебе напишу как потом работать с файлом
я бы с удовольствием, но я, даже перерыв FAQ, не нашёл похожего
может я плохо искал?
yakudza_m
25.01.2009 1:20
program d; Const a:double = 1; b:double = 3; step:double = 0.1; eps:double = 0.00001; var x,r:double; begin x:=a; while abs (b-x)>eps do begin if x<=2 then r:=sqr(ln(abs(x-2)))+sqrt(x+3) else r:=exp(6-2*x)+2*sqr(cos(x-3))*cos(x-3); writeln(x:10, r:10); x:=x+step end; readln end.
вот, нашол што-то но мне нужно чтоб там одна функция табулировалась...
Добавлено через 2 мин. а как написать арккосинус на паскале?
function ArcCos(x: real): real; begin if Abs(x) < 10E-3 then ArcCos := Pi/2 else ArcCos := ArcTan(Sqrt(1 - Sqr(x)) / x) + Pi * Byte(x < 0) end;
при табуляция фунции очередно значение заносим в файл
assign(f,'file.rec'); rewrire(f); a.x:=-1; while a.x<1 do begin a.y:=arccos(a.x); write(f,a); a.x:=a.x+0.01; {0.01 это шаг с которым значени х меняет} end; close(f);
тоесть теперь у нас файл file.rec имеет координаты точок как использовать putpixel я подумаю поскольку у нас real точки а там integer;
yakudza_m
25.01.2009 19:33
Цитата(amega @ 25.01.2009 12:45)
береш пишеш функцию аркосинуса сибе в програму
function ArcCos(x: real): real; begin if Abs(x) < 10E-3 then ArcCos := Pi/2 else ArcCos := ArcTan(Sqrt(1 - Sqr(x)) / x) + Pi * Byte(x < 0) end;
при табуляция фунции очередно значение заносим в файл
assign(f,'file.rec'); rewrire(f); a.x:=-1; while a.x<1 do begin a.y:=arccos(a.x); write(f,a); a.x:=a.x+0.01; {0.01 это шаг с которым значени х меняет} end; close(f);
тоесть теперь у нас файл file.rec имеет координаты точок как использовать putpixel я подумаю поскольку у нас real точки а там integer;
не пашет занёс вышесказанное в прогу, а она не компилируется...можеш показать приблизительно как она должна выглядеть??
volvo
25.01.2009 20:07
Ошибки синтаксические исправь: Rewrite вместо rewrire, например... И в следующий раз говори, как именно сделал, и что за ошибка...
amega
25.01.2009 20:22
примерно вот так тое єт без построение графика
program arccos1; Type Trecord = record x:real; y:real; end; Tfile = file of Trecord; function arccos(x:real):real; begin if Abs(x) < 10E-3 then arccos:=Pi/2 else arccos := arctan(sqrt(1-sqr(x))/x)+pi*Byte(x<0) end; var a:Trecord; f:Tfile; { + описание переменных для графического режима} begin assign(f,'file.rec'); rewrite(f); a.x:=-1; while a.x<1 do begin a.y:=arccos(a.x); write(f,a); a.x:=a.x+0.01; end; close(f);
{подключение гр режима считывание из файла постройка графика}
end.
amega
25.01.2009 21:57
volvo ты не могбы подсказать как зделать так чтобы действительный тип стал целый для построки графика у есть идея: каждую координату умножить на 100 (поскольку у нас шаг 0.01) оюрезать хвост(дробную часть) записать у текстовый файл тоесть он будет выгледить так 100 200 101 201 ... ... и потоб строить график но я не знаю как обрезать дробную часть
volvo
25.01.2009 23:21
Цитата
я не знаю как обрезать дробную часть
Есть такая функция: Trunc, принимает вещественное число, возвращает его целую часть, округляя в сторону нуля...
amega
26.01.2009 0:07
volvo
Цитата
Вот так: Реализация ArcCos
пожуста проверь не ошибся ли ты в функциях поскольку график
function arccos(x:real):real; begin if Abs(x) < 10E-3 then arccos:=Pi/2 else arccos := arctan(sqrt(1-sqr(x))/x)+pi*Byte(x<0) end;
является график arcsin и наоборот!!!!
вот график осталось добавить оси и изделать цвет и все такое (я его чуть-чуть в центр подвинул)
program argcos1; Uses graph; Type Trecord = record x:real; y:real; end; Tfile = file of Trecord; function arccos(x:real):real; begin if (1 - Abs(x)) < 10E-3 then Arccos := x * Pi/2 else Arccos := ArcTan( (x) / Sqrt(1 - Sqr(x)) ) end; var a:Trecord; f:Tfile; grD :integer; grM :integer; errC:integer; begin assign(f,'file.rec'); rewrite(f); a.x:=-1; while a.x<1 do begin a.y:=arccos(a.x); write(f,a); a.x:=a.x+0.01; end; close(f); detectgraph(grd,grm); Initgraph(grd,grm,' '); errc:=graphresult; if errc=0 then begin reset(f); while not eof(f) do begin read(f,a); putpixel(trunc((a.x+1)*100)+200,trunc(100*a.y)+200,15); end; readln; CloseGraph; end; end.
volvo
26.01.2009 1:03
Цитата
проверь не ошибся ли ты в функциях
Я не имею привычки выкладывать непроверенные вещи... Проверяй:
function ArcCos(x: real): real; begin if Abs(x) < 10E-3 then ArcCos := Pi/2 else ArcCos := ArcTan(Sqrt(1 - Sqr(x)) / x) + Pi * Byte(x < 0) end;
begin writeln(arccos(pi/6):10 :5); end.
, выдает 1.01973, что это? Арксинус? Не может быть, Арксинус (pi/6) должен быть 0.55106 радиан... Это именно арккосинус. Так что верни как было...
Добавлено через 10 мин.
Цитата
поскольку график является график arcsin и наоборот!!!!
Я тебя умоляю, сначала ОСИ начерти, а потом будешь что-то утверждать... Чем отличается график АркСинуса от АркКосинуса? Если я проведу ось на 100 пикселей ниже, чем ты - будет Что? Где твоя ось, по которой видно, чем является график?
amega
26.01.2009 3:06
Цитата
Я тебя умоляю, сначала ОСИ начерти Где твоя ось, по которой видно, чем является график?
а причем оси?
во - первых график Арккосинус - спадает
а график арксинуса - возростает
Цитата
Если я проведу ось на 100 пикселей ниже
да хоть сверху или снизу что от этого график начнет возрастать?
во вторых
Цитата
выдает 1.01973, что это? Арксинус? Не может быть, Арксинус (pi/6) должен быть 0.55106 радиан..
я про значение ничего не говорил, речь идет о графиках. я помотрел на график и увидел что он не похож.
и третих каждий человек может ошибицца даже если он хоть 10 раз проверяет, кто - то посмотрит со стороны и найдет ошибку! я человек а не процесор кампа
volvo
26.01.2009 3:30
А вот, кстати, и подтверждение, что приведенная функция - именно АркКосинус:
program argcos1; Uses graph;
function ArcCos(x: real): real; begin if Abs(x) < 10E-3 then ArcCos := Pi/2 else ArcCos := ArcTan(Sqrt(1 - Sqr(x)) / x) + Pi * Byte(x < 0) end;
type Trecord = record x: real; y: real; end; Tfile = file of Trecord;
const eps = 0.01; scaleX = 250; scaleY = 100;
var a:Trecord; f:Tfile; grD :integer; grM :integer; errC:integer;
dbl: real; s: string; begin assign(f,'file.rec'); rewrite(f);
a.x := -1 + eps; while a.x < 1 do begin a.y := arccos(a.x); write(f, a); a.x := a.x + eps; end; close(f);
initgraph(grd, grm, ''); errc := graphresult; if errc = grOk then begin setcolor(lightred); line(20, 3 * getmaxy div 4, getmaxx - 20, 3 * getmaxy div 4); line(getmaxx div 2, 20, getmaxx div 2, getmaxy - 20);
dbl := -1; while dbl <= 1 do begin str(dbl:4:2, s); outtextxy((getmaxx div 2) + trunc(dbl * scaleX), (3 * getmaxy div 4) + 20, s); dbl := dbl + 0.25; end;
reset(f); read(f, a); setcolor(lightgray); setlinestyle(solidLn, 0, thickWidth); moveto((getmaxx div 2) + trunc(scaleX * a.x), (3 * getmaxy div 4) - trunc(scaleY * a.y)); while not eof(f) do begin read(f, a); lineto((getmaxx div 2) + trunc(scaleX * a.x), (3 * getmaxy div 4) - trunc(scaleY * a.y)); end; close(f);
readln; closegraph; end; end.
(файлы EGAVGA.BGI и GOTH.CHR из папки \BGI должны быть в одной папке с программой. Можно, конечно, слинковать их с основной программой вот так , но я думаю ЭТОГО твои преподаватели, yakudza_m, тебе точно не простят)...
Добавлено через 5 мин.
Цитата
а причем оси?
А при том, что если в твоем рисунке (в первом) ось OX будет на 8 клеточек выше, то "легким движением руки график превращается... превращается график..." (С) в противоположный. Нет вообще такой кривой: Косинусоида. Есть синусоида, только иногда она сдвигается... Теперь понимаешь, о чем я?
amega
26.01.2009 3:54
Цитата
Теперь понимаешь, о чем я?
болей меней...
yakudza_m
27.01.2009 21:34
ух ты! ну вы жжоте, парни! я даж прозрел от такого мастерства... а если поменять функцию на другую, например на синус 2 пи икс, то она тож работать будет?
volvo
27.01.2009 21:46
Цитата
а если поменять функцию на другую, например на синус 2 пи икс, то она тож работать будет?
Будет, конечно... Чего бы ей не работать? Поменяй да запусти. Посмотришь, что будет.
yakudza_m
31.01.2009 3:17
а как сделать в программе плавающий центр координат и масштабируемый график??
у вас есть какие-нибудь советы по этому поводу??
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.