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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.85
Андрей89
0 / 0 / 0
Регистрация: 17.02.2012
Сообщений: 37
#1

Шахматная доска - C++

11.07.2012, 20:26. Просмотров 3636. Ответов 14
Метки нет (Все метки)

Есть шахматная доска (8*8). Нужно с помощью фигуры "конь" обойти все 64 клетки шахматной доски.
Что-то скопипастил, но работать не хочет. Помогите пожалуйста разобраться. и еще в конце требуется вывести на экран доску шахматную с номерами ходов "коня" на каждой клетке


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
#include <stdio.h>
#include <stdlib.h>
main()
{
int ari[8][8];
  for (int i=0; i<8; i++);
  for (int j=0; j<8, j++);
ari[i][j]=0;
int counter=0;
printf("Введите горизонтальную координату (0-7)\n");
cin>>x;
printf("Введите вертикальную координату (0-7)\n");
cin>>y;
 
int end=1;
   while (end) {int xx=x; int yy=y;
{
   int way=rand()%8;
   if (way==0);
{
   xx=x+2;
   yy=y+1;
}
else if (way==1);
   xx=x-2;
   yy=y-1;
}
else if (way==2)
   xx=x-2;
   yy=y+1;
}
else if (way==3);
   xx=x+2;
   yy=x-1;
}
else if (way==4);
   xx=x+1;
   yy=y-2;
}
else if (way==5);
   xx=x-1;
   yy=y-2;
}
else if (way==6);
   xx=x+1;
   yy=y+2;
}
else if (way==7);
   xx=x-1;
   yy=y+2;
}
 if (xx>=0 && xx<8 && yy>=0 && yy<8);
{
    counter++;
    x=xx;
    y=yy;
ari[x][y]++;}
 int k=0;
 for (int i=0; i<8; i++);
 for (int j=0; j<8; j++);
    if (ari[i][j]>0;
    k++;
    if (k==64);
    end=0;
}
Добавлено через 1 час 15 минут
ну никто разве не может помочь?((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2012, 20:26     Шахматная доска
Посмотрите здесь:

шахматная доска!! C++
C++ Шахматная доска и строка
Шахматная доска Turbo C++ C++
C++ шахматная доска
Шахматная доска C++
C++ шахматная доска
Шахматная доска C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BRcr
4005 / 2294 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
11.07.2012, 21:05     Шахматная доска #2
C синтаксисом беда - очень много лишних точек с запятой.
С логикой непорядок - прежде чем "сделать ход" конем в том или ином направлении, неплохо бы проверить, можно ли такой ход вообще сделать, не покинет ли фигура доску?
Андрей89
0 / 0 / 0
Регистрация: 17.02.2012
Сообщений: 37
11.07.2012, 21:10  [ТС]     Шахматная доска #3
if (xx>=0 && xx<8 && yy>=0 && yy<8);
разве вот не это отвечает за "невыход за пределы"?
BRcr
4005 / 2294 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
11.07.2012, 21:26     Шахматная доска #4
Нет. Ход-то уже сделан, проверка пост-фактум в данном случае бесполезна.
Андрей89
0 / 0 / 0
Регистрация: 17.02.2012
Сообщений: 37
11.07.2012, 21:28  [ТС]     Шахматная доска #5
честно говоря я в этом полный ноль, начали изучать ровно неделю назад, и уже задали вот такое задание по практике(
salam
157 / 138 / 11
Регистрация: 10.07.2012
Сообщений: 709
12.07.2012, 06:36     Шахматная доска #6
насколько я помню условие задачи, обойти нужно таким образом, чтобы побывать в каждой клетке только по одному разу...
Андрей89
0 / 0 / 0
Регистрация: 17.02.2012
Сообщений: 37
12.07.2012, 08:29  [ТС]     Шахматная доска #7
да, условие такое, только все это надо проделать без эвристики, просто заставить пройтись по всем клеткам
salam
157 / 138 / 11
Регистрация: 10.07.2012
Сообщений: 709
12.07.2012, 08:32     Шахматная доска #8
попробуйте тогда написать в лоб.. но я сомневаюсь, что она не встанет в определенный момент... используйте рекурсию, чтобы избежать зацикливания.
Андрей89
0 / 0 / 0
Регистрация: 17.02.2012
Сообщений: 37
12.07.2012, 08:34  [ТС]     Шахматная доска #9
что то подобное я и пробовал, но вот все что у меня получилось(
salam
157 / 138 / 11
Регистрация: 10.07.2012
Сообщений: 709
12.07.2012, 08:37     Шахматная доска #10
Цитата Сообщение от Андрей89 Посмотреть сообщение
int way=rand()%8;
детерминированность 80-ого лэвела...
Андрей89
0 / 0 / 0
Регистрация: 17.02.2012
Сообщений: 37
12.07.2012, 08:47  [ТС]     Шахматная доска #11
хорошо. А подскажите просто вот что, правильно ли я подключил библиотеки и что бы вывести на экран таблицу с результатами ходов требуется просто дописать print ari?
salam
157 / 138 / 11
Регистрация: 10.07.2012
Сообщений: 709
12.07.2012, 08:50     Шахматная доска #12
голубчик мой, у Вас матрица... нужно циклом выводить
C++
1
2
for(от первой строки до последней)
for(от первого столбца итой строки до последнего)
вложенные циклы...
Андрей89
0 / 0 / 0
Регистрация: 17.02.2012
Сообщений: 37
12.07.2012, 08:55  [ТС]     Шахматная доска #13
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
printf("n%d",a[i][j])
то есть вот так? не уверен что внутри цикла нужно "int"
salam
157 / 138 / 11
Регистрация: 10.07.2012
Сообщений: 709
12.07.2012, 08:57     Шахматная доска #14
то есть вот так...
C++
1
2
3
4
5
6
for(int i=0; i < 8; i++)
{
for(int j=0; j < 8; j++)
cout << a[i][j] << " ";
cout << endl;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2012, 08:58     Шахматная доска
Еще ссылки по теме:

C++ Шахматная доска
С++ Шахматная доска C++
Шахматная доска C++
C++ Шахматная доска
C++ шахматная доска

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

Или воспользуйтесь поиском по форуму:
Андрей89
0 / 0 / 0
Регистрация: 17.02.2012
Сообщений: 37
12.07.2012, 08:58  [ТС]     Шахматная доска #15
Большое спасибо)
Yandex
Объявления
12.07.2012, 08:58     Шахматная доска
Ответ Создать тему
Опции темы

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