program dos_calculator; { use the x for multiply and the / for divide } {add help page} uses crt; const sign : array[1..4] of char = ('+','-','x','/'); procedure writexy(text : string; row : byte; colour : byte); var len : byte; column : byte; begin len := length(text); column := 40-(len div 2); gotoxy(column,row); textcolor(colour); write(text); gotoxy(1,25); end; procedure help_page; var pause : char; begin textcolor(black); clrscr; writexy('Sum Calculator',8,4); writexy('Programmed by Fraser King',9,4); writexy('A simple Ms-Dos calculator.',11,6); writexy('Use the x for multiply and the / for divide.',12,6); writexy('Have a space inbetween each character i.e.',14,6); writexy('sum 456 + 345',16,5); writexy('sum 350 / 3',18,5); writexy('sum 2 x 34 x 45 x 12',20,5); pause := readkey; textcolor(lightgray); clrscr; halt; end; var num : array[1..32] of real; count,i : byte; error : integer; start : byte; tempchar : byte; x,y : byte; sum : real; begin textmode(80); if paramstr(1) = '/?' then help_page; count := 1; for i := 1 to 32 do begin val(paramstr(count),num[i],error); count := count + 2; end; for i := 1 to 4 do if paramstr(2) = sign[i] then tempchar := i; count := 1; start := 1; for i := start to paramcount div 2 do begin count := count + 1; start := start + 2; end; for i := 1 to count do begin if frac(num[i]) = 0 then write(num[i]:0:0,' ') else write(num[i]:0:2,' '); write(sign[tempchar],' '); end; x := wherex; y := wherey; gotoxy(x-2,y); write(' '); gotoxy(x-3,y); write(' = '); sum := num[1]; for i := 2 to count do case sign[tempchar] of '+' : sum := sum + num[i]; '-' : sum := sum - num[i]; 'x' : sum := sum * num[i]; '/' : sum := sum / num[i]; end; if frac(sum) = 0 then write(sum:0:0) else write(sum:0:2); end.