Napisano: 02 Dec 2012 10:37
@ivance95:gimnazija"Svetozar Markovic Nis"odeljenje za obdarene matematicare.
@bobby:
1) za obican izraz:
function prviBroj(s:string):string;
var
p:integer;
b:string;
begin
p:=1;
while(p<=length(s))and not(s[p]in[+,-,*,/]do p:=2p+1;
b:=copy(s,1,p-1);
delete(s,1,p-1);
prviBroj:=p;
end;
function izraz(s:string):real;
var
suma,sabirak,cinioc:readl;
operacija,znak,g:integer;
b:string;
begin
suma:=0;
sabirak:=0;
znak:=0;
operacija:=0;
while s<>'' do begin
b:=prviBroj(s);
val(b,cinilic,g);
if op=0 then sabirak:=sabirak*cinilac
else sabirak:=sabirak/cinilac;
if (s='')or(s[1]in[+,-,*,/] then begin
suma:=suma+znak*sabirak
if s<>'' then begin
sabirak:=1;
op:=1;
if s[1]='+' then znak:=1;
if s[1]='-' then znak:=-1;
delete(s,1,1);
end;
end;
else begin
if s[1][='*'then op:=0 else op:=1;
delete(s,1,1);
end;
end;
izraz:=suma;
end;
Dopuna: 02 Dec 2012 10:44
2)sa zagradama:
function izraz(s:string):real;
var
sab,sum,cin:real;
zn,op,d,g:integer;
begin
sum:=0;
sab:=0;
zn:=1;
op:=1;
while s<>'' do begin
if s[1] ='(' then begin
d:=odgovarajucaDesna(s);
cin:=izraz(copy(s,2,d-1));
else begin
d:=1;
while (d<=length(s))and not(s[1] in [+,-,*,/] do
d:=d+1;
vav(copy(s,1,d-1),cin.g);
end;
if op=1 then sab:=sab*cin else sab:=sab/cin;
delete(s,1,d-1);
brisiZagradeSaLeva(s);
if(s='')or(s[1]in[+,-,*,/])then begin
sum:=sum+zn*sab;
if s='' then
if s[1]=,+, then zn:=1;
if s[1]='-' then zn:=-1;
sab:=1;
op:=1;
end
else
if s[1]='*' then op:=1 else op:=2;
delete(s,1,1);
end;
izraz:=suma;
end;
Dopuna: 02 Dec 2012 10:44
Ove funkcije odgovarajucaDesna i brisiZagradeSaPocetka nismo napisali u skoli
Dopuna: 25 Dec 2012 10:36
Posto niko ne zna da ga uradi molim za LOCK!!!
|