|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.09.2008, 00:22 | #1 |
Пользователь
Регистрация: 26.06.2008
Сообщений: 86
|
Математика
Скажите идею как сделать программу калькулятор. Пример: 2+2(IN),4(OUT) Возможние знаки +,-,*,/. вот моя наработка:
Код:
Спосибо.
TerMinAdoOR
|
21.09.2008, 14:56 | #2 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Что-то Вы наворотили, без бутылки не разберешь. Если нужен сложный калькулятор, принимающий формулу из строки, почитайте в инете или на этом форуме про обратную польскую запись.
|
22.09.2008, 21:39 | #3 |
Форумчанин
Регистрация: 22.09.2008
Сообщений: 214
|
TerMinAdoOR, напишите, пожалуйста, ваш пример и ответ, который должна дать программа.
Если она на строчку 2*5-6+3 должна дать ответ 7, то попробуйте эту программу: program supermath; {$APPTYPE CONSOLE} uses SysUtils; var a,b,c,d,e,f,g,h,j,k,l,m,n,o,p,count ,code,pri:int64; i:longint; num:array[0..100] of string; s1,s2,s3,s,s4:string; plus,minus,divide,multiply:boolean; act:string; begin readln(s); count:=1; for i:=1 to 100 do num[i]:='0'; while (pos('+',s)>0) or (pos('-',s)>0) or (pos('*',s)>0) or (pos('/',s)>0) do begin a:=pos('+',s); b:=pos('-',s); c:=pos('*',s); d:=pos('/',s); if a=0 then a:=99999999; if b=0 then b:=99999999; if c=0 then c:=99999999; if d=0 then d:=99999999; plus:=(a<>0) and (a<b) and (a<c) and (a<d); minus:=(b<>0) and (b<a) and (b<c) and (b<d); multiply:=(c<>0) and (c<a) and (c<b) and (c<d); divide:=(d<>0) and (d<a) and (d<b) and (d<c); if plus then begin num[count]:=copy(s,1,a-1); act:=act+s[a]; delete(s,1,a); inc(count); end; if minus then begin num[count]:=copy(s,1,b-1); act:=act+s[b]; inc(count); delete(s,1,b); end; if multiply then begin num[count]:=copy(s,1,c-1); act:=act+s[c]; delete(s,1,c); inc(count); end; if divide then begin num[count]:=copy(s,1,d-1); act:=act+s[d]; delete(s,1,d); inc(count); end; a:=pos('+',s); b:=pos('-',s); c:=pos('*',s); d:=pos('/',s); if not (a>0) or (b>0) or (c>0) or (d>0) then num[count]:=s; end; i:=2; g:=strtoint(num[1]); while (i<99) and (act<>'') do begin f:=strtoint(num[i]); plus:=false; minus:=false; multiply:=false; divide:=false; plus:='+'=act[1]; minus:='-'=act[1]; multiply:='*'=act[1]; divide:='/'=act[1]; delete(act,1,1); if plus then g:=g+f; if minus then g:=g-f; if multiply then g:=g*f; if divide then g:=trunc(g/f); inc(i); end; writeln(g); readln; end. |
22.09.2008, 21:42 | #4 |
Форумчанин
Регистрация: 22.09.2008
Сообщений: 214
|
Только она не учитывает приоритет операций.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Математика для программиста | Gribushkino | Свободное общение | 12 | 07.01.2011 01:25 |
Математика | doniyor | Общие вопросы Delphi | 2 | 15.05.2008 18:25 |
Нужна ли программисту математика? | пыхта4ог | Общие вопросы по программированию, компьютерный форум | 25 | 20.02.2008 11:11 |
TDateTime - математика времени | _SERGEYX_ | Общие вопросы Delphi | 2 | 14.09.2007 14:27 |
Математика в DELPHI | ironden | Общие вопросы Delphi | 2 | 17.05.2007 15:01 |