• Добро пожаловать на сайт - Forumteam.digital !

    Что бы просматривать темы форума необходимо зарегестрироваться или войти в свой аккаунт.

    Группа в телеграме (подпишитесь, что бы не потерять нас) - ForumTeam Chat [Подписатся]
    Связь с администратором - @ftmadmin

7. Перевод секунд в минуты и работа с десятичной дробью.

Redman

<FORUMTEAM>
Команда форума
Регистрация
13.11.17
Сообщения
13.340
Реакции
8.377
Баллы
1.200
FTC
208¢
Практический пример. Перевод секунд в дни, часы, минуты и секунды.

Надеемся, что название примера говорит само за себя. Поэтому запускайте и разбирайтесь.
Код:
using System;

namespace CSharpApplication.ConvertSecondsExample
{
   class ConvertSeconds
   {
      static void Main()
      {
         // Количество секунд в часе
         const ulong SecondsInDay = 60 * 60 * 24;

         ulong Seconds = 0;
         // Ожидаем корректного ввода
         while(Seconds == 0)
         {
            // Введите время в секундах в заданном диапазоне:
            Console.Write("Введите время в секундах ");
            Console.WriteLine("(от {0} до {1}):",
               ulong.MinValue + 1, ulong.MaxValue);
            try
            {
               // Считываем введенное время и преобразуем его в ulong
               Seconds = Convert.ToUInt64(Console.ReadLine());
            }
            catch(Exception ex)
            {
               // Ошибка ввода
               Console.WriteLine(ex.Message + " Попробуйте снова!!!\n");
            }
         }

         // Вычисляем и выводим количество дней
         Console.WriteLine("Дней = {0}", Seconds / SecondsInDay);
         // Отбрасываем дни
         Seconds %= SecondsInDay;
         // Вычисляем и выводим количество часов
         Console.WriteLine("Часов = {0}", Seconds / 3600);
         // Отбрасываем часы
         Seconds %= 3600;
         // Вычисляем и выводим количество минут
         Console.WriteLine("Минут = {0}", Seconds / 60);
         // Вычисляем и выводим количество секунд
         Console.WriteLine("Секунд = {0}", Seconds % 60);

         // Ожидаем нажатия клавиши Enter
         Console.Write("\nНажмите Enter...");
         Console.Read();
      }
   }
}

Практический пример. Нахождение самой длинной неубывающей цепочки случайных чисел.

Надеемся, что название примера говорит само за себя. Поэтому запускайте и разбирайтесь.
Код:
using System;
class Sequence{
   public static void Main(){   
      int i=0,cur,max=1,curmax=1;
      int border;
      int prev;
      Console.WriteLine("Введите количество членов цепочки:");
      // Весь блок алгоритма заключаем в try/catch для перехвата исключений
      try{
          // Ввод количества элементов и перевод их в int
          border = Convert.ToInt32(Console.ReadLine());
          Console.WriteLine("Ваш выбор {0} элементов последовательности",border);       
          // Создаём объект класса Random для генерации случайного числа
          // Начальная точка основывается на системном времени
          Random rand = new Random();
          Console.WriteLine("Вот элементы последовательности:");
          // Генерируется случайное число от 0 до 100       
          prev = rand.Next(0,100);
          Console.WriteLine("{0}",prev);
          do{
             // Генерируется случайное число от 0 до 100       
             cur = rand.Next(0,100);
             if (cur>=prev)
                curmax++;
             else{
                if (curmax>max)
                   max = curmax;
                curmax = 1;
             }
             prev = cur;
             Console.WriteLine("{0}",cur);
             i++;
            }while(i<border-1);
               
          if (curmax>max)
             max = curmax;
          // Показ полученного результата
          Console.WriteLine("\n\nМаксимальная Длина = {0}\n\n",max);
         }
         // Обработка исключительной ситуации
         catch(Exception ex){
            Console.WriteLine(ex.Message+" Не повезло !!!\n");
         }
         // Задержка перед выходом                           
         Console.Read();
   }
}

Практический пример. Перевод из десятичной дроби в простую.

****** разделитель целой и дробной части числа зависит от локальных настроек операционной системы, поэтому, скорее всего, вам придется вводить дробное число через запятую (например, 1,56). ******

Код:
using System;

namespace CSharpApplication.ConvertDecimalFractionToSimpleFraction
{
   class Fraction
   {
      static void Main()
      {
         // Ввод дроби
         Console.Write("Введите число: ");
         
         try
         {
            // Попытка преобразования введенной строки в decimal
            DecimalToSimpleFraction(Convert.ToDecimal(Console.ReadLine()));
         }
         catch(FormatException error)
         {
            // Вывод сообщения об ошибки
            Console.WriteLine(error.Message);
         }

         Console.WriteLine("Нажмите Enter...");
         Console.Read();
      }
     
      // Функция перевода
      static void DecimalToSimpleFraction(decimal Number)
      {
         // Сохранение знака числа
         int Sign = 1;
         if(Number < 0)
         {
            Sign = -1;
            Number = -Number;
         }
         // Получение целой части числа
         int WholePart = (int)Number;
         // Получение дробной части числа
         decimal DoublePart = Number - WholePart;

         // Количество разрядов
         int Count = 0;
         
         // Пока дробное число не совпадет со своим целым эквивалентом
         while (DoublePart - (ulong)DoublePart != 0)
         {
            // Считаем разряды
            DoublePart *= 10;
            ++Count;
         }

         // Если дробная часть присутствовала
         if(Count > 0)
         {
            // Вычисление знаменателя
            decimal Denominator = Convert.ToDecimal(Math.Pow(10, Count));
            // Вычисление наибольшего общего делителя
            decimal N = NOD(DoublePart, Denominator);

            // Сокращаем дробь
            DoublePart /= N;
            Denominator /= N;

            // Вывод результата
            if(WholePart != 0)
               Console.WriteLine("{0}  {1} / {2}",
                  WholePart * Sign, DoublePart, Denominator);
            else
               Console.WriteLine("{0} / {1}",
                  DoublePart * Sign, Denominator);
         }
         // Если дробная часть отсутствовала
         else
            Console.WriteLine("{0}", WholePart * Sign);
      }

      // Функция, вычисляющая наибольший общий делитель
      static decimal NOD(decimal a, decimal b)
      {
         if(b == 0)
            return a;
         else
            return NOD(b, a % b);
      }
   }
}

Домашнее задание

  1. Ввести с клавиатуры число в диапазоне от 100 до 100000000 (введенное число проверяется). Подсчитать количество четных и нечетных цифр в этом числе в процентном отношении.
  2. Ввести с клавиатуры номер трамвайного билета (6-значное число) и проверить является ли данный билет счастливым.
  3. Ввести с клавиатуры дату своего рождения и текущую дату. Необходимо вычислить разницу в днях между этими датами.
  4. Вывести на консоль изображение государственного флага Швейцарии (например, в виде звездочек). Размер стороны флага задается случайным числом в диапазоне от 21 до 41.
 
Сверху Снизу