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

Поиск:

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


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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



Ну очевидно же - выход за границы массива. Если нету дебаггера - выводи в начале функции put значения x и y хотя бы

Это сообщение отредактировал(а) Любитель - 25.6.2009, 18:43


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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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{
        system("cls");
        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 || x < 0 || 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 ) ){
        desck[x][y] = counter;
        counter++;    
        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 );
                                else
                                    return false;
    }else return false;
}
                  


ктото спрашивал про ошибки выдаваемые компилятором, их нет, с сообщением написаном в 1 посте прога вылетает в висуал студио.
PM MAIL ICQ Skype   Вверх
vinick
Дата 25.6.2009, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(djezul @  25.6.2009,  18:37 Найти цитируемый пост)
desck[x,y] != 0 

Наверно имелось ввиду desck[x][y]!=0 ?


Цитата(djezul @  25.6.2009,  18:37 Найти цитируемый пост)
 if (! put( x -  2 , y + 1 ) ) 
                                    put( x - 2 , y - 1 );


Код

if (! put( x -  2 , y + 1 ) ) 
        return put( x - 2 , y - 1 ); // так будет лучше.


И еще я не понял смысл переменой counter. Может  она должна быть статической?
PM MAIL ICQ Jabber   Вверх
mes
Дата 25.6.2009, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(djezul @  25.6.2009,  17:37 Найти цитируемый пост)
    if ( x > 8 || y > 8 || desck[x,y] != 0 || x < 0 || y < 0) return false;

 вначале должны проверить корректность координат, а потом обращаться к полю, а не наоборот :

Код

  if ( x >= 8 || y >= 8 || x < 0 || y < 0 )  ) return false;
  return desck[x][y] != 0

если хотите записать в одну строчку, то нужно инвертировать условие
Код

if (x<8 && x>=0 && y<8 && y>=0 && desck[x][y] == 0 ) return true;

а для наглядности я бы записал так :
Код

 return  (x<8 && x>=0 && y<8 && y>=0) ? desck[x][y] ==0 : false;

хотя эту функцию лучше разбить на две :
Код

bool is_coord_on_desk (int x, int y) 
{
  return (x<8 && x>=0 && y<8 && y>=0);
}
bool is_frei_cell (int x, int y)
{
  return (is_coord_on_desk(x,y)) ? desk[x][y]==0 : false;
}

подправлено в связи с замечаниями baldina.

p.s. специально изложил в порядке очередности, чтоб могли сравнить smile

Это сообщение отредактировал(а) mes - 26.6.2009, 03:04


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


Эксперт
****


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

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



Цитата(fry @ 25.6.2009,  15:47)
Из сообщения не очень понял твой вопрос. Напиши вывод отладчика: где вылетает, какие значения переменных...

Заметил
Код

 Sleep(3000);

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

было бы в секундах, автор первый бы заметил  smile 
 smile fry, ты неправ...


Цитата

if ( x > 8 || y > 8)


Цитата

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


я бы усилил это высказывание: а что, если x или y равны 8? учитывая что диапазон 0..7

Цитата

desck[x,y]

(что то же самое, что desck[y])
все же лучше заменить на 
Код

desck[x][y]


тут ведь требуется проверить на ненулевое значение содержимое ячейки, а не указателя smile

Добавлено через 14 минут и 24 секунды
djezul, исправишь указанное - заработает
лестницу свою можешь оставить, там все нормально (хотя mes тебе предложил во всех смыслах более изящное решение)
PM MAIL   Вверх
fry
Дата 26.6.2009, 08:10 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

ЗЫ И, интересно, в чем я не прав? В том, что zim22 сначала пишет всякую хню, а потом думает? Я просто не люблю когда го..м бросаются и думают о себе как-то очень возвышенно. Думаю эту тему(с zim22 и sleep) надо замять. Этот офтоп уже порядком надоел.
PM MAIL   Вверх
zim22
Дата 26.6.2009, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



fry,  почитайте сами, что вы пишете. успокойтесь уже. одумайтесь! smile нервные клетки не восстанавливаются. smile
Цитата(fry @  26.6.2009,  08:10 Найти цитируемый пост)
 В том, что zim22 сначала пишет всякую хню, а потом думает?

Цитата(fry @  26.6.2009,  08:10 Найти цитируемый пост)
Я просто не люблю

Цитата(fry @  26.6.2009,  08:10 Найти цитируемый пост)
 Думаю эту тему(с zim22 и sleep) надо замять

Цитата(fry @  26.6.2009,  08:10 Найти цитируемый пост)
Этот офтоп уже порядком надоел.





--------------------
PM MAIL   Вверх
Любитель
Дата 26.6.2009, 09:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

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




 ! 
Любитель
Давайте прекращать выяснение отношений, или всем будет по письменному предупреждению!



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

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

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

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

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


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

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


 




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


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

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