Untitled
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