Вчера ночью еще написал функции на "+" и "-", проверил, всё работало железобетонно, но то что писал не сохранилось злой рок и електричество...
Начал сегодня писать, вроде написал снова на + и -, плюс работает, но с минусом возникла какаято проблема которую я просто немогу осознать
Вот код:
program Kalkyl;
uses Crt;
var
A,B,rez:string;
S1,S2:string;
C:char;
E_e:char;
Dalee:boolean;
function Suma(A,B:string):string; <============ работает правильно
var
I,sub:integer;
L1,L2:integer;
S1,S2,S3:string;
begin
S1:=A;
S2:=B;
L1:=Length(S1);
L2:=Length(S2);
For I:=L2 to L1 do
insert('0',S2,1);
insert('0',S1,1);
S3:='';
Sub:=0;
For I:=L1+1 downto 1 do
If (ORD(S1[I])-48+ORD(S2[I])-48+sub)>9 then begin
S3:=CHR(ORD(S1[I])+ORD(S2[I])-48+sub-10)+S3;
sub:=1;
end
else
begin
S3:=CHR(ORD(S1[I])+ORD(S2[I])-48+sub)+S3;
sub:=0;
end;
if S3[1]='0' then delete(S3,1,1);
Suma:=S3;
end;
function Raznica(A,B:string):string; <==========работает неправильно
var
I,sub:integer;
L1,L2:integer;
S1,S2,S3:string;
begin
S1:=A;
S2:=B;
L1:=Length(S1);
L2:=Length(S2);
for I:=L2 to L1 do
insert('0',S2,1);
insert('0',S1,1);
S3:='';
Sub:=0;
For I:=L1+1 downto 1 do
If (ORD(S1[I])-48-ORD(S2[I])-48-sub)<0 then begin
S3:=CHR(ORD(S1[I])-ORD(S2[I])-sub+10+48)+S3;
sub:=1;
end
else
begin
S3:=CHR(ORD(S1[I])-ORD(S2[I])+48-sub)+S3;
sub:=0;
end;
if S3[1]='0' then delete(S3,1,1);
Raznica:=S3;
end;
procedure Logo;
begin
clrscr;
gotoxy(15,1);
textcolor(lightblue);
Writeln('Калькулятор');
gotoxy(15,2);
textcolor(white);
end;
function Opr_d(C:char):string;
begin
case C of
'+':Opr_d:='сложение';
'-':Opr_d:='вычитание';
'*':Opr_d:='произведение';
'/':Opr_d:='деление'
else Opr_d:='Некоректные данные';
end;
end;
procedure Vvod;
begin
gotoxy(2,6);
writeln('Введите первое число и нажмите "Enter".');
gotoxy(2,8);
textcolor(red);
write('Первое число: ');
textcolor(white);
readln(A);
gotoxy(2,10);
write('Введите необходимое действие и нажмите "Enter: ');
readln©;
gotoxy(2,12);
textcolor(red);
write('Необходимо выполнить : ');
textcolor(white);
write(Opr_d©);
gotoxy(2,14);
writeln('Введите второе число и нажмите "Enter"');
gotoxy(2,16);
textcolor(red);
write('Второе число: ');
textcolor(white);
readln(B);
end;
procedure Rezultat;
begin
case C of
'+':rez:=Suma(A,B);
'-':rez:=Raznica(A,B);
end;
gotoxy(10,20);
writeln('Решение: ');
write(A,' ',C,' ',B,' = ',rez);
end;
BEGIN
logo;
gotoxy(2,4);
write('Нажмите "Enter" чтобы продолжить, или "Escape" чтобы выйти');
Dalee:=false;
while Dalee=false do
begin
E_e:=readkey;
if E_e=chr(27) then exit;
if E_e=char(13)then Dalee:=true;
delline;
end;
Vvod;
Rezultat;
readln;
END.
помогите найти ошибку в функции Raznica
и еще... я когда запускаю программу прямо с Fpc 2.2.2. то сначала всё что на екране пишет иероглифами, а после первого нажатия - нормально, а после последнего нажатия, когда должно вывести результат, выводит результат и снова всё слова становятся иероглифами, причом происходит это только в полноекранном режиме, если в окне всё норм, и когда запускаю програму с ексешника, в окне, тоже всё норм
И вообще был бы рад выслушать замечания какие есть, как было бы лучше организовать программу...