Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Алгоритмізація та програмування 1: Базові концепції програмування
ЗВІТ
до модульної контрольної роботи № 2
Варіант 16(1)
Дата «15» грудня 2021
Завдання за варіантом: (16)
/
Тобто варіант 8, тобто 4-й.
Матриця шифрування:
7
6
4
5
ЗАКОДОВАНЕ ПОВІДОМЛЕННЯ: «kpah»
Варіант роботи коли ми беремо «а» як символ під номером 1:
/
Та варіант виконання задачі коли ми беремо «а» як символ під номером 0:
/
Код програми:
На перевірку буде надісланий варіант програми, за яким «а» під номером 1.
Посилання на Repl.it:
https://replit.com/join/jnhrpcfmna-tr-15khavkin
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
void modar(int ar[2][2], float ar2[2][2],float deter){
float n;
int mat[2][2];
for(int i=0; i<2;i++)//Знаходження оберненої матриці без визначника
for(int j=0;j<2;j++)
mat[j][i]=pow(-1,i+j)*ar[1-i][1-j];
for(int i=0; i<2;i++){
for(int j=0;j<2;j++){
int k=1;
int mo = 0;
n = ar2[i][j];
while(mo!=1){
if(n<0){
if(n != round(n)){
ar2[i][j]=(mat[i][j]+26*k)/deter;
n=ar2[i][j];
}else{
ar2[i][j]=ar2[i][j]+26*k;
n=ar2[i][j];
}
}else if(n != round(n)){
ar2[i][j]=(mat[i][j]+26*k)/deter;
n=ar2[i][j];
}else{
ar2[i][j]=round(n);
mo=1;
}
k++;
}
}
}
}
void printMatrix(int arr[2][2]){//Метод для виводу матриці
printf("Задана матриця");
for(int i=0; i<2;i++){
printf("\n");
for(int j=0;j<2;j++){
printf("\t%d\t", arr[i][j]);
}
}
}
float getN(int arr[2][2]){//Метод для обчислювання визначинка 2
float N=0;
N=arr[0][0]*arr[1][1]-arr[0][1]*arr[1][0];
if (N == 0){
printf("\nВизначник дорівнєю 0, обчислення неможливе \n");
} else {
printf("\nВизначник: %f", N);
}
return N;
}
int main(void){
int a[2][2], i, j;
float mat[2][2];
float det;
printf("Ввести початкову данні для матриці:\n");
for(i = 0; i < 2; i++)//Ввод початкових данних
for(j = 0; j < 2; j++)
scanf("%d", &a[i][j]);
printMatrix(a);
det = getN(a);
for(int i=0; i<2;i++)//Знаходження оберненої матриці
for(int j=0;j<2;j++)
mat[j][i]=pow(-1,i+j)*a[1-i][1-j]/det;
printf("\nОбернена матриця");//Вивід оберненої матриці
for(int i=0; i<2;i++){
printf("\n");
for(int j=0;j<2;j++){
printf(" %.4f ", mat[i][j]);
}
}
printf("\nОбернена матриця після обрацювання");
modar(a, mat,det);
int arr3[2][2];
for(int i=0; i<2;i++){
printf("\n");
for(int j=0;j<2;j++){
arr3[i][j]=round((int)mat[i][j]);
printf(" %d ", arr3[i][j]);
}
}
printf("\nВвести початкову строку:");
char str1[5]="";
int kod[4];
scanf("%4s", str1);
printf("\nПочаткова строка: %s", str1);
char alf[26]={'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'};
printf("\nЇї код:");
for(int i=0;i<4;i++){
for(int j=0;j<26;j++){
if(str1[i]==alf[j]){
kod[i]=j+1;
}
}
printf(" %d ",kod[i]);
}
int arr4[2][1];
int f=0;
for(int i = 0; i < 2; i++){
arr4[i][0]=arr3[i][0]*kod[f]+arr3[i][1]*kod[f+1];
}
f=f+2;
printf("\nВектор результатів для %c%c: після mod 26:",str1[0],str1[1]);
for(int i = 0; i < 2; i++){
if(arr4[i][0]>26)
arr4[i][0]=arr4[i][0]%26;
kod[i]=arr4[i][0];
printf("\n%d", arr4[i][0]);
}
for(int i = 0; i < 2; i++){
arr4[i][0]=arr3[i][0]*kod[f]+arr3[i][1]*kod[f+1];
}
printf("\nВектор результатів для %c%c: після mod 26:",str1[2],str1[3]);
for(int i = 0; i < 2; i++){
if(arr4[i][0]>26)
arr4[i][0]=arr4[i][0]%26;
kod[i+2]=arr4[i][0];
printf("\n%d", arr4[i][0]);
}
printf("\nКод отриманого повідомлення:\n");
for(int i=0; i<4;i++){
printf("%d ", kod[i]);
}
printf("\nОтримане повідомлення:\n");
for(int i=0; i<4;i++){
printf("%c", alf[kod[i]-1]);
}
return 0;
}
У контрольній роботі потрібно було знайти зашифроване повідомлення. Для цього було знайдено обернену матрицю до вхідної матриці 2 на 2, за варіантом. Перевірені елементи матриці на натуральність, якщо елемент не підходить, то він змінюється, поки не стане натуральним. Після цього знаходиться попарно вектор результатів згідно до вхідного зашифрованого повідомлення. Потім ці два вектора по черзі можаться на отриману перед цим матрицю. Таким чином знаходиться код отриманого повідомлення. Після цього знаходиться вже саме повідомлення за допомогою коду, який ми знайшли. Присвоєння змінним для виконання завдання було виконану за допомогою зчитування з командної строки. Було обчислено завдання згідно до варіанту 4(16). Виведені обидві матриці та визначник. Всі розрахунки були перевірені калькулятором. Зроблено звіт з лабораторної роботи та вчасно надіслано викладачу на перевірку.