Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 09.06.2011
Сообщений: 5
1

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

09.06.2011, 18:49. Показов 2585. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вычислить точно значение арифметического выражения ,состоящего из целых чисел и констант и знаков операций
' + - *^ например : 2*3^5-6^3+2^7-12^2*5' = -322}
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
88
89
90
USES TpString;
CONST Numbers:CharSet=['0'..'9'];
      Signes:CharSet=['-','+','*','^'];
TYPE Adr1=^Number;
     Number=RECORD
            Num:LongInt;
            Sign:STRING;
            Next:Adr1;
            End;
VAR S:STRING;
    Num,Result:LongInt;
    Code:Integer;
    i,NumbersAmount,SignesAmount:Byte;
    First,p,p0:Adr1;
    pp:Pointer;
 
BEGIN
 
     WRITELN('‚введите арифмет выражение');
     WRITELN('операций "+","-","*","^".');
     WRITELN('например: 2*3^5-6^3+2^7-12^2*5');
     READLN(S);
     NumbersAmount:=WordCount(S,[#0..#255]-Numbers);
     SignesAmount:=WordCount(S,[#0..#255]-Signes);
     First:=NIL;
     Mark(pp);
     FOR i:=1 TO NumbersAmount DO
         Begin
         New(p);
         IF First=NIL THEN First:=p ELSE p0^.Next:=p;
         Val(ExtractWord(i,S,[#0..#255]-Numbers),Num,Code);
         IF Code<>0 THEN
            Begin
            WRITELN('Џа®Ё§®и«* ®иЁЎЄ* ЇаЁ ЇаҐ®Ўа*§®ў**ЁЁ бва®ЄЁ ў зЁб«®!!!');
            Release(pp);
            Halt;
            End;
         p^.Num:=Num;
         WRITELN('Num=',Num);
         IF i=NumbersAmount THEN p^.Sign:='';
         p^.Sign:=ExtractWord(i,S,[#0..#255]-Signes);
         WRITELN('Sign=',ExtractWord(i,S,[#0..#255]-Signes));
         p0:=p;
         End;
     p^.Next:=NIL;
     p:=First;
     WHILE (p<>NIL) DO
           Begin
           IF p^.Sign='^' THEN
              Begin
              p^.Num:=Round(Exp(p^.Next^.Num*ln(p^.Num)));
              p^.Sign:=p^.Next^.Sign;
              p^.Next:=p^.Next^.Next;
              End;
           p:=p^.Next;
           End;
     p:=First;
     WHILE p<>NIL DO
           Begin
           IF p^.Sign='*' THEN
              Begin
              p^.Num:=p^.Next^.Num*p^.Num;
              p^.Sign:=p^.Next^.Sign;
              p^.Next:=p^.Next^.Next;
              End;
           p:=p^.Next;
           End;
     p:=First;
     WHILE (p<>NIL) DO
           Begin
           IF p^.Sign='+' THEN
              Begin
              p^.Num:=p^.Num+p^.Next^.Num;
              p^.Sign:=p^.Next^.Sign;
              p^.Next:=p^.Next^.Next;
              End;
           IF p^.Sign='-' THEN
              Begin
              p^.Num:=p^.Num-p^.Next^.Num;
              p^.Sign:=p^.Next^.Sign;
              p^.Next:=p^.Next^.Next;
              End;
           p:=p^.Next;
           End;
 
     WRITELN('Результат :');
     WRITELN(S,'=',First^.Num);
     Release(pp);
 
END.
Программа считает только до первого повторяющегося символа либо цифры, может кто -то что подскажет
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.06.2011, 18:49
Ответы с готовыми решениями:

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

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

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

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

7
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
09.06.2011, 19:26 2
Цитата Сообщение от Diash Посмотреть сообщение
2*3^5-6^3+2^7-12^2*5' = -322
у меня получилось -58
вот решение
http://ru.wikipedia.org/wiki/%... 0.B8.D0.B8
1
60 / 40 / 30
Регистрация: 26.05.2011
Сообщений: 92
09.06.2011, 20:15 3
Diash, в таком виде этот код невозможно читать. Так понятнее?
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
USES TpString;
CONST 
  Numbers:CharSet=['0'..'9'];
  Signes:CharSet=['-','+','*','^'];
TYPE 
  Adr1=^Number;
  Number=RECORD
    Num:LongInt;
    Sign:STRING;
    Next:Adr1;
  End;
VAR 
  S:STRING;
  Num,Result:LongInt;
  Code:Integer;
  i,NumbersAmount,SignesAmount:Byte;
  First,p,p0:Adr1;
  pp:Pointer;
 
BEGIN
  WRITELN('‚введите арифмет выражение');
  WRITELN('операций "+","-","*","^".');
  WRITELN('например: 2*3^5-6^3+2^7-12^2*5');
  READLN(S);
  NumbersAmount:=WordCount(S,[#0..#255]-Numbers);
  SignesAmount:=WordCount(S,[#0..#255]-Signes);
  First:=NIL;
  Mark(pp);
  FOR i:=1 TO NumbersAmount DO
  Begin
    New(p);
    IF First=NIL THEN First:=p ELSE p0^.Next:=p;
    Val(ExtractWord(i,S,[#0..#255]-Numbers),Num,Code);
    IF Code<>0 THEN
      Begin
        WRITELN('Џа®Ё§®и«* ®иЁЎЄ* ЇаЁ ЇаҐ®Ўа*§®ў**ЁЁ бва®ЄЁ ў зЁб«®!!!');
        Release(pp);
        Halt;
      End;
    p^.Num:=Num;
    WRITELN('Num=',Num);
    IF i=NumbersAmount THEN p^.Sign:='';
    p^.Sign:=ExtractWord(i,S,[#0..#255]-Signes);
    WRITELN('Sign=',ExtractWord(i,S,[#0..#255]-Signes));
    p0:=p;
  End;
 
  p^.Next:=NIL;
  p:=First;
  WHILE (p<>NIL) DO Begin
    IF p^.Sign='^' THEN Begin
      p^.Num:=Round(Exp(p^.Next^.Num*ln(p^.Num)));
      p^.Sign:=p^.Next^.Sign;
      p^.Next:=p^.Next^.Next;
    End;
    p:=p^.Next;
  End;
  p:=First;
  WHILE p<>NIL DO Begin
    IF p^.Sign='*' THEN Begin
      p^.Num:=p^.Next^.Num*p^.Num;
      p^.Sign:=p^.Next^.Sign;
      p^.Next:=p^.Next^.Next;
    End;
    p:=p^.Next;
  End;
  p:=First;
  WHILE (p<>NIL) DO Begin
    IF p^.Sign='+' THEN Begin
      p^.Num:=p^.Num+p^.Next^.Num;
      p^.Sign:=p^.Next^.Sign;
      p^.Next:=p^.Next^.Next;
    End;
    IF p^.Sign='-' THEN Begin
      p^.Num:=p^.Num-p^.Next^.Num;
      p^.Sign:=p^.Next^.Sign;
      p^.Next:=p^.Next^.Next;
    End;
    p:=p^.Next;
  End;
 
  WRITELN('Результат :');
  WRITELN(S,'=',First^.Num);
  Release(pp);
END.
1
0 / 0 / 0
Регистрация: 09.06.2011
Сообщений: 5
09.06.2011, 21:04  [ТС] 4
я просто новичок всех тонкостей не знаю

Добавлено через 58 секунд
а должно -322
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
09.06.2011, 21:14 5
Цитата Сообщение от Diash Посмотреть сообщение
а должно -322
я ошибся
0
0 / 0 / 0
Регистрация: 09.06.2011
Сообщений: 5
09.06.2011, 21:20  [ТС] 6
жаль там нет реализованного алгоритма на паскале (
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
09.06.2011, 21:29 7
Diash, есть делфи (вот по этому я кинул ссылку)
0
0 / 0 / 0
Регистрация: 09.06.2011
Сообщений: 5
09.06.2011, 22:47  [ТС] 8
Я не знакома с Дэлфи( Просто мне нужно решение этой задачи в паскале
0
09.06.2011, 22:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.06.2011, 22:47
Помогаю со студенческими работами здесь

Составить программу вычисления среднего арифметического целых чисел из отрезка [-4;15] с точностью до трех знаков
Помогите пожалуйста составить программу вычисления среднего арифметического целых чисел из отрезка ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru