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

Расставить 8 ферзей на шахматной доске 8 на 8, которые не бьют друг друга - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ ifstream читает файл со второй строки http://www.cyberforum.ru/cpp-beginners/thread724479.html
Добрый день, читаю файл через fstream и записываю его, запись идет только со второй строки, не могу понять почему #include <iostream> #include <cctype> #include <fstream> #include <string> #define COLS 80 using namespace std; int replace(char*, char*);
C++ Одномерные динамические массивы (осуществить ввод, проверку, вывод результатов) Очень прошу помочь с написанием этой программы.Говорят что легкая но у меня никак не выходит.Частями вроде бы получается, однако все детали, предложенные здесь, сделать не могу :( Одномерные массивы Память под массивы выделяется динамически. Необходимо: - осуществить проверку на правильность ввода размерности массивов. Массивы должны состоять не менее, чем из одного элемента; - ... http://www.cyberforum.ru/cpp-beginners/thread724473.html
C++ Ошибка инициализации объекта, конструктором класса
Добрый день. Написал программу. Создание класса (упражнение из книги Дейтеля) "Создайте класс с именем Account, которым мог бы воспользоваться банк для представления банковских счетов своих клиентов. Ваш класс должен иметь один элемент данных типа int для представления банковского баланса. Класс должен предусматривать конструктор, принимающий начальный баланс, используемый для инициализации...
C++ Структуры (напечатать самое распространенное женское имя)
Приветствую! Всем хорошего настроения! Только вот у меня его совсем нет..... Сессия на носу, необходимо последнюю лабораторку допинать, а не получается:( Если кто нибудь поможет, буду очень благодарен. Задание выглядит так: На основе таблицы, содержащей следующую информацию о каждом из 20 студентов некоторого ВУЗА:фамилия,имя,отчество,пол,возраст,курс причем в фамилии, имени и отчестве-не...
C++ Прерывания http://www.cyberforum.ru/cpp-beginners/thread724426.html
Друзья, вот архив с DOC-ким файлом, помогите реализовать программу,задание под пунктом ПРИМЕР ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ
C++ Удаление рядков и столбцов в матрице Есть матрица, нужно удалить те рядки и столбцы в которих есть нулевой елемент. Например из матрицы 3 2 -3 0 4 4 0 2 -1 1 2 3 -1 -3 2 получаем 3 -3 4 подробнее

Показать сообщение отдельно
System16v
3 / 3 / 0
Регистрация: 19.02.2014
Сообщений: 115
08.04.2015, 16:59
Ребят,ну подскажите пожалуйста по коду.В книге Дейтела дошел жо этой задачи.Начал писать код насколько понял задачу.Сначала была загвоздка при установке ходов по диагонали(не мог правильно границы массива обозначить),но потом увидел условие в инете,и понял как это сделать. Пытался сделать через рандомные координаты.Программа запускается,НО,не знаю в чем косяк ,если программа, я так понимаю с 3-5 попыток не получает результат,то она попросту виснет наверное(сколько времени не ждал,ничего не изменилось),или цикл зацикливается.Не могу понять почему. Вот код,пояснения написал,может я условие обнуления массива неправильно как-то задал?Ума не приложу где косяк,из-за чего он виснет.Пытался условие обнуления и так и этак менять,все равно зависает,если не получилось сразу . Подскажите пожалуйста начинающему . В данном примере цикл вайл стоит не равным 7ми,т.е. установка 7 ферзей делается.Если поставить для 8ми ферзей,ни разу не получалось увидеть результат.Но видел результат когда выдавал ответ для 7ми ферзей и было 1 пустое место как раз для 8го ферзя.
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
126
127
128
#include <iostream>
#include <vcl.h>
#include <iomanip>
#include <cstdlib>
#include <string>
 
using namespace std;
 
int main()
{
  const int size=8;
  char array[size][size]={0};
  int x,y,c=0,z=0,t=0,e=0;
  srand(time(0));
 
 
 
  for(int i=0;i<size;i++)    // замена всех элементов массива на "-"
     for(int j=0;j<size;j++)
        array[i][j]='-';
  // координаты начальные
  x=0;
  y=0;
  // установка доступных ходов ферзя меняем на "*"
  for(int i=0;i<size;i++)
  {
     array[x][i]='*';
     array[i][y]='*';
  }
  for(int i=0;i<size;i++)
  {
   int k=0;
   k=y-i+x;
   if(k>=0&&k<size)
      array[i][k]='*';
   k=y+i-x;
   if(k>=0&&k<size)
      array[i][k]='*';
  }
  array[x][y]='f';    // меняем символ координаты на символ ферзя
 
  while(z!=7) // установка остальных ферзей
  {
  // если на последнем проходе цикл не завершился,
  // или кол-во доступных ходов равно 0
  // обнуляем массив и устанавливаем заново 1го ферзя в точку 0 0,
    if(t==6||c==0)
    {
      for(int i=0;i<size;i++)
         for(int j=0;j<size;j++)
            array[i][j]=='-';
      x=0;
      y=0;
      for(int i=0;i<size;i++)
      {
       array[x][i]='*';
       array[i][y]='*';
      }
      for(int i=0;i<size;i++)
      {
       int k=0;
       k=y-i+x;
       if(k>=0&&k<size)
          array[i][k]='*';
       k=y+i-x;
       if(k>=0&&k<size)
          array[i][k]='*';
      }
      array[x][y]='f';
      t=0;               // сбрасываем счетчик проходов заново в 0
      e++;               // количество сделанных сбросов
      }
    // выбираем рандомные координаты
    x=rand()%7+1;
    y=rand()%7+1;
     // если по кординатам у нас "*" или "-",пропускаем остальной цикл
     // и выбираем опять рандомные координаты
    if(array[x][y]=='*'||array[x][y]=='f')
       continue;
    for(int i=0;i<size;i++)
    // если координата пуста, то ставим ферзя и рисуем его ходы
    {
     array[x][i]='*';
     array[i][y]='*';
    }
    for(int i=0;i<size;i++)
    {
     int k=0;
     k=y-i+x;
     if(k>=0&&k<size)
        array[i][k]='*';
     k=y+i-x;
     if(k>=0&&k<size)
        array[i][k]='*';
    }
    array[x][y]='f';  // на месте координаты новой,ставил символ ферзя
    c=0;z=0;          // обнуляем счетчик пустых символов и количество ферзей
    for(int i=0;i<size;i++)
    {
       for(int j=0;j<size;j++)
          {
          if(array[i][j]=='-')
             c++;              // считаем кол-во пустых символов
          if(array[i][j]=='f')
             z++;             // считаем кол-во ферзей
          }
    }
    t++;                   // прибавляем к счетчику проходов единицу
 }
 
 
 
  cout << "  0" << " 1" << " 2" << " 3" << " 4" << " 5"
       << " 6" << " 7 " << endl;
  for(int i=0;i<size;i++)
  {
  cout << i << " ";
  for(int j=0;j<size;j++)
        cout << array[i][j] << " ";
  cout << endl;
  }
  cout << "\n\nPustie simvoli = "<<c<<endl;
  cout << "Kolichesto hodov - "<< t+1
       << "\nObnylali massiv = " << e << " raz(a) " << endl;
  cout <<endl;
  system("pause");
  return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru