Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Frorix
0 / 0 / 1
Регистрация: 17.02.2013
Сообщений: 3
1

Перевод арифметических выражений в обратную польскую нотификацию

17.02.2013, 18:32. Просмотров 1218. Ответов 2
Метки нет (Все метки)

Здравствуйте, извините что обращаюсь, но больше некуда. Пробовал поискать решение в интернете, испробовал разные идеи, но не получается сделать. Преподаватели не помогают, знакомые сами мучаются.
Сама трудность, на основе заданного кода, составить облегченный вариант кода для перевода простейших выражений в обратную польскую запись. Промучался неделю и решил написать сюда.
Основа для кода:
C
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
#include <stdio.h>
#include <conio.h>
int Chislo(char text[],int *i)
{int c=0;
 while(text[*i]>='0' && text[*i]<='9')
 {c=c*10+(text[*i]-'0');
  (*i)++;
 }
return c;
}
main()
{
 char text[20];
 int i;
 float opd[3];
 char opc[3];
 int pr[3];
 int j=-1;
 printf("Vvedite arifmeticheskoe vyrajenie, v konce probel\n");
 gets(text);
 i=-1;
 do
 {i++;
  opd[++j]=Chislo(text,&i);
  opc[j]=text[i];
  switch(text[i])
  {case'+':
   case'-':pr[j]=1;break;
   case'*':
   case'/':pr[j]=2;break;
   case' ':pr[j]=0;
  }
 while (j>0 && pr[j]<=pr[j-1])
  {switch (opc[j-1])
   {case'+': opd[j-1]=opd[j-1]+opd[j]; break;
    case'-': opd[j-1]=opd[j-1]-opd[j]; break;
    case'*': opd[j-1]=opd[j-1]*opd[j]; break;
    case'/': opd[j-1]=opd[j-1]/opd[j]; break;
   }
  opc[j-1]=opc[j];
  pr[j-1]=pr[j];
  j=j-1;
 }
}
while(text[i]!=' ');
printf(text);
getch();
}
Да, сам код используется для счета арифметических выражений, но надо отталкиваться от него, т.е. использовать схожее построение и стеки в целом.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2013, 18:32
Ответы с готовыми решениями:

Арифметических выражений
У меня есть пример к которому надо написать программу чтоб его посчитала. Так вот я ее сделал но...

Вычисление арифметических выражений
Здравствуйте, помогите, пожалуйста, с задачей: Дано арифметическое выражение, например: 2+3*2-1+1...

Составить программу для вычисления таких арифметических выражений
a=2^(-x)*sqrt(x^(-4)+sqrt/y/), x=3.981, y=-1,625

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

Преобразование обычных выражений в обратную польскую запись с помощью стэка
Помогите пожалуйста написать программу для преобразование обычных выражений в обратную польскую...

2
Frorix
0 / 0 / 1
Регистрация: 17.02.2013
Сообщений: 3
21.02.2013, 00:21  [ТС] 2
Сделал как надо по заданию, теперь другое НО...
У меня никак не хотят выводится знаки операций в нужном порядке, подскажите срочно, пожалуйста.
C
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
#include <stdio.h>
#include <conio.h>
main()
{char text[20];
 int i=0;
 int pr[3];
 float opd[3];
 char opc[3];
 int j=-1;
 int m=0,k=0;
 printf("\n Vvedite arifm. vyrajenie:\n");
 gets(text);
 for(i=0; i<20; i++)
  if(text[i]>='a' && text[i]<='g')
   printf("%c",text[i]);
 i=0;
  do
  {++i;
   opd[++j]=text[i];
   opc[j]=text[i];
   switch(text[i])
   {case'+':
   case'-':pr[j]=1;break;
   case'*':
   case'/':pr[j]=2;break;
   case' ':pr[j]=0;
   }
   while (j>0 && pr[j]<=pr[j-1])
    {switch (opc[j-1])
     {case'+': printf("+"); break;
      case'-': printf("-"); break;
      case'*': printf("*"); break;
      case'/': printf("/");
     }
  opc[j-1]=opc[j];
  pr[j-1]=pr[j];
  j=j-1;
  }
  ++i;
 } 
 while(text[i]!=' ');
 getch();
}
0
Frorix
0 / 0 / 1
Регистрация: 17.02.2013
Сообщений: 3
27.02.2013, 19:39  [ТС] 3
Вопрос закрыт, решил.
0
27.02.2013, 19:39
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2013, 19:39

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Перевод в обратную польскую нотацию
Добрый вечер. Для реализации некоей сложной (на мой взгляд) программы понадобился перевод в...

Перевод в обратную польскую запись (ОПЗ)
Здравствуйте, помогите перевести в обратную польскую запись следующее арифметическое выражение:...

Перевод из инфиксной нотации в обратную польскую нотацию на Питон
Привет!Я даже писал об этом в своем блоге здесь,думал 100% получилось.Но вот проблема unittest ы не...


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

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

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