Добрового времени суток! Обращаюсь за помощь. В моём политехническом универе во втором семесетре дали курсовую по Делфи...которую резко надо выполнить... ну а я опыта общения с ООП да и с Делфи не имею... Тема курсовой "Вычисление интеграла методом Чебышева". Заранее говорю,что ссылки на готовую курсовую по этой теме давать не надо... потому что наш преподователь просил перенести на Делфи курсовую по аналогичной теме,выполненной только в Паскале(это делалось в 1 семестре)+ сделать так чтобы она и график функиции строила...
Вот что у меня получилось:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
const n=5;
type
aa=array[1..n] of real;
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label4: TLabel;
Label5: TLabel;
Button1: TButton;
Label6: TLabel;
Label7: TLabel;
PaintBox1: TPaintBox;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Label7Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure vvod(var a,b:real; var s:aa);
procedure Raschet(var p:integer; var x:aa; var y:aa; var int:real);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
x,y:aa;
f:text;
a,b,h,gral:real;
p:integer;
implementation
{$R *.dfm}
{zapolnenie Xov v massive x[5]}
procedure vvod(var a,b:real; var s:aa);
var i:integer; t1,t2:real;
Begin
a:=StrToFloat(Edit2.Text);
b:=StrToFloat(Edit3.Text);
s[1]:=0.5*(b+a);
t1:=0.5*sqrt((5-sqrt(11))/3);
s[2]:=0.5*(b+a)+ 0.5*(b-a)*t1 ;
s[3]:=0.5*(b+a) - 0.5*(b-a)*t1;
t2:=0.5*sqrt((5+sqrt(11))/3);
s[4]:=0.5*(b+a)+ 0.5*(b-a)*t2;
s[5]:=0.5*(b+a) - 0.5*(b-a)*t2;
end;
procedure Raschet(var p:integer; var x:aa; var y:aa; var int:real);
var i:integer; h:real;
Begin
If p=1 then
For i:=1 to 5 do
y[i]:=(x[i]*x[i]*x[i]-x[i]*x[i]+x[i]+1);
if p=2 then
For i:=1 to 5 do
y[i]:=x[i];
If p=3 then
for i:=1 to 5 do
y[i]:=x[i]*x[i];
int:=y[1]+y[2]+y[3]+y[4]+y[5];
gral:=int*(b-a)/5;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
vvod(a,b,x);
p:=StrToFloat(Edit1.Text);
Raschet(p,x,y,gral);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
var
x, y: array[1..50] of double;
i: integer;
scalex, scaley, ymin, ymax, xmin, xmax: double;
begin
for i := 1 to 50 do
begin
y[i] := sin(i * 0.5);
x[i] := i;
end;
xmin := x[1];
xmax := x[1];
ymin := y[1];
ymax := y[1];
for i := 2 to 50 do
begin
if y[i] < ymin then
ymin := y[i];
if y[i] > ymax then
ymax := y[i];
if x[i] < xmin then
xmin := x[i];
if x[i] > xmax then
xmax := x[i];
end;
scalex := paintbox1.Width / (xmax - xmin);
scaley := paintbox1.Height / (ymax - ymin);
with paintbox1.canvas do
begin
moveto(trunc(scalex * (x[1] - xmin)), paintbox1.height - trunc(scaley * (y[1]
- ymin)));
for i := 2 to 50 do
Lineto(trunc(scalex * (x[i] - xmin)), paintbox1.height - trunc(scaley *
(y[i] - ymin)));
end;
end;
У тебя процедура Vvod является методом формы, а при ее реализации ты этого не указываешь...
procedure TForm1.vvod(var a,b:real; var s:aa);То же самое касается и Rachet...
var i:integer; t1,t2:real;
Begin
...
Большое спасибо.Очень приятно,что так хорошо ответил ;))))
Всё сделал как было сказанно выше... действительно большинство ошибок пропали... вот исправленная версия
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
const n=5;
type
aa=array[1..n] of real;
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label4: TLabel;
Label5: TLabel;
Button1: TButton;
Label6: TLabel;
Label7: TLabel;
PaintBox1: TPaintBox;
Button2: TButton;
Label8: TLabel;
procedure Button1Click(Sender: TObject);
procedure Label7Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure vvod(var a,b:real; var s:aa);
procedure Raschet(var p:integer; var x:aa; var y:aa; var int:real);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
x,y:aa;
f:text;
a,b,h,gral:real;
p:integer;
implementation
{$R *.dfm}
{zapolnenie Xov v massive x[5]}
procedure TForm1.vvod(var a,b:real; var s:aa);
var i:integer; t1,t2:real;
Begin
a:=StrToInt(Edit2.Text);
b:=StrToInt(Edit3.Text);
s[1]:=0.5*(b+a);
t1:=0.5*sqrt((5-sqrt(11))/3);
s[2]:=0.5*(b+a)+ 0.5*(b-a)*t1 ;
s[3]:=0.5*(b+a) - 0.5*(b-a)*t1;
t2:=0.5*sqrt((5+sqrt(11))/3);
s[4]:=0.5*(b+a)+ 0.5*(b-a)*t2;
s[5]:=0.5*(b+a) - 0.5*(b-a)*t2;
end;
procedure TForm1.Raschet(var p:integer; var x:aa; var y:aa; var int:real);
var i:integer; h:real;
Begin
p:=StrToInt(Edit1.Text);
If p=1 then
For i:=1 to 5 do
y[i]:=(x[i]*x[i]*x[i]-x[i]*x[i]+x[i]+1);
if p=2 then
For i:=1 to 5 do
y[i]:=x[i];
If p=3 then
for i:=1 to 5 do
y[i]:=x[i]*x[i];
int:=y[1]+y[2]+y[3]+y[4]+y[5];
gral:=int*(b-a)/5;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
vvod(a,b,x);
Raschet(p,x,y,gral);
end;
procedure TForm1.Label7Click(Sender: TObject);
begin
label8.Caption :=IntToStr(gral)
end;
procedure TForm1.Button2Click(Sender: TObject);
var
x, y: array[1..50] of double;
i: integer;
scalex, scaley, ymin, ymax, xmin, xmax: double;
begin
for i := 1 to 50 do
begin
y[i] := sin(i * 0.5);
x[i] := i;
end;
xmin := x[1];
xmax := x[1];
ymin := y[1];
ymax := y[1];
for i := 2 to 50 do
begin
if y[i] < ymin then
ymin := y[i];
if y[i] > ymax then
ymax := y[i];
if x[i] < xmin then
xmin := x[i];
if x[i] > xmax then
xmax := x[i];
end;
scalex := paintbox1.Width / (xmax - xmin);
scaley := paintbox1.Height / (ymax - ymin);
with paintbox1.canvas do
begin
moveto(trunc(scalex * (x[1] - xmin)), paintbox1.height - trunc(scaley * (y[1]
- ymin)));
for i := 2 to 50 do
Lineto(trunc(scalex * (x[i] - xmin)), paintbox1.height - trunc(scaley *
(y[i] - ymin)));
end;
end;
end.
[Error] Unit1.pas(98): There is no overloaded version of 'IntToStr' that can be called with these arguments
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
Извините, понимаю,что превысил "лимит вопросов" и вопросы мои мягко говоря "тупинькие",но всё же...Теперь компилятор не ругается и всё хорошо... ) По задумке выбирается фукнция(чей интеграл считается) в edit1, затем вводятся границы интегрирования(edit2 edit3), а потом по нажатию на "Кнопку" выдается решение, которое должно быть показанно в label8... Вот только программа запускается, а решение не выводится(если оно вообще считается). Что в данном случае делать? Заранее спасибо)
procedure TForm1.Label7Click(Sender: TObject);, то есть значение в Label8 заносится зачем-то по клику на Label7...
begin
label8.Caption :=IntToStr(gral)
end;
Вообщем так если хочешь могу тебе кинуть прогу которая строит нормально графики с исходником...
Так же за умеренное вознаграждение я те эту прогу напишу за вечер с подробными коментариями...
И ещё гораздо скоростней бы было собирать данные с полей ввода в событии Онклик...
И тут комбо бокс нужен а не перебор параметров...
Если что стучись мой номер АСИ: 354-175-667
И тут применяеться функциональный тип с массивом функций...
И индекс Комбы(TKomboBox) и индекс комбы выбирает ф-цию...
Или кинь исходничек я те подправлю, и что такое метод Чебушева?
Если вычисления по методу правильны то точно могу...
Пасибо большое =))))) но что касается основной части курсовой всё сам сделал уже) Вот только я не понимаю...та часть, что графики строит, почему при вводе функции y:=i*i программа строит только одну ветку это самой параболы)
Why not settling on games that is fun and at the same time your earning. Well it'll make suspense because the game is well but dude just try it and it gave me hope while pandemic is real rn. https://igview.co/different-types-of-symbols-in-gambling/