В
Все
М
Математика
А
Английский язык
Х
Химия
Э
Экономика
П
Право
И
Информатика
У
Українська мова
Қ
Қазақ тiлi
О
ОБЖ
Н
Немецкий язык
Б
Беларуская мова
У
Українська література
М
Музыка
П
Психология
А
Алгебра
Л
Литература
Б
Биология
М
МХК
О
Окружающий мир
О
Обществознание
И
История
Г
Геометрия
Ф
Французский язык
Ф
Физика
Д
Другие предметы
Р
Русский язык
Г
География
Алия0051
Алия0051
17.11.2022 20:28 •  Информатика

заполнить таблицу. Переводить из одних систем в другие разобраться в этой ситуации


заполнить таблицу. Переводить из одних систем в другие разобраться в этой ситуации

Показать ответ
Ответ:
зузу10
зузу10
16.12.2021 01:59

О преобразовании. Римские цифры это непозиционная система исчесления, то есть всё исчесление идет не от разряда цифры, как в обычной десятичной системе, а непосредственно по значению цифры. Цифр в римской системе всего 7 вот они:

Римская цифраДесятичный эквивалент

I1

V5

X10

L50

C100

D500

M1000

Из этих цифр и составляются все числа. Если цифра стоящая слева от данной цифры меньше её, то она вычитаеться из данной цифры (принцип вычитания) . Если больше то складывается (принцип сложения) . Например XLVII = XL (40 = 50 - 10) + V (5) + II (2) = 47. Но есть одно исключение. Если мы возьмем число 99 и попытаемся перевести, мы в лоб возьмем 100 (С) и вычтем из ста единицу, то есть получается IC. Удобно, компактно, но не правильно. В класической системе римских цифр число стоящее справа (то есть из которого вычитается) должно быть не больше чем, то что слева умноженное на десять. То есть то же число 99 надо переводить буквально XC(90 = 100 - 10) + IX (9 = 10 - 1) = XCIX. То есть 49 нельзя записывать как IL, только как LXIX. Есть ещё одно правило. Нельзя делать повторения четырёх цифр подряд (исключение составляет цифра четыре, которую изображают в часах как для лучшего восприятия) , то есть число 40 нельзя записывать как , а только как LX. Из всех этих правил вытекает, что максимальное число, которое можно записать римскими цифрами есть MMMCMXCIX = 3999. Но не стоит отчаиваться! Этруски, которые вроде бы придумали рисмские цифры, были умными ребятами и сделали хитро — число подчеркнутое палочкой сверху означает количество тысяч. То есть 4000 нужно записывать как IV. Всё просто.

Отсюда сразу вытекает алгоритм действия:

Если число больше или равно 4000 то делим нацело на 1000 и получаем количество тысяч, заосвываем их в этот же алгоритм, что бы вычислить как они выглядят в римских цифрах и их подчеркнуть сверху. И вычитаем из исходного числа эти тысячи.

Если меньше то

Берём разряд тысяч и переводим в римский эквивалент. Вычитаем их из числа.

Берём разряд сотен и переводим в римский эквивалент. Вычитаем их из числа.

Дальше также поступаем с десятками и единицами.

Повторяем все эти действия пока не вычтеться всё.

Ну и полученые цифрки выводим как положено - тысячи подчеркнутые сверху (если их много, если нет, то нужное количество М) и обычным стилем все остальные буквы которые у нас получились.

Коментарий к исходникам

Чуть ниже представлены ссылки на реализацию рассказанного здесь алгоритма. Хочется сказать про них пару слов.

Функция которая реализует непосредственно конвертацию называется digConvert() в которую передаётся целое число, а на выходе получается строка содержащая либо "err" в случае неудачно конвертации, либо строку с конвертированным римским числом. Если переданное число больше чем 3999, то в итоге получается число подчеркнутое сверху и часть которая неподчеркнута. Функция возвращает оба значения через амперсант (&). Это необходимо, что бы в функцие обработчике нажатия кнопки, разделить обе части, с метода строки split(), который на входе получает по какому символу её нужно разделить, а на выходе выдаёт массив разделённых элементов. Для реализации подчеркивания используется следующий

0,0(0 оценок)
Ответ:
2002dima14
2002dima14
30.11.2021 05:39

Linq используется для генерации последовательности

using System.Linq;

Длина последовательности задаётся тут.

private static int Size => 7

Разберём главный код.

По умолчанию Rand имеет большой разброс. Поэтому мы хотим его ограничить, но так, чтобы мы точно не знали значения max и min. (чтобы искать по-честному). Этого можно не делать, но будут страшные значения генерироваться.

Для этого генерируем случайно крайние значения диапазона генерации.

int seedMin = new Random().Next(1, 40);

int seedMax = new Random().Next(seedMin + 5, seedMin + 40);

Далее генерируем саму последовательность.

var arr = Enumerable  //Класс из Linq для работы с перечислениями

              .Repeat(0, Size) // Задаём количество

              .Select(_ => new Random().Next(seedMin, seedMax)) // Для каждого элемента генерируем случайное значение

              .ToArray(); // Делаем массивом

Ну а теперь, можно заняться поиском и вычислением.

int max = arr[0], min = arr[0]; // Предполагаем max и min первым элементом

foreach (var el in arr) {

        max = Math.Max(el, max); //  Если очередной больше - заменяем max

        min = Math.Min(el, min); //  Если очередной меньше - заменяем min

}

Теперь мы нашли минимальным и максимальный элементы. Нам надо убрать их из последовательности ровно по одному разу. Для этого создаём переменные-флаги типа bool. Если наткнёмся на max или min при расчете, то пропустим их и отметим, что уже встречали.

Создадим переменную для произведения и приравняем к 1 (если 0, то произведение будет 0).

int product = 1;

bool maxIsCatched = false, minIsCatched = false;

Ищем произведение.

foreach (var el in arr)

          {

              if (!maxIsCatched && el == max) // Если не встречали до этого и встретили сейчас

              {

                  maxIsCatched = true; //Запоминаем факт встречи

                  continue; // Пропускаем шаг

              }

              if (!minIsCatched && el == min) // По аналогии но с min

              {

                  minIsCatched = true;

                  continue;

              }

              product *= el; // Это всё равно, что написать  product = product * el

          }

Далее просто выводим результаты.

Сначала выводим сгенерированную последовательность.

Затем найденные max, min и product.

PrintArr(arr);

Console.WriteLine($"Max: {max}; Min: {min}; Product: {product}.");

Метод для печати последовательности написан самостоятельно и выглядит так.

private static void PrintArr<T>(IEnumerable<T> arr)

{

     foreach (var el in arr) // Перебираем

     {

          Console.Write(el); // Печатаем

           Console.Write(" ");

     }

     Console.WriteLine();

}

<T> используется для того, чтобы не зависеть от значений последовательности. Туда можно запихнуть любой массив или список.

IEnumerable<T> - обобщение для любой перечислимой коллекции.

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота