Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
4.1 kB
4
Indexable
Never
//ЮФУ, ИКТИБ,МОП ЭВМ
//Программирование и основы теории алгоритмов
//Лабораторная работа 4.1 - Подпрограммы, библиотечные функции
//КТбо1-6, Домбрина Алёна Игоревна
// Задача F
// 17.11.2023
#include <iostream>
#include<cmath>
using namespace std;
//Подпрограммы testQueen, testRook, testKnight заполняют массив,
//являющийся шахматным полем, единицами, 
//если клетки "под боем". То есть подпрограммы
//перебирают всевозможные клетки и проверяют их на достижимость одной из трех фигур
//(каждая подпрограма - одна из трех фигур)
// *chess - указатель на массив этих подпрограмм
//------------------------------------
//Параметры подпрограммы testQueen:
//a - координата по х ферзя
//b - координата по у ферзя
//array - указатель на массив, являющийся шахматным полем
//Параметры подпрограммы testRook:
//a - координата по х ладьи
//b - координата по у ладьи
//array - указатель на массив, являющийся шахматным полем
//Параметры подпрограммы testKnight:
//a - координата по х коня
//b - координата по у коня
//array - указатель на массив, являющийся шахматным полем
//------------------------------------
//В качестве последнего параметра подпрограммы получают указатель на массив из тела main, 
//поэтому выполнение подпрограмм меняет исходное значение массива
void testQueen(int a, int b, int(&array)[8][8]);
void testRook(int a, int b, int(&array)[8][8]);
void testKnight(int a, int b, int(&array)[8][8]);
void (*chees[3])(int a, int b, int(&array)[8][8]) = { testQueen, testRook, testKnight };
int main() {
    char first[3], second[3], third[3];
    gets_s(first);
    gets_s(second);
    gets_s(third);
    int queen = first[0] - 64 - 1;
    int queen2 = first[1] - 48 - 1;
    int rook = second[0] - 64 - 1;
    int rook2 = second[1] - 48 - 1;
    int knight = third[0] - 64 - 1;
    int knight2 = third[1] - 48 - 1;
    int field[8][8] = { 0 };
    for (int x = 0; x < 8; x++)
    {
        for (int y = 0; y < 8; y++)
        {
            (*chees[0])(queen, queen2, field);
            (*chees[1])(rook,rook2,field);
            (*chees[2])(knight, knight2, field);
        }
    }
    field[queen2][queen] = 0;
    field[rook2][rook] = 0;
    field[knight2][knight] = 0;
    int sum = 0;
    for (int i = 0; i < 8; i++)
    {
        for (int j = 0; j < 8; j++)
        {
            if (field[i][j] == 1) sum++;
           
        }
    }
    cout << sum;
    
    return 0;
}
void testQueen(int a, int b, int(&array)[8][8])
{
    for (int x = 0; x < 8; x++)
    {
        for (int y = 0; y < 8; y++)
        {
                if ((abs(a - y) == abs(b - x)) || a == y || b == x)
                {
                    array[x][y] = 1;
                }
        }
    }
}

void testRook(int a, int b, int(&array)[8][8])
{
    for (int x = 0; x < 8; x++)
    {
        for (int y = 0; y < 8; y++)
        {
            if (a == y || b == x)
            {
                array[x][y] = 1;
            }
        }
    }
}

void testKnight(int a, int b, int(&array)[8][8])
{
    for (int x = 0; x < 8; x++)
    {
        for (int y = 0; y < 8; y++)
        {
            if ((abs(a - y) == 1 && abs(b - x) == 2) || (abs(a - y) == 2 && abs(b - x) == 1))
            {
                array[x][y] = 1;
            }
        }
    }
    
}
Leave a Comment