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

Король и ферзи - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ exception handline. Strange mistake http://www.cyberforum.ru/cpp-beginners/thread600683.html
В самом конце после того как компелятор отработал перед тем как выйти выдает ошибку "Windows has triggered a breakpoint in _project name_.exe. This may be due to a corruption of the heap,...
C++ удаление лишних пробелов Составить программу, которая для каждого слова введенного предложения определяет, является ли оно целым десятичным числом (м. б. Со знаком) и результат заносит в дополнительную строку. #include... http://www.cyberforum.ru/cpp-beginners/thread600680.html
C++ Требуется решение
Решите, пожалуйста в Borland C++ Две окружности. Проверить лежит ли окружность {(x-a1)}^{2}+{(y-b1)}^{2}={r1}^{2} целиком внутри окружности {(x-a2)}^{2}+{(y-b2)}^{2}={r2}^{2} или наоборот.
Считывание символов и задачки порешать если кто знает C++
Учил Си с начала только что окончившегося учебного года) Это мой первый язык программирования! Последняя написанная мной программа была Записная книжка, а именно: #include <string.h> #include...
C++ Дан текстовый файл (файл для чтения во вложениях) с упрощённым каталогом выставки собак. http://www.cyberforum.ru/cpp-beginners/thread600672.html
ЗАДАНИЕ ПО ЭКЗАМЕНУ ПО ПРОГРАММИРОВАНИЮ НА ЯЗЫКЕ С++ (можно писать и на С. не запрещается) Всё по сабжу ниже. Дан текстовый файл (файл для чтения во вложениях) с упрощённым каталогом выставки...
C++ Подсчитать количество элементов матриц Подсчитать количество элементов матриц Х(5,4) и У(3,5),удовлетворяющих условиям a<=x<=b и a<=y<=b .Количество элементов вычислить в функции.Предусмотреть функцию формирования элементов матрицы.Help... подробнее

Показать сообщение отдельно
S9
Волшебник
645 / 248 / 38
Регистрация: 18.12.2010
Сообщений: 541
10.06.2012, 14:00
lenalena, извини, что так долго. Просто после экзамена отрубился и почти сутки проспал(((

вот код
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
/** На шахматной доске находятся король и несколько ферзей другого цвета. 
Проверить находится ли король под угрозой и если да, кто ему угрожает. 
Положение фигур задано массивом К(8,8). 0-клетка пуста, 1-король, 2-ферзь. 
Ферзь бьет по горизонтали, вертикали и диагоналям. */
 
#include <iostream>
#include <fstream>
#include <vector>
 
#define IN_DATA_FILE_NAME "in.txt"
#define SIZE_M 8
#define SIZE_N 8
 
int main(int argc, char ** argv)
{
  int king_i, king_j; /** это координаты короля */
  std::vector< std::pair<int, int> > queen; /** создаем вектор из пар, для хранения координат ферзей */
  bool killKing = false; /** есть короля можно выпилить, то TRUE, если нельзя - то FALSE */
  
  int **K = new int * [SIZE_M]; /** этот массив - есть поле, где стоят фигуры */
  for(int i = 0; i < SIZE_N; i++) /** выделяем память под массив */
    K[i] = new int[SIZE_N];
  
  std::ifstream in(IN_DATA_FILE_NAME);
  
  for(int i = 0; i < SIZE_M; i++, std::cout << std::endl) /** Записываем массив из файла */
    for(int j = 0; j < SIZE_N; j++)
    {
      in >> K[i][j];
      std::cout << K[i][j] << " ";
      switch (K[i][j])
      {
        case 1 : { king_i = i; king_j = j; }; break; /** записываем координаты короля */
        case 2 : { queen.push_back(std::pair<int, int>(i, j)); }; break; /** записываем координаты ферзя в queen */
      }
    }  
  in.close(); /** т.к. файл больше нам не нужен, то закрываем его */
  
  /** для наглядности выводим координаты короля и ферзей */
  std::cout << "King -> " << king_i << " : " << king_j << "\n";
  for(int i = 0; i < queen.size(); i++)
    std::cout << "Queen " << i + 1 << " -> " << queen[i].first << " : " << queen[i].second << "\n";
    
  for(int i = 0; i < queen.size(); i++) /** теперь перебираем массив ферзей и проверям на то, может ли ферзь кокнуть короля */
  if ((king_i == queen[i].first) ||   /** это условие, может ли ферзь минусануть короля */
      (king_j == queen[i].second) || 
      (king_i - king_j == queen[i].first - queen[i].second) || 
      (king_i + king_j == queen[i].first + queen[i].second)) 
  {
    killKing = true; /** если короля можно завалить, то ставим флаг в true */
    break;          /** и выходим из цикла, т.к. это достаточно что один ферзь может убить короля. */
  }
  
  if (killKing)
    std::cout << "Король трупэ!" << std::endl;
  else
    std::cout << "Король будет жить!" << std::endl;
  
  for(int i = 0; i < SIZE_N; i++) /** освбождаем память, выделенную по массив */
    delete [] K[i];
  delete [] K;
  
  return 0;
}
Пример работы на скриншоте
Под Windows компилируется аналогично, только запуск приложение будет не ./a.out а просто а или a.exe

P.S. Только незнаю, почему Вам не воспользоваться кодом Кот Ангенс...
1
Миниатюры
Король и ферзи  
Вложения
Тип файла: zip S9.zip (7.3 Кб, 6 просмотров)
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru