IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Курсовая на Делфи, Помоги новичку понять то,что он делает не так...
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


Добрового времени суток! Обращаюсь за помощь. В моём политехническом универе во втором семесетре дали курсовую по Делфи...которую резко надо выполнить... ну а я опыта общения с ООП да и с Делфи не имею... Тема курсовой "Вычисление интеграла методом Чебышева". Заранее говорю,что ссылки на готовую курсовую по этой теме давать не надо... потому что наш преподователь просил перенести на Делфи курсовую по аналогичной теме,выполненной только в Паскале(это делалось в 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;




Вот только компилятор ругается на эту строчку
a:=StrToFloat(Edit2.Text);
b:=StrToFloat(Edit3.Text);

и выдаёт:
[Error] Unit1.pas(55): Undeclared identifier: 'Edit2'
[Error] Unit1.pas(56): Missing operator or semicolon
[Error] Unit1.pas(56): Undeclared identifier: 'Edit3'
[Error] Unit1.pas(58): Missing operator or semicolon
[Error] Unit1.pas(90): Incompatible types: 'Integer' and 'Extended'
[Error] Unit1.pas(97): Undeclared identifier: 'labels'
[Error] Unit1.pas(98): Incompatible types: 'String' and 'Real'
[Error] Unit1.pas(102): Statement expected but 'VAR' found
[Error] Unit1.pas(103): Identifier redeclared: 'x'
[Error] Unit1.pas(127): Undeclared identifier: 'paintbox1'
[Error] Unit1.pas(127): Statement expected, but expression of type 'Extended' found
[Error] Unit1.pas(128): Missing operator or semicolon
[Error] Unit1.pas(128): Statement expected, but expression of type 'Extended' found
[Error] Unit1.pas(129): 'DO' expected but identifier 'canvas' found
[Error] Unit1.pas(131): Undeclared identifier: 'moveto'
[Error] Unit1.pas(131): Missing operator or semicolon
[Error] Unit1.pas(132): Statement expected, but expression of type 'Int64' found
[Error] Unit1.pas(133): Missing operator or semicolon
[Error] Unit1.pas(134): Not enough actual parameters
[Error] Unit1.pas(135): Statement expected, but expression of type 'Int64' found
[Error] Unit1.pas(136): '.' expected but ';' found
[Warning] Unit1.pas(137): Text after final 'END.' - ignored by compiler
[Error] Unit1.pas(30): Unsatisfied forward or external declaration: 'TForm1.vvod'
[Error] Unit1.pas(31): Unsatisfied forward or external declaration: 'TForm1.Raschet'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
Честно говоря как убрать эти ошибки я не ппонимаю, хотя их содержание мне более или менее понятно...
Просьба сильно не ругаться, ибо я только учусь... Заранее спасибо

Сообщение отредактировано: Kalipsoo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






У тебя процедура Vvod является методом формы, а при ее реализации ты этого не указываешь...
procedure TForm1.vvod(var a,b:real; var s:aa);
var i:integer; t1,t2:real;
Begin
...
То же самое касается и Rachet...

Цитата
[Error] Unit1.pas(102): Statement expected but 'VAR' found
Лишний Begin перед секцией Var, убери его...

Цитата
[Error] Unit1.pas(90): Incompatible types: 'Integer' and 'Extended'
Угу, нельзя целому числу присваивать вещественное значение... Пользуйся StrToInt вместо StrToFloat... Ну, пока поправь это - большинство ошибок как раз наведенные, многие последующие исчезнут после того, как исправишь предыдущие...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


Большое спасибо.Очень приятно,что так хорошо ответил ;))))

Сообщение отредактировано: Kalipsoo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


Всё сделал как было сказанно выше... действительно большинство ошибок пропали... вот исправленная версия
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'


Я хочу,чтобы ответ появлялся в label8, а сделать это никак не получается)

Заранее спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата
[Error] Unit1.pas(98): There is no overloaded version of 'IntToStr' that can be called with these arguments
Оно понятно, что нет такой версии IntToStr, которая переводила бы Real в строку - пользуйся FloatToStr...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


Извините, понимаю,что превысил "лимит вопросов" и вопросы мои мягко говоря "тупинькие",но всё же...Теперь компилятор не ругается и всё хорошо... ) По задумке выбирается фукнция(чей интеграл считается) в edit1, затем вводятся границы интегрирования(edit2 edit3), а потом по нажатию на "Кнопку" выдается решение, которое должно быть показанно в label8... Вот только программа запускается, а решение не выводится(если оно вообще считается). Что в данном случае делать? Заранее спасибо)

Сообщение отредактировано: Kalipsoo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата
По задумке выбирается фукнция(чей интеграл считается) в edit1
Это только задумка, в программе ты делаешь нечто другое: пытаешься целое число, содержащееся в Edit1 (число, а не функцию!!!), в переменную p...

Цитата
а потом по нажатию на "Кнопку" выдается решение, которое должно быть показанно в label8
Это где такое написано? У тебя написано:
procedure TForm1.Label7Click(Sender: TObject);
begin
label8.Caption :=IntToStr(gral)
end;
, то есть значение в Label8 заносится зачем-то по клику на Label7...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Вообщем так если хочешь могу тебе кинуть прогу которая строит нормально графики с исходником...
Так же за умеренное вознаграждение я те эту прогу напишу за вечер с подробными коментариями...
И ещё гораздо скоростней бы было собирать данные с полей ввода в событии Онклик...
И тут комбо бокс нужен а не перебор параметров...
Если что стучись мой номер АСИ: 354-175-667
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






И тут применяеться функциональный тип с массивом функций...
И индекс Комбы(TKomboBox) и индекс комбы выбирает ф-цию...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Или кинь исходничек я те подправлю, и что такое метод Чебушева?
Если вычисления по методу правильны то точно могу...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

Репутация: -  0  +


Пасибо большое =))))) но что касается основной части курсовой всё сам сделал уже) Вот только я не понимаю...та часть, что графики строит, почему при вводе функции y:=i*i программа строит только одну ветку это самой параболы)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Цитата(volvo @ 19.04.2008 15:29) *

Цитата
[Error] Unit1.pas(98): There is no overloaded version of 'IntToStr' that can be called with these arguments
Оно понятно, что нет такой версии IntToStr, которая переводила бы Real в строку - пользуйся FloatToStr...

Мне нужно вывести результат моих действий в Edit, результат работы это среднее арифметическое число, но он все равно не выводит его, вылезает эта же ошибка, только тип несовместимости меняется, если я меняю inttostr На floattostr
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Большевик–концептуал
**

Группа: Пользователи
Сообщений: 142
Пол: Мужской
Реальное имя: Иван Левашев
Jabber: octagram@jabber.ru
Skype: i.levashew
QQ: 3152538431
WeChat
Ада: Сторонник
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик
Turbo Pascal: Установлен

Репутация: -  1  +


Цитата(-Юля- @ 8.04.2017 1:31) *
Мне нужно вывести результат моих действий в Edit, результат работы это среднее арифметическое число, но он все равно не выводит его, вылезает эта же ошибка, только тип несовместимости меняется, если я меняю inttostr На floattostr


А тип-то какой?


--------------------
If you want to get to the top, you have to start at the bottom
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 16.07.2018 13:48
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"