Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 13.02.2012, 04:34   #1
xamelion
Пользователь
 
Регистрация: 25.12.2009
Сообщений: 11
Репутация: 10
Вопрос шахматная доска

Здравствуйте!
Есть задача: дана шахматная доска размером NxN, нужно расставить N ферзей таким образом, чтобы они не атаковали друг друга.
Нашёл код, но при при компиляции выдаёт ошибку: fatal error C1083: Cannot open include file: 'stdafx.h': No such file or directory Error executing cl.exe. (фатальная ошибка C1083: не может открыться включенный файл: ''stdafx.h'').
Подскажите пожалуйста, как это можно исправить
Код:

#include "stdafx.h"
#include <iostream>
using namespace std;
void Initialization(int n, int ***x);
void Destruction(int n, int **x);
bool Queen(int n, int **x);
void Placement(int n, int **a, int *p, int *h, int *du, 
               int *dd, int i=0, int j=0);
 
int _tmain(int argc, _TCHAR* argv[]){
  int n, i, j;
  bool otv;
  int **mas;
  printf("Введите размер шахматной доски n : ");
  scanf ("%d",&n);
  Initialization(n,&mas);
  otv = Queen(n,mas);
  if ( otv ) printf("Правильное размещение найдено\n");
  else printf("Правильного размещения не найдено\n");
  Destruction(n,mas);
  system("pause");
  return 0;
}
 
//инициализация поля шахматной доски
void Initialization(int n, int ***x){ 
  *x = new int*[n]; 
  for (int i = 0 ; i < n; i++ ){
    (*x)[i] = new int[n];
    for (int j = 0 ; j < n ; j++ )
      (*x)[i][j] = 0;
  }
} 
 
//вывод найденной расстановки в файл
void Destruction(int n, int **x){ 
  FILE *f;
  if( ( f = fopen("out.txt","w") ) == NULL ){
    printf("Файл out.txt не может быть открыт для записи");
  }
    else{
      fprintf(f,"%d\n",n);
      for (int i = 0 ; i < n; i++ ){
        for (int j = 0 ; j < n ; j++ )
          fprintf(f,"%2d",x[i][j]);
        fprintf(f,"\n");
      }
    }
  for (int i = 0 ; i < n; i++ )
    delete [] x[i];
  delete [] x;
} 
 
//проверка возможности постановки ферзя
bool Queen(int n, int **x){
  bool rez = false;
  int *p, *h, *du, *dd;
  p = new int[n];
  h = new int[n];
  du = new int[2 * n - 1];
  dd = new int[2 * n - 1];
  for ( int i = 0 ; i < n ; i++ )
    p[i] = h[i] = 0;
  for ( int i = 0 ; i < (2 * n - 1) ; i++ )
    du[i] = dd[i] = 0;
  Placement(n,x,p,h,du,dd);
  if ( h[0] != 0 ) rez = true;
  delete [] dd, du, h, p;
  return rez;
}
 
//описание функции расстановки ферзей
void Placement(int n, int **a, int *p, int *h, int *du, 
               int *dd, int i, int j){
  if ( j >= 0 && j < n )
    if ( i < n )
      if (h[i]==0 && du[i+j] == 0 && dd[n+i-j-1] == 0 ) {
        h[i] = 1;
        du[i+j] = 1;
        dd[n+i-j-1] = 1;
        p[j] = i;
        a[i][j] = 1;
        Placement(n,a,p,h,du,dd,0,j+1);
      }
      else
        Placement(n,a,p,h,du,dd,i+1,j);
    else
      if ( j > 0 ) {
        h[p[j-1]] = 0;
        du[p[j-1]+j-1] = 0;
        dd[n+p[j-1]-(j-1)-1] = 0;
        a[p[j-1]][j-1] = 0;
        Placement(n,a,p,h,du,dd,p[j-1]+1,j-1);
      }
}

Вложения
Тип файла: rar листинг.rar (1.0 Кб, 5 просмотров)
xamelion вне форума   Ответить с цитированием
Старый 13.02.2012, 15:12   #2
MrCold
Пользователь
 
Регистрация: 23.12.2011
Сообщений: 17
Репутация: 21
По умолчанию

Цитата:
Cannot open include file: 'stdafx.h':
Значит уберите строчку :
Код:

#include "stdafx.h"

MrCold вне форума   Ответить с цитированием
Старый 13.02.2012, 18:32   #3
VIK_aka_TOR
Профессионал
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Адрес: Минск
Сообщений: 1,525
Репутация: 502

icq: 554461851
skype: lord_t0r
По умолчанию

вспомнились видеоуроки по с++... вот держи... решает такую же задачу...
Код:

// Урок 27
#include <iostream>
using namespace std;

int board[8][8];

void setQueen(int i, int j)
{
  for (int x = 0; x < 8; ++x)
  {
    ++board[x][j];
    ++board[i][x];
    int foo;
    foo = j - i + x;
    if (foo >= 0 && foo < 8)
      ++board[x][foo];
    foo = j + i - x;
    if (foo >= 0 && foo < 8)
      ++board[x][foo];
  }
  board[i][j] = -1;
}

void resetQueen(int i, int j)
{
  for (int x = 0; x < 8; ++x)
  {
    --board[x][j];
    --board[i][x];
    int foo;
    foo = j - i + x;
    if (foo >= 0 && foo < 8)
      --board[x][foo];
    foo = j + i - x;
    if (foo >= 0 && foo < 8)
      --board[x][foo];
  }
  board[i][j] = 0;
}

bool tryQueen(int i)
{
  bool result = false;
  for (int j = 0; j < 8; ++j)
  {
    if (board[i][j] == 0)
    {
      setQueen(i, j);
      if (i == 7)
	result = true;
      else
      {
	if (!(result = tryQueen(i + 1)))
	  resetQueen(i, j);
      }
    }
    if (result)
      break;
  }
  return result;
}

int main()
{
  for (int i = 0; i < 8; ++i)
    for (int j = 0; j < 8; ++j)
      board[i][j] = 0;
  tryQueen(0);
  for (int i = 0; i < 8; ++i)
  {
    for (int j = 0; j < 8; ++j)
    {
      if (board[i][j] == -1)
	cout << "[]";
      else
	cout << ". ";
    }
    cout << endl;
  }
}

а по поводу твоего... попробуй впихнуть его
Код:

#include <stdafx.h>

если при ковычках "" то он насколько я помю должен содержаться в папке с кодом, а так лежит с файлами в библиотеке... ии же почитай что это за библиотека... быть может это собственно ручно написаный файл... и подключается к проекту...
__________________
помог - жми на весы
материальная благодарность и помощь на WebMoney R313437261838 Z253842860285
пишу код не только за печеньки

Последний раз редактировалось VIK_aka_TOR; 13.02.2012 в 18:35.
VIK_aka_TOR вне форума   Ответить с цитированием
Старый 14.02.2012, 16:34   #4
xamelion
Пользователь
 
Регистрация: 25.12.2009
Сообщений: 11
Репутация: 10
По умолчанию

MrCold, если убрать строчку : #include "stdafx.h"
выдаёт ошибки в строках

Код:

#include <iostream>
using namespace std;
void Initialization(int n, int ***x);
void Destruction(int n, int **x);
bool Queen(int n, int **x);
void Placement(int n, int **a, int *p, int *h, int *du, 
               int *dd, int i=0, int j=0);
 
int _tmain(int argc, _TCHAR* argv[]){    // ошибка 1
  int n, i, j;
  bool otv;
  int **mas;
  printf("Введите размер шахматной доски n : ");
  scanf ("%d",&n);
  Initialization(n,&mas);
  otv = Queen(n,mas);
  if ( otv ) printf("Правильное размещение найдено\n");
  else printf("Правильного размещения не найдено\n");
  Destruction(n,mas);
  system("pause");
  return 0;
}
 

 

 
//проверка возможности постановки ферзя
bool Queen(int n, int **x){
  bool rez = false;
  int *p, *h, *du, *dd;
  p = new int[n];
  h = new int[n];
  du = new int[2 * n - 1];
  dd = new int[2 * n - 1];
  for ( int i = 0 ; i < n ; i++ )           // ошибка 3
    p[i] = h[i] = 0;
  for ( int i = 0 ; i < (2 * n - 1) ; i++ )  // ошибка 2
    du[i] = dd[i] = 0;
  Placement(n,x,p,h,du,dd);
  if ( h[0] != 0 ) rez = true;
  delete [] dd, du, h, p;
  return rez;
}

Ошибки
1: error C2061: syntax error : identifier '_TCHAR'
2: error C2374: 'i' : redefinition; multiple initialization
3: see declaration of 'i'
xamelion вне форума   Ответить с цитированием
Старый 14.02.2012, 17:37   #5
MrCold
Пользователь
 
Регистрация: 23.12.2011
Сообщений: 17
Репутация: 21
По умолчанию

Строки
Код:

#include "stdafx.h"

и
Код:

int _tmain(int argc, _TCHAR* argv[])

нужны вам если работаете в VisualStudio , в
оболочке CLR. Иначе просто записываете не
Код:

int _tmain(int argc, _TCHAR* argv[])

а
Код:

int   main()

MrCold вне форума   Ответить с цитированием
Старый 14.02.2012, 17:47   #6
MrCold
Пользователь
 
Регистрация: 23.12.2011
Сообщений: 17
Репутация: 21
По умолчанию

Цитата:
int _tmain(int argc, _TCHAR* argv[]){ // ошибка 1
int n, i, j;
bool otv;
int **mas;
Код:

  int n, i, j;    //      здесь переменные  i , j   вообще не  нужны .

MrCold вне форума   Ответить с цитированием
Старый 14.02.2012, 17:55   #7
MrCold
Пользователь
 
Регистрация: 23.12.2011
Сообщений: 17
Репутация: 21
По умолчанию

Цитата:
for ( int i = 0 ; i < n ; i++ ) // ошибка 3
p[i] = h[i] = 0;
for ( int i = 0 ; i < (2 * n - 1) ; i++ ) // ошибка 2
du[i] = dd[i] = 0;
Раз выдает ошибку ,уберите из цикла for объявление типа
Цитата:
//проверка возможности постановки ферзя
bool Queen(int n, int **x){
bool rez = false;
int i , *p, *h, *du, *dd;// объявим здесь
p = new int[n];
h = new int[n];
du = new int[2 * n - 1];
dd = new int[2 * n - 1];
for ( i = 0 ; i < n ; i++ )
p[i] = h[i] = 0;
for ( i = 0 ; i < (2 * n - 1) ; i++ )
du[i] = dd[i] = 0;
Placement(n,x,p,h,du,dd);
if ( h[0] != 0 ) rez = true;
delete [] dd, du, h, p;
return rez;
}
MrCold вне форума   Ответить с цитированием
Старый 15.02.2012, 18:48   #8
xamelion
Пользователь
 
Регистрация: 25.12.2009
Сообщений: 11
Репутация: 10
По умолчанию

MrCold, спасибо! Заработало!


А вот как увидеть расстановку самих ферзей? В Visual C++ нужно текстовый файл какой-то создать?
Изображения
Тип файла: jpg 777777.JPG (45.8 Кб, 22 просмотров)
xamelion вне форума   Ответить с цитированием
Старый 15.02.2012, 21:41   #9
MrCold
Пользователь
 
Регистрация: 23.12.2011
Сообщений: 17
Репутация: 21
По умолчанию

По идее файл создается автоматом .
Код:

 f = fopen("out.txt","w")

Он будет расположен в том же каталоге ,что и программа .
xamelion,
можно самому пустой файл создать,для удобства, в Блокноте ,сохранить
и указать путь в коде, тот по которому файл сохранен ,например:
Код:

 f = fopen("С:\\Users\\Documents\\out.txt","w")

Мне кажется так легче найти его и просмотреть содержимое .
MrCold вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
шахматная доска revaldo666 Общие вопросы C/C++ 4 11.01.2011 12:25
Шахматная доска!!! Евгений19 Помощь студентам 3 08.03.2010 21:02
Шахматная доска Настенька..Блонди Паскаль 2 15.05.2009 23:26
Шахматная доска Shevali Помощь студентам 4 03.04.2009 20:22
шахматная доска Irisha_17_85 Паскаль 4 04.11.2008 11:50




14:29.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
лучший хостинг
Выбираем лучший хостинг: рейтинг ТОП 10
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru