
25.01.2010, 22:48
|
Прохожий
|
|
Регистрация: 13.09.2009
Сообщения: 19
Репутация: 10
|
|
Цитата:
Сообщение от Страдалецъ
Настораживает меня в вашем примере:
Код:
Ch:=StringGrid1.Cells[0,i][1];
T.mszn[ch]:=StrToFloat(StringGrid1.Cells[1,i]);
У вас точно можно Char как индекс массива передавать?
|
Ну по идее да, вот 2-ой модуль.
Код:
unit Unit2;
interface
Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,math, StdCtrls;
Type
Tinf=char;
Tsel=^Psel;
Psel=Record
inf:Tinf;
A:Tsel;
end;
TLists=class(Tobject)
sp1,spk,sp:Tsel;
constructor create;
Procedure Adds(Inf:Tinf);
Procedure Reads (Var Inf:Tinf);
end;
Tmas=array ['a'..'ÿ'] of extended;
Tpz=class
mszn:Tmas;
stec:Tlists;
Function AV(strp:string):extended;
end;
implementation
var i:byte;
constructor Tlists.Create;
begin
inherited Create;
sp1:=nil;
end;
Procedure Tlists.Adds;
begin
New(sp);
sp^.inf:=Inf;
sp^.A:=sp1;
sp1:=sp;
end;
Procedure TLists.Reads;
Begin
Inf:=sp1^.Inf;
sp:=sp1;
sp1:=sp1^.A;
Dispose(sp);
end;
Function Tpz.AV;
Var ch,ch1,ch2,chr : char;
op1,op2 : extended;
begin
stec:=Tlists.create;
chr:=Succ('z');
for i:=1 to Length(strp) do
begin
ch:=strp[i];
if not (ch in ['*','/','+','-','^']) then stec.Adds(ch)
else
begin
stec.Reads(ch2);
stec.Reads(ch1);
op1:=mszn[ch1];
op2:=mszn[ch2];
case ch of
'+':Result:=op1+op2;
'-':Result:=op1-op2;
'*':Result:=op1*op2;
'/':Result:=op1/op2;
'^':Result:=power(op1,op2);
end;
mszn[chr]:=Result;
stec.Adds(chr);
Inc(chr);
end;
end;
stec.Free;
end;
end.
|