| 
| 
 | Вопрос # 1 983/ вопрос открыт / | 
 |  Здравствуйте, эксперты!Прошу Вас помочь с решением одной задачи.Заранее спасибо.Сгенерировать пример из 5 чисел и знаков + и *,вывести пример в числовой форме,используя порядок действий;используя скобки.
 
|  |   Вопрос задал: Maverick (статус: Посетитель)Вопрос отправлен: 10 октября 2008, 00:36
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: min@y™ Порылся я в Delphi World и нашёл несколько алгоритмов вычисления формул. Взял какой попроще и немного переделал его под турбопаскаль. Приложение:Переключить в обычный режим program p1983; {$N+} uses Crt; function Calculate(SMyExpression: string; digits: Byte): string;var  z: Char;  ipos: 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);     StrToReal := 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'] then       begin         ws := '';         repeat           ws := ws + z;           nextchar         until not (z in ['0'..'9', '.']);         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: Real;     begin       W := Factor;       while Z in ['*', '/'] do         if z = '*' then w := w * Factor       else         w := w / 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   ipos   := 1;   Calculate := RealToStr(Expression, digits); end;  var  S: string; begin  ClrScr;   repeat     ReadLn(S);    WriteLn('  ', S, ' = ', Calculate(S, 3));  until S = '';end.
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 10 октября 2008, 10:26
 Оценка за ответ: 5
 |  
 Мини-форум вопросаВсего сообщений: 7; последнее сообщение — 10 октября 2008, 21:45; участников в обсуждении: 3. 
|   | Мережников Андрей (статус: Абитуриент), 10 октября 2008, 05:45 [#1]:Откуда берутся скобки? Что значит вывести пример в числовой форме? Числа целые или любые? |  
|   | min@y™ (статус: Доктор наук), 10 октября 2008, 08:17 [#2]:Ни фига не понял. Поясни подробнее. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Maverick (статус: Посетитель), 10 октября 2008, 08:48 [#3]:Я понял.Нужно ввести,например A,B,C,D,E,использовать знаки + и * - вывести пример в числовой форме.Числа - любые. Использовать скобки - например,выражение - (Х+У)*2,чтобы выполнялось сначала действие в скобках,а не умножение.Но эта часть задания необязательна.
 |  
|   | Мережников Андрей (статус: Абитуриент), 10 октября 2008, 13:39 [#4]:сгенерировать числа - это значит сгенерировать программно, используя генератор случайных чисел, или получить от пользователя? |  
|   | Maverick (статус: Посетитель), 10 октября 2008, 20:53 [#5]:Сгенерировать при помощи генератора случ.чисел.Ввести надо в буквенном виде,а вывести в числовом. |  
|   | Мережников Андрей (статус: Абитуриент), 10 октября 2008, 21:05 [#6]:Что значит - ввести в буквенном виде, а вывести в числовом? Как вывести "а" в числовом виде? |  
|   | Maverick (статус: Посетитель), 10 октября 2008, 21:45 [#7]:Ну,например,как в этой задаче: var a,b:integer;
 begin
 write('a='); readln(a);
 write('b='); readln(b);
 randomize;
 case random(2) of
 0: writeln('a+b=',a,'+',b,'=',a+b);
 1: writeln('a-b=',a,'-',b,'=',a-b);
 end;
 readln;
 end.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |