Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
xVizeRx
0 / 0 / 0
Регистрация: 09.12.2012
Сообщений: 1
1

Помощь с калькулятором

13.12.2012, 08:53. Просмотров 958. Ответов 2
Метки нет (Все метки)

Поручили задание: написать калькулятор Поэтому нуждаюсь в вашей помощи
Как сделать так, чтобы я ,к примеру, в Edit1 ввел допустим: 12+12-7*9 и по нажатии равно он мне высчитал результат этой строки?
Заранее благодарю

Добавлено через 23 часа 47 минут
Никто не знает что ли?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2012, 08:53
Ответы с готовыми решениями:

Нужна помощь с калькулятором
1)Есть калькулятор с вводом цифр с клавиатуры: procedure TCalc.FormShortCut(var Msg: TWMKey; var...

Помогите с Калькулятором =(
Привет ! Я учусь на 1 курсе и нам задали сделать калькулятор ! Первы самый простой я сделал,...

Помогите, пожалуйста с калькулятором
Нужно написать калькулятор на Delphi с приоритетом действий, т.е., чтобы можно было написать в...

Очередной трабл с калькулятором
Доброго времени суток. Я программирую на этом языке всего пару дней, так что извините за,...

Помощь с калькулятором
Прога на ActionScript 2.0 Казалось бы, простейшая программа. Вроде бы всё дописано правильно. Не...

2
taras atavin
4207 / 1774 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
13.12.2012, 09:12 2
Ищи разбор математических выражений. Можно рекурсивный, а можно транслировать в постфиксную форму, она считается простым циклом. Могу в понедельник скинуть свою прогу, она по введённому в рантайме уравнению строит график.
0
taras atavin
4207 / 1774 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
18.12.2012, 16:14 3
Лучший ответ Сообщение было отмечено как решение

Решение

Вчера было уже поздно. Преобразование:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
procedure traslate(f: string);
var s: string;
    i, j, L, k, start: integer;
    c: char;
    flag: boolean;
    p: integer;
    e1, e2: TExecValue;
begin
     f := FormMain.EditY.Text;
     TExecArrayClear;
     L := Length(f);
     s := '';
     p := 1;
     for i := 1 to L do
     begin c := f[i];
           flag := True;
           if c = '+' then
           begin if s <> '' then TExecArrayAdd(s, -1);
                 s := '';
                 TExecArrayAdd(c, p);
                 flag := False;
           end;
           if c = '-' then begin if s <> '' then TExecArrayAdd(s, -1);
                                 s := '';
                                 TExecArrayAdd(c, p);
                                 flag := False;
                           end;
           if c = '*' then begin if s <> '' then TExecArrayAdd(s, -1);
                                 s := '';
                                 TExecArrayAdd(c, p + 1);
                                 flag := False;
                           end;
           if c = '/' then begin if s <> '' then TExecArrayAdd(s, -1);
                                 s := '';
                                 TExecArrayAdd(c, p + 1);
                                 flag := False;
                           end;
           if c = '^' then begin if s <> '' then TExecArrayAdd(s, -1);
                                 s := '';
                                 TExecArrayAdd(c, p + 2);
                                 flag := False;
                           end;
           if c = '(' then begin if s = 'ln' then begin TExecArrayAdd(s, p + 2);
                                                        flag := False;
                                                  end;
                                 if s = 'exp' then begin TExecArrayAdd(s, p + 2);
                                                         flag := False;
                                                   end;
                                 if s = 'sin' then begin TExecArrayAdd(s, p + 2);
                                                         flag := False;
                                                   end;
                                 if s = 'cos' then begin TExecArrayAdd(s, p + 2);
                                                         flag := False;
                                                   end;
                                 if s = 'tan' then begin TExecArrayAdd(s, p + 2);
                                                         flag := False;
                                                   end;
                                 if s = 'abs' then begin TExecArrayAdd(s, p + 2);
                                                         flag := False;
                                                   end;
                                 if flag then if s <> '' then TExecArrayAdd(s, -1);
                                 s := '';
                                 p := p + 3;
                                 flag := False;
                           end;
           if c = ')' then begin if s <> '' then TExecArrayAdd(s, -1);
                                 s := '';
                                 p := p - 3;
                                 flag := False;
                           end;
           if flag then s := s + c;
     end;
     if s <> '' then TExecArrayAdd(s, -1);
     L := length(ExecArray);
     for i := L - 2 downto 0 do
     begin e1 := ExecArray[i];
           if e1.Prioritet >= 0 then TExecArraySwitch(i, i + 1);
     end;
     start:=0;
     flag:=true;
     L := length(ExecArray);
     while flag do
     begin if Start>=(L-1) then flag:=false;
           for i := start to L - 2 do
           begin start:=i+1;
                 e1 := ExecArray[i];
                 if e1.Prioritet >= 0 then begin for j := i + 1 to L - 1 do
                                                 begin e2 := ExecArray[j];
                                                       start:=j;
                                                       if e2.Prioritet >= 0 then begin if e2.Prioritet > e1.Prioritet then begin for k:=i to j-1 do
                                                                                                                                 begin TExecArraySwitch(k, k+1);
                                                                                                                                 end;
                                                                                                                                 start:=0;
                                                                                                                           end;
                                                                                       break;
                                                                                 end;
                                                 end;
                                                 break;
                                           end;
           end;
     end;
end;
, вычисление:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
function calculate(x: real): real;
var  i, L: cardinal;
     e: TExecValue;
     xr, yr, r: real;
begin
     L := Length(ExecArray);
     for i := 0 to L - 1 do
     begin
          e:=ExecArray[i];
          if e.Prioritet < 0 then begin if e.Exec = 'x' then Stack.push(x);
                                        if e.Exec = 'pi' then Stack.push(PI);
                                        if e.Exec = 'e' then Stack.push(exp(1));
                                        if (e.Exec <> 'pi') and (e.Exec <> 'x') and (e.Exec <> 'e') then Stack.push(StrToFloatDef(e.Exec, degree(-1, -1)));
                                  end;
          if e.Exec = '+' then begin xr := Stack.pop;
                                     yr := Stack.pop;
                                     r := yr + xr;
                                     Stack.push(r);
                               end;
          if e.Exec = '-' then begin xr := Stack.pop;
                                     yr := Stack.pop;
                                     r := yr - xr;
                                     Stack.push(r);
                               end;
          if e.Exec = '*' then begin xr := Stack.pop;
                                     yr := Stack.pop;
                                     r := yr * xr;
                                     Stack.push(r);
                               end;
          if e.Exec = '/' then begin xr := Stack.pop;
                                     yr := Stack.pop;
                                     r := yr / xr;
                                     Stack.push(r);
                               end;
          if e.Exec = '^' then begin xr := Stack.pop;
                                     yr := Stack.pop;
                                     r := degree(yr, xr);
                                     Stack.push(r);
                               end;
          if e.Exec = 'ln' then begin xr := Stack.pop;
                                      r := ln(xr);
                                      Stack.push(r);
                                end;
          if e.Exec = 'exp' then begin xr := Stack.pop;
                                       r := exp(xr);
                                       Stack.push(r);
                                 end;
          if e.Exec = 'sin' then begin xr := Stack.pop;
                                       r := sin(xr);
                                       Stack.push(r);
                                 end;
          if e.Exec = 'cos' then begin xr := Stack.pop;
                                       r := cos(xr);
                                       Stack.push(r);
                                 end;
          if e.Exec = 'tan' then begin xr := Stack.pop;
                                       r := sin(xr) / cos(xr);
                                       Stack.push(r);
                                 end;
          if e.Exec = 'abs' then begin xr := Stack.pop;
                                       r := abs(xr);
                                       Stack.push(r);
                                 end;
     end;
     calculate := Stack.pop;
end;
. Могу скинуть сами программы, их уже две. Только выбирать файлы я не буду, а там полно и графических, всего 64 мега. Многовато кажется для вложения в тему. Залил обе на обменник.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2012, 16:14

Нужна помощь с калькулятором
Добрый день, а может вечер) Надо мне напистаь програму, калькулятор, опясание програмы:...

Нужна помощь с калькулятором
Подскажите как написать код для памяти в калькуляторе.

Помощь с калькулятором для расчета стоимости посылки
Ребят помогите в проблеме. Требуется создать калькулятор для расчета стоимости посылки ,( из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru