program gjhg;
uses graph;
const n=100;
h=10;
g=9.8;
m=4;
l=15;
v=10;
p=1000;
c=2;
k=3;
var driver,mode,i,,j:integer;
var tm,fi0,fi1,w1,w0,t,dt:real;
f,e:text;
begin
dt:=0.00001;
tm:=20;
fi0:=pi/6;
w0:=0;
assign(f,'dta');
rewrite(f);
assign(e,'atd');
rewrite(e);
while t<tm do
begin
if sin(fi0)<=(h/l) then
begin
w1:=w0+(dt/sqr(l)/m)*(-c*fi0-m*g*sin(fi0)*l);
fi1:=fi0+w0*dt;
fi0:=fi1;
w0:=w1;
t:=t+dt;
end
else begin
w1:=w0+(dt/m/sqr(l))*(-c*fi0-m*g*sin(fi0)*l-k*w0*sqr(l));
fi1:=fi0+w0*dt;
fi0:=fi1;
w0:=w1;
t:=t+dt;
end;
j:=j+1;
if j mod 1000=0 then
begin
writeln(e,t,fi1);
writeln(f,t,w1);
j:=0;
end;
end;
close(f);
close(e);
end.
http://forum.pascal.net.ru/index.php?showtopic=23570&hl=
я это видела, но что-то у меня не получается...он мне ошибку выдавал ошибочно арифметическое действие для ввода...в месте где я говорила с читать из файла.
А ты выложи весь код уже с графикой,а то каким образом люди могут помоч найти тебе ошибку,если ты ее не показываеш.
я творила творила, и закрыла не сохроняя..
program gjhg;
uses graph;
const n=100;
xgmin=100;
xgmax=480;
ygmin=200;
ygmax=300;
h=10;
g=9.8;
m=4;
l=15;
v=10;
p=1000;
c=2;
k=3;
var driver,mode,i,xg,yg,xl,yl,j:integer;
a,b,ymin,ymax:real;
x,y:array[1..n] of real;
s:string;
var tm,fi0,fi1,w1,w0,t,dt:real;
f,e:text;
begin
dt:=0.00001;
tm:=20;
fi0:=pi/6;
w0:=0;
assign(f,'dta');
rewrite(f);
assign(e,'atd');
rewrite(e);
while t<tm do
begin
if cos(fi0)<=(h/l) then
begin
w1:=w0+(dt/sqr(l)/m)*(-c*fi0-m*g*sin(fi0)*l);
fi1:=fi0+w0*dt;
fi0:=fi1;
w0:=w1;
t:=t+dt;
end
else begin
w1:=w0+(dt/m/sqr(l))*(-c*fi0-m*g*sin(fi0)*l-k*w0*sqr(l));
fi1:=fi0+w0*dt;
fi0:=fi1;
w0:=w1;
t:=t+dt;
end;
j:=j+1;
if j mod 100000=0 then
begin
writeln(e,t,' ',fi1);
writeln(f,t,' ',w1);
j:=0;
end;
end;
close(f);
close(e);
end.
program gjhg;
uses graph;
const n=30;
xgmin=100;
xgmax=480;
ygmin=200;
ygmax=300;
var driver,mode,i,xg,yg,xl,yl,q:integer;
a,b,ymin,ymax:real;
x,y,z,u:array[1..n] of real;
s:string;
w1,t:real;
f,e:text;
begin
a:=0;
b:=20;
driver:=detect;
Initgraph(driver,mode, 'D:\work');
ClearDevice;
assign(f,'dta');
reset(f);
for i:=1 to n do
readln(f,x[i],y[i]);
{for i:=1 to n do writeln(x[i],y[i]); }
assign(e,'atd');
reset(e);
for i:=1 to n do
readln(e,z[i],u[i]);
{for i:=1 to n do writeln(z[i],u[i]); }
ymax:=y[1];
for i:=2 to n do
if y[i]>ymax then
begin
ymax:=y[i];
end;
ymin:=y[1];
for i:=2 to n do
if y[i]<ymin then
begin
ymin:=y[i];
end;
rectangle(xgmin,ygmin,xgmax,ygmax);
q:=0;
i:=30;
while q<1 do
begin
if frac((xgmax-xgmin)/i)=0 then
q:=i else i:=i+1;
end;
xl:=xgmin;
while xl<xgmax do begin
Line(xl,ygmin,xl,ygmax);
xl:=xl+q;
str(xl,s);
OutTextXY(xl-40,ygmin+110,s);
end;
q:=0;
i:=30;
while q<1 do
begin
if frac((ygmax-ygmin)/i)=0 then
q:=i else i:=i+1;
end;
yl:=ygmin;
while yl<ygmax do
begin
Line(xgmin,yl,xgmax,yl);
yl:=yl+q;
str(yl,s);
OutTextXY(xgmin-25,yl-6,s);
end;
xg:=round(xgmin+(x[1]-a)/(b-a)*(xgmax-xgmin));
yg:=round(ygmax-(y[1]-ymin)/(ymax-ymin)*(ygmax-ygmin));
Moveto (xg,yg);
for i:=2 to n do
begin
xg:=round(xgmin+(x[i]-a)/(b-a)*(xgmax-xgmin));
yg:=round(ygmax-(y[i]-ymin)/(ymax-ymin)*(ygmax-ygmin));
Lineto (xg,yg);
end;
OutTextXY(ygmin-100,xgmin+80,'fi');
OutTextXY(ygmax+190,xgmax-180,'t');
readln;
closegraph;
end.
ну кто-нибудь...ну не получается у меня...
Ну ты хоть напиши,что имено не работает,не запускается,выводин неправильно или что?плюс ты хотяб нашипи,что у тебя в файле то написано,или помогающим тебе угадать надо?
ну в программе видно, в файл f записывается t и w1(в данном случае это у меня время и скорость ), а в файл e записывается t и fi1(время и угол) .
все работает, но пока написано только для построения одного графика по данным файла f.
теперь нужно построить на том же графике, ну или на другом, по данным файла e.+ надо внизу и сбоку подписать значения...вот...у меня уже мозг перестал думать после всего что надумала, а сдавать в понедельник..
Дорогая Zopaa (кхм..), очень тебе не повезло с ником((. Кто тебе такой присоветовал? Плюнь ему в лицо - скажи, я просил. Очень он тебе вредит. Я много раз порывался тебе ответить, но как подумаю, с чем буду разговаривать - сразу желание пропадает. И, думаю, не один я так. Но вот, пересилил, вроде. Если в середине ответа вырвет - не обессудь, все усилия прилагаю, чтоб сдержаться..
Давай с начала.
Прога, которая делает файлы, gjhg (тебе специально хочется, чтоб другие время тратили на хотя бы чтение таких названий??), вылетает у тебя по Range Check. Включи себе в опциях эту проверку и никогда не выключай, иначе годы потратишь, чтоб понять, почему у тебя вдруг программа не работает.
Вылет в строке:
j:=j+1;
Уважаемая Zopaa, объясни еще раз - чего ты хочешь?
Извини, конечно, что прошу тебя тратить время не по прямому назначению, но не могла ли бы ты сказать поточнее, что тебе нужно? Вот твоя продукция (не решаюсь тут назвать нужным словом):
Что в нем не так? Все, вроде, подписано..
В нем все так,но как я понял ей надо график на графике или график под графиком,только я не понимаю,если у нее строится для первого графика,почему не строится для втрого.А вообще чуть чуть не так(максимальные значения не выводятся а сразу пишуться названия осей),но это лиш как я понимаю,сам автор критериев вообще не дал.
во-первых я не могу сооброзить как построить второй график, другим цветом на том который сейчас(чтобы была вторая линия), во-вторых подписи под графиком(всмысле цифры) какие-то левые, я так думаю что мне надо те значения по которым строится...вобще мне надо как-то так сделать чтобы было красиво...
Вообще главная задача программы,чтобы работала,насчет красиво,тогда поясни,что в твоем понимании красиво.Цифры как раз те по которым стоится.
Максимальный номер цвета, воспринимаемый адаптером в текущем графическом режиме, может быть получен при помощи функции GetMaxColor : Word
На экране всегда различаются цвет фона и цвет пера. Все процедуры изображения фигур, если не содержат в себе явной установки цвета, рисуют эти фигуры цветом пера, который устанавливается процедурой SetColor(Color : Word).
Константа Число Цвет
Black 0 Черный
Blue 1 Синий
Green 2 Зеленый
Cyan 3 Голубой
Red 4 Красный
Magenta 5 Фиолетовый
Brown 6 Коричневый
LightGray 7 Ярко-серый
DarkGray 8 Темно-серый
LightBlue 9 Ярко-синий
LightGreen 10 Ярко-зеленый
LightCyan 11 Ярко-голубой
LightRed 12 Ярко-красный
LightMagena 13 Ярко-фиолетовый
Yellow 14 Желтый
White 15 Белый
Захочеш фон поменять.SetBkColor( Color :Word)
Какой второй график?Ты как раз и строиш второй график.Лап скрин привел даже с результатом,или тебе надо время от скорости?,а вообще я бы посовеловал создать процедуру начертания графиков и дальше в зависимости от параметров строить,в твоем слушае, как параменты, поменяются файлы и значения осей.
Lapp,ну знаеш ли,мой ник тоже не блещет красотой,а то из-за чего я его получил,это не моя внешность(дядя фреди был не шипко красивеньким),а некоторые события....Ну а ник создателя темы,взможно отражает ее состояние психологическое.....Ну типа сессия долги сдавать надо а тут полная....... да еще и задачу сделать не может тоже в ......пе,и причина по которой она пришла на форум это .....,а может она считает эту часть своего тела самой привлекательность и привликает к ней внимание.
Ну как я понял она в первом куске вычисляет координаты точек и записывает их в 2 файла(первый скорость-время,второй угол время)ну и в общем ей надо их оба вывести один на другом,причем ее программа спокойно выводит один график,но ей надо чтобы КРАСИВО......и чтобы оба были друг на друге,либо друг под другом(по моему первый вариант даже бред(зачем зависимость угла и зависимость скорости от времени на одном графике рисовать.)
.... , разделяй программу на логические блоки - процедуры и ф-ции, выделяй отступы - ничего не понятно.
volvo, я где-то видел ссылку по которой объяснялось как вмонтировать графические файлы в ехе, не мог бы ее скинуть?
program gjhg;
uses graph;
const n=30;
xgmin=100;
xgmax=540;
ygmin=100;
ygmax=380;
var driver,mode,i,xg,yg,xl,yl,q,o:integer;
a,b,ymin,ymax:real;
x,y,z,u:array[1..n] of real;
s:string;
w1,t:real;
f,e:text;
begin
writeln('vvedite 1, eclu xotute yvudet'' Fi ot T; vvedite 2, eclu xotute yvudet'' W ot T ') ;
read(o);
a:=0;
b:=20;
driver:=detect;
Initgraph(driver,mode, 'D:\work');
ClearDevice;
assign(f,'dta');
reset(f);
{for i:=1 to n do
readln(f,x[i],y[i]);
{for i:=1 to n do writeln(x[i],y[i]); }
assign(e,'atd');
reset(e);
{for i:=1 to n do
readln(e,z[i],u[i]);
{for i:=1 to n do writeln(z[i],u[i]); }
if o=1 then begin
for i:=1 to n do readln(f,x[i],y[i]) end
else begin
for i:=1 to n do readln(e,x[i],y[i]); end;
{ x[i]:=z[i];
y[i]:=u[i];
end else
begin }
ymax:=y[1];
for i:=2 to n do
if y[i]>ymax then
begin
ymax:=y[i];
end;
ymin:=y[1];
for i:=2 to n do
if y[i]<ymin then
begin
ymin:=y[i];
end;
rectangle(xgmin,ygmin,xgmax,ygmax);
q:=0;
i:=30;
while q<1 do
begin
if frac((xgmax-xgmin)/i)=0 then
q:=i else i:=i+1;
end;
xl:=xgmin;
while xl<xgmax do begin
Line(xl,ygmin,xl,ygmax);
xl:=xl+q;
str(xl,s);
OutTextXY(xl-10,ygmin+290,s);
end;
q:=0;
i:=30;
while q<1 do
begin
if frac((ygmax-ygmin)/i)=0 then
q:=i else i:=i+1;
end;
yl:=ygmin;
while yl<ygmax do
begin
Line(xgmin,yl,xgmax,yl);
yl:=yl+q;
str(yl,s);
OutTextXY(xgmin-26,yl-7,s);
end;
{if o=1 then begin}
xg:=round(xgmin+(x[1]-a)/(b-a)*(xgmax-xgmin));
yg:=round(ygmax-(y[1]-ymin)/(ymax-ymin)*(ygmax-ygmin));
Moveto (xg,yg);
setcolor(9);
for i:=2 to n do
begin
xg:=round(xgmin+(x[i]-a)/(b-a)*(xgmax-xgmin));
yg:=round(ygmax-(y[i]-ymin)/(ymax-ymin)*(ygmax-ygmin));
Lineto (xg,yg);
setcolor(9);
setcolor(10);
end;
SetTextJustify(1,3);
OutTextXY(ygmin-5,xgmin-10,'fi');
SetTextJustify(2,1);
OutTextXY(ygmax+170,xgmax-160,'t');
{end;}
{if o=2 then begin
x[i]:=z[i];
y[i]:=u[i];
xg:=round(xgmin+(x[1]-a)/(b-a)*(xgmax-xgmin));
yg:=round(ygmax-(y[1]-ymin)/(ymax-ymin)*(ygmax-ygmin));
Moveto (xg,yg);
setcolor(9);
for i:=2 to n do
begin
xg:=round(xgmin+(x[i]-a)/(b-a)*(xgmax-xgmin));
yg:=round(ygmax-(y[i]-ymin)/(ymax-ymin)*(ygmax-ygmin));
Lineto (xg,yg);
setcolor(9);
end;
setcolor(10);
SetTextJustify(1,3);
OutTextXY(ygmin-5,xgmin-10,'w');
SetTextJustify(2,1);
OutTextXY(ygmax+170,xgmax-160,'t')
end; }
if (o<>1) and (o<>2) then write('error');
readln;
closegraph;
end.