Помогите Разбить На Процедуры И Функции

  • Автор темы Rompo
  • Дата начала
R

Rompo

#1
Написал код, помогите разбить его на элементарные процедуры и функции. Только мне нужно без усложнения моего написания, т.е без динамического выделения памяти... короче как можно проще! Заранее спасибо.
C++:
#include <iostream>
#include <windows.h>
#include <vector>
#include <cmath>

using namespace std;

string to_rus(const char *str)
{
char buf[1024];
string res;

CharToOemA(str, buf);
res = buf;

return res;
}


int main()
{
int x, y;
int WK[9][9], BK[9][9], EL[9][9], H[9][9];
bool bl = false;

for (x = 1; x < 9; x++){
for (y = 1; y < 9; y++){
WK[x][y] = 0;
EL[x][y] = 0;
H[x][y] = 0;
BK[x][y] = 0;
}
}
//________________________________________________________________________
cout << to_rus("Белый король : ");
cin >> x >> y;
cout << endl;

int WKx = x, WKy = y;

while ((x <= 0) | (x > 8) | (y <= 0 ) | (y > 8)){
cout << to_rus("Введены неверные координаты! Повторите...") << endl;
cout << endl;
cout << to_rus("Белый король : ");
cin >> x >> y;
WKx = x, WKy = y;
}

WK[x][y] = 1;
int WK_kol = 0;

//cout << "WHITE_KING-0[" << x << "][" << y << "]" << endl;

if ((x - 1 > 0) & (y - 1 > 0)){
WK[x - 1][y - 1] = 2;
++WK_kol;
//cout << "WHITE_KING-" << ++WK_kol << "[" << (x - 1) << "][" << (y - 1) << "]" << endl;
}
if (x - 1 > 0){
WK[x - 1][y] = 2;
++WK_kol;
//cout << "WHITE_KING-" << ++WK_kol << "[" << (x - 1) << "][" << y << "]" << endl;
}
if ((x - 1 > 0) & (y + 1 < 8)){
WK[x - 1][y + 1] = 2;
++WK_kol;
//cout << "WHITE_KING-" << ++WK_kol << "[" << (x - 1) << "][" << (y + 1) << "]" << endl;
}
if (y - 1 > 0){
WK[x][y - 1] = 2;
++WK_kol;
//cout << "WHITE_KING-" << ++WK_kol << "[" << x << "][" << (y - 1) << "]" << endl;
}
if (y + 1 < 8){
WK[x][y + 1] = 2;
++WK_kol;
//cout << "WHITE_KING-" << ++WK_kol << "[" << x << "][" << (y + 1) << "]" << endl;
}
if ((x + 1 < 8) & (y - 1 > 0)){
WK[x + 1][y - 1] = 2;
++WK_kol;
//cout << "WHITE_KING-" << ++WK_kol << "[" << (x + 1) << "][" << (y - 1) << "]" << endl;
}
if (x + 1 < 8){
WK[x + 1][y] = 2;
++WK_kol;
//cout << "WHITE_KING-" << ++WK_kol << "[" << (x + 1) << "][" << y << "]" << endl;
}
if ((x + 1 < 8) & (y + 1 < 8)){
WK[x + 1][y + 1] = 2;
++WK_kol;
//cout << "WHITE_KING-" << ++WK_kol << "[" << (x + 1) << "][" << (y + 1) << "]" << endl;
}
//________________________________________________________________________

int n = 0;
int ELx, ELy;

cout << to_rus("Черный слон : ");
cin >> x >> y;
cout << endl;

ELx = x; ELy = y;

while ((x <= 0) | (x > 8) | (y <= 0 ) | (y > 8) | ((ELx == WKx) & (ELy == WKy))){
cout << to_rus("> ...Введены неверные координаты! Повторите... <") << endl;
if ((ELx == WKx) & (ELy == WKy))
cout << to_rus("> ...Координаты Черного Слона совпадают с координатами Белого Короля!... <") << endl;
cout << endl;
cout << to_rus("Черный слон : ");
cin >> x >> y;
cout << endl;
ELx = x; ELy = y;
}

EL[x][y] = 1;

//cout << "ELEPHANT-0[" << x << "][" << y << "]" << endl;

while ((x > 1) & (y > 1)) {
//n++;
--x; --y;
//cout << "ELEPHANT-" << n << "[" << --x << "][" << --y << "]" << endl;
EL[x][y] = 2;
}

x = ELx; y = ELy;
while ((x < 8) & (y < 8)) {
//n++;
++x; ++y;
//cout << "ELEPHANT-" << n << "[" << ++x << "][" << ++y << "]" << endl;
EL[x][y] = 2;
}

x = ELx; y = ELy;
while ((x > 1) & (y < 8)) {
//n++;
--x; ++y;
//cout << "ELEPHANT-" << n << "[" << --x << "][" << ++y << "]" << endl;
EL[x][y] = 2;
}

x = ELx; y = ELy;
while ((x < 8) & (y > 1)) {
//n++;
++x; --y;
//cout << "ELEPHANT-" << n << "[" << ++x << "][" << --y << "]" << endl;
EL[x][y] = 2;
}

//________________________________________________________________________

cout << to_rus("Черный конь : ");
cin >> x >> y;
cout << endl;

int Hx = x, Hy = y;

while ((x <= 0) | (x > 8) | (y <= 0 ) | (y > 8) | ((Hx == ELx) & (Hy == ELy)) | ((Hx == WKx) & (Hy == WKy))){
cout << to_rus("> ...Введены неверные координаты! Повторите... <") << endl;
if ((Hx == WKx) & (Hy == WKy))
cout << to_rus("> ...Координаты Черного Коня совпадают с координатами Белого Короля!... <") << endl;
if ((Hx == ELx) & (Hy == ELy))
cout << to_rus("> ...Координаты Черного Коня совпадают с координатами Черного Слона!... <") << endl;
cout << endl;
cout << to_rus("Черный конь : ");
cin >> x >> y;
cout << endl;
Hx = x, Hy = y;
}

H[x][y] = 1;
//cout << "HORSE-0[" << x << "][" << y << "]" << endl;

if ((x - 1 > 0) & (y - 2 > 0)){
H[x - 1][y - 2] = 2;
//cout << "HORSE-1[" << (x - 1) << "][" << (y - 2) << "]" << endl;
}

if ((x - 2 > 0) & (y - 1 > 0)){
H[x - 2][y - 1] = 2;
//cout << "HORSE-2[" << (x - 2) << "][" << (y - 1) << "]" << endl;
}

if ((x + 1 < 9) & (y - 2 > 0)){
H[x + 1][y - 2] = 2;
//cout << "HORSE-3[" << (x + 1) << "][" << (y - 2) << "]" << endl;
}

if ((x - 2 > 0) & (y + 1 < 9)){
H[x - 2][y + 1] = 2;
//cout << "HORSE-4[" << (x - 2) << "][" << (y + 1) << "]" << endl;
}

if ((x + 2 < 9) & (y + 1 < 9)){
H[x + 2][y + 1] = 2;
//cout << "HORSE-5[" << (x + 2) << "][" << (y + 1) << "]" << endl;
}

if ((x + 1 < 9) & (y + 2 < 9)){
H[x + 1][y + 2] = 2;
//cout << "HORSE-6[" << (x + 1) << "][" << (y + 2) << "]" << endl;
}

if ((x + 2 < 9) & (y - 1 > 0)){
H[x + 2][y - 1] = 2;
//cout << "HORSE-7[" << (x + 2) << "][" << (y - 1) << "]" << endl;
}

if ((x - 1 > 0) & (y + 2 < 9)){
H[x - 1][y + 2] = 2;
//cout << "HORSE-8[" << (x - 1) << "][" << (y + 2) << "]" << endl;
}

//________________________________________________________________________

cout << to_rus("Черный король: ");
cin >> x >> y;
cout << endl;

int BKx = x, BKy = y;

while ((x <= 0) | (x > 8) | (y <= 0 ) | (y > 8) | ((BKx == ELx) & (BKy == ELy)) | ((BKx == Hx) & (BKy == Hy)) | ((BKx == WKx) & (BKy == WKy))){
cout << to_rus("> ...Введены неверные координаты! Повторите... <") << endl;
if ((BKx == Hx) & (BKy == Hy))
cout << to_rus("> ...Координаты Черного Короля совпадают с координатами Черного Коня!... <") << endl;
if ((BKx == ELx) & (BKy == ELy))
cout << to_rus(">... Координаты Черного Короля совпадают с координатами Черного Слона!... <") << endl;
if ((BKx == WKx) & (BKy == WKy))
cout << to_rus(">... Координаты Черного Короля совпадают с координатами Белого Короля!... <") << endl;
cout << endl;
cout << to_rus("Черный король : ");
cin >> x >> y;
cout << endl;
BKx = x, BKy = y;
}

BK[x][y] = 1;
//cout << "BLACK_KING-0[" << x << "][" << y << "]" << endl;

if ((x - 1 > 0) & (y - 1 > 0)){
BK[x - 1][y - 1] = 2;
//cout << "BLACK_KING-1[" << (x - 1) << "][" << (y - 1) << "]" << endl;
}
if (x - 1 > 0){
BK[x - 1][y] = 2;
//cout << "BLACK_KING-2[" << (x - 1) << "][" << y << "]" << endl;
}
if ((x - 1 > 0) & (y + 1 < 8)){
BK[x - 1][y + 1] = 2;
//cout << "BLACK_KING-3[" << (x - 1) << "][" << (y + 1) << "]" << endl;
}
if (y - 1 > 0){
BK[x][y - 1] = 2;
//cout << "BLACK_KING-4[" << x << "][" << (y - 1) << "]" << endl;
}
if (y + 1 < 8){
BK[x][y + 1] = 2;
//cout << "BLACK_KING-5[" << x << "][" << (y + 1) << "]" << endl;
}
if ((x + 1 < 8) & (y - 1 > 0)){
BK[x + 1][y - 1] = 2;
//cout << "BLACK_KING-6[" << (x + 1) << "][" << (y - 1) << "]" << endl;
}
if (x + 1 < 8){
BK[x + 1][y] = 2;
//cout << "BLACK_KING-7[" << (x + 1) << "][" << y << "]" << endl;
}
if ((x + 1 < 8) & (y + 1 < 8)){
BK[x + 1][y + 1] = 2;
//cout << "BLACK_KING-8[" << (x + 1) << "][" << (y + 1) << "]" << endl;
}

//________________________________________________________________________

for (x = 1; x < 9; ++x)
for(y = 1; y < 9; ++y){

if(((WK[x][y] == EL[x][y] - 1) & (WK[x][y] != 0)) | ((WK[x][y] == H[x][y] - 1) & (WK[x][y] != 0))){
bl = true;
}
}

float WK_EL, WK_H, EL_H, WK_BK, EL_BK;

WK_EL = sqrt((WKx - ELx)*(WKx - ELx) + (WKy - ELy)*(WKy - ELy));
EL_H = sqrt((Hx - ELx)*(Hx - ELx) + (Hy - ELy)*(Hy - ELy));
WK_H = sqrt((Hx - WKx)*(Hx - WKx) + (Hy - WKy)*(Hy - WKy));
WK_BK = sqrt((WKx - BKx)*(WKx - BKx) + (WKy - BKy)*(WKy - BKy));
EL_BK = sqrt((BKx - ELx)*(BKx - ELx) + (BKy - ELy)*(BKy - ELy));

if (bl){
for (x = 1; x < 9; ++x)
for(y = 1; y < 9; ++y){
if(((H[x][y] == EL[x][y] - 1) & (H[x][y] != 0)) | ((BK[x][y] == EL[x][y] - 1) & (BK[x][y] != 0))){
if(((WK_EL > EL_H) & (WK_EL > WK_H)) | ((WK_EL > EL_BK) & (WK_EL > WK_BK)))
bl = false;
}
}
}

for (x = 1; x < 9; ++x)
for(y = 1; y < 9; ++y){
if(((WK[x][y] == EL[x][y]) | (WK[x][y] == H[x][y]) | (WK[x][y] == BK[x][y])) & (WK[x][y] != 0))
--WK_kol;
}

cout << endl;
cout << to_rus("Результат: ");

if (bl){
if (WK_kol == 0)
cout << to_rus("ШАХ и МАТ! Черные победили...") << endl;
else
cout << to_rus("ШАХ! Белый король под угрозой...") << endl;
}
else {
if (WK_kol == 0)
cout << to_rus("ПАТ! Ничья...") << endl;
else
cout << to_rus("Обычная позиция") <<endl;
}

cout << endl;

system("PAUSE");
return 0;

}
 

Вложения

W

Whatka

#2
ты предлагаешь нам вместо тебя разбить всю программу на функци??
учитывая,что ты знаешь как это делается??
 
R

Rompo

#3
ты предлагаешь нам вместо тебя разбить всю программу на функци??
учитывая,что ты знаешь как это делается??
ну если бы я знал, то не попросил бы помощи. Могу скинуть мой вариант разбиения, но он не рабочий, может хоть на ошибки укажешь.
 

Вложения

W

Whatka

#4
Чтобы работать в функции с массиваом\матрицей его\её нужно функции передать
например int **A-матрица в функции
C++:
void func(int **A)
потом переменные объявленые внутри функции-локальные то есть по завершению работы функции удаляются
например
C++:
void func (...)
{
int k;
...}
void main()
{
int k;
...
}
в функции k и в main k -это две совершенно разных переменных




и почему-то мне кажется (коечно это только моё мнение) что за просто так этот не маленький код никто переделывать не будет
 
R

Rompo

#5
ну в теории я знаю, что такое локальные и глобальные переменные...

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

C++:
 cout << to_rus("Белый король : ");
cin >> x >> y;
cout << endl;

int WKx = x, WKy = y;

while ((x <= 0) | (x > 8) | (y <= 0 ) | (y > 8)){
cout << to_rus("Введены неверные координаты! Повторите...") << endl;
cout << endl;
cout << to_rus("Белый король : ");
cin >> x >> y;
WKx = x, WKy = y;
}

WK[x][y] = 1;
int WK_kol = 0;

if ((x - 1 > 0) & (y - 1 > 0)){
WK[x - 1][y - 1] = 2;
++WK_kol;
}
if (x - 1 > 0){
WK[x - 1][y] = 2;
++WK_kol;
}
if ((x - 1 > 0) & (y + 1 < 8)){
WK[x - 1][y + 1] = 2;
++WK_kol;
}
if (y - 1 > 0){
WK[x][y - 1] = 2;
++WK_kol;
}
if (y + 1 < 8){
WK[x][y + 1] = 2;
++WK_kol;
}
if ((x + 1 < 8) & (y - 1 > 0)){
WK[x + 1][y - 1] = 2;
++WK_kol;
}
if (x + 1 < 8){
WK[x + 1][y] = 2;
++WK_kol;
}
if ((x + 1 < 8) & (y + 1 < 8)){
WK[x + 1][y + 1] = 2;
++WK_kol;
}
по идее функция должна отвечать за расчет этих ходов... и наверно должна возвращать какой-то результат? или void тоже можно записать? но еще здесь же идет подсчет кол-ва ходов Белого короля( этот нужно по алгоритму), но для Черного короля в этом нет необходимости, так наверно и это следует определить в отдельную функцию...но с этим проще:

C++:
int wk_kol(int x, int y){
int WK_kol;

if ((x - 1 > 0) & (y - 1 > 0))
++WK_kol;

if (x - 1 > 0)
++WK_kol;

if ((x - 1 > 0) & (y + 1 < 8))
++WK_kol;

if (y - 1 > 0)
++WK_kol;

if (y + 1 < 8)
++WK_kol;

if ((x + 1 < 8) & (y - 1 > 0))
++WK_kol;

if (x + 1 < 8)
++WK_kol;

if ((x + 1 < 8) & (y + 1 < 8))
++WK_kol;

return WK_kol;
}
А все же как быть мне с массивами? Попробуй показать мне на примере фрагмента кода для Короля, пожалуйста)