Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2010, 17:19   #1
Anastasiya209
 
Аватар для Anastasiya209
 
Регистрация: 02.06.2009
Сообщений: 7
Вопрос Обратная польская запись + ввод/вывод из файла (С++)

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

Подскажите, пожалуйста, какой кусок и в какое место программы надо вписать, и нужно ли ещё что-то в программе изменить?

Код:
#include<iostream>
#include<conio.h>
#include<cstdio>
#include<fstream>
using namespace std;
void OPZ(char *a,char *b)
{
int j=-1,k=0,i=0;
char stek[100];
while(a[i]!='\0')
{
if((a[i]>='0')&&(a[i]<='9')||(a[i]>='a')&&(a[i]<='z'))
{
b[k]=a[i];
k++;
}
if((a[i]=='+')||(a[i]=='*')||(a[i]=='/')||(a[i]=='-'))
{
if(j<0)//пустой стек
{
j=0;
stek[j]=a[i];//запись в стек текущей операции
}
else
{
if(((a[i]=='*')||(a[i]=='/'))&&((stek[j]=='+')||(stek[j]=='-'))||(stek[j]=='('))
//приоритет текущей операции больше чем в стеке
{
j++;
stek[j]=a[i];
i++;
continue;
}
if(((a[i]=='-')||(a[i]=='+'))&&((stek[j]=='/')||(stek[j]=='*')))
//приоритет текущей операции меньше чем в стеке
{
while(j>-1)
{
if(stek[j]=='(')
break;
b[k]=stek[j];//опустошение стека
k++;
j--;
}
j++;
stek[j]=a[i];//запись в стек текущей операции
}
else//приоритет текущей операции равен стеку
{
b[k]=stek[j];
stek[j]=a[i];
k++;
}

}
}
if (a[i]==')')
while(j>-1)
{
if(stek[j]=='(')
{
j--;
break;
}
b[k]=stek[j];
j--;
k++;
}
if(a[i]=='(')
{
j++;
stek[j]=a[i];
}
i++;
}
for(;j>-1;j--)
{
b[k]=stek[j];
k++;
}
b[k]='\0';
return;
}
void main()
{char a[100];
char b[100];
ifstream fin("D:\\input.txt");
fin>>a;
OPZ(a,b);
ofstream fout("D:\\output.txt");
fout<<b;
}
Anastasiya209 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обратная польская нотация Sexy Fox Помощь студентам 9 22.09.2011 14:57
Обратная польская запись alexobenikov Общие вопросы C/C++ 12 25.11.2010 23:03
Обратная польская нотация Izhic Свободное общение 17 02.10.2009 23:43
Обратная польская запись Катуха Помощь студентам 6 27.12.2008 10:23
Обратная польская запись Роман Радер Общие вопросы Delphi 0 09.12.2008 18:18