/p>
getch ();// очікування натискання клавіші
// підпрограма формування масиву фігур,
// з початкового масиву geometry
forming (geometry);
// int kol = 10; int kol2 = 0; short b = 1;
// int g = -33, h = 48;
// основна функція, що виконує всілякі розстановки фігур
// на полі розстановки
placing (1);
// вивід даних (поле розстановки) на екран
print (geometry);
getch ();
// b? Print (kol, kol2): Print (kol, pow (kol, 2) + g);
// b? Prrint (kol, kol2): Prrint (kol, pow (kol, 2)-h);
return 0;
}
// підпрограма формування масиву фігур,
// з початкового масиву geometry
void forming (int geo [12] [25])
{struct pents
{ int shape [5] [5] ;//форма фігури
char located;// знаходиться на дошці/НЕ знаходиться
} image [12];// масив з 12 фігур
int h;
for (int i = 1; i <= 12; i + +)// к-ть фігур
{h = 1;
for (int j = +1; j <= 5; j + +)// розмірність кожної фігури
for (int k = 1; k <= 5; k + +)
// присвоєння масиву форматів кожної фігури,
// значень з нгчальних даних
{image [i]. shape [j] [k] = geo [i] [h];
h + +;
}
}
for (i = 1; i <= 12; i + +)
// поки жодна фігура не ледіт на полі розстановки,
// тому значення "N"
image [i]. located = 'N';
}
// основна функція, що виконує всілякі розстановки фігур
// на полі розстановки
void placing (int i)// i-номер фігури
{const static int n = 6, m = 10;
struct pents
{int shape [5] [5] ;//форма фігури
char located;// знаходиться на дошці/чи не знаходиться
} image [12]; int field [n] [m];
// допоміжні лічильники і
// ознака знаходження відповідного варіанту
int j1, h1, b;
// цикл знаходження всіляких варіантів для i-ої фігури
for (int j = 1, j <= n; j + +)
{j1 = j;
// переглядаємо кожен стовпець j-го рядка
for (int h = 1; h <= m; h + +)
{ h1 = h; b = 1;
// цикли доступу до елементів масиву формату кожної фігури
for (int k = 1; k <= 5; k + +)
{for (int l = 1, l <= 5; l + +)
// якщо сума елементів масиву форми i-ої фігури
// і елементів масиву поля розстановки більше 1
// тобто відбувається накладення фігур один на одного, то b присвоїти значення 0
{ if (image [i]. shape [k] [l] + field [j1] [h1]> 1) b = 0;
h1 + +;
}
j1 + +; h1 = h;
}
// якщо не разу не відбулося накладення фігур, тобто фігура підходить,
// то вихід з циклу пошуку
// тобто з циклу можливих вихідних позиції фігури за стовпцями
if (b == 1) break;
j1 = j;
}
if (b == 1)
// присвоюємо полю розстановки підійшла нам фігуру
{for (int k = 1; k <= 5; k + +)
for (int l = 1; l <= 5; l + +)
if (image [i]. shape [k] [l] == 1) field [-j + k] [-l + h] = i;
// поміняли ознака знаходиться на дошці/чи не знаходиться
image [i]. located = 'Y';
// якщо це не випадок з останньою фігурою,
// то рекурсією здійснюємо установку след.фігури
if (i <12) placing (+ + i);
// else// інакше, тобто якщо дійшли до посл.фігури (знайшли 1 варіант), виведення на екран
// print ();
// Обнуляємо значення останньої поставленої фігури
// на полі расстановеі і шукаємо след.подходящій варіант
for (k = j; k <= 6; k + +)
for (int l = h; l <= 10; l + +) field [k] [l] = 0;
// поміняли ознака знаходиться на дошці/чи не знаходиться
image [i]. located = 'N';
}
}// виконуємо все вищесказане для кожної фігури,
// устонавлівая її, знаходячи відповідний варіант і
// видалення для последущего пошуку інших варіантів
}
// вивід даних (поле розстановки) на екран
void print (int geo [12] [25])
{
for (int i = 1; i <12; i + +) {
for (int j = 1; j <25; j + +)// координати поля розстановки
cout <
cout <
// збереження формату виводу
}
Незважаючи на гнучкість вбудованих засобів мови С + + і його незаперечна зручність при створенні програм, він має ряд особливостей, часто ведуть до плутанини і помилок. Додані коментарі дозволяють уникнути цього. З цієї причини текст програми багато ними забезпечений. br/>
v Тестування програми
У процесі тестування програми необхідно слід провести аналіз складності алгоритму та оцінку ефективності її роботи.
Проведемо цей аналіз за допомогою алгоритмічної заходи Колмогоров...