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

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

Войти
Регистрация
Восстановить пароль
 
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
#1

Путешесвтие коня. - C++

25.01.2011, 18:54. Просмотров 832. Ответов 7
Метки нет (Все метки)

Я написал программу про ход коня. Мне надо доделать, если ход сделать нельзя (выходит за размер доски) то писал введите другое число и делал ход.
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
// Путешествие коня2.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale (LC_ALL,"rus");
    const int size=8;
    const int size2=8;
    int turn=0;
    int x=0;
    int y=0;
    int k1=0;
    int k2=0;
    int h;
    int n=0;
    int troy [size][size2];
    
    for (int i=0;i<size;i++)
    {   cout <<endl;
        for (int r=0;r<size2;r++)
        troy[i][r]=-1;
    }
    
    troy[k1][k2]=0;
    
    do { 
        
    for (int i=0;i<size;i++)
    {for (int r=0;r<size2;r++)
            if(troy[i][r]==-1)
                cout <<setw(4)<<"* ";
            else
                cout <<setw(4)<<troy[i][r];
            cout <<endl;            
            
            
            
            
        }
 
    
    cout <<"Введите номер хода от 1 до 8 (0 и отрицательные числа для выхода) "<<"  ";
    cin >>n;
    cout<<endl;
 
        
    if (n==1)
    {
        x=2;
        y=1;
        h=1;
 
    }
    else if (n==2)
    {
        x=1;
        y=-2;
        h=3;
    }
    else if (n==3)
    {
        x=-1;
        y=-2;
        h=1;
    }
    else if (n==4)
    {
        x=-2;
        y=-1;
        h=3;
    }
    else if (n==5)
    {
        x=-2;
        y=1;
        h=-1;
    }
    else if (n==6)
    {
        x=-1;
        y=2;
        h=-3;
    }
    else if (n==7)
    {
        x=1;
        y=2;
        h=-1;
    }
    else if (n==8)
    {
        x=2;
        y=1;
        h=-3;
    }
 
        
        if (n!=0)
        {
        if(k1>-1 && k1<size && k2>-1 && k2<size2 && n!=0) 
        {
            troy[k1+=x][k2+=y]=++turn;
            
        }
        
        
        
    }
    
    
 
    }while (k1>-1 && k1<size && k2>-1 && k2<size2 && n!=0);
    
    
    
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2011, 18:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Путешесвтие коня. (C++):

Ход коня - C++
Здравствуйте, уважаемые форумчане!!! у меня возникла проблема с задачей про коня!!! Дело в том что первоначальные значения координат...

Похождения коня - C++
Добрый день! Пишу программу для решения шахматной задачи &quot;Похождения коня,&quot; ( Условие : Требуется обойти конем все 64 клетки шахматной...

Ходы шахматного коня - C++
Задача заключается в том, чтобы найти минимальное количество ходов для перехода шахматного коня с клетки T1 на клетку T2. Если у кого-то...

Головоломка о путешествии коня - C++
Задача - составить такую последовательность ходов, при которой конь может обойти всю шахматную доску, побывав на каждой клетке лишь один...

Кратчайший путь коня с++ - C++
помогите пожалуйста написать алгоритм кротчайшего пути коня на шахматной доске из А в Б

Задача - Путешествие коня - C++
Выдает необработанное исключение #include &lt;iostream&gt; using std::cout; using std::endl; #include &lt;ctime&gt; using std::time; ...

7
valeriikozlov
Эксперт С++
4674 / 2500 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.01.2011, 20:22 #2
KOPC1886, А полностью задачу можете написать?
2
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
25.01.2011, 20:34  [ТС] #3
Создать массив доски 8х8, вводить ход коня в ручном режиме (числом от 1 до 8), где конь ходил печатать номер хоад, а где не ходил звёздочку. После каждого хода доска перепечатывается. Начало хода на позиии (0,0). Вроде все написал.
0
valeriikozlov
Эксперт С++
4674 / 2500 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.01.2011, 09:34 #4
Ну если:
Цитата Сообщение от KOPC1886 Посмотреть сообщение
вводить ход коня в ручном режиме (числом от 1 до 8)
тогда очень серьезная задача.
А что такое h?

Добавлено через 12 часов 46 минут
Проверяйте:
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
#include <iostream>
#include <iomanip>
using namespace std;
 
 
int main()
{
        setlocale (LC_ALL,"rus");
        const int size=8;
        const int size2=8;
        int turn=0;
        int x=0;
        int y=0;
        int k1=0;
        int k2=0;
        int h=1;
        int n=1;
        int troy [size][size2];
        
        for (int i=0;i<size;i++)
        {       cout <<endl;
                for (int r=0;r<size2;r++)
                troy[i][r]=-1;
        }
        
        troy[k1][k2]=0;
        
       
        while(n>0 && n<9)
        {
            for (int i=0;i<size;i++){
                for (int r=0;r<size2;r++)
                    if(troy[i][r]==-1)
                        cout <<setw(4)<<"* ";
                    else
                        cout <<setw(3)<<troy[i][r]<<" ";
                    cout <<endl;   }
            
            while(true)
            {
                cout <<"Ââåäèòå Г*îìåð õîäГ* îò 1 äî 8 (0 ГЁ îòðèöГ*òåëüГ*ûå Г·ГЁГ±Г«Г* äëÿ âûõîäГ*) "<<"  ";
                cin >>n;
                cout<<endl;
                bool fl=true;
                if((n==8 || n==1) && x>5)
                    fl=false;
                if((n==2 || n==7) && x>6)
                    fl=false;
                if((n==4 || n==5) && x<2)
                    fl=false;
                if((n==3 || n==6) && x<1)
                    fl=false;
                if((n==6 || n==7) && y>5)
                    fl=false;
                if((n==5 || n==1) && y>6)
                    fl=false;
                if((n==3 || n==2) && y<2)
                    fl=false;
                if((n==4 || n==8) && y<1)
                    fl=false;
                if(!fl)
                    cout<<"Íåäîïóñòèìûé õîä"<<endl;
                else
                    break;
            }
            switch (n)
            {
            case 1:
                x+=2;
                y++;
                break;
            case 2:
                x++;
                y-=2;
                break;
            case 3:
                x--;
                y-=2;
                break;
            case 4:
                x-=2;
                y--;
                break;
            case 5:
                x-=2;
                y++;
                break;
            case 6:
                x--;
                y+=2;
                break;
            case 7:
                x++;
                y+=2;
                break;
            case 8:
                x+=2;
                y--;
                break;
            }
            troy[y][x]=h++;
        }
 
        return 0;
}
2
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
26.01.2011, 19:15  [ТС] #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
  
                        while(true)
                        {
                                cout <<"Введите номер хода от 1 до 8 (0 и отрицательные числа для выхода) "<<"  ";
                                cin >>n;
                                cout<<endl;
                                bool fl=true;
                                if((n==8 || n==1) && x>5)
                                        fl=false;
                                if((n==2 || n==7) && x>6)
                                        fl=false;
                                if((n==4 || n==5) && x<2)
                                        fl=false;
                                if((n==3 || n==6) && x<1)
                                        fl=false;
                                if((n==6 || n==7) && y>5)
                                        fl=false;
                                if((n==5 || n==1) && y>6)
                                        fl=false;
                                if((n==3 || n==2) && y<2)
                                        fl=false;
                                if((n==4 || n==8) && y<1)
                                        fl=false;
                                if(!fl)
                                        cout<<"Недопустимый ход"<<endl;
                                else
                                        break;
                        }
                    
                }
0
valeriikozlov
Эксперт С++
4674 / 2500 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.01.2011, 19:52 #6
Цитата Сообщение от KOPC1886 Посмотреть сообщение
Спасибо, но как мне в моем коде добавить эту часть и можно объяснить ее, если не трудно.
Ваш код если очень просто - то он нерабочий, например:
Цитата Сообщение от KOPC1886 Посмотреть сообщение
else if (n==8)
{
x=2;
y=1;
h=-3;
}
Это означает что где бы конь не находился, мы выбираем ход 8 и конь становится сразу на позиции (2,1). И т.д. во многих пунктах.
Ту часть про которую Вы спрашиваете - это проверка на то что конь не выйдет за границы доски.
Я кстати постарался сохранить Ваш код при написании своего. По моему между нашими кодами только одно большое различие.
Вы писали так:
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
        if (n==1)
        {
                x=2;
                y=1;
                h=1;
 
        }
        else if (n==2)
        {
                x=1;
                y=-2;
                h=3;
        }
        else if (n==3)
        {
                x=-1;
                y=-2;
                h=1;
        }
        else if (n==4)
        {
                x=-2;
                y=-1;
                h=3;
        }
        else if (n==5)
        {
                x=-2;
                y=1;
                h=-1;
        }
        else if (n==6)
        {
                x=-1;
                y=2;
                h=-3;
        }
        else if (n==7)
        {
                x=1;
                y=2;
                h=-1;
        }
        else if (n==8)
        {
                x=2;
                y=1;
                h=-3;
        }
А я писал тоже самое с помощью
C++
1
switch (n)
Переменная h я так и не понял зачем у Вас используется. Я ее использовал в качестве номера хода.
1
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
26.01.2011, 23:26  [ТС] #7
Мне не много не понятно, что значит x>5 и тп ....
0
valeriikozlov
Эксперт С++
4674 / 2500 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
27.01.2011, 06:32 #8
KOPC1886, Вообщем программа сделана так: есть текущие координаты коня - они записаны в переменных x и y. Если делаем ход, то естественно меняем эти координаты. Например в начале программы координата x=0 и y=0. Выбираем ход 1. Кооординаты станут такими: x=2, y=1. В массиве troy[][] в ячейке с этими координатами отразится номер хода.

Цитата Сообщение от KOPC1886 Посмотреть сообщение
Мне не много не понятно, что значит x>5
Это все проверки на то что конь не выйдет за границы доски.
x и y могут иметь значения от [0 до 7]. Если например x>5 (а это значит, что x равно или 6 или 7) и мы выберем номер хода 1, то получится что по x мы выйдем за границу доски (x станет больше 7).
0
27.01.2011, 06:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2011, 06:32
Привет! Вот еще темы с ответами:

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

Задачка про Коня и Короля - C++
Задана шахматная доска, на которой расставлены черные и белые фигуры, в том числе белый король и черный конь. Определить, может ли белый...

Путешествие коня. Упрощеннаяя версия. - C++
Здравствуйте! Мне препод задал более упрощенную версию задачи про путешествие коня. Условие задачи такое: написать функцию печатающая...

Задача о ходе коня. Опять - C++
Доброе время суток. Мой пост уже второй по этой программе. В прошлый раз меня просили ее сделать более понятной. Ну старался как мог. И...


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

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

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