Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Практический пример. Перевод секунд в дни, часы, минуты и секунды.

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

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.


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru