Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите пожалуйста с программой на С++, чего то не могу разобраться с чего ее начать.

85K
08 ноября 2013 года
Диктатор
12 / / 25.10.2013
Поле шахматной доски задается парой натуральных чисел: первое указывает номер вертикали при счете снизу вверх. Расстановка фигур задается таким образом, что пользователь определяет вначале поля, на которых стоят перечисленные белые фигуры, затем поля - на которых стоят перечисленные черные фигуры. На доске стоят белый ферзь, белая ладья и черный ферзь. Составить программу, которая укажет поля, на которые может пойти черный ферзь, чтобы не попасть под удар белых.
89K
15 ноября 2013 года
PaulKraw
2 / / 15.11.2013
#include "stdafx.h"
#include <iomanip> //- библиотека в которой имеются функции для выравнивания, при выводе в коде есть setw(x) - х - кол-во символов заданных для вывода.
#include <iostream>
#include <cstdlib>
using namespace std;
#define SIZE 8 //означает что выражение SIZE это число 8, то есть где имеется слово SIZE то программа вместо СИЗЕ видить 8
char Desk[SIZE][SIZE]; //создаем двумерный массив символов, то бишь шахматную доску где клетка это символ

void DeskCompare()
{//заполнение доски точками
for (int i = 0; i < SIZE; ++i)
for (int j = 0; j < SIZE; ++j)
Desk[j] = '.';
}

void klpdb(char c, int i, int j)//С - параметр указывающий какой символ нужноиспользовать, i j координаты
{
if (c=='*') {//если указана звезда, то надо ставить звездочку
if (Desk[j] == '.') Desk[j]='*';}//все просто - если в клетке стоит точка то меняет на звездочку, если там другие символы то ничего не делает
if (c=='$')//если нужно указать ходы черному ферзю
{ if (Desk[j]=='.') Desk[j]='$';} //также ставим знак бакса только там где точка, так как поля со звездами не подходят
}


void QSet(unsigned short i, unsigned short j)
{
//проверка значений
if (((i < 0 || i > 7) && (j < 0 || j > 7)) || Desk[j] == 'C')//если значения не находятся в диапазоне от 0 до 7 или координаты совпадают с координатами ладьи
{
cout << "Wrong distance!n";//то послать все к черту ибо ошибка, так как значения не находятся в нужном диапазоне, не "неправильный ход" а не правильное значение ферзь не может стоять на координате х=9 у=-4
exit(0); //выход
}

int y = i;
int x = j;
Desk[y][x] = 'Q';//ставим белого короля на заданные координаты
//дальше начинается расчет возможных ходов, во все стороны
// По диагонали сверху вниз слева направо.

// (++у - начинаем со значения равного у+1; цикл работает пока У меньше 8 и Х меньше 8; прибавлять к Х и У по еденице)
for (++y, ++x; y < SIZE && x < SIZE; ++y, ++x)
{
klpdb('*',x,y); // Х и У координаты в которой нужно поставить *
}

// По диагонали снизу вверх слева направо.
y = i;
x = j;
for (--y, ++x; y >= 0 && x < SIZE; --y, ++x)
{
klpdb('*',x,y);
}

// По диагонали сверху вниз справа налево.
y = i;
x = j;
for (++y, --x; y < SIZE && x >= 0 ; ++y, --x)
{
klpdb('*',x,y);
}

// По диагонали снизу вверх слева направо.
y = i;
x = j;
for (--y, --x; y >= 0 && x >= 0; --y, --x)
{
klpdb('*',x,y);
}

// горизонтль.
y = i;
x = j;
for (x=0; x < SIZE; x++)
{
klpdb('*',x,y);
}
// вертикаль.
y = i;
x = j;
for (y=0; y < SIZE; y++)
{
klpdb('*',x,y);
}

}

void CSet(unsigned short i, unsigned short j)
{
if ((i < 0 || i > 7) && (j < 0 || j > 7)) //если значения не находятся в диапазоне от 0 до 7
{
cout << "Wrong distance!n"; //то поясняет об ошибке
exit(0);//ВЫХОД
}

int y = i; //присвоение координат к другой переменной ибо x и y будут меняться а i j нет
int x = j;
Desk[y][x] = 'C'; //присвоение клетке с координатами у х занчение С, то есть там стоит ладься Castel

// По горизонтали.
for (int х=0; x < SIZE; x++)
klpdb('*',x,y);
// По вертикали.
x = j;
for (y=0; y < SIZE; y++)
klpdb('*',x,y);
}

void qSet(unsigned short i, unsigned short j) //черный ферзь
{
if (((i < 0 || i > 7) && (j < 0 || j > 7)) || (Desk[j] == 'C' || Desk[j] == 'Q'))//аналог выше
{
cout << "Wrong distance!n";
exit(0);
}

int y = i;
int x = j;
Desk[y][x] = 'q';

// По диагонали сверху вниз слева направо.
for (++y, ++x; y < SIZE && x < SIZE; ++y, ++x)
{
klpdb('$',x,y);}

// По диагонали снизу вверх слева направо.
y = i;
x = j;
for (--y, ++x; y >= 0 && x < SIZE; --y, ++x)
{
klpdb('$',x,y);
}

// По диагонали сверху вниз справа налево.
y = i;
x = j;
for (++y, --x; y < SIZE && x >= 0; ++y, --x)
{
klpdb('$',x,y);
}

// По диагонали снизу вверх слева направо.
y = i;
x = j;
for (--y, --x; y >= 0 && x >= 0; --y, --x)
{
klpdb('$',x,y);
}

// По горизонтали.
y = i;
x = j;
for (x=0; x < SIZE; x++)
{
klpdb('$',x,y);
}



// По вертикали.
y = i;
x = j;
for (y=0; y < SIZE; y++)
{
klpdb('$',x,y);
}
}

void line()
{
cout<<endl<<" -----------------------------------";
}

void ShowDesk() //функция красивого вывода с использованием библиотеки иоманип, все правильно расчитано и соответсвует введенным координатам - по горизонтали х по вертикали У
{//можешь поэксперементировать

cout<<endl<<setw(2)<<" |";
for(int q=1;q<=8;q++)cout<<setw(2)<<q<<" |";
cout<<" <= X";
for (int q=7;q>=0;q--)
{for (int e=1;e>=36;e++) {cout<<"_";}
line();
cout<<endl<<setw(2)<<q+1<<" |";

for(int w=0;w<=7;w++)
{ cout<<setw(2)<<Desk[w][q]<<" |";

}
}
line();
cout<<endl<<" ^"<<endl<<" Y"<<endl<<endl;
}



void FirstCoo(){

int x, y;
cout << "Enter coordinatest White Castel:";
cout<<"x = "; cin >> x;
cout<<"y = "; cin >> y;
CSet( x-1,y-1); //так как в начале показана доска 8х8 а в массиве используется диапазон от 0 до 7 то -1

cout << "Enter coordinatest White Queen:;
cout<<"x = "; cin >> x;
cout<<"y = "; cin >> y;
QSet( x-1,y-1);

cout << "Enter coordinatest Black Queen:;
cout<<"x = "; cin >> x;
cout<<"y = "; cin >> y;
qSet( x-1,y-1);


}

int main()
{
DeskCompare();
ShowDesk();
FirstCoo();


cout<<endl;
ShowDesk();
system("pause");
return 0;

}
63K
08 ноября 2013 года
Max1548
13 / / 10.12.2011
Массив поля сделай, заполни его, затем просчитай, куда бьют белые,.
Есть вариант массив структур.
85K
09 ноября 2013 года
Диктатор
12 / / 25.10.2013
#include <iostream>
#include <cstdlib>

#define SIZE 8

char Desk[SIZE][SIZE];

void DeskCompare()
{
for (int i = 0; i < SIZE; ++i)
for (int j = 0; j < SIZE; ++j)
Desk[j] = '.';
}

void ShowDesk()
{
std::cout << 'n';
for (int i = 0; i < SIZE; ++i)
for (int j = 0; j < SIZE; ++j)
{
if (Desk[j] == '*')
std::cout << ".|";
else
std::cout << Desk[j] << '|';
if (j % 8 == 7)
std::cout << 'n';
}
std::cout << 'n';
}

bool DisasterQ(int i, int j)
{
if (Desk[j] == 'C')
return true;
return false;
}

bool Disasterq(int i, int j)
{
if (Desk[j] == 'C' || Desk[j] == 'Q')
return true;
return false;
}

void QSet(unsigned short i, unsigned short j)
{
if (((i < 0 || i > 7) && (j < 0 || j > 7)) || Desk[j] == 'C')
{
std::cout << "Wrong distance!n";
exit(0);
}

int y = i;
int x = j;
Desk[y][x] = 'Q';

// По диагонали сверху вниз слева направо.
for (++y, ++x; y < SIZE && x < SIZE; ++y, ++x)
{
if (DisasterQ(y, x))
break;
Desk[y][x] = '*';
}

// По диагонали снизу вверх слева направо.
y = i;
x = j;
for (--y, ++x; y >= 0 && x < SIZE; --y, ++x)
{
if (DisasterQ(y, x))
break;
Desk[y][x] = '*';
}

// По диагонали сверху вниз справа налево.
y = i;
x = j;
for (++y, --x; y < SIZE && x >= 0 ; ++y, --x)
{
if (DisasterQ(y, x))
break;
Desk[y][x] = '*';
}

// По диагонали снизу вверх слева направо.
y = i;
x = j;
for (--y, --x; y >= 0 && x >= 0; --y, --x)
{
if (DisasterQ(y, x))
break;
Desk[y][x] = '*';
}

// По горизонтали вперёд.
y = i;
x = j;
for (++x; x < SIZE; ++x)
{
if (DisasterQ(y, x))
break;
Desk[y][x] = '*';
}

// По горизонтали назад.
y = i;
x = j;
for (--x; x >= 0; --x)
{
if (DisasterQ(y, x))
break;
Desk[y][x] = '*';
}

// По вертикали вниз.
y = i;
x = j;
for (++y; y < SIZE; ++y)
{
if (DisasterQ(y, x))
break;
Desk[y][x] = '*';
}

// По веритикали вверх.
y = i;
x = j;
for (--y; y >= 0; --y)
{
if (DisasterQ(y, x))
break;
Desk[y][x] = '*';
}
}

void CSet(unsigned short i, unsigned short j)
{
if ((i < 0 || i > 7) && (j < 0 || j > 7))
{
std::cout << "Wrong distance!n";
exit(0);
}

int y = i;
int x = j;
Desk[y][x] = 'C';

// По горизонтали вперёд.
for (++x; x < SIZE; ++x)
Desk[y][x] = '*';

// По горизонтали назад.
y = i;
x = j;
for (--x; x >= 0; --x)
Desk[y][x] = '*';

// По вертикали вниз.
y = i;
x = j;
for (++y; y < SIZE; ++y)
Desk[y][x] = '*';

// По веритикали вверх.
y = i;
x = j;
for (--y; y >= 0; --y)
Desk[y][x] = '*';
}

void qSet(unsigned short i, unsigned short j)
{
if (((i < 0 || i > 7) && (j < 0 || j > 7)) || (Desk[j] == 'C' || Desk[j] == 'Q'))
{
std::cout << "Wrong distance!n";
exit(0);
}

int y = i;
int x = j;
Desk[y][x] = 'q';

// По диагонали сверху вниз слева направо.
for (++y, ++x; y < SIZE && x < SIZE; ++y, ++x)
{
if (Disasterq(y, x))
break;
if (Desk[y][x] != '*')
Desk[y][x] = '$';
}

// По диагонали снизу вверх слева направо.
y = i;
x = j;
for (--y, ++x; y >= 0 && x < SIZE; --y, ++x)
{
if (Disasterq(y, x))
break;
if (Desk[y][x] != '*')
Desk[y][x] = '$';
}

// По диагонали сверху вниз справа налево.
y = i;
x = j;
for (++y, --x; y < SIZE && x >= 0; ++y, --x)
{
if (Disasterq(y, x))
break;
if (Desk[y][x] != '*')
Desk[y][x] = '$';
}

// По диагонали снизу вверх слева направо.
y = i;
x = j;
for (--y, --x; y >= 0 && x >= 0; --y, --x)
{
if (Disasterq(y, x))
break;
if (Desk[y][x] != '*')
Desk[y][x] = '$';
}

// По горизонтали вперёд.
y = i;
x = j;
for (++x; x < SIZE; ++x)
{
if (Disasterq(y, x))
break;
if (Desk[y][x] != '*')
Desk[y][x] = '$';
}

// По горизонтали назад.
y = i;
x = j;
for (--x; x >= 0; --x)
{
if (Disasterq(y, x))
break;
if (Desk[y][x] != '*')
Desk[y][x] = '$';
}

// По вертикали вниз.
y = i;
x = j;
for (++y; y < SIZE; ++y)
{
if (Disasterq(y, x))
break;
if (Desk[y][x] != '*')
Desk[y][x] = '$';
}

// По веритикали вверх.
y = i;
x = j;
for (--y; y >= 0; --y)
{
if (Disasterq(y, x))
break;
if (Desk[y][x] != '*')
Desk[y][x] = '$';
}
}

int main()
{
int x, y;

DeskCompare();

std::cout << "Enter coordinatest White Castel:nx = ";
std::cin >> x;
std::cout << "y = ";
std::cin >> y;
CSet(y, x);

std::cout << "Enter coordinatest White Castel:nx = ";
std::cin >> x;
std::cout << "y = ";
std::cin >> y;
QSet(y, x);

std::cout << "Enter coordinatest Black Queen:nx = ";
std::cin >> x;
std::cout << "y = ";
std::cin >> y;
qSet(y, x);

ShowDesk();

return 0;
}

Прога работает только можно немного в упрощенном варианте и с подробностями) пожалуйста) просто не все понятно) а сдавать уже скоро) помогите, если не тяжело
85K
09 ноября 2013 года
Диктатор
12 / / 25.10.2013
И прога, не указывает поля, на которые может пойти черный ферзь, чтобы не попасть под удар белых. Мы просто вводим с клавиатуры числа на которые может пойти ферзь и все.
85K
16 ноября 2013 года
Диктатор
12 / / 25.10.2013
Спасибо большое Пашка, только еще надо эту прогу в графическом виде представить. Если не трудно сделай, пожалуйста!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог