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

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

Восстановить пароль Регистрация
 
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
25.01.2011, 18:54     Путешесвтие коня. #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
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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2011, 18:54     Путешесвтие коня.
Посмотрите здесь:

Путешествие коня. Упрощеннаяя версия. C++
Ходы шахматного коня C++
Головоломка о путешествии коня C++
C++ Похождения коня
Кратчайший путь коня с++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.01.2011, 20:22     Путешесвтие коня. #2
KOPC1886, А полностью задачу можете написать?
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
25.01.2011, 20:34  [ТС]     Путешесвтие коня. #3
Создать массив доски 8х8, вводить ход коня в ручном режиме (числом от 1 до 8), где конь ходил печатать номер хоад, а где не ходил звёздочку. После каждого хода доска перепечатывается. Начало хода на позиии (0,0). Вроде все написал.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 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;
}
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;
                        }
                    
                }
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 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 я так и не понял зачем у Вас используется. Я ее использовал в качестве номера хода.
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
26.01.2011, 23:26  [ТС]     Путешесвтие коня. #7
Мне не много не понятно, что значит x>5 и тп ....
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2011, 06:32     Путешесвтие коня.
Еще ссылки по теме:

C++ программа шахматы (маршрут коня)
Задача о ходе коня. Опять C++
C++ Задача - Путешествие коня

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

Или воспользуйтесь поиском по форуму:
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 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).
Yandex
Объявления
27.01.2011, 06:32     Путешесвтие коня.
Ответ Создать тему
Опции темы

Текущее время: 13:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru