Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2009, 16:35   #1
Skarabei
 
Регистрация: 06.04.2009
Сообщений: 6
По умолчанию Рассчёты в Delphi

Объясните в чем ошибка и как ее исправить...Все упирается в procedure Calc..Фрагменты проги:
........
procedure FileOpen(Sender: TObject);
function CheckTable: boolean;
procedure DataTableSetEditText(Sender: TObject; ACol, ARow: Longint; const Value: String);
end;
var
MainForm: TMainForm;
DrawRect: Trect;
DataArray: array [1..3, 1..4] of word;
Segments: Array[1..3,1..2] of Real;
nTops: Byte;
Tops: Array[1..5,1..2] of Real;
kXY: Real;
kXY1: Real;
kXY2: Real;
h: Word;
dh: Word;
Minx,Miny: Real;
nMinx,nMiny: Byte;
n3:Byte;
a1,a2,b1,b2,c1,c2: Real;
x,y: Real;
implementation
{$r *.dfm}
........
procedure TMainForm.FileOpen(Sender: TObject);
var
f: TextFile;
i,j: byte;
begin
if OpenDialog.Execute then
begin
{ Add code to open OpenDialog.FileName }
end;
if OpenDialog.Execute then
begin
AssignFile(f, OpenDialog.Filename);
Reset(f);
For j:=1 to 4 do
begin
For i:=1 to 3 do
begin
Read(f,DataArray[i,j]);
DataTable.Cells[i,j]:=IntToStr(DataArray[i,j]);
end;
readln(f);
end;
CloseFile(f);
Table.PageIndex:=1;
end;
if CheckTable then Calc;//Здесь выдает ошибку: Undeclared identifier: 'Calc'//
ShowLimits;
ShowGraph;
end;
........
function TMainForm.CheckTable: boolean;
var i, j: byte;
begin
CheckTable:=true;
With DataTable do
for i:=1 to 3 do
for j:=1 to 4 do
begin
if ((i=3) and (j=4)) then break;
if StrToNum(Cells[i,j])=0 then
CheckTable:=False;
end;
end;
.........
procedure Calc;
Var
i,j: Byte;
Max1,
Max2: Real;
begin
Max1:=0;
Max2:=0;
Minx:=MaxInt;
Miny:=MaxInt;
For i:=1 to 3 do
For j:=1 to 2 do
begin
segments[i,j]:=DataArray[3,i]/DataArray[j,i];
if segments[i,j]>Max1 then Max1:=segments[i,j];
Case j of
1: if segments[i,j]<Minx then
begin
Minx:=segments[i,j];
nMinx:=i;
end;
2: if segments[i,j]<Miny then
begin
Miny:=segments[i,j];
nMiny:=i;
end;
End;
end;
Tops[1,1]:=Minx;
Tops[1,2]:=0;
Tops[2,2]:=0;
Tops[2,2]:=0;
Tops[3,2]:=0;
Tops[3,2]:=Miny;
if nMinx=nMiny then
Begin
nTops:=3;
if Minx>Miny then
Max2:=Minx
else
Max2:=Miny;
End
else
begin
a1:=DataArray[1,nMinx];
b1:=DataArray[2,nMinx];
c1:=DataArray[3,nMinx];
a2:=DataArray[1,nMiny];
b2:=DataArray[2,nMiny];
c2:=DataArray[3,nMiny];
x:=(c1*b2-b1*c2)/(a1*b2-b1*a2);
y:=(a1*c2-c1*a2)/(a1*b2-b1*a2);
n3:=6-nMinx-nMiny;
case (DataArray[1,n3]*x+DataArray[2,n3]*y<=DataArray[3,n3]) of
True: Begin
nTops:=4;
Tops[4,1]:=x;
Tops[4,2]:=y;
End;
False:Begin
nTops:=5;
a1:=DataArray[1,n3];
b1:=DataArray[2,n3];
c1:=DataArray[3,n3];
a2:=DataArray[1,nMiny];
b2:=DataArray[2,nMiny];
c2:=DataArray[3,nMiny];
x:=(c1*b2-b1*c2)/(a1*b2-b1*a2);
y:=(a1*c2-c1*a2)/(a1*b2-b1*a2);
Tops[4,1]:=x;
Tops[4,2]:=y;
a1:=DataArray[1,n3];
b1:=DataArray[2,n3];
c1:=DataArray[3,n3];
a2:=DataArray[1,nMinx];
b2:=DataArray[2,nMinx];
c2:=DataArray[3,nMinx];
x:=(c1*b2-b1*c2)/(a1*b2-b1*a2);
y:=(a1*c2-c1*a2)/(a1*b2-b1*a2);
Tops[5,1]:=x;
Tops[5,2]:=y;
End;
End;
end;
For i:=1 to nTops do
For j:=1 to 2 do
if Tops[i,j]>Max2 then
Max2:=Tops[i,j];
kXY1:=190/Max1;
kXY2:=190/Max2;
case MainForm.RadioGroup1.ItemIndex of
0: kXY:=kXY1;
1: kXY:=kXY2;
End;
i:=DataArray[1,4];
j:=DataArray[2,4];
{ dh = НОД(i,j) }
while ((i<>0) And (j<>0)) do
if i>j then
i:= i mod j
else
j:=j mod i;
dh:=i+j;
if Minx>Miny then
h := Round(Minx)*DataArray[1,4]
else
h := Round(Miny)*DataArray[2,4];
h:=h-dh;
end;

........
procedure TMainForm.DataTableSetEditText(Send er: TObject; ACol,
ARow: Longint; const Value: String);
begin
if (ACol=3) and (ARow=4) then DataTable.Cells[3,4]:='0';
DataArray[ACol,ARow]:=StrToNum(Value);
if CheckTable then Calc;
ShowLimits;
ShowGraph;
end;

end.

А если объявить procedure Calc; то выдает ошибку Unsatisfied forward or external declaration: 'TMainForm.Calc'
В чем дело???
Skarabei вне форума Ответить с цитированием
Старый 07.04.2009, 16:55   #2
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

Компилятор сообщает, что указанная процедура/функция/метод не имеет определения. То есть, нигде не найдена ее реализация.
Google. ;-)
Манжосов Денис :) вне форума Ответить с цитированием
Старый 07.04.2009, 16:59   #3
__STDC__
Участник клуба
 
Аватар для __STDC__
 
Регистрация: 16.03.2009
Сообщений: 1,013
По умолчанию

У тебя ф-ция calc исп-ся до того как она реализуется... в таком случае ее надо объявить выше точки использования с ключевым словом forward
Код:
procedure calc; forward;
Uguu~
__STDC__ вне форума Ответить с цитированием
Старый 07.04.2009, 17:00   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
//Здесь выдает ошибку: Undeclared identifier: 'Calc'//
В таком ключе нужн процедуру Calc описывать выше или обьявлять раньше, ну или forward ей ставить.
Цитата:
Unsatisfied forward or external declaration: 'TMainForm.Calc'
А этоговорит о том что ты в типе формы обьявил процедуру, но само ее описание должно начинаться
Код:
procedure TMainForm.Calc;
....
end;
Чтоб она методом былаж
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2009, 17:21   #5
Skarabei
 
Регистрация: 06.04.2009
Сообщений: 6
По умолчанию

Спасибо)))
Skarabei вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На Delphi 7 сделать игру кто хочет стать миллионером в delphi 7 666dart666 Помощь студентам 11 04.11.2010 17:57
Программа-тест в Delphi) скиньте))а то програмку здавать преподу надо,и самой хочется понять Delphi Верчик Помощь студентам 9 02.03.2009 17:46
Delphi. Как нарисовать в Delphi два движущиеся шара с определенной скоростью? redred Общие вопросы Delphi 10 11.12.2007 10:43
Как открыть БД, написанную в Delphi если нf другой машине Delphi нет? dagarik БД в Delphi 7 22.10.2007 17:54
не StringGrid1.Cells[1,1]:='Delphi'; а вот так SG1.C[1,1]:='Delphi' Nemesisking Компоненты Delphi 7 08.09.2007 03:27