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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2009, 00:14   #1
Эйнж
 
Аватар для Эйнж
 
Регистрация: 02.08.2008
Сообщений: 9
По умолчанию Калькулятор Страуструпа

В книге есть пример калькулятора, код выдаётся по кускам и разжёвывается. Не могу расположить правильно 3 функции, использующие друг друга. Как ни раскину их в листинге, всё равно какая-то из них не видит другую, ибо расположена в тексте до искомой.

Сами функции:

Код:
double term()  // умножает и складывает 
{ 
  double left = prim(); 
 for(;;) 
    switch(curr_tok)    { 
   case MUL: 
    get_token();  // случай '*' 
    left *= prim(); 
    break; 
   case DIV: 
    get_token();  // случай '/' 
    double d = prim(); 
        if (d == 0) return error("деление на 0"); 
    left /= d; 
    break; 
   default: 
    return left; 
 } 
} 

double expr()  // складывает  и вычитает 
{ 
  double left = term(); 
 for(;;)     // ``вечно'' 
  switch(curr_tok) { 
   case PLUS: 
    get_token();  // случай '+' 
    left += term(); 
    break; 
   case MINUS: 
    get_token();  // случай '-' 
    left -= term(); 
    break; 
   default: 
    return left; 
  } 
} 
double prim()               // обрабатывает первичное 
{ 
  switch (curr_tok) { 
   case NUMBER:          // константа с плавающей точкой 
   get_token(); 
   return number_value; 
  case NAME: 
      if (get_token() == ASSIGN) { 
    name* n = insert(name_string); 
    get_token(); 
    n->value = expr(); 
    return n->value; 
   } 
   return look(name_string)->value; 
   case MINUS:               // унарный минус 
   get_token(); 
   return -prim(); 
  case LP: 
   get_token(); 
   double e = expr(); 
      if (curr_tok != RP) return error("требуется )"); 
   get_token(); 
   return e; 
  case END: 
   return 1; 
  default: 
    return error("требуется первичное"); 
 } 
}
Как их правильно расположить???
Эйнж вне форума Ответить с цитированием
Старый 01.04.2009, 00:44   #2
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

Используйте прототипы...
Перед всеми тремя напишите
Код:
double term();
double expr();
double prim();
wyvern@localhost:~$ sudo emerge --unmerge world
wyvern вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
калькулятор FARGO Общие вопросы Delphi 1 14.12.2008 23:01
Калькулятор ViNcHeStEr Помощь студентам 5 23.11.2008 15:39
Калькулятор Димарик Общие вопросы Delphi 1 04.10.2008 15:52
Калькулятор Nixtone Помощь студентам 7 03.07.2008 23:17
Калькулятор Maycal Общие вопросы C/C++ 2 18.11.2007 06:02