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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Необработанное исключение, непонятная ошибка 
:(
    Опции темы
djezul
Дата 25.6.2009, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 13.6.2009
Где: Украина , Донецк

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



Есть задача, нужно из заданой точки на шахматной доске, пройти конём по всем клеткам. вот что я уже успел написать 
Код

#include <iostream>
#include <clocale>
#include <windows.h>
using namespace std;
//========= Global ========
int desck[8][8];
//========= Функции =======
bool put(int x, int y);  //  Рекурсивная функция расстановки коней
bool prov(int x, int y); //  Функция проверки , на правильность координат
void output();           //  Вывод доски
//========== MAIN =========
void main(){
    setlocale(LC_CTYPE,"Russian"); //------ Кодировка ----
    //---------- Заполнение массива доски ----------------
    for ( int i = 0 ; i < 8 ; i++ )
        for ( int j = 0 ; j < 8 ; j++ )
            desck[i][j] = 0;
    //-------------- Переменные --------------------------
    int x,y;
    //-------------- Ввод данных -------------------------
    stop:            
    cout << "Введите начальные координаты!\n\n";
    cout << "\t По горизонтали\n\t\t  *--->>> ";
    cin >> x;
    cout << "\n\t По Вертикали\n\t\t *--->>> ";
    cin >> y;
        //********** Проверка на правильность ввода ******
    if ( x > 8 || y > 8){  
        system("cls");
        cout << "Шахматная доска 8*8 ! Попробуйте снова !";
        Sleep(3000);
        system("cls");
        goto stop;
    }else{
        put(x,y); //
    }
}
//========= OUTPUT =======
void output(){
    for ( int i = 0 ; i < 8 ; i++ ){
        for ( int j = 0 ; j < 8 ; j++ ){
            cout << desck[i][j];

        }
        cout << "\n";
    }
}
//========== PROV ========
bool prov(int x, int y){
    if ( x > 8 || y > 8 || desck[x,y] != 0 ) return false;
    else    return true;
}
//========== PUT =========
bool put(int x, int y){
    //-------------- Переменные --------------------------
    int counter = 1;
    //-------------- Заполнение --------------------------
        //************************ Вывод *****************
    output();
    Sleep(300);
    system("cls");
    if ( prov( x , y ) == false ){
        desck[x][y] = counter;
        counter++;    
        //------------------------------------------------
        if ( put( x - 1 , y - 2 ) ) {

        }else{
            if ( put( x + 1 , y - 2) ) {

            }else{
                if ( put( x + 2 , y - 1) ) {

                    }else{

                        if ( put( x + 2 , y + 1 ) ) {

                            }else{

                                if ( put( x + 1 , y + 2 ) ) {

                                }else{

                                    if ( put( x - 1 , y + 2  ) ) {

                                    }else{

                                        if ( put( x -  2 , y + 1 ) ) {

                                        }else{

                                            if ( put( x - 2 , y - 1 ) ) {

                                        }else{
                                        
                                        }
                                    }
                                }    
                            }    
                        }    
                    }
                }
            }
        //------------------------------------------------
    }else return false;
}


вылетает после того как невозможно сделать 2 шаг, тоесть не  x - 1 , y - 2 , а следующий, с ошибкой - 
Необработанное исключение в "0x001a18cc" в "_8Коней.exe": 0xC0000005: Нарушение прав доступа при записи "0x001a8fd8".

как это исправить? и что это такое?
PM MAIL ICQ Skype   Вверх
fry
Дата 25.6.2009, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Из сообщения не очень понял твой вопрос. Напиши вывод отладчика: где вылетает, какие значения переменных...

Заметил
Код

 Sleep(3000);

У этой функции вроде время в секундах?!

Это сообщение отредактировал(а) fry - 25.6.2009, 15:49
PM MAIL   Вверх
mes
Дата 25.6.2009, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(djezul @  25.6.2009,  14:08 Найти цитируемый пост)
bool prov(int x, int y){
    if ( x > 8 || y > 8 || desck[x,y] != 0 ) return false;
    else    return true;
}

а где проверка, на случай если координата меньше 0 ?



--------------------
PM MAIL WWW   Вверх
zim22
Дата 25.6.2009, 15:49 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(djezul @  25.6.2009,  15:08 Найти цитируемый пост)
Необработанное исключение в "0x001a18cc" в "_8Коней.exe":

если бы я был компилятором - я бы вообще отказался компилировать код, в котором вложенность операторов составляет около 7 уровней...
***
скорей вего вы выходите за границы массива
***
Цитата(fry @  25.6.2009,  15:47 Найти цитируемый пост)
У этой функции вроде время в секундах?!

тогда уж в часах...
***
чтобы обработать исключение - словите его. catch

Это сообщение отредактировал(а) zim22 - 25.6.2009, 15:52


--------------------
PM MAIL   Вверх
mes
Дата 25.6.2009, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



P.S по англ. desk, а не desck

Добавлено @ 15:56
Цитата(djezul @  25.6.2009,  14:08 Найти цитируемый пост)
        if ( put( x - 1 , y - 2 ) ) {
        }else{
            if ( put( x + 1 , y - 2) ) {
            }else{
                if ( put( x + 2 , y - 1) ) {
                    }else{
                        if ( put( x + 2 , y + 1 ) ) {
                            }else{
                                if ( put( x + 1 , y + 2 ) ) {
                                }else{
                                    if ( put( x - 1 , y + 2  ) ) {
                                    }else{
                                        if ( put( x -  2 , y + 1 ) ) {
                                        }else{
                                            if ( put( x - 2 , y - 1 ) ) {
                                        }else{
                                        
                                        }
                                    }
                                }    
                            }    
                        }    
                    }
                }
            }


самим глаз такое обилие скобок не режет ?
может лучше типа такого :
Код


 if (! put( x - 1 , y - 2 ) )    
   if (! put( x + 1 , y - 2) )
     if (! put( x + 2 , y - 1) )
       if (! put( x + 2 , y + 1 ) ) 
         if (! put( x + 1 , y + 2 ) )
           if (! put( x - 1 , y + 2  ) ) 
             if (! put( x -  2 , y + 1 ) ) 
                     put( x - 2 , y - 1 );


 smile

Добавлено через 11 минут и 28 секунд
Цитата(djezul @  25.6.2009,  14:08 Найти цитируемый пост)
    //-------------- Ввод данных -------------------------
    stop:

Прикольно , ввод данных начинается с метки stop: smile


Это сообщение отредактировал(а) mes - 25.6.2009, 15:57


--------------------
PM MAIL WWW   Вверх
fry
Дата 25.6.2009, 16:01 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



zim22.
Цитата

Цитата(fry @  25.6.2009,  15:47 Найти цитируемый пост)
У этой функции вроде время в секундах?!

тогда уж в часах...


Если хотите казаться умным, то это ваше личное.

ЗЫ В GCC, в unistd.h время задается в секундах, а в микросекундах время задается в функции usleep.

Я за себя не волнуюсь в плане ошибок, а раз вы так хорошо знаете все по всем хэдерам, то вы просто бог.

Может вы и не хотели заложить в ваше сообщение такой подтекст, то извеняйте я понял именно так.

Насчет
Цитата

чтобы обработать исключение - словите его. catch

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

Это сообщение отредактировал(а) fry - 25.6.2009, 16:11
PM MAIL   Вверх
mes
Дата 25.6.2009, 16:08 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



а вот еще один примерный вариантик, короткой записи вашей длинной лестницы :
Код

int Xofs[] = { -1, +1, +2, +2, +1, -1, -2, -2 };
int Yofs[] = { -2, -2, -1, +1, +2, +2, +1, -1 };

   for (unsigned i=0; i<8; ++i) 
     if  (put (x+Xofs[i], y+ Yofs[i]) break;






--------------------
PM MAIL WWW   Вверх
zim22
Дата 25.6.2009, 16:37 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(fry @  25.6.2009,  16:01 Найти цитируемый пост)
вы просто бог.

спасибо  smile 
Цитата(fry @  25.6.2009,  16:01 Найти цитируемый пост)
ЗЫ В GCC, в unistd.h время задается в секундах, а в микросекундах время задается в функции usleep.

вы могли бы обратить внимание, что 
во-первых, подключен заголовок <windows.h>
во-вторых, имя Sleep написано с большой буквы.
 smile 


--------------------
PM MAIL   Вверх
fry
Дата 25.6.2009, 16:41 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вы от скромности как говориться не помрете. 

Насчет большая буква или нет я лично запоминаю их смысл, а не написание, а если есть нужда смотрю в документацию, но как вы думаю знаете вам это не нужно, вы же и так все знаете.

Цитата

спасибо  smile 

Себе оставь. Мне такое спасибо без надобности.

Цитата

во-первых, подключен заголовок <windows.h>

Мог, но не обратил.

Это сообщение отредактировал(а) fry - 25.6.2009, 16:42
PM MAIL   Вверх
zim22
Дата 25.6.2009, 17:23 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(fry @  25.6.2009,  16:41 Найти цитируемый пост)
Себе оставь. Мне такое спасибо без надобности.

вы грубиян. или тролль. выбирайте smile


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


Опытный
**


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

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



Я буду грубияном и троллем если вы докажите, что 
Цитата

вы так хорошо знаете все по всем хэдерам


Однако ваш пост
Цитата

Цитата(fry @  25.6.2009,  15:47 Найти цитируемый пост)
У этой функции вроде время в секундах?!

тогда уж в часах...


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

Заметил
 Sleep(3000);
У этой функции вроде время в секундах?!


именно "вроде", вы написали "тогда уж в часах..." намекая на то, что своим постом я облажался.

Почему я написал "У этой функции вроде время в секундах?!" я уже ответил и это также доказывает, что я взял это не с потолка.

Цитата

Цитата(fry @  25.6.2009,  16:01 Найти цитируемый пост)
вы просто бог.

спасибо  smile 

Этот ответ на мой пост означает только то, что у вас завышенная самооценка.
PM MAIL   Вверх
zim22
Дата 25.6.2009, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(fry @  25.6.2009,  18:01 Найти цитируемый пост)
Я буду грубияном и троллем если вы докажите, что 

вы сами только что доказали, что вы тролль. поздравляю! этого я и ждал smile
почитайте на досуге: Троллинг(Wikipedia)


--------------------
PM MAIL   Вверх
fry
Дата 25.6.2009, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Луче быть троллем (хоть и не доказанно) со знаниями чем zim22.
zim22 ты кстати троллил поболее.

ЗЫ Автор темы куда-то пропал. Проблема-то решилась?

PM MAIL   Вверх
djezul
Дата 25.6.2009, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 13.6.2009
Где: Украина , Донецк

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



fry , zim22  Я создал тему не для ваших рассуждений, кто тут бог а кто нет , насчёт записи моей длинной лесницы спасибо , но она является таковой, так как это только каркас, и проблемма так и не решилась!

Это сообщение отредактировал(а) djezul - 25.6.2009, 18:26
PM MAIL ICQ Skype   Вверх
mes
Дата 25.6.2009, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(djezul @  25.6.2009,  17:25 Найти цитируемый пост)
проблемма так и не решилась

это исправили ? :
Цитата(mes @  25.6.2009,  14:48 Найти цитируемый пост)
Цитата

bool prov(int x, int y){
    if ( x > 8 || y > 8 || desck[x,y] != 0 ) return false;
    else    return true;
}

а где проверка, на случай если координата меньше 0 ?






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

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

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

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

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


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

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


 




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


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

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