Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Jane_Eyre
0 / 0 / 0
Регистрация: 30.06.2016
Сообщений: 3
#1

Массивы: Проверка на выход за границы массива - C++

30.06.2016, 16:31. Просмотров 408. Ответов 4
Метки нет (Все метки)

Здравствуйте! Пишу код хождения коня по шахматной доске. Конь пока стоит на одном месте и ходит по кругу. Как можно реализовать проверку на выход за пределы массива, чтоб конь ходил только внутри доски, и если ход не помещается на доске, пропускался и конь начинал опять со своего места?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include<iostream>
#include<iomanip>
#include<cstdlib>
#include<ctime>
 
void couRse(char a[][8], int c[], int v[], int h[]);//определение хода
void printBoard(char a[][8]);//вывод доски
void arrayOperations(int c[]);//операция над массивом
void delay();//задержка
 
int course=0;
int collector[1000]={0};
int n=0;
 
int main()
{
  setlocale(LC_ALL, "Russian");
  system("mode con cols=100 lines=50");
//------------------------------------------------------------------
  char board[8][8]={'*', '*', '*', '*', '*', '*', '*', '*',
  
                    '*', '*', '*', '*', '*', '*', '*', '*',
                    
                    '*', '*', '*', '*', '*', '*', '*', '*',
                    
                    '*', '*', '*', '*', '*', '*', '*', '*',
                    
                    '*', '*', '*', '*', '*', '*', '*', '*',
                    
                    '*', '*', '*', '*', '*', '*', '*', '*',
                    
                    '*', '*', '*', '*', '*', '*', '*', '*',
                    
                    '*', '*', '*', '*', '*', '*', '*', '*',};
  int horizontal[8]={2, 1, -1, -2, -2, -1, 1, 2};
  int vertical[8]={-1, -2, -2, -1, 1, 2, 2, 1};
//-----------------------------------------------------------------
    
   while(course!=10)//бесконечное хождение
   {
    couRse(board, collector, horizontal, vertical);//определение хода
    //arrayOperations(collector);
    printBoard(board);//вывод доски
    delay();//задержка
    }
//------------------------------------------------------------------
    return 0;
}
void couRse(char a[][8], int c[], int v[], int h[])
{
    //----------------------------определение хода-------------------
    srand(time(NULL));
    
    int checkNumber=8;
    
    int NumberOfRow=3;//начальные координаты для коня
    int NumberOfColumn=7;начальные координаты для коня
    
    int currentRow=0;
    int currentColumn=0;
    
    char k='0';
    
    currentRow=NumberOfRow;
    currentColumn=NumberOfColumn;
    a[currentRow][currentColumn]='K';
    
    course=rand()%8;
    currentRow+=h[course]; //2, 1, -1, -2, -2, -1, 1, 2
    currentColumn+=v[course];//-1, -2, -2, -1, 1, 2, 2, 1
    a[currentRow][currentColumn]=k+course;
    //=================проверка на выход за границы массива=========
        /*if(currentColumn>=8 || currentRow>=8)
        {
            std::cout<<"ВЫХОД ЗА ПРЕДЕЛЫ МАССИВА>8"<<std::endl;
        } 
        //------------------//
        if(currentColumn<0 || currentRow<0)
        {
            std::cout<<"ВЫХОД ЗА ПРЕДЕЛЫ МАССИВА<0"<<std::endl;
        }*/
    //exit(0);//выход из программы
    //==============================================================
    //--------------------------статистика--------------------------------
    std::cout<<"Строка и столбец-------------"<<std::endl;
    std::cout<<std::setw(27);
    std::cout<<"h[course]: "<<h[course]<<std::endl;
    std::cout<<std::setw(27);
    std::cout<<"v[course]: "<<v[course]<<std::endl;
    std::cout<<std::setw(27);
    std::cout<<"course: "<<course<<std::endl;
    std::cout<<std::setw(27);
    std::cout<<"currentColumn: "<<currentColumn<<std::endl;
    
    std::cout<<"Массив ходов-------------------"<<std::endl;
    std::cout<<std::setw(22);
    //--------------------------заполнение массива ходов----------------
    std::cout<<"c[i]: ";
    n++;
    for(int i=0; i<n; i++)
    {
        c[n-1]=course;
        std::cout<<c[i];
    }
    std::cout<<std::endl;
}
void arrayOperations(int c[])//операции над массивами
{
    //------------------------сортировка/проверка на повторения------
    int hold;
    
    for(int pass=1; pass<n; pass++)
    for(int j=0; j<n-1; j++)
    {
        if(c[j]>c[j+1])
        {
        hold=c[j];
        c[j]=c[j+1];
        c[j+1]=hold;
        }
        if(c[j]==c[j+1])
        exit(0);//выход из программы
    }
}
void printBoard(char a[][8])
{
    //---------------------------------вывод------------------------------
    for(int i=0; i<8; i++)
   {
    std::cout<<std::setw(30);
        for(int j=0; j<8; j++)
        {
            std::cout<<a[i][j]<<"    ";
        }
        std::cout<<std::endl<<std::endl<<std::endl;
    }
}
void delay()
{
    int counterTime=0;
    
    while(counterTime<=1000000000)//задержка
      {
        counterTime++;
      }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2016, 16:31
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Массивы: Проверка на выход за границы массива (C++):

Выход за границы массива - C++
Выхожу за пределы массива, но вот только не понимаю как. #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; const...

Проверить на выход за границы массива - C++
ПРивет, помогите пожалуйста, пишу класс - динамический массив, в перегрузке оператора нужно проверить на выход за границы, но не знаю как...

Исправить выход за границы двумерного динамического массива - C++
Уважаемые форумчане, помогите, проблема в том, что пишет ошибку после выполнения функции вывода массива, вот код //распечатка матрицы ...

Почему происходит выход за границы массива в функции Analyze()? - C++
#include &quot;Analyzer.h&quot; #include &quot;HashTable.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; ...

При вызове функции необработанное исключение, выход за границы массива - C++
bool checkprocessed(point data,int xx,int yy,int wind) { bool mark=false; int s=0; for(int k=xx; k&lt;xx+wind;k++){ for(int...

Создайте класс динамического массива, в котором реализована проверка выхода за границы массива - C++
Создайте класс динамического массива, в котором реализована проверка выхода за границы массива. Перегрузите операторы: , =, +, -,++...

4
DUMP
73 / 47 / 11
Регистрация: 22.02.2015
Сообщений: 306
30.06.2016, 16:58 #2
Jane_Eyre, у тебя уже в коде есть проверка, что ты хочешь
0
Jane_Eyre
0 / 0 / 0
Регистрация: 30.06.2016
Сообщений: 3
30.06.2016, 17:23  [ТС] #3
DUMP, есть, в общем ты прав, у меня наверное чуть другая проблема! Все дело в том, что я ее написал, но не могу нормально ее зациклить, чтоб она подбирала нужный ход и поэтому подумал что неправильно создал эту проверку...
короче я просто устал чуток))))

Добавлено через 8 минут
Ну-ладно, я позже сам сделаю!) просто думал может кто свои варианты подскажет, тема все-таки почти сакральная))) всем спасибо!
0
DUMP
73 / 47 / 11
Регистрация: 22.02.2015
Сообщений: 306
30.06.2016, 18:38 #4
Jane_Eyre, проверяй перед ходом (можно ли передвинуть), если нет - просто return;
1
Jane_Eyre
0 / 0 / 0
Регистрация: 30.06.2016
Сообщений: 3
04.07.2016, 14:03  [ТС] #5
В общем получилось, конь ходит только по массиву, не выходя за его границы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include<iostream>
#include<iomanip>
#include<cstdlib>
#include<ctime>
 
void couRse(char a[][8], int c[], int v[], int h[]);//определение хода
void printBoard(char a[][8]);//вывод доски
void arrayOperations(int c[]);//операция над массивом
void statistics(int c[], int v[], int h[]);//статистика
void delay();//задержка
 
int course=0;
int collector[1000]={0};
int n=0;
int currentRow=0;
int currentColumn=0;
bool flag;
 
int main()
{
  setlocale(LC_ALL, "Russian");
  system("mode con cols=100 lines=50");
//------------------------------------------------------------------
  char board[8][8]={'*', '*', '*', '*', '*', '*', '*', '*',
  
                    '*', '*', '*', '*', '*', '*', '*', '*',
                    
                    '*', '*', '*', '*', '*', '*', '*', '*',
                    
                    '*', '*', '*', '*', '*', '*', '*', '*',
                    
                    '*', '*', '*', '*', '*', '*', '*', '*',
                    
                    '*', '*', '*', '*', '*', '*', '*', '*',
                    
                    '*', '*', '*', '*', '*', '*', '*', '*',
                    
                    '*', '*', '*', '*', '*', '*', '*', '*',};
  int horizontal[8]={2, 1, -1, -2, -2, -1, 1, 2};
  int vertical[8]={-1, -2, -2, -1, 1, 2, 2, 1};
//-----------------------------------------------------------------
    
   while(course!=10)
   {
    couRse(board, collector, horizontal, vertical);//определение хода
    statistics(collector, horizontal, vertical);//статистика
    //arrayOperations(collector);
    printBoard(board);//вывод доски
    delay();//задержка
    }
//------------------------------------------------------------------
    return 0;
}
void couRse(char a[][8], int c[], int v[], int h[])
{
    //----------------------------определение хода-------------------
    srand(time(NULL));
    bool flag;
    
    int IndexOfRow=0;//координата расположения коня
    int IndexOfColumn=4;//координата расположения коня
    char k='0';
    
    currentRow=0;
    currentColumn=0;
    
    currentRow=IndexOfRow;//начальные значения координат
    currentColumn=IndexOfColumn;//начальные значения координат
    a[currentRow][currentColumn]='K';
    course=rand()%8;
    currentRow+=h[course]; //2, 1, -1, -2, -2, -1, 1, 2
    currentColumn+=v[course];//-1, -2, -2, -1, 1, 2, 2, 1
    //=================проверка на выход за границы массива==============================
        while((currentColumn>=8 || currentRow>=8) || (currentColumn<0 || currentRow<0))
        {
            std::cout<<"ВЫХОД ЗА ПРЕДЕЛЫ МАССИВА>8"<<std::endl;
            currentRow=IndexOfRow;//начальные значения координат
            currentColumn=IndexOfColumn;//начальные значения координат
            a[currentRow][currentColumn]='K';
            course=rand()%8;
            currentRow+=h[course]; //2, 1, -1, -2, -2, -1, 1, 2
            currentColumn+=v[course];//-1, -2, -2, -1, 1, 2, 2, 1
        }
    //===================================================================================
    a[currentRow][currentColumn]=k+course;
}
 
void statistics(int c[], int v[], int h[])//статистика
{
    //--------------------------инфо--------------------------------
    std::cout<<"Строка и столбец-------------"<<std::endl;
    std::cout<<std::setw(27);
    std::cout<<"h[course]: "<<h[course]<<std::endl;
    std::cout<<std::setw(27);
    std::cout<<"v[course]: "<<v[course]<<std::endl;
    std::cout<<std::setw(27);
    std::cout<<"COURSE: "<<course<<std::endl;
    std::cout<<std::setw(27);
    std::cout<<"currentColumn: "<<currentColumn<<std::endl;
    
    std::cout<<"Массив ходов-------------------"<<std::endl;
    std::cout<<std::setw(22);
    //--------------------------заполнение массива ходов----------------
    std::cout<<"c[i]: ";
    n++;
    for(int i=0; i<n; i++)
    {
        c[n-1]=course;
        std::cout<<c[i];
    }
    std::cout<<std::endl;
}
void arrayOperations(int c[])//операция над массивом
{
    //------------------------сортировка/проверка на повторения------
    int hold;
    
    for(int pass=1; pass<n; pass++)
    for(int j=0; j<n-1; j++)
    {
        if(c[j]>c[j+1])
        {
        hold=c[j];
        c[j]=c[j+1];
        c[j+1]=hold;
        }
        if(c[j]==c[j+1])
        exit(0);//выход из программы
    }
}
void printBoard(char a[][8])
{
    //---------------------------------вывод------------------------------
    for(int i=0; i<8; i++)
   {
    std::cout<<std::setw(30);
        for(int j=0; j<8; j++)
        {
            std::cout<<a[i][j]<<"    ";
        }
        std::cout<<std::endl<<std::endl<<std::endl;
    }
}
void delay()
{
    int counterTime=0;
    
    while(counterTime<=1000000000)//задержка
      {
        counterTime++;
      }
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2016, 14:03
Привет! Вот еще темы с ответами:

Создайте класс динамического массива, в котором реализована проверка выхода за границы массива - C++
Создайте класс динамического массива, в котором реализована проверка выхода за границы массива. Перегрузите операторы: , =, +, -,++ ...

Создайте класс динамического массива, в котором реализована проверка выхода за границы массива - C++
Народ подскажите такую вещь я написал программку для вставки элементов в массив при этом осуществляется проверка границ массива ! ...

Почему происходит выход за границы? - C++
2 игрока берут из своих колод по 1-й карте. Т.е. достают элемент дека из начала дека. Так происходит, пока колода одного из игроков не...

Выход итератора за границы list - C++
почему у меня падает программа, когда пытаюсь ввести отсортированные элементы в другой list ??? list&lt;char&gt;ch; list&lt;char&gt;rev; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru