Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
Spirit102
2 / 2 / 0
Регистрация: 20.01.2009
Сообщений: 18
1

Шахматы. Подскажите, как написать ферзя.

23.10.2009, 10:06. Просмотров 2080. Ответов 10
Метки нет (Все метки)

Задача.
Вводим фигуру-напр, ферзь и ее координаты. И вводим координаты второй фигуры. Нужно выяснить, бьет ли ферзь эту фигуру. Помогите пожалуйста.
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
#include <stdio.h> 
#include <conio.h> 
 
void main() { 
char f; 
printf("vvedite № figur:1-ladja,2-ferz, 3-slon,4-kon,5-peska,6-korol; \n"); 
scanf("%c",&f); 
int x1, y1; 
printf("vvedite № polja-(chislo, cislo), ot 1 do 8 \n"); 
scanf("%d %d",&x1, &y1); 
int x2, y2; 
printf("vvedite № polja-(chislo, cislo), ot 1 do 8 \n "); 
scanf("%d %d",&x2,&y2); 
 
switch (f) { 
case'1': if (x1==x2 || y2==y1) 
         {printf("figura bita"); 
           break; 
           } 
case'2': break; 
case'3': break; 
case'4': if ((x1==x2-1 && y1==y2-2)||(x1==x2+1 && y1==y2-2)||(x1==x2-1 && y1==y2+2)||(x1==x2+1 && y1==y2+2)||(x1==x2-2 && y1==y2-1)||(x1==x2+2 && y1==y2-1)||(x1==x2-2 && y1==y2+1)||(x1==x2+2 && y1==y2+1)) 
{printf("figura bita"); 
           break; 
           } 
case'5':  if((y1==y2-1 || y1==y2+1)&&(x1==x2-1)) 
          {      printf("figura bita"); 
             break; 
         } 
case'6':if ((x1==x2 && y1==y2-1)||(x1==x2 && y1==y2+1)||(x1==x2-1 && y1==y2)||(x1==x2+1 && y1==y2)||(x1==x2+1 && y1==y2+1)||(x1==x2+1 && y1==y2-1)||(x1==x2-1 && y1==y2+1)||(x1==x2-1 && y1==y2-1)) 
{printf("figura bita"); 
           break; 
           } 
default : printf("figura ne bita"); 
return; 
 
} 
getch(); 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2009, 10:06
Ответы с готовыми решениями:

Шахматы. Каждый ферзь бьет ровного одного ферзя
Всем привет! Помогите решить задачу: Расставить на шахматной доске максимальное...

Написать консольные шахматы
Происходит шахматная партия. Шахматная доска имеет размер 8x8. При этом...

Игра "Шахматы" подскажите литературу
хочу написать игру шахматы, но сама книга основная описывающая она на си++ , а...

Подскажите как написать
Алгоритм решения индивидуальной задачи разделить на две функции: - функцию, ...

Подскажите как написать программы на С++
Упр. 1 Напишите программу, которая выводит в левом верхнем углу экрана...

10
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,531
23.10.2009, 14:10 2
Не, ну а чё? Замысел правильный, всё верно. Чё ты, не знаешь, как ферзь ходит?
C
1
2
3
4
5
6
#include <math.h>
case'2': 
 if (x1==x2 || y2==y1 || ((fabs)(x1-x2)==(fabs)(y1- y2))) {
  printf("figura bita" );
  break; 
}
fabs это абсолютное значение. Вот подключил ещё и библиотеку дополнительную математическую
1
Spirit102
2 / 2 / 0
Регистрация: 20.01.2009
Сообщений: 18
24.10.2009, 17:24  [ТС] 3
Пасиб))
0
Spirit102
2 / 2 / 0
Регистрация: 20.01.2009
Сообщений: 18
06.11.2009, 21:00  [ТС] 4
Еще вопрос - почему может не работать Default?
Сейчас прога выглядит вот так:
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
void main(){
char f;
printf("Vvedite nomer figuru: \npeshka: 1\nladja : 2\nslon  : 3\nkorol : 4\nferz  : 5\nkon   : 6\n");
scanf("%c",&f);
int x1, y1; 
printf("Vvedite koordinati 1 figuru (ot 1 do 8) \n"); 
scanf("%d %d",&x1, &y1); 
int x2, y2; 
printf("Vvedite koordinati 2 figuru (ot 1 do 8) \n"); 
scanf("%d %d",&x2,&y2); 
switch (f){
case '1': if ((y1==y2+1 || y1==y2-1) && x1==x2-1)
          printf("figura betsja"); break;
 
case '2': if (x1==x2 || y1==y2)
          printf("figura betsja"); break;
 
case '3': if (abs(x1-x2)==abs(y1-y2))
          printf("figura betsja"); break;
 
case '4': if ((x1==x2 && y1==y2-1)||(x1==x2 && y1==y2+1)||(x1==x2-1 && y1==y2)||(x1==x2+1 && y1==y2)||(x1==x2+1 && y1==y2+1)||(x1==x2+1 && y1==y2-1)||(x1==x2-1 && y1==y2+1)||(x1==x2-1 && y1==y2-1)) 
          printf("figura betsja"); break;
 
case '5': if ((x1==x2 || y1==y2) || (abs(x1-x2)==abs(y1-y2)))
          printf("figura betsja"); break;
 
case '6': if ((x1==x2-1 && y1==y2-2)||(x1==x2+1 && y1==y2-2)||(x1==x2-1 && y1==y2+2)||(x1==x2+1 && y1==y2+2)||(x1==x2-2 && y1==y2-1)||(x1==x2+2 && y1==y2-1)||(x1==x2-2 && y1==y2+1)||(x1==x2+2 && y1==y2+1)) 
          printf("figura betsja"); break;
 
default: printf("figura ne betsja"); break;
return;
}
getch();
}
1
rrrFer
Заблокирован
06.11.2009, 21:15 5
он должен работать если ввести в качесве номера фигуры число <1 или >6. Если введено число от 1 до 6 то выполняется тело одного из case и он не может попасть на default. Тело default можно вынести за switch, а при успешном выполнеии условия в case устанавливать флаг, если после switch флаг не установлен то выводим что фигура небьется.
1
Spirit102
2 / 2 / 0
Регистрация: 20.01.2009
Сообщений: 18
06.11.2009, 21:17  [ТС] 6
ясно.попробую
0
rrrFer
Заблокирован
06.11.2009, 21:24 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
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main(){
    char f;
    int x1, y1,x2,y2;
    bool flag;
    printf("Vvedite nomer figuru: \npeshka: 1\nladja : 2\nslon  : 3\nkorol : 4\nferz  : 5\nkon   : 6\n");
    scanf("%c",&f);
    printf("Vvedite koordinati 1 figuru (ot 1 do 8) \n");
    scanf("%d %d",&x1, &y1);
    printf("Vvedite koordinati 2 figuru (ot 1 do 8) \n");
    scanf("%d %d",&x2,&y2);
    flag=0;
    switch (f){
        case '1':
            if ((y1==y2+1 || y1==y2-1) && x1==x2-1)
                flag=1;
        break;
        case '2':
            if (x1==x2 || y1==y2)
               flag=1;
        break;
        case '3':
            if (fabs(x1-x2)==fabs(y1-y2))
                flag=1;
        break;
        case '4':
            if ((x1==x2 && y1==y2-1)||(x1==x2 && y1==y2+1)||(x1==x2-1 && y1==y2)||(x1==x2+1 && y1==y2)||(x1==x2+1 && y1==y2+1)||(x1==x2+1 && y1==y2-1)||(x1==x2-1 && y1==y2+1)||(x1==x2-1 && y1==y2-1))
                flag=1;
        break;
        case '5':
            if ((x1==x2 || y1==y2) || (fabs(x1-x2)==fabs(y1-y2)))
                flag=1;
        break;
        case '6':
            if ((x1==x2-1 && y1==y2-2)||(x1==x2+1 && y1==y2-2)||(x1==x2-1 && y1==y2+2)||(x1==x2+1 && y1==y2+2)||(x1==x2-2 && y1==y2-1)||(x1==x2+2 && y1==y2-1)||(x1==x2-2 && y1==y2+1)||(x1==x2+2 && y1==y2+1))
                flag=1;
        break;
    }
    printf((flag?"bjetsa":"nebjetsa"));
    getch();
    return 0;
}
можно так
1
Spirit102
2 / 2 / 0
Регистрация: 20.01.2009
Сообщений: 18
06.11.2009, 21:36  [ТС] 8
красиво)
1
rrrFer
Заблокирован
06.11.2009, 21:41 9
так вроде чуть-чуть красивей)) :
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
        #include <stdio.h>
#include <conio.h>
#include <math.h>
int main(){
    char f;
    int x1, y1,x2,y2;
    bool flag;
    printf("Vvedite nomer figuru: \npeshka: 1\nladja : 2\nslon  : 3\nkorol : 4\nferz  : 5\nkon   : 6\n");
    scanf("%c",&f);
    printf("Vvedite koordinati 1 figuru (ot 1 do 8) \n");
    scanf("%d %d",&x1, &y1);
    printf("Vvedite koordinati 2 figuru (ot 1 do 8) \n");
    scanf("%d %d",&x2,&y2);
    switch (f){
        case '1':
            flag=((y1==y2+1 || y1==y2-1) && x1==x2-1);
        break;
        case '2':
            flag=(x1==x2 || y1==y2);
        break;
        case '3':
            flag=(fabs(x1-x2)==fabs(y1-y2));
        break;
        case '4':
           flag=((x1==x2 && y1==y2-1)||(x1==x2 && y1==y2+1)||(x1==x2-1 && y1==y2)||(x1==x2+1 && y1==y2)||(x1==x2+1 && y1==y2+1)||(x1==x2+1 && y1==y2-1)||(x1==x2-1 && y1==y2+1)||(x1==x2-1 && y1==y2-1));
        break;
        case '5':
            flag=((x1==x2 || y1==y2) || (fabs(x1-x2)==fabs(y1-y2)));
        break;
        default:
           flag=((x1==x2-1 && y1==y2-2)||(x1==x2+1 && y1==y2-2)||(x1==x2-1 && y1==y2+2)||(x1==x2+1 && y1==y2+2)||(x1==x2-2 && y1==y2-1)||(x1==x2+2 && y1==y2-1)||(x1==x2-2 && y1==y2+1)||(x1==x2+2 && y1==y2+1));
        break;
    }
    printf((flag?"bjetsa":"nebjetsa"));
    getch();
    return 0;
}
1
Spirit102
2 / 2 / 0
Регистрация: 20.01.2009
Сообщений: 18
06.11.2009, 22:01  [ТС] 10
Еще хотел спросить:
Получается, void main() возвращать целое число не хочет?
Почему bool flag?(я с int делал)
И немного пояснить можете, про присвоение условий флагу?
0
rrrFer
Заблокирован
06.11.2009, 22:12 11
Цитата Сообщение от Spirit102 Посмотреть сообщение
Получается, void main() возвращать целое число не хочет?
если функция обьявлена как void то она не возвращает значение. main должно возвращать либо ноль(если успешно завершила работу) либо код ошибки.
Цитата Сообщение от Spirit102 Посмотреть сообщение
Почему bool flag?(я с int делал)
можно и int, но bool на несколько байт меньше
Цитата Сообщение от Spirit102 Посмотреть сообщение
И немного пояснить можете, про присвоение условий флагу?
присваиваем результат выполнения, тоесть либо 0 либо 1.
1
06.11.2009, 22:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2009, 22:12

лаба по Си++ подскажите как написать=)
Характеристикой столбца целочисленной матрицы назовем сумму модулей его...

Подскажите, как правильно написать
Здравствуйте! Подскажите, пожалуйста, как написать такой код правильно: ...

Подскажите как написать программу
не могу разобраться с логарифмом и корнем, помогите написать...


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

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

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