лаб4фыавфыафы

← разместить еще код

Расшаренный код:

// PZIClab3.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <string>
#include <cmath>

using namespace std;



char return_sdvig(int sdvig, char symb) {
	char result;
	int code_symb = (int)symb + sdvig;
	if ((int)symb >=65 && (int)symb <= 90 && code_symb > 90) {
		result = (char)((int)symb + sdvig-26); 
	}
	else if((int)symb >= 97 && (int)symb <= 122 && code_symb > 122) {
		result = (char)((int)symb + sdvig - 26);
	}
	else if ((int)symb >= -64 && (int)symb <= -33 && code_symb > -33) {
		result = (char)((int)symb + sdvig - 32);
		
	}
	else if ((int)symb >= -32 && (int)symb <= -1 && code_symb > -1) {
		result = (char)((int)symb + sdvig - 32);
		
	}
	else {
		result = (char)((int)symb + sdvig);
	}
	return result;
}
void method_czar(int sdvig) {
	string test_str = "Eat these soft French buns.";
	cout << "Исходная строка: " << test_str << endl;
	cout << "Сдвиг:" << sdvig << endl;
	cout << "Зашифрованная строка: ";
	for (int i = 0; i < test_str.size(); i++) {
		if (test_str[i] == ' ' or test_str[i] == '.' or test_str[i] == ',' or test_str[i] == '-') {
			cout << test_str[i];
		}
		else {
			cout << return_sdvig(sdvig, test_str[i]);
		}
	}
	cout << endl;
}

void gronsfeld(int key) {
	string test = "Потрясающий день";
	cout << "Исходная строка: " << test << endl;
	cout << "Ключ:" << key << endl;
	int cyphers = 0, cypher;
	int copy_key = key;
	while (copy_key != 0) {
		copy_key /= 10;
		cyphers++;
	}
	copy_key = key;
	int copy_cyphers = cyphers;
	for (int i = 0; i < test.size(); i++) {
		if (test[i] == ' ' || test[i] == '.' || test[i] == ',') {
			cout << test[i] << "=>" << endl;
		}
		else {
			if (copy_key <= 0) {
				copy_key = key;
				copy_cyphers = cyphers;
			}
			copy_cyphers--;
			int symb = copy_key / (int)(pow(10, copy_cyphers));
			cout << test[i] << "[" << symb << "]" << "=>" << return_sdvig(symb, test[i]) << endl;
			copy_key = copy_key - (int)(pow(10, copy_cyphers)*symb);
		}
		
	}
}

void vizhener(string str_key) {
	string test = "карнавал начался";
	const int len_alph = 32;
	cout << "Исходная строка: " << test << endl;
	cout << "Ключ:" << str_key << endl;
	int shift = 0;
	char **square_vizhen = new char *[len_alph];
	for (int i = 0; i<len_alph; i++)
		square_vizhen[i] = new char[len_alph];
	string alfabet = "абвгдежзийклмнопрстуфхцчшщъыьэюя"; 
	for (int i = 0; i < len_alph; i++) {
		for (int j = 0; j < len_alph; j++)
		{
			shift = j + i;
			if (shift >= len_alph) shift = shift % len_alph;
			square_vizhen[i][j] = alfabet[shift];
			cout << square_vizhen[i][j] << " ";
		}
		cout << endl;
	}
	int k = 0;
	for (int i = 0; i < test.size(); i++) {
		if (test[i] == ' ' || test[i] == '.' || test[i] == ','){
			cout << test[i] << "[ ]" << test[i] << endl;
		}
		else {
			if (k >= str_key.size()) {
				k = 0;
			}
			int numberi, numberj;
			for (int j = 0; j < len_alph; j++) {
				if (square_vizhen[0][j] == test[i]) {
					numberi = j;
					break;
				}
			}
			for (int j = 0; j < len_alph; j++) {
				if (square_vizhen[j][0] == str_key[k]) {
					numberj = j;
					break;
				}
			}
			cout << test[i] << "[" << str_key[k] << "]" << " => " << square_vizhen[numberi][numberj] << endl;
			k++;
		}
	}
}

int main()
{
	setlocale(LC_ALL, "Russian");
	int test_input_czar, test_input_grons;
	string test_input_vizhener = "замок";

	cout << "Введите сдвиг Цезаря:";
	cin >> test_input_czar;
	method_czar(test_input_czar);

	cout << "Введите ключ гронсфельда:";
	cin >> test_input_grons;
	gronsfeld(test_input_grons);

	cout << "Ключ виженера:" << test_input_vizhener << endl;
	vizhener(test_input_vizhener);
    return 0;
}