Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2010, 01:32   #1
EXeplor
 
Регистрация: 03.12.2009
Сообщений: 7
Лампочка Вроде как калькулятор... Не могу понять !

На С++ (в синим окошке само собой) мне необходимо каким то образом создать такой себе калькулятор, который сможет решить как минимум такое уровнение:
2+8*(12+3*2)/2
Т.е решение + использование скобок. Самое главное, что если будет написано так : 2+8*(12+3*2/2 - Программа должна написать, что не хватает одной скобки.

Блин я в астрале, что делать
Ладно со скобками, как мне такой калькулятор сделать то о0
Помогите ктото прошу, очень надо! Хотя бы намек какой то ))

Сошел с ума, хотел вообще поместить все уровнение как текст (char) а потом каждый символ разберать и сравнивать, тупость / глупость = дурдом.

Да, знаю программка не тяжелая, но блин, ума не хавтило. Так что жду намека !

P.S
EXeplor вне форума Ответить с цитированием
Старый 12.05.2010, 02:07   #2
nuevegramodelamor
Пользователь
 
Регистрация: 13.09.2009
Сообщений: 75
По умолчанию

Код:
function Calculate(SMyExpression: string; x:string;digits: Byte): string;

var
z: Char;
ipos,i: Integer;

function StrToReal(chaine: string): Real;
var
r: Real;
Pos: Integer;
begin
Val(chaine, r, Pos);
if Pos > 0 then Val(Copy(chaine, 1, Pos - 1), r, Pos);
Result := r;
end;

function RealToStr(inreal: Extended; digits: Byte): string;
var
S: string;
begin
Str(inreal: 0: digits, S);
realToStr := S;
end;

procedure NextChar;
var
s: string;
begin
if ipos > Length(SMyExpression) then
begin
z := #9;
Exit;
end
else
begin
s := Copy(SMyExpression, ipos, 1);
z := s[1];
Inc(ipos);
end;
if z = ' ' then nextchar;
end;

function Expression: Real;
var
w: Real;

function Factor: Real;
var
ws: string;
begin
Nextchar;
if z in ['0'..'9','x'] then
begin
ws := '';
repeat
if z='x' then begin ws:=x;   nextchar; break;  end;

ws := ws + z;
nextchar
until not (z in ['0'..'9', '.','x']);
Factor := StrToReal(ws);
end
else if z = '(' then
begin
Factor := Expression;
nextchar
end
else if z = '+' then Factor := +Factor
else if Z = '-' then Factor := -Factor;
end;

function Term: Real;
var
W,w2: Real;
i,w1:integer;
begin
W := Factor;
w2:=w;
while Z in ['*', '/','^','s','c','l','#'] do
if z = '*' then w:=w*Factor
else if (z='/') then w := w / Factor
 else  if z='s' then
    w:=Sin(Factor)
   else if z='c' then
    w:=Cos(Factor)
   else if z='l' then begin
   if Factor >0 then
    w:=Ln(Factor)
      else w:=1
   end
   else if(z='^') then
   begin

   w1:=trunc(Factor-1);
   for i := 1 to w1 do
   w:=w*w2;
 end
 else if(z='#') then w:=sqrt(Factor);
Term := w;

end;
begin
w := term;
while z in ['+', '-'] do
if z = '+' then w := w + term
else
w := w - term;
Expression := w;
end;

begin
for i := 1 to length(x) do  if x[i]=',' then  x[i]:='.';


ipos := 1;
Result := RealToStr(Expression, digits);
for I := 1 to  length(Result) do if Result[i]='.' then   Result[i]:=',';
                                 

end;
функция....

Calculate(Edit1.Text,StringGrid1.Ce lls[0,i],3); вызов функции..

я думаю если вы знаете что "Да, знаю программка не тяжелая" то с дельфи на с++ перепишите уж
nuevegramodelamor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу понять в чем ошибка (вроде школьная математика) Алён@ Общие вопросы Delphi 4 10.03.2009 20:25
не могу понять как решать(( что и как(( дурачок же я )) durachok) Паскаль, Turbo Pascal, PascalABC.NET 0 25.12.2008 14:45
Не могу понять как отредактировать программу asale Microsoft Office Excel 1 31.01.2007 20:57