Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рекурсивный спуск, Рекурсивный спуск для вычисления 
:(
    Опции темы
Dia28
Дата 15.11.2012, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 19.10.2011

Репутация: нет
Всего: нет



Здравствуйте помогите пожалуйста разобраться в рекурсивном спуске, который вычисляет выражения, и как считывать по одному элементу из файла(

Код

#include "stdafx.h"
#include "stdlib.h"
 
bool E();
bool T();
bool F();
bool N();
{
    if(T())
    {
        while(NS == '+' || NS == '-')
        {
            if(!T())
            {
                return false;
            }
        }
        return true;
    }
    else
        return false;
}
 
bool T()
{
    if(F())
    {
        while(NS == '*' || NS == '/')
        {
            if(!F())
                return false;
        }
        return true;
    }
    else
        return false;
}
 
bool F()
{
    if(NS == '(')
    {
        if(E())
            if(NS == ')')
                return true;
            else
                return false;
        else
            return false;
    }
    else
        return N();
}
 
bool N()
{
    
}
int _tmain(int argc, _TCHAR* argv[])
{
    
    return 0;
}

PM MAIL   Вверх
xvr
Дата 15.11.2012, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Судя по содержимому функции main - он ничего не вычисляет.  smile Судя по именам остальных функций их писал большой любитель загадок. 
Вы бы для начала написали грамматику того, что вы собираетесь высичлять (и не в виде загадочной программы, а в виде BNF например)  smile 



PM MAIL   Вверх
Dia28
Дата 16.11.2012, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 19.10.2011

Репутация: нет
Всего: нет



Цитата(xvr @ 15.11.2012,  19:00)
Судя по содержимому функции main - он ничего не вычисляет.  smile Судя по именам остальных функций их писал большой любитель загадок. 
Вы бы для начала написали грамматику того, что вы собираетесь высичлять (и не в виде загадочной программы, а в виде BNF например)  smile

Я не знаю как написать функцию чтения из файла посимвольно, и чтобы этот символ сохранялся в переменную NS

Грамматика :

E::=T|T+E|T-E
T::=F|T*F|T/F
F::=(E)|N;

N - число в файле

PM MAIL   Вверх
Remiznik
Дата 16.11.2012, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: 1
Всего: 1



Не хочу быть занудой. Но попробуйте давать осмысленные имена функциям и переменным это не только помогает читателю, но и Вам поможет разобратся с логикой программы. 
PM MAIL   Вверх
xvr
Дата 16.11.2012, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Dia28 @  16.11.2012,  01:37 Найти цитируемый пост)
Я не знаю как написать функцию чтения из файла посимвольно, и чтобы этот символ сохранялся в переменную NS

Гм. Это вообще то самые азы. Какие нафиг рекурсивные спуски, если вы не владете инструментом?  smile 

Пусть эта функция называется nxt(). Дестриптор открытого файла лежит в глобальной переменной file. Лексема читается в переменную NS, значение константы (для N) в переменной val
Код

FILE* file;
int val;

bool nxt()
{
 for(;;)
  {
   int c = fgetc(file);
   if (c==EOF) {NS=0; return false;}
   if (isspace(c)) continue;
   if (isdigit(c))
    {
     ungetc(c,file);
     fscanf(file,"%d",&val);
     NS='N';
     return true;
    }
   NS=c;
   return true;
 }
}
Ну и вызовы ее надо добавить после всех проверок NS в вашей исходной программе

Добавлено через 3 минуты и 9 секунд
Кстати, ваша грамматика не соотвествует вашей программе
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1111 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.