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

[C++] Еще одна про шахматы (колоквиум) Массив 8x8 и Ферзи - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Kill100
 Аватар для Kill100
359 / 248 / 33
Регистрация: 11.12.2010
Сообщений: 1,068
Завершенные тесты: 1
14.12.2010, 00:49     [C++] Еще одна про шахматы (колоквиум) Массив 8x8 и Ферзи #1
2 сутки с неё вожусь нечего не получается...

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
/*Задача 10.
Шахматную доску представить в виде квадратного символьного массива размером 8х8.
Позиция каждой шахматной фигуры определяется парой натуральных чисел, каждое из которых
не превосходит восьми: Первое число номер вертикали, второе число номер горизонтали при
счете с низу в верх. Даны натуральные числа a,b,c,d кажодое из которых не привосходит восьми.
Определить поля  (отметить знаком "+") на которые может пройти белый ферзь на поле (a,d) не
попав под удар черного ферзя  на поле (c,d)
*/
 
#include<conio.h>
#include<iostream.h>
 
 
int m=8,n=8;
//-----------------------------------------------------------------------------------
//Функция заполнения 2х мерного массива нулями
//----------------------------------------------------------------------------------- 
char** enter(){
 
    
 char **a=new char*[n];
     for (int i=0; i<m;i++){
      a[i]=new char [n];};
 
     
      for (int i=0; i<m; i++)
      {
          for (int j=0; j<n; j++)
         a[i][j]='.';
        } ;
return a;        
}
//-----------------------------------------------------------------------------------
//функция вывода 2х мерной матрици на экран
//-----------------------------------------------------------------------------------
void print(char**a){
      for (int i=0; i<m; i++)
      {
          for (int j=0; j<n; j++)
          cout<<a[i][j]<<" ";
          cout<<"\n";};
}
//-----------------------------------------------------------------------------------
//функция Заполнения ходами белого ферзя.
//-----------------------------------------------------------------------------------
void B_Ferz(char**mass, int a, int b){
     //провожу прямые линии
          for (int i=0; i<m; i++){
            if (mass[i][a-1]=='C') cout<<"\n Белый ферзь бьёт чёрного ферзя\n\n";
            if (mass[i][a-1]!='B') mass[i][a-1]='+';
              ;};
     //провожу прямые линии
     for (int j=0; j<n; j++){
            if (mass[8-b][j]=='C') cout<<"\n Белый ферзь бьёт чёрного ферзя\n\n";
            if (mass[8-b][j]!='B') mass[8-b][j]='+';
                ;}; 
 
//пытаюсь провести диагонали
                 a=a-1;
 
b=8-b;
         for (int i=0;i<8;i++)
             for (int j=0;j<8;j++){
                 if ((i+j==a+b) && (mass[i][j]!='B'))mass[i][j]='*';
                 if ((i-j==a-b) && (mass[i][j]!='B'))mass[i][j]='*';
                 };
          
     ;}
 
//-----------------------------------------------------------------------------------
//Главная функция проги
//-----------------------------------------------------------------------------------
int main (){
     char**mass;
     int a,b,c,d;
     mass=enter();
     eee:cout<<"Введите позицию белого ферзя (a,b) \n";//логику проги не портит
     cin>>a>>b;
     cout<<"Введите позицию чёрного ферзя (c,d) \n";
     cin>>c>>d;   
     if(a==c&&b==d){cout<<"Оба ферьзя нельзя поставить на одну клетку повторите ввод \n"; goto eee; }; //логику проги не портит
     if (a==0||b==0||c==0||d==0){cout<<"Введите числа от 1 до 8 \n\n"; goto eee; }; //логику проги не портит
//с низу в верх и что бы счет был не с 0 а с 1
     mass[8-b][a-1]='B';
     mass[8-d][c-1]='C';
     print(mass);
     system("pause");
     //Заполняю поле ходами белого ферзя. Вызывая функцию.
     B_Ferz(mass,a,b);
     print(mass);//Печать полученного массива на экран.         
                
 
  
                
     
     system("pause");
     return 0; 
 }
Добавлено через 6 часов 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
124
125
/*Задача 10.
Шахматную доску представить в виде квадратного символьного массива размером 8х8.
Позиция каждой шахматной фигуры определяется парой натуральных чисел, каждое из которых
не превосходит восьми: Первое число номер вертикали, второе число номер горизонтали при
счете с низу в верх. Даны натуральные числа a,b,c,d кажодое из которых не привосходит восьми.
Определить поля  (отметить знаком "+") на которые может пройти белый ферзь на поле (a,d) не
попав под удар черного ферзя  на поле (c,d)
*/
#include<conio.h>
#include<iostream.h>
int g=8; //размер 8 на 8 так как квадратная.
//-------------------------------------------------------------------------------
//Функция вывода матрици на экран.
//-------------------------------------------------------------------------------
void print(char**a){
      for (int i=0; i<g; i++)
      {
          for (int j=0; j<g; j++)
          cout<<a[i][j]<<" ";
          cout<<"\n";};
}
 
//-------------------------------------------------------------------------------
//Функция создания символьного массива и забития его точками.
//-------------------------------------------------------------------------------
char** enter(){
       char **a=new char*[g];
       for (int i=0; i<g;i++)
       {
           a[i]=new char [g];
           };
      
      for (int i=0; i<8; i++){
          for (int j=0; j<8; j++)
              a[i][j]='.';
        };
return a;
}
//-------------------------------------------------------------------------------
//Создадим функцию для координат белого ферзя и его перемещений.
//-------------------------------------------------------------------------------
void B_Ferz (char**mass, int a, int b){
    a=a-1;
    b=8-b;
    //Назавем белого ферзя буквой B
    mass[a][b]='B';
    for (int i=0;i<g;i++)
        for (int j=0;j<g;j++){
            //Здесь применяем свойство диаганалей.
            if ((i==a)||(j==b)) mass[i][j]='+';
            if ((i+j==a+b))     mass[i][j]='+';
            if ((i-j==a-b))     mass[i][j]='+';
        }; 
}
 
 
//-------------------------------------------------------------------------------
//Создадим функцию для координат черного ферзя и его перемещений.
//-------------------------------------------------------------------------------
void C_Ferz (char**mass, int c, int d){
    c=c-1;
    d=8-d;
    //Назавем белого черного буквой C
     for (int i=0;i<g;i++)
        for (int j=0;j<g;j++){
            //Здесь применяем свойство диаганалей.
            if ((i==c)||(j==d))  mass[i][j]='-';
            if ((i+j==c+d))      mass[i][j]='-';
            if ((i-j==c-d))      mass[i][j]='-';
        }; 
}
 
 
 
 
int main(){
    int a,b,c,d; 
    char **mass;
    mass=enter();
    eee:cout<<"Введите Координаты белого ферзя \n";  
    cin>>a>>b;
    cout<<"Введите Координаты черного ферзя \n";  
    cin>>c>>d;
    
    if(a==c&&b==d){cout<<"Оба ферьзя нельзя поставить на одну клетку повторите ввод \n"; goto eee; }; //логику проги не портит
    //если число меньше или авно 0 то не удовлетворяет условию отсылаем на повторный запрос. 
    //Говорят что настоящие программеры не юзают goto а тогда для чего он есть в списке комманд всех языков программирования?
     if ( (a<=0||b<=0||c<=0||d<=0) || (a>8||b>8||c>8||d>8) )  {cout<<"Введите числа от 1 до 8 \n\n"; goto eee; }; //логику проги не портит
    
   
    cout<<"\n";
    
    //Просто рисуем сами фигуры С это черный ферзь
    //В это белый
    mass[c-1][8-d]='C';
    mass[a-1][8-b]='B';  
    print(mass);
    //Ждем действия пользователя
system("pause");
    cout<<"\n";  
    //Здесь проверяем на условия расположения на одной диагонали или одной строке (столбце)
    if(   ((a-b)==(c-d))   ||   ((a==c)||(b==d))   ){
          cout<<"Белый ферзь СРУБИЛ ЧЁРНОГО ФЕРЗЯ!!!! \n";
          //рисуем движения ферзя и опять его лепим на этот рисунок (так как в рисунке лень 
          //заводить условие что бы не стирал сам себя значками)
          B_Ferz(mass,a,b); mass[a-1][8-b]='B'; 
          print(mass);
          system("pause");
          //выходим из проги совсем
          return 0; };
//Ну а тут если не удовлетворяет верхнеу словию поедания продолжаем прогу
    //рисуем координаты возможного перемещения черного ферзя
    C_Ferz(mass,c,d);
    //Рисуем координаты возможного перемещения белого ферзя
    B_Ferz(mass,a,b);
    //накладывем сами фигуры на рисунок
    mass[c-1][8-d]='C';
    mass[a-1][8-b]='B';
    cout<<"\n";
    //Выводим картинку на экран
    print(mass);
    //ждем реакцию юзвера
system("pause");
//конец проги.
return 0;}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2010, 00:49     [C++] Еще одна про шахматы (колоквиум) Массив 8x8 и Ферзи
Посмотрите здесь:

C++ Еще одна мизерная прога
Нужна еще одна информация C++
C++ Задача про шахматы
C++ И еще одна задача по С++...
помогите с задачей про шахматы! не сложная...но сделать не могу.. C++
и еще одна задача на последовательности C++
C++ я решил задачу про шахматы посмотрите ошибку
Еще одна задача на класс C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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