Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 983

/ вопрос открыт /

Здравствуйте, эксперты!Прошу Вас помочь с решением одной задачи.Заранее спасибо.
Сгенерировать пример из 5 чисел и знаков + и *,вывести пример в числовой форме,используя порядок действий;используя скобки.

Maverick Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Maverick (статус: Посетитель)
Вопрос отправлен: 10 октября 2008, 00:36
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Порылся я в Delphi World и нашёл несколько алгоритмов вычисления формул. Взял какой попроще и немного переделал его под турбопаскаль.

Приложение:
  1. program p1983;
  2.  
  3. {$N+}
  4.  
  5. uses Crt;
  6.  
  7. function Calculate(SMyExpression: string; digits: Byte): string;
  8. var
  9. z: Char;
  10. ipos: Integer;
  11.  
  12. function StrToReal(chaine: string): Real;
  13. var
  14. r: Real;
  15. Pos: Integer;
  16. begin
  17. Val(chaine, r, Pos);
  18. if Pos > 0 then Val(Copy(chaine, 1, Pos - 1), r, Pos);
  19. StrToReal := r;
  20. end;
  21.  
  22. function RealToStr(inreal: Extended; digits: Byte): string;
  23. var
  24. S: string;
  25. begin
  26.  
  27. Str(inreal: 0: digits, S);
  28. realToStr := S;
  29. end;
  30.  
  31. procedure NextChar;
  32. var
  33. s: string;
  34. begin
  35. if ipos > Length(SMyExpression) then
  36. begin
  37. z := #9;
  38. Exit;
  39. end
  40. else
  41. begin
  42. s := Copy(SMyExpression, ipos, 1);
  43. z := s[1];
  44. Inc(ipos);
  45. end;
  46. if z = ' ' then nextchar;
  47. end;
  48.  
  49. function Expression: Real;
  50. var
  51. w: Real;
  52.  
  53. function Factor: Real;
  54. var
  55. ws: string;
  56. begin
  57. Nextchar;
  58. if z in ['0'..'9'] then
  59. begin
  60. ws := '';
  61. repeat
  62. ws := ws + z;
  63. nextchar
  64. until not (z in ['0'..'9', '.']);
  65. Factor := StrToReal(ws);
  66. end
  67. else if z = '(' then
  68. begin
  69. Factor := Expression;
  70. nextchar
  71. end
  72. else if z = '+' then Factor := +Factor
  73. else if Z = '-' then Factor := -Factor;
  74. end;
  75.  
  76. function Term: Real;
  77. var
  78. W: Real;
  79. begin
  80. W := Factor;
  81. while Z in ['*', '/'] do
  82. if z = '*' then w := w * Factor
  83. else
  84. w := w / Factor;
  85. Term := w;
  86. end;
  87. begin
  88. w := term;
  89. while z in ['+', '-'] do
  90. if z = '+' then w := w + term
  91. else
  92. w := w - term;
  93. Expression := w;
  94. end;
  95. begin
  96. ipos := 1;
  97. Calculate := RealToStr(Expression, digits);
  98. end;
  99.  
  100.  
  101. var
  102. S: string;
  103.  
  104. begin
  105. ClrScr;
  106.  
  107. repeat
  108.  
  109. ReadLn(S);
  110. WriteLn(' ', S, ' = ', Calculate(S, 3));
  111. until S = '';
  112. end.


Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 10 октября 2008, 10:26
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 7; последнее сообщение — 10 октября 2008, 21:45; участников в обсуждении: 3.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 10 октября 2008, 05:45 [#1]:

Откуда берутся скобки? Что значит вывести пример в числовой форме? Числа целые или любые?
min@y™

min@y™ (статус: Доктор наук), 10 октября 2008, 08:17 [#2]:

Ни фига не понял. Поясни подробнее.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Maverick

Maverick (статус: Посетитель), 10 октября 2008, 08:48 [#3]:

Я понял.Нужно ввести,например A,B,C,D,E,использовать знаки + и * - вывести пример в числовой форме.Числа - любые.
Использовать скобки - например,выражение - (Х+У)*2,чтобы выполнялось сначала действие в скобках,а не умножение.Но эта часть задания необязательна.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 10 октября 2008, 13:39 [#4]:

сгенерировать числа - это значит сгенерировать программно, используя генератор случайных чисел, или получить от пользователя?
Maverick

Maverick (статус: Посетитель), 10 октября 2008, 20:53 [#5]:

Сгенерировать при помощи генератора случ.чисел.Ввести надо в буквенном виде,а вывести в числовом.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 10 октября 2008, 21:05 [#6]:

Что значит - ввести в буквенном виде, а вывести в числовом? Как вывести "а" в числовом виде?
Maverick

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.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:43
Выполнено за 0.02 сек.