Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите построить график > Информатика / Программирование
Образовательный студенческий форум > Другие дисциплины > Информатика / Программирование
Prutvel
Помогите построить график на любом языке программирования - на паскале или делфи и т.д. - хоть где-нибудь, или блок-схемку накидайте, плиззз...
Надо просто по отрезкам построить вот эту функцию:


tig81
Правила форума
Ваши наработки где?
Prutvel
Мои наработки:

unit Unit1;
interfaceace
uses Classes,SysUtils,LResources,Forms,Graphics,Dialogs,Extctrls,Stdctrls;
function I(t:real):real;
procedure Graphica (a,b:real);
type
TForm1=class(TForm);
Button1: TButton;
Image1: TImage;
procedure ButtonClick(Sender:TObject);
procedure FormCreate(Sender:TObject);
private
public
end;
const Im=0.57,tau=0.062; L=0.1; f1=5.37; f2=8.06;
var Form1: TForm1;
t0,y0,tk,yk,a,b:real;
t,y:array[0..1000] of real;
u,v:array [0..1000] of integer;
N:integer;
implementation
functiion I(t:real):real;
begin
T1:=1/f1; T2:=1/f2; T:=T1+T2;
if mod(t,T)<tau then Result:=Im;
if (mod(t,T)>=tau) and (mod(t,T)<T1) then Result:=-Im;
if (mod(t,T)>=T1) and (mod(t,T)<(T1+tau)) then Result:=Im;
if (mod(t,T)>=(T1+tau)
and (mod(t,T)<T) then Result:=-Im;
end;
procedure Graphica(a,b:real);
const kt=5;ky=5;
var
dt,dy,c,d,g,h,max,min:real;
i,tempt,tempy:integer;
s:string;
begin
h:=(b-a)/(N-1);
t[0]:=a;y[0]:=I(t[0]);
for i:=1 to N do
begin
t[i]:=t[i-1]+h;
y[i]:=I(t[i]);
end;
max:=y[0]; min:=y[0];
for i:=1 to N do
begin
if y[i]>max then max:=y[i];
if y[i]<min then min:=y[i];
end;
c:=(Form1.Image1.ClientWidth-t0-tk)/(b-a);
d:=t0-c*t[0];
g:=(Form1.Image1.ClientHeight-y0-yk)/(min-max);
h:=yk-g*max;
for i:=1 to N do
begin
u[i]:=trunc(c*x[i]+d);
v[i]:=trunc(g*y[i]+h);
end;
Form1.Image1.Canvas.Color:=clGray;
Form1.Image1.Canvas.Pen.Mode:=pmNot;
Form1.Image1.Canvas.MoveTo(u[0],v[0]);
Form1.Image1.Canvas.Pen.Width:=2;
Form1.Image1.Canvas.Pen.Color:=clGreen;
for i:=1 to N do
Form1.Image1.Canvas.LineTo(u[i],v[i]);
Form1.Image1.Canvas.Pen.Width:=1;
Form1.Image1.Canvas.Pen.Color:=clBlack
Form1.Image1.Canvas.MoveTo(trunc(t0),trunc(h));
if (trunc(h)>yk) and (trunc(h)<trunc(Form1.Image.ClientHeight-y0)) then
Form1.Image1.Canvas.LineTo(trunc(Form1.Image1.ClientWidth-tk),trunc(h));
Form1.Image1.Canvas.MoveTo(trunc(d),trunc(yk));
if (trunc(d)>0)
and (trunc (trunc(d),trunc(Form1.Im
ag1.ClientHeight-y0));
dt:=(Form1.Im
age1.ClientWidth-t0-tk)/KT3;
for i:=0 to KT3 do
begin
if (i=0) or (i=KT3) then
Form1.Image1.‘anvas.Pen.Style:=psSolid else
Ferm1.Image1.Canvas.Pen.Style:=psDash;
Form1.Image1.Canvas.MoveTo(trunc(t0+i*dt),trunc(yk));
Form1.Image1.Canvas.LineTo(trunc(t0+i*dt),trunc(Form1.Image1.ClientHeight-y0));
end;
dy:=(Form1.Image1.ClientHeight-y0-yk)/KY;
for i:=0 to KY do

begin
if (i=0) or (i=KY) then
Form1.Image1.‘anvas.Pen.Style:=psSolid else
Form1.Image1.‘anvas.Pen.Style:=psDash;
Form1.Image1.‘anvas.MoveTo(trunc(t0),trunc(yk+i*dy));
Form1.Image1.‘anvas.LineTo(trunc(Form1.Image1.ClientWidth-tk),trunc(yk+i*dy));end;
Form1.Image1.‘anvas.Pen.Style:=psSolid;
dt:=(b-a)/KT3;
tempy:=trunc(Form1.Image1.ClientHeight-y0+1);
for i:=0 to KT3 do
begin
str(a+i*dt:5:2,s);
tmpt:=trunc(t0+i*(Form1.Image1.ClientWidtg-t0-tk)/KT3-1;
Form1.Image1.‘anvas.TextOut(trunc(d)-5,tempy,'0');
dy:=(max-min)/KY;
tempt:=5;
for i:=1 to KY do
begin
str(ma
x-i*dy:5:2,s);
tempy:=trunc(yk-5+i*( Form1.Image1.ClientHeight-y0-yk)/KY);
Form1.Image1.‘anvas.TextOut(tempt,tempy,s);end;
if (trunc(h)>yk) and trunc(h)<Form1.Image1.ClientHeight-1) then
Form1.Image1.‘anvas.TextOut(tempt+1,trunc(h)-5,'0');
tempt:=trunc(t0+i*( Form1.Image1.ClientWidth-t0-tk)/2);
Form1.Image1.‘anvas.TextOut(temp1,'График');end;
procedure TForm1.FormCreate(Sender:TObject);
var s:string;
kod:integer;
begin
N:=300,t0:=40;y0:=40;tk:=40; yk:=40;
s:=InputBox('введите левую границу',-1);
val(s,a,kod=0;
until kod=0 repeat s:=InputBox('Введите правую границу','1')
val(s,b,kod)
until kod=0; end;
procedure TForm1.ButtonClick(Sender:YObject);
begin
Graphica(a,cool.gif;
end;
Initialization;
end.


но ничего не выходит, понятно?
И вообще ваш форум - фикция какая-то. Вот в частности вы - постоянно задаете ненужные вопросы, а по делу никогда ничего не говорите.
tig81
Цитата(Prutvel @ 20.5.2010, 20:02) *

но ничего не выходит, понятно?

не, мы тормоза.
Цитата
И вообще ваш форум - фикция какая-то.

Так чего тогда сюда пишите?
Цитата
Вот в частности вы - постоянно задаете ненужные вопросы, а по делу никогда ничего не говорите.

Ну а что поделаешь, какой форум, такие и преподаватели. А так сказали, кто первый наберет 10 тыс. сообщений, тот получит приз. А как их еще набрать?

Правила форума
Цитата
- Запрещается обсуждение в топике действий администратора или модератора.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.