Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.68/40: Рейтинг темы: голосов - 40, средняя оценка - 4.68
25 / 25 / 42
Регистрация: 25.03.2014
Сообщений: 233
1

Вычислить значение арифметического выражения, состоящего из чисел, скобок и знаков арифметических операций

30.09.2014, 23:01. Показов 7985. Ответов 1
Метки нет (Все метки)

Ученику второго класса рассказали правила, как нужно выполнять арифметические действия, чтобы вычислить значение арифметического выражения, состоящего из чисел, скобок и знаков арифметических операций «+» (сложение) и «*» (умножение). После этого ему дали упражнения - несколько задач, в которых требуется расставить порядок выполнения действий. Помогите ему. Правила вычисления выражения, рассказанные ученику, звучат так. Если в выражении вообще нет скобок, то сначала выполняются все операции умножения слева направо, а затем — операции сложения также слева направо. Если же в выражении есть скобки, то находится самая левая закрывающая скобка и соответствующая ей открывающая. Выражение между ними не содержит скобок и
может быть вычислено по вышеописанным правилам. Дальше это выражение (вместе со скобками)
мысленно удаляется из выражения и заменяется числом — результатом. Если в выражении остались
скобки, то процедура повторяется. Напишите программу, которая для корректного выражения будет определять порядок выполнения арифметических действий. Поскольку сами числа в этой задаче нам будут не существенны, мы
заменим их на знаки «#».

Во входном файле записана одна строка, состоящая из символов «#», «+», «*», «(», «)». Длина строки не превышает 250 символов. Строка соответствует правильному арифметическому выражению.

В выходной файл нужно вывести ту же строку, заменив знаки операций «+» и «*» в ней натураль-
ными числами, задающими порядок выполнения действий в соответствии с описанными правилами.

Пример

#+#+(#+#)

#2#3(#1#)
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.09.2014, 23:01
Ответы с готовыми решениями:

Вычислить точно значение арифметического выражения, состоящего из целых чисел и констант и знаков операций
Вычислить точно значение арифметического выражения ,состоящего из целых чисел и констант и знаков...

Вычисление значения логического выражения, состоящего из натуральных чисел, скобок и поразрядных операций
Дорогие друзья, помогите написать программу, не могу понять как и даже с чего начать. Можете дать,...

Найдите значение выражения, состоящего из чисел и операций.
Найдите значение выражения, состоящего из чисел и операций +,-,*. Пример работы программы:...

Строки: вычисление выражения, состоящего из трех чисел и двух знаков
Напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков (допускаются...

1
Заблокирован
01.10.2014, 17:43 2
Лучший ответ Сообщение было отмечено IceCortez как решение

Решение


Pascal
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
uses Crt;
var
   i,c1,c2,n: integer;
   s,t: string[250];
   b1,b2: boolean;
 
procedure f2;forward;
 
procedure f(var t:string);
begin
   b1:= false;
   c2:= pos(')',t);
   if c2 = 0 then
      begin
         if b2 then exit;
         b1:= true;
         c1:= 1;
         c2:= length(t);
         f2;
      end
   else begin
      for i:= c2 downto 1 do
         if copy(t,i,1)='(' then begin
            c1:= i;
            break;
         end;
      f2;
   end;
   f(t);
end;
 
procedure f2;
var
   l: integer;
   sn: string[2];
   t2: string[250];
begin
   b2:= false;
   if b1 then b2:= true;
   t2:= copy(t,c1+1,c2-c1-1);
 
   l:= pos('*',t2);
   while l<>0 do begin
      str(n,sn);
      delete(t2,l,1);
      insert(sn,t2,l);
      inc(n);
      l:= pos('*',t2);
   end;
 
   l:= pos('+',t2);
   while l<>0 do begin
      str(n,sn);
      delete(t2,l,1);
      insert(sn,t2,l);
      inc(n);
      l:= pos('+',t2);
   end;
 
   delete(t,c1,c2-c1+1);
   if not b1 then
      t2:= 'x'+ t2 +'y';
   insert(t2,t,c1);
end;
 
BEGIN
   clrscr;
   writeln('Expression = ?');
   readln(s);
   t:= s;
   n:= 1;
   t:= ' '+ t +' ';
   f(t);
 
   for i:= 1 to length(t) do
      if copy(t,i,1)='x'then begin
         delete(t,i,1);
         insert('(',t,i); end
         else
      if copy(t,i,1)='y'then begin
         delete(t,i,1);
         insert(')',t,i);
      end;
 
   writeln(t);
   readln;
END.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.10.2014, 17:43

Построить множество встречающихся в последовательности знаков арифметических операций и знаков препинания
Дана непустая последовательность символов. Требуется построить и напечатать множество, ...

Найти все варианты размещения знаков арифметических операций на месте вопросительных знаков
Составить программу, которая нашла все варианты размещения знаков арифметических операций +, -, *...

Найти все варианты размещения знаков арифметических операций на месте вопросительных знаков в выражении
Составить программу, которая бы нашла все варианты размещения знаков арифметических операций +,-,*...

Выбор из строки чисел и арифметических знаков и почсчет выражения
Привет всем, такое задание помогите сделать. Ввести строку из чисел, латинских букв и...


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

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

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