|
Вопрос # 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.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|