Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Алгоритмізація та програмування 1: Базові концепції програмування
ЗВІТ
До модульної контрольної роботи №2
Варіант 4
Дата «15» грудня 2021
Завдання на МКР№2
/
Код програми
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char *argv[],char *env[]) {
int Matrix [2][2] =
{
{7,6},
{4,5}
};
int inverse [2][2];
int X[2][2];
char RESULT[4];
char Alphabet[]={'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'};
char message [] = {'k','p','a','h'};
printf("\t\t\t\t\t~>>>МКР №2<<<~\n");
printf("Матриця шифрування (початкова) :\n\n");
for(int i=0;i<2;i++)
{
printf("||");
for(int j=0;j<2;j++)
{
printf("\t%i\t",Matrix[i][j]);
}
printf("||");
printf("\n");
}
double Determinant = Matrix[0][0] * Matrix[1][1] - Matrix[0][1] * Matrix[1][0];
if(Determinant!=0)
{
printf("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
printf("Визначник :\nDeterminant = %lf",Determinant);
printf("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
for(int i=0;i<4;i++)
{
for(int g=0;g<26;g++)
{
if(message[i]==Alphabet[g])
{
message[i]=g;
}
}
}
int messageMatrix [2][2]={
{message[0],message[1]},
{message[2],message[3]}
};
printf("Матриця із символів повідомлення :\n\n");
for(int i=0;i<2;i++)
{
printf("||");
for(int g=0;g<2;g++)
{
printf("\t%i\t",messageMatrix[i][g]);
}
printf("||");
printf("\n");
}
printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
for(int i=0;i<1;i++)
{
for(int j=0;j<1;j++)
{
inverse[i][j]=Matrix[i+1][j+1];
}
}
for(int i=1;i<2;i++)
{
for(int j=1;j<2;j++)
{
inverse[i][j]=Matrix[i-1][j-1];
}
}
for(int i=1;i<2;i++)
{
for(int j=0;j<1;j++)
{
inverse[i][j]= (-1)*Matrix[i][j];
}
}
for(int i=0;i<1;i++)
{
for(int j=1;j<2;j++)
{
inverse[i][j]=(-1)*Matrix[i][j];
}
}
printf("Обернена ціла матриця :\n");
for(int i=0;i<2;i++)
{
printf("||");
for(int j=0;j<2;j++)
{
printf("\t%i\t",inverse[i][j]);
}
printf("||");
printf("\n");
}
for(int i=0; i<2; i++)
{
for(int j=0; j<2; j++)
{
for(int M=0; M<10; M++){
if(inverse[i][j]%11!=0 || inverse[i][j]<0){
inverse[i][j]=inverse[i][j]+26;
}
if(inverse[i][j]%11==0 && inverse[i][j]>=0){
inverse[i][j]=inverse[i][j]/11;
if(inverse[i][j]>=26)
{
inverse[i][j]=inverse[i][j]%26;
}
break;
}
}
}
}
printf("\n");
for(int i = 0; i < 2; i++){
for(int j = 0; j < 2; j++){
X[i][j] = 0;
for(int g = 0; g < 2; g++){
X[i][j] = X[i][j] + inverse[i][g] * messageMatrix[g][j];
}
}
}
printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
printf("Матриця розшифрування:\n\n");
for(int i=0;i<2;i++)
{
printf("||");
for(int j=0;j<2;j++)
{
printf("\t%i\t",X[i][j]);
}
printf("||");
printf("\n");
}
printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
printf("Розшифроване слово:");
char RESULT [4]={Alphabet[X[0][0]%26], Alphabet[X[0][1]%26], Alphabet[X[1][0]%26], Alphabet[X[1][1]%26]};
printf("\n%s ",RESULT);
}
else printf("Подальше розв'язання неможливе, адже визначник рівний нулю!");
}
Результати
/
Посилання на Replit
https://replit.com/join/prhaezsnna-tr-15tkachienko
Висновок
В ході виконання модульної контрольної роботи було складено алгоритм обчислення оберненої матриці, детермінанту, перетворення буквеної матриці на звичайну і навпаки, розшифровує отримані дані . На екран виводяться початкова матриця (матриця шифрування), визначник ,обернена матриця, матриця розшифрування і розшифроване слово.