Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Алгоритмізація та програмування 1: Базові концепції програмування
ЗВІТ
До модульної контрольної роботи №1
Варіант 25
Дата «15» грудня 2021
Завдання
Результат роботи повинен відобразити:1. Обернену матрицю;2. Розшифроване повідомлення.
/
Код програми
//МКР-2 Шепетько ТР-15 15.12.2021
#include <stdio.h>
#include <math.h>
#define RED "\x1b[31m"
#define BLUE "\x1b[34m"
#define RESET "\x1b[0m"
#define Yellow "\x1b[33m"
#define Green "\x1b[32m"
int main(void) {
int k=0;
char characters[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
int n[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};
int array[2][2];
int array2[2][2];
int arrayf[2][2];
int array1[4];
char kod[] = {'b','h','b','z'};
printf(""RED"Дані, що відомі програмі зараз:\n"RESET" Символи:\n"BLUE"characters[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; "RESET"\nВідповідні індекси:"Yellow"\nn[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};"RESET"\n\n");
printf(""RED"Введіть ключ (початкову матрицю):"RESET"");
repet:
//Задання значень матриці-ключа
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
scanf("%i", &array[i][j]);
}
}
//Пошук індексів відповідних символів
for(int j=0;j<sizeof(kod);j++){
for(int i=0;i<sizeof(characters);i++){
if(kod[k]==characters[i]){
array1[k]=n[i];
k++;
}
}
}
//Обрахунок детермінанта
float determinant = array[0][0]*array[1][1]-array[0][1]*array[1][0];
if(determinant!=0){
printf(""RED"\nДетермінант заданої матриці:"RESET" %.0f\n",determinant);
}
if(determinant==0){
printf("Помилка, спробуйте ще\n");
goto repet;
}
printf(""RED"Індекси заданих символів:"RESET" ");
for(int j=0;j<sizeof(kod);j++){
printf("%d ",array1[j]);
}
printf("\n");
printf(""RED"Обернена і перетворена матриця:"RESET"\n");
array2[0][0]=array[1][1];
array2[0][1]=-array[0][1];
array2[1][0]=-array[1][0];
array2[1][1]=array[0][0];
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
float b=array2[i][j];
float a=array2[i][j]/determinant;
if(a != round(a) || a<0){
for(int k=1;a != round(a) || a<0;k++){
double temp = b;
double el = (temp+26*k)/determinant;
if(el==round(el) && el>0){
a=el;
break;
}
}
}
array2[i][j]=a;
printf("%d ",array2[i][j]);
}
printf("\n");
}
arrayf[0][0]=(array2[0][0]*array1[0]+array2[0][1]*array1[1])%26;
arrayf[1][0]=(array2[0][0]*array1[2]+array2[0][1]*array1[3])%26;
arrayf[0][1]=(array2[1][0]*array1[0]+array2[1][1]*array1[1])%26;
arrayf[1][1]=(array2[1][0]*array1[2]+array2[1][1]*array1[3])%26;
printf(""RED"Індекси зашифрованого слова:"RESET"\n");
for(int i=0;i<2;i++){
for(int j=0; j<2;j++){
printf("%d ",arrayf[i][j]);
}
printf("\n");
}
printf("\n"Green"Зашифроване слово:"RESET" ");
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
printf("%c",characters[arrayf[i][j]]);
}
}
return 0;
}
Результати виконання
Вивід на екран монітора результату
/
Висновок: Виконано МКР-2: знайдено детермінант матриці-ключа, обчислено і виведено обернену і перетворену матрицю, розшифровано слово.
Посилання на repl.it: https://replit.com/join/kqmycuossa-tr-15shiepietko