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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
Spirit102
2 / 2 / 0
Регистрация: 20.01.2009
Сообщений: 18
#1

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

23.10.2009, 10:06. Просмотров 1773. Ответов 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(); 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2009, 10:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шахматы. Подскажите, как написать ферзя. (C++):

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

Написать консольные шахматы - C++
Происходит шахматная партия. Шахматная доска имеет размер 8x8. При этом координаты фигуры задаются в шахматной нотации, то есть состоят...

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

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

Подскажите как написать программу - C++
не могу разобраться с логарифмом и корнем, помогите написать g=x*Ln(\frac{2x}{b})cos{}^{2}a a=0.3, b=0.05 Редактор формул внизу...

подскажите, как написать уравнение - C++
подскажите, как написать уравнение

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kravam
быдлокодер
1694 / 881 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
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 это абсолютное значение. Вот подключил ещё и библиотеку дополнительную математическую
Spirit102
2 / 2 / 0
Регистрация: 20.01.2009
Сообщений: 18
24.10.2009, 17:24  [ТС] #3
Пасиб))
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();
}
rrrFer
Заблокирован
06.11.2009, 21:15 #5
он должен работать если ввести в качесве номера фигуры число <1 или >6. Если введено число от 1 до 6 то выполняется тело одного из case и он не может попасть на default. Тело default можно вынести за switch, а при успешном выполнеии условия в case устанавливать флаг, если после switch флаг не установлен то выводим что фигура небьется.
Spirit102
2 / 2 / 0
Регистрация: 20.01.2009
Сообщений: 18
06.11.2009, 21:17  [ТС] #6
ясно.попробую
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;
}
можно так
Spirit102
2 / 2 / 0
Регистрация: 20.01.2009
Сообщений: 18
06.11.2009, 21:36  [ТС] #8
красиво)
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;
}
Spirit102
2 / 2 / 0
Регистрация: 20.01.2009
Сообщений: 18
06.11.2009, 22:01  [ТС] #10
Еще хотел спросить:
Получается, void main() возвращать целое число не хочет?
Почему bool flag?(я с int делал)
И немного пояснить можете, про присвоение условий флагу?
rrrFer
Заблокирован
06.11.2009, 22:12 #11
Цитата Сообщение от Spirit102 Посмотреть сообщение
Получается, void main() возвращать целое число не хочет?
если функция обьявлена как void то она не возвращает значение. main должно возвращать либо ноль(если успешно завершила работу) либо код ошибки.
Цитата Сообщение от Spirit102 Посмотреть сообщение
Почему bool flag?(я с int делал)
можно и int, но bool на несколько байт меньше
Цитата Сообщение от Spirit102 Посмотреть сообщение
И немного пояснить можете, про присвоение условий флагу?
присваиваем результат выполнения, тоесть либо 0 либо 1.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2009, 22:12
Привет! Вот еще темы с ответами:

Подскажите, как правильно написать - C++
Здравствуйте! Подскажите, пожалуйста, как написать такой код правильно: class Example { public: Example(int...

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.11.2009, 22:12
Ответ Создать тему
Опции темы

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