Форум программистов, компьютерный форум CyberForum.ru

Рекурсивный спуск - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как правильно инициализировать статические члены класса? http://www.cyberforum.ru/cpp-beginners/thread43235.html
Я новичок и заранее прошу прощение за тупые вопросы. Имеются два класса: Solution и Pool. Pool состоит из нескольких обьектов класса Solution. Эти обьекты отличаются только переменными *x и y. Все остальные члены одинаковы: **a, n, yFunc. Чтобы предотвратить копирование **a и n во все обьекты Solution, я обьявил их как static. Вопрос такой: правильно ли я инициализирую **a и n внутри конструктора...
C++ Как в консольном приложении узнать текущую директорию? Пишу в Visual C++ 2008. http://www.cyberforum.ru/cpp-beginners/thread43166.html
C++ Условия на переменные
В методе минимизации Ньютона-Рафсона у меня есть условия на переменные.Эта тему уже обсуждалась здесь, но я хотела бы повторится, так как для меня вопрос не остался закрытым и ответ я на него не нашла. Например, я на кладываю условие на вектор: for (i = 0; i < n; i++) { if (x <= 0.0) { printf("x<=0!\n"); ...
C++ Работа с файлами. Срочно
Нужно переделать программу так, чтобы изначально строка считывалась из файла, который предположим в корневом каталоге. и записать результат в другой файл ("результат") #include <string.h> #include <stdio.h> #include <conio.h> void fab(char s1,char s2) {int i,line,line2,lineb; line=strlen(s1);
C++ Не работает цикл for С++ Borland http://www.cyberforum.ru/cpp-beginners/thread42959.html
Элементарная программа: #include <iostream.h> #include <graphics.h> #include <math.h> #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <dos.h> void main ()
C++ Чтение с TDBGrid Уважаемые коллеги! Подскажите, как мне наиболее корректно прокрутить одну комбинацию. Надо из приложения MFC считать содержимое элемента окна другого приложения (написанного на Delphi), а именно - компонента TDBGrid. Окно приложения-родителя нахожу легко (CWnd* FindWindow() ), потом получаю список детей, ищу дочернее окошко, в котором еще раз дочернее и так далее до необходимой глубины. Наконец,... подробнее

Показать сообщение отдельно
anaberne
Сообщений: n/a

Рекурсивный спуск - C++

07.07.2009, 11:08. Просмотров 3677. Ответов 3
Метки (Все метки)

нужно реализовать рекурсивный спуск буквально за час, буду оч признателен. Нужно найти ошибку в синтаксисе и помочь с семантикой, либо другой вариант.

Итак, начал с синтаксиса, немного кривовато, но ниче (использую Dev 4.9.9.2) . Ошибка, не проходит 2й раз через Operand, по идее не хватает символа, но чет не соображу где теряется он

Код
/*2.	Отношение Операнд знак Операнд, где Операнд - целое или имя  переменной
 (последовательность латинских букв и цифр, начинающаяся не с цифры), знак
  - это знак отношения (>, <, =, <>, >=, <=). Семантическая процедура
   - сгенирировать программу на С++, запрашивающую значения переменных
    (целые числа)  и проверяющую истинность отношения.*/
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

//using namespace std;

char Ch;
int Pos;

// считываем след. символ.
void NextCh()
{
   
   cin>>Ch;
   Pos++;
   while ( Ch == ' ');

}



//сброс строки
void ResetText()
{
   cout << "vvedite stroku\n" ;
   Pos = 0;
   NextCh();
}

/*void setw (int p)
{
for (int i=0; i<p; i++)
   {
   cout << " ";
   } 
}*/
// ошибка
void Error(char *Message)
{  
  // cout << setw(Pos)<< "^\n" ;
   cout <<  "error:\n "  << Message;
  }



//проверка знака между операндами
void Sign()
{
     cout << "sign na4alo\n";
                   if (Ch=='>')
                   {
                   NextCh ();
                     
                         if (Ch=='=' || Ch=='<')    
                            {
                            NextCh();
                            cout << "Ya tut\n";
                            }
                         
                   }     
                 

                 else if (Ch=='<')
                 {
                  NextCh (); 
                         
                         if (Ch=='=' || Ch=='>')    
                            {
                            NextCh();
                            cout << "ya tut2\n";
                            }
                  }

                  else if (Ch=='=')
                  {
                  NextCh();
                  }
                               
     
                  else Error("net znaka\n");        
                  cout << "konec sign\n";

        
}


//считываем операнд. Может начинаться с буквы и далее число или буква, может с целого.
void Operand()
{ 
     cout << "Operand na4alo\n";
 
               if ((Ch>='a') && (Ch<='z')) //если первый символ
               {
               NextCh ();
                     while (((Ch>='a') && (Ch<='z')) || ((Ch>='0') && (Ch<='9')))
                                {
                                NextCh();
                                cout << "ya tut v bukvah\n";
                                }
                }
                else if ((Ch>='0') && (Ch<='9'))// если целое
                {
                 NextCh ();
                          while ((Ch>='0') && (Ch<='9'))
                          {
                          NextCh();
                          cout << "ya tut v 4islah\n";
                          }
                }
                          
                else if (Ch=='+' || Ch=='-') // если целое со знаком
                {
                          NextCh();
                          if ((Ch>='0') && (Ch<='9'))    NextCh ();
                          while ((Ch>='0') && (Ch<='9'))
                          {
                          NextCh();
                          cout << "ya tut v 4islah\n";
                          }
                }
                 
                else Error("s nepravil'nogo simvola\n");

            cout << "Operand konec\n";
            
}

void zapusk()   // запускает все дело, но сама она из main ... не стал туда засовывать.
{
Operand();      
Sign();
if (Ch!='\0') //топорный вызов операнда если еще не конец строки, хотел сделать это дело в операнде на выходе,
              // типо если конец строки - выйти, если нет - то запустить sign() , но много if надо.
{
Operand();
}
else Error ("Operand 2 otsutstvuet");
  
}

int main()
{  
   ResetText();
   zapusk(); //запускаем функцию старта))
   if (Ch!='\0') Error("ojidanie stroki\n");
   else
      cout<<"Vse OK\n " ;
   getch();
 return 0;
}

хелп)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 19:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru