Во время ВОВ сложные технические и криптографические средства зашиты информации стали во многом ключевыми, ведь ценность информации возросла кратно. К июню 1941, когда немецкие армии вторглись на территорию СССР, наша система защиты государственной тайны была практически полностью сформирована. Она успешно выполняла целый ряд поставленных перед ней задач. От любых иностранных разведок надежно защищались все информационные ресурсы: мобилизационные, технические, военные, политические, идеологические и природные.
Во время ВОВ сложные технические и криптографические средства зашиты информации стали во многом ключевыми, ведь ценность информации возросла кратно. К июню 1941, когда немецкие армии вторглись на территорию СССР, наша система защиты государственной тайны была практически полностью сформирована. Она успешно выполняла целый ряд поставленных перед ней задач. От любых иностранных разведок надежно защищались все информационные ресурсы: мобилизационные, технические, военные, политические, идеологические и природные.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int year, century;
// { "I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M" };
short ArrRom[] = { 73, 18774, 86, 18776, 88, 22604, 76, 22595, 67, 17220, 68, 17229, 77 };
int ArrRom2[] = { 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000, 5000};
/*Т.к тип char в себе содержит только 1 байт,а нам местами желательно хранить 2 символа (4 римскими цифрами - IV),
поэтому используем тип short и помещаем в него десятичные представления наших символов, если с одинарными символами
все просто, то с двойными делаем такую схему: ASCII код символа I в десятичной системе счисления = 73, далее мы
переводим в двойчную систему счисления 01001001 тоже самое делаем с символом V = 86 = 01010110, теперь совмещаем
0100100101010110 и переводим данное число в десятный формат = 18774. И того код символа I попадаем в старший
байт, а код символа V в младший.**
*/
printf("Enter the year\n");
while (scanf_s("%d", &year) != 1 || year>399900)
{
printf("Invalid format\n");
system("pause");
return 0;
}
if (year % 100 == 0)
{
century = year / 100;
}
else
{
century = year / 100 + 1;
}
printf("%d year refer to ", year);
for (int i = 0;century != 0; ++i) //Условие конца цикла когда век будет равен 0
{
int j=0;
for (; century >= ArrRom2[j]; ++j);// В этом цикле введенный нами век сравнивается с массивом содержащим цифры.
//Если век больше текущего элемента массива, то сравниваем со следующим. Условие конца цикла - век больше очередного
//элемента массива.*
printf("%c",ArrRom[j - 1] >> 8); //**т.к. в оджном элементе массива закодировано 2 символа, чтобы достать первый,
//мы сдвигаем значение на 8 бит вправо. Например, число 0100100101010110 в двоичной системе сдвигаем на 8 бит вправо
//получаем 0000000001001001. При печати будет выглядеть как I.
printf("%c", ArrRom[j - 1] << 8 >> 8); //здесь сначала сдвигаем на 8 бит влево, чтобы получить 0101011000000000,
//т.е. убрать младший байт. Затем сдвигаем обратно, чтобы убрать появившиеся нули в младшем байте. В итоге получаем
//0000000001010110. При печати будет выглядеть как V.
century -= ArrRom2[j - 1];//*т.к при сравнении цикл останавливается на элементе большем, чем нам нужен, то мы
//вычитаем 1 из итератора чтобы получить нужный нам эллемент,затем мы вычитаем его из века.
}
printf(" century \n");
system("pause");
return 0;
}
Объяснение: