Запуталась с графикоЙ!!!!
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Сижу над курсовиком, думаю что-то я неправильно начала прогу вроде ((( Суть зачачи в том, нужно чтобы получилось движение закрашенного прямоугольника по синусоиде в середине экрана. Скажу честно по графике я даже не чайник. Синусоиду построила а дальше никак
mplementation
{$R *.dfm}
function F(x:real): real;
begin
F:=2*sin(x)-5;
end;
procedure TForm1.Button1Click(Sender: TObject);
var a,a1,b,dx,m,my,mx,min,max,x,y:real;
W,H,y00,x00,xp,yp,i,k,l,d:integer;
begin
a:=StrToFloat(Edit1.Text); b:=StrToFloat(Edit2.Text);
dx:=0.1;
d:=5;
W:=Form1.Width-2*d;
H:=Form1.Height-2*d;
min:=f(a);
max:=min;
x:=a+dx;
repeat
y:=f(x);
if y<min then min:=y;
if y>max then max:=y;
x:=x+dx;
until (x>b);
if min>0 then min:=0;
if max<0 then max:=0;
my:=H/(abs(max-min));
mx:=W/(abs(b-a));
if my<=mx then m:=my else m:=mx;
if a<0 then a1:=a else a1:=0;
y00:=Round(m*max)+d;
x00:=Round(abs(a1)*m)+d;
with Form1.Canvas do
begin
pen.color:=clBlack;
MoveTo(0, y00); LineTo(W, y00);
MoveTo(x00, 0); LineTo(x00, H);
x:=a;
y:=f(a);
xp:=x00+Round(x*m);
yp:=y00-Round(y*m);
MoveTo(xp,yp);
pen.color:=clGreen;
repeat
x:=x+dx;
y:=f(x);
xp:=x00+Round(x*m);
yp:=y00-Round(y*m);
LineTo(xp,yp);
until (x>=b);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Canvas.Brush.Color:=clBtnFace;
Form1.Canvas.Pen.Color:=clBtnFace;
Form1.Canvas.Rectangle(0,0,Form1.Width, Form1.Height);
Form1.Canvas.Pen.Color:=clBlack;
end;
end.
кто-чем может,помогите плиииз!!!!
mplementation
{$R *.dfm}
function F(x:real): real;
begin
F:=2*sin(x)-5;
end;
procedure TForm1.Button1Click(Sender: TObject);
var a,a1,b,dx,m,my,mx,min,max,x,y:real;
W,H,y00,x00,xp,yp,i,k,l,d:integer;
begin
a:=StrToFloat(Edit1.Text); b:=StrToFloat(Edit2.Text);
dx:=0.1;
d:=5;
W:=Form1.Width-2*d;
H:=Form1.Height-2*d;
min:=f(a);
max:=min;
x:=a+dx;
repeat
y:=f(x);
if y<min then min:=y;
if y>max then max:=y;
x:=x+dx;
until (x>b);
if min>0 then min:=0;
if max<0 then max:=0;
my:=H/(abs(max-min));
mx:=W/(abs(b-a));
if my<=mx then m:=my else m:=mx;
if a<0 then a1:=a else a1:=0;
y00:=Round(m*max)+d;
x00:=Round(abs(a1)*m)+d;
with Form1.Canvas do
begin
pen.color:=clBlack;
MoveTo(0, y00); LineTo(W, y00);
MoveTo(x00, 0); LineTo(x00, H);
x:=a;
y:=f(a);
xp:=x00+Round(x*m);
yp:=y00-Round(y*m);
MoveTo(xp,yp);
pen.color:=clGreen;
repeat
x:=x+dx;
y:=f(x);
xp:=x00+Round(x*m);
yp:=y00-Round(y*m);
LineTo(xp,yp);
until (x>=b);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Canvas.Brush.Color:=clBtnFace;
Form1.Canvas.Pen.Color:=clBtnFace;
Form1.Canvas.Rectangle(0,0,Form1.Width, Form1.Height);
Form1.Canvas.Pen.Color:=clBlack;
end;
end.
кто-чем может,помогите плиииз!!!!
Во-перывх, вопрос - что вводится в Edit1 и Edit2?
Во-вторых - используйте теги
[noparse]
или
[syntax='Delphi']
[/syntax]
[/noparse]
кргда вставляете код.
Во-вторых - используйте теги
[noparse]
Код: Выделить всё
[syntax='Delphi']
[/syntax]
[/noparse]
кргда вставляете код.
Ни что так не ограничивает фантазию программиста, как компилятор...
туда вводятся координаты графика. насчет тэгов, в следующий раз буду иметь ввиду )))
туда вводятся координаты графика. насчет тэгов, в следующий раз буду иметь ввиду )))
Как-то у вас все запутано, я бы сделал проще:
[syntax='Delphi']
unit Mainunit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TMainform = class(TForm)
bDraw: TButton;
procedure bDrawClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
DX=0.0000005;
SX=50;
SY=50;
A=-8;
B=8;
var
Mainform: TMainform;
CX,CY:Real;
X0,Y0:integer;
CN:TCanvas;
OX:integer;
Drawing:boolean;
implementation
{$R *.dfm}
procedure TMainform.bDrawClick(Sender: TObject);
begin
CX:=A;
if not Drawing then
bDraw.Caption:='Стоп'
else
bDraw.Caption:='Пуск';
Drawing:=Not Drawing;
while Drawing do
begin
CY:=Sin(CX);
if Trunc(CX*SX+X0)<>OX then
begin
Canvas.FillRect(Canvas.ClipRect);
Canvas.MoveTo(0,Y0);
Canvas.LineTo(ClientWidth,Y0);
Canvas.MoveTo(X0,0);
Canvas.LineTo(X0,ClientHeight);
Canvas.Rectangle(Round(CX*SX-10+X0),
Round(CY*SY-10+Y0),
Round(CX*SX+10+X0),
Round(CY*SY+10+Y0));
end;
OX:=Trunc(CX*SX+X0);
CX:=CX+DX;
Application.ProcessMessages;
if CX>=B then
CX:=A;
end;
end;
procedure TMainform.FormCreate(Sender: TObject);
begin
X0:=Mainform.ClientWidth div 2;
Y0:=Mainform.ClientHeight div 2;
end;
end.
[/syntax]
Форма должна быть сразу(в процессе разработки) развернута на весь экран.
P.S. Зачем было создавать второе сообщение?
[syntax='Delphi']
unit Mainunit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TMainform = class(TForm)
bDraw: TButton;
procedure bDrawClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
DX=0.0000005;
SX=50;
SY=50;
A=-8;
B=8;
var
Mainform: TMainform;
CX,CY:Real;
X0,Y0:integer;
CN:TCanvas;
OX:integer;
Drawing:boolean;
implementation
{$R *.dfm}
procedure TMainform.bDrawClick(Sender: TObject);
begin
CX:=A;
if not Drawing then
bDraw.Caption:='Стоп'
else
bDraw.Caption:='Пуск';
Drawing:=Not Drawing;
while Drawing do
begin
CY:=Sin(CX);
if Trunc(CX*SX+X0)<>OX then
begin
Canvas.FillRect(Canvas.ClipRect);
Canvas.MoveTo(0,Y0);
Canvas.LineTo(ClientWidth,Y0);
Canvas.MoveTo(X0,0);
Canvas.LineTo(X0,ClientHeight);
Canvas.Rectangle(Round(CX*SX-10+X0),
Round(CY*SY-10+Y0),
Round(CX*SX+10+X0),
Round(CY*SY+10+Y0));
end;
OX:=Trunc(CX*SX+X0);
CX:=CX+DX;
Application.ProcessMessages;
if CX>=B then
CX:=A;
end;
end;
procedure TMainform.FormCreate(Sender: TObject);
begin
X0:=Mainform.ClientWidth div 2;
Y0:=Mainform.ClientHeight div 2;
end;
end.
[/syntax]
Форма должна быть сразу(в процессе разработки) развернута на весь экран.
P.S. Зачем было создавать второе сообщение?
Ни что так не ограничивает фантазию программиста, как компилятор...
MOTOCoder писал(а):Как-то у вас все запутано, я бы сделал проще:
[syntax='Delphi']
unit Mainunit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TMainform = class(TForm)
bDraw: TButton;
procedure bDrawClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
DX=0.0000005;
SX=50;
SY=50;
A=-8;
B=8;
var
Mainform: TMainform;
CX,CY:Real;
X0,Y0:integer;
CN:TCanvas;
OX:integer;
Drawing:boolean;
implementation
{$R *.dfm}
procedure TMainform.bDrawClick(Sender: TObject);
begin
CX:=A;
if not Drawing then
bDraw.Caption:='Стоп'
else
bDraw.Caption:='Пуск';
Drawing:=Not Drawing;
while Drawing do
begin
CY:=Sin(CX);
if Trunc(CX*SX+X0)<>OX then
begin
Canvas.FillRect(Canvas.ClipRect);
Canvas.MoveTo(0,Y0);
Canvas.LineTo(ClientWidth,Y0);
Canvas.MoveTo(X0,0);
Canvas.LineTo(X0,ClientHeight);
Canvas.Rectangle(Round(CX*SX-10+X0),
Round(CY*SY-10+Y0),
Round(CX*SX+10+X0),
Round(CY*SY+10+Y0));
end;
OX:=Trunc(CX*SX+X0);
CX:=CX+DX;
Application.ProcessMessages;
if CX>=B then
CX:=A;
end;
end;
procedure TMainform.FormCreate(Sender: TObject);
begin
X0:=Mainform.ClientWidth div 2;
Y0:=Mainform.ClientHeight div 2;
end;
end.
[/syntax]
Форма должна быть сразу(в процессе разработки) развернута на весь экран.
P.S. Зачем было создавать второе сообщение?
Спасибо большое!!!! ты очень помог мне!



Можно так:
[syntax='Delphi']
unit Mainunit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TMainform = class(TForm)
bDraw: TButton;
procedure bDrawClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
DX=0.0000005;
SX=50;
SY=50;
A=-8;
B=8;
var
Mainform: TMainform;
CX,CY:Real;
X0,Y0:integer;
CN:TCanvas;
OX:integer;
Drawing:boolean;
implementation
{$R *.dfm}
procedure TMainform.bDrawClick(Sender: TObject);
begin
CX:=A;
if not Drawing then
bDraw.Caption:='Стоп'
else
bDraw.Caption:='Пуск';
Drawing:=Not Drawing;
while Drawing do
begin
CY:=Sin(CX);
if Trunc(CX*SX+X0)<>OX then
begin
canvas.Brush.Color:=clbtnface;{устанавливаем цвет фона}
Canvas.FillRect(Canvas.ClipRect);
Canvas.MoveTo(0,Y0);
Canvas.LineTo(ClientWidth,Y0);
Canvas.MoveTo(X0,0);
Canvas.LineTo(X0,ClientHeight);
Canvas.Brush.Color:=clblack;{устанавливаем цвет прямоугольника}
Canvas.Rectangle(Round(CX*SX-10+X0),
Round(CY*SY-10+Y0),
Round(CX*SX+10+X0),
Round(CY*SY+10+Y0));
end;
OX:=Trunc(CX*SX+X0);
CX:=CX+DX;
Application.ProcessMessages;
if CX>=B then
CX:=A;
end;
end;
procedure TMainform.FormCreate(Sender: TObject);
begin
X0:=Mainform.ClientWidth div 2;
Y0:=Mainform.ClientHeight div 2;
end;
end.
[/syntax]
То, что нужно добавить, отмечено комментариями.
[syntax='Delphi']
unit Mainunit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TMainform = class(TForm)
bDraw: TButton;
procedure bDrawClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
DX=0.0000005;
SX=50;
SY=50;
A=-8;
B=8;
var
Mainform: TMainform;
CX,CY:Real;
X0,Y0:integer;
CN:TCanvas;
OX:integer;
Drawing:boolean;
implementation
{$R *.dfm}
procedure TMainform.bDrawClick(Sender: TObject);
begin
CX:=A;
if not Drawing then
bDraw.Caption:='Стоп'
else
bDraw.Caption:='Пуск';
Drawing:=Not Drawing;
while Drawing do
begin
CY:=Sin(CX);
if Trunc(CX*SX+X0)<>OX then
begin
canvas.Brush.Color:=clbtnface;{устанавливаем цвет фона}
Canvas.FillRect(Canvas.ClipRect);
Canvas.MoveTo(0,Y0);
Canvas.LineTo(ClientWidth,Y0);
Canvas.MoveTo(X0,0);
Canvas.LineTo(X0,ClientHeight);
Canvas.Brush.Color:=clblack;{устанавливаем цвет прямоугольника}
Canvas.Rectangle(Round(CX*SX-10+X0),
Round(CY*SY-10+Y0),
Round(CX*SX+10+X0),
Round(CY*SY+10+Y0));
end;
OX:=Trunc(CX*SX+X0);
CX:=CX+DX;
Application.ProcessMessages;
if CX>=B then
CX:=A;
end;
end;
procedure TMainform.FormCreate(Sender: TObject);
begin
X0:=Mainform.ClientWidth div 2;
Y0:=Mainform.ClientHeight div 2;
end;
end.
[/syntax]
То, что нужно добавить, отмечено комментариями.
Ни что так не ограничивает фантазию программиста, как компилятор...
Большое прибольшое спасибо!!!!!!!!!!!!!! Очень блогодарна за твою помощь!!!! чмок в обе щечки!!!
)

Пожалуйста помогите очень нужно!!!!!!!!!Написать программу на Paskal, которая вычисляет среднюю длину слов в файле, который содержит текст.В данном случае будет считатьтся любая строка символов, которая начинается и заканчивается одним с следующих елеметов: пробел, запятая, точка, начало строки и конец строки.В программе должна быть обозначена функция, которая получает в качестве аргумента поток ввода с файла.