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

Тема в разделе "C/C++/C#", создана пользователем Rompo, 8 янв 2012.

  1. Rompo

    Rompo Гость

    Написал код, помогите разбить его на элементарные процедуры и функции. Только мне нужно без усложнения моего написания, т.е без динамического выделения памяти... короче как можно проще! Заранее спасибо.
    Код (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;

    }
     

    Вложения:

    • chess.cpp
      Размер файла:
      10,1 КБ
      Просмотров:
      6
    • Code_C__.txt
      Размер файла:
      10,1 КБ
      Просмотров:
      9
  2. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    ты предлагаешь нам вместо тебя разбить всю программу на функци??
    учитывая,что ты знаешь как это делается??
     
  3. Rompo

    Rompo Гость

    ну если бы я знал, то не попросил бы помощи. Могу скинуть мой вариант разбиения, но он не рабочий, может хоть на ошибки укажешь.
     

    Вложения:

    • function.cpp
      Размер файла:
      10,1 КБ
      Просмотров:
      10
  4. Whatka

    Whatka Well-Known Member

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




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

    Rompo Гость

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

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

    Код (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;
    }
    А все же как быть мне с массивами? Попробуй показать мне на примере фрагмента кода для Короля, пожалуйста)
     
Загрузка...

Поделиться этой страницей