Структуры для работы со временем 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Структуры для работы со временем



Перечисления

Перечисления представляют собой множество именованных целочисленных констант. Перечисления существо облегчают труд программиста, позволяют не запоминать номера, например, цветов символов, а представлять их в виде символьных констант. Перечислимый тип данных объявляется с помощью ключевого слова enum.

enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

 

В.NET Framework большое количество встроенных перечислений. Вот некоторые из них:

● System.ConsoleColor - цвета консоли;

● System.ConsoleKeys - коды клавиш;

● System.IO.FileMode - режимы работы с файлами.

Goto

goto - один из самых старых способов повлиять на ход выполнения программы.

 

начало: … goto начало;

 

 

Хотя он прост в понимании, этот оператор не рекомендуется использовать при написании программ.

 


 

 

Условия

Задача. Ввести два числа и вывести наибольшее из них.

Алгоритм решения:

 

Пример программы, реализующей алгоритм:

 

using System;   namespace Lesson2_002 { class Program { static void Main() { int a, b, max; Console.WriteLine("Введите два целых числа"); a = Convert.ToInt32(Console.ReadLine()); b = Convert.ToInt32(Console.ReadLine()); if (a > b) { max = a; } else { max = b; }; Console.WriteLine("Наибольшее число {0}", max); } } }

 

 


 

 

В языке C# условие реализовано оператором if:

if (<условие>) { // что делать, если условие верно } else { // что делать, если условие неверно };

 

Особенности:

● вторая часть (else …) может отсутствовать (неполная форма);

● если в блоке один оператор, то можно убрать скобки { и }.

Неполная форму условного оператора:


 

using System;   namespace Lesson2_002 { class Program { static void Main() { int a, b, max; Console.WriteLine("Введите два целых числа"); a = Convert.ToInt32(Console.ReadLine()); b = Convert.ToInt32(Console.ReadLine()); max = a; if (b > max) max = b; Console.WriteLine("Наибольшее число {0}", max); } } }

 

Тернарная операция

Тернарный оператор (?) относится к числу самых примечательных в C#. Он представляет собой условный оператор и часто используется вместо определенных видов конструкций if-then-else. Ниже приведена общая форма этого оператора:

Выражение1? Выражение2: ВыражениеЗ;

Если Выражение1 - истинно, то берется Выражение2, иначе берется Выражение3.

Вывод на экран текста четное или нечетное число:

Console.WriteLine(x+" "+(x%2==0)?"Четное":"Нечетное");

 

Примеры

Нахождение максимального из двух чисел:

Вариант 1:

static void Main(string[] args) { int a = 100; int b = 200; int max=a>b? a:b; }

 

Вариант 2:

  static void Main(string[] args) { int a = 100; int b = 200; int max; if (a > b) max=a;else max=b; }

Четность числа

Написать метод, проверяющий четность числа:

static bool Odd(int a) { return a%2==0; }

 

Оператор выбора

Оператор switch предназначен для разветвления процесса выполнения программы:

int caseSwitch = 1; switch (caseSwitch) { case 1: Console.WriteLine("Case 1"); break; case 2: Console.WriteLine("Case 2"); break; default: Console.WriteLine("Default case"); break; }

Пример использования switch. Месяц года.

Вводится число, программа печатает, какой это месяц года:

static void Main() {   int m = 6; string s; switch (m) { case 1: case 2: case 12: s="Зима"; break; case 3: case 4: case 5: s="Весна"; break; case 6: case 7: case 8: s = "Лето"; break; case 9: case 10: case 11: s="Осень"; break; default: s="Ничего"; break; } Console.WriteLine(s); }

Циклы

Цикл – это многократное выполнение одинаковой последовательности действий.

В C# доступны 4 разновидности цикла:

● цикл while;

● цикл do while;

● цикл for;

● цикл foreach.

Цикл while

Задача: Ввести целое число (<2000000000) и определить количество цифр в нем.

 

 

int n=int.Parse(Console.ReadLine()); int count=0; while(n!=0) { count++; n=n/10;// так как n-целое, деление целочисленное } Console.WriteLine(count);

 

Формат оператора while:

while (условие) { оператор; }

 

 

 

● можно использовать сложные условия;

● если в теле цикла только один оператор, скобки { и } можно не писать.

Цикл do while

Задача. Организовать ввод данных, ограничив значения числами от 1 до 99.

int a,count=0; do { Console.Write("Введите возраст:"); a=int.Parse(Console.ReadLine()); count++; } while(a<1 || a>99);// Повторять пока условие истинно(true) Console.WriteLine("Вы сделали "+count+" попыток ввода");

 

do { операторы; } while (условие);

 

Тело цикла всегда выполняется хотя бы один раз.


 

Оператор цикла for

Задача. Вывести на экран 5 раз слово «Привет».

 

 

for(int i=0;i<5;i++) { Console.Write(i+" "); Console.WriteLine("Привет"); }

 

 

for (инициализация; условие; итерация) { оператор; }

 

● Если тело цикла состоит из одного оператора, то операторные скобки { и } можно не писать:

● Условие каждый раз пересчитывается.


 

Пример задачи:

Даны два целых числа A и B (A меньше B). Вывести в порядке убывания все целые числа от B до A, а также количество N и сумму S этих чисел.

static void Main() { int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); int k = 0,s=0; for (int i = b; i >= a; i--) { Console.Write(i + " "); k++; s=s+i; } Console.WriteLine("\nk={0} s={1}",k,s); }

Оператор цикла forech

Оператор цикла foreach служит для циклического обращения к элементам коллекции, которая представляет собой группу объектов.

foreach (тип имя_переменной_цикла in коллекция) оператор;

 

using System;   namespace @foreach { class Program { static void Main(string[] args) { string s = "Hello, Foreach"; foreach (char c in s) Console.Write("{0} ", c); } } }

 

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

Continue, break

● continue и break - операторы для управления циклами;

● continue - выполнение следующей итерации цикла;

● break - прерывание текущей итерации цикла.

using System;   namespace @foreach { class Program { static void Main(string[] args) { string s = "1. Привет, Foreach. \n2. А так же break и continue! А это не выведется"; foreach (char c in s) { // Пропускаем цифры if (c >= '0' && c<='9') continue; // Если встречаем! прерываем цикл if (c == '!') break; Console.Write("{0} ", c); } } } }

 


 

Вложенные циклы

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

using System;   namespace for_for2 { class Program { static void Main(string[] args) { for (int i = 0; i < 80; i++) for (int j = 0; j < 24; j++) { Console.SetCursorPosition(i, j);//устанавливаем позицию курсора Console.Write('*'); System.Threading.Thread.Sleep(20);//Делаем паузу } Console.ReadKey(); } } }

 

Вложенные циклы будут продемонстрированы при работе с двумерными массивами.

*Рекурсия

Рекурсией называется механизм работы программы, в котором для решения задачи из подпрограммы вызывается та же самая подпрограмма. Этот способ является альтернативой циклам и в некоторых случаях позволяет написать весьма красивые алгоритмы решения задачи.
Следует понимать, что любой рекурсивный метод можно преобразовать в обычный метод. И практически любой метод можно преобразовать в рекурсивный, если выявить рекуррентное соотношение между вычисляемыми в методе значениями.

Пример 1. Цикл с помощью рекурсии

// Пример вывода чисел от a до b с использованием рекурсивного алгоритма static void Loop(int a, int b) { Console.Write("{0,4} ",a); if (a<b) Loop(a+1,b); }

Пример 2. Найти сумму цифр числа A.

Получить последнюю цифру можно, если найти остаток от деления числа на 10. В связи с этим для разложения числа на составляющие его цифры можно использовать следующий алгоритм:

1. Находим остаток при делении числа А на 10, т.е. получаем крайнюю правую цифру числа;

2. Находим целую часть числа при делении A на 10, т.е. отбрасываем от числа A крайнюю правую цифру;

3. Если преобразованное A > 0, то переходим на пункт 1. Иначе число равно нулю и отделять от него больше нечего.

Способ 1. Нерекурсивный

static long Sum(long a)// нерекурсивный метод { long s=0; while (a>0) // пока a больше нуля { s=s+a%10; // добавляем к сумме последнюю цифру числа а a=a/10; // отбрасываем от числа а последнюю цифру } return s; // возвращаем в качестве результата сумму цифр числа a }

 

Способ 2. Рекурсивный

static long SumCyfr(long a) // рекурсивный метод { if (a==0) // если a =0, то return 0; // возвращаем 0 else return SumCyfr(a/10)+ a%10; // иначе, вызываем рекурсивно сами себя }

 

Практическая часть урока

Задача 3. Сложные условия

С клавиатуры вводится возраст от 1 до 50. Требуется написать программу, которая правильно определит, какое слово нужно написать после возраста.

Вам 11 лет.
Вам 21 год.
Вам 33 года.

static void Main(string[] args) { int x; Console.WriteLine("Введите возраст:"); x = int.Parse(Console.ReadLine()); string s = "Вам "+x; // Год - когда заканчивается на один, кроме 11. if (x % 10 == 1 && x!=11) s += " год"; // Года if (x==11 || x >= 2 && x<=4 || (x >= 22 && x <= 24) || (x >= 32 && x <= 34) || (x > 41 && x < 45)) s += " года"; // Лет if ((x >= 5 && x <= 20) || (x >= 25 && x <= 30) || (x >= 35 && x < 41) || (x > 44 && x < 51)) s += " лет"; Console.WriteLine(s); }

 

Переделайте программу в метод. В качестве параметра методу передается возраст, а метод возвращает строку.

Дополнительные материалы

1. Демоверсии ГИА по информатике;

2. Индекс массы тела на Википедии.

3. Алгоритмы. Теория и практическое применение. Род Стивенс. Глава “Рекурсии”.

4. “Ханойская башня” на Википедия.

Используемая литература

Для подготовки данного методического пособия были использованы следующие ресурсы:

1. Т.А. Павловская. “Программирование на языке высокого уровня”, 2009 г.;

2. Г. Шилдт. “C# 4.0. Полное руководство”;

3. Алгоритмы. Теория и практическое применение. Род Стивенс, Москва 2016 г.

4. MSDN.

Перечисления

Перечисления представляют собой множество именованных целочисленных констант. Перечисления существо облегчают труд программиста, позволяют не запоминать номера, например, цветов символов, а представлять их в виде символьных констант. Перечислимый тип данных объявляется с помощью ключевого слова enum.

enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

 

В.NET Framework большое количество встроенных перечислений. Вот некоторые из них:

● System.ConsoleColor - цвета консоли;

● System.ConsoleKeys - коды клавиш;

● System.IO.FileMode - режимы работы с файлами.

Goto

goto - один из самых старых способов повлиять на ход выполнения программы.

 

начало: … goto начало;

 

 

Хотя он прост в понимании, этот оператор не рекомендуется использовать при написании программ.

 


 

 

Условия

Задача. Ввести два числа и вывести наибольшее из них.

Алгоритм решения:

 

Пример программы, реализующей алгоритм:

 

using System;   namespace Lesson2_002 { class Program { static void Main() { int a, b, max; Console.WriteLine("Введите два целых числа"); a = Convert.ToInt32(Console.ReadLine()); b = Convert.ToInt32(Console.ReadLine()); if (a > b) { max = a; } else { max = b; }; Console.WriteLine("Наибольшее число {0}", max); } } }

 

 


 

 

В языке C# условие реализовано оператором if:

if (<условие>) { // что делать, если условие верно } else { // что делать, если условие неверно };

 

Особенности:

● вторая часть (else …) может отсутствовать (неполная форма);

● если в блоке один оператор, то можно убрать скобки { и }.

Неполная форму условного оператора:


 

using System;   namespace Lesson2_002 { class Program { static void Main() { int a, b, max; Console.WriteLine("Введите два целых числа"); a = Convert.ToInt32(Console.ReadLine()); b = Convert.ToInt32(Console.ReadLine()); max = a; if (b > max) max = b; Console.WriteLine("Наибольшее число {0}", max); } } }

 

Тернарная операция

Тернарный оператор (?) относится к числу самых примечательных в C#. Он представляет собой условный оператор и часто используется вместо определенных видов конструкций if-then-else. Ниже приведена общая форма этого оператора:

Выражение1? Выражение2: ВыражениеЗ;

Если Выражение1 - истинно, то берется Выражение2, иначе берется Выражение3.

Вывод на экран текста четное или нечетное число:

Console.WriteLine(x+" "+(x%2==0)?"Четное":"Нечетное");

 

Примеры

Нахождение максимального из двух чисел:

Вариант 1:

static void Main(string[] args) { int a = 100; int b = 200; int max=a>b? a:b; }

 

Вариант 2:

  static void Main(string[] args) { int a = 100; int b = 200; int max; if (a > b) max=a;else max=b; }

Четность числа

Написать метод, проверяющий четность числа:

static bool Odd(int a) { return a%2==0; }

 

Оператор выбора

Оператор switch предназначен для разветвления процесса выполнения программы:

int caseSwitch = 1; switch (caseSwitch) { case 1: Console.WriteLine("Case 1"); break; case 2: Console.WriteLine("Case 2"); break; default: Console.WriteLine("Default case"); break; }

Пример использования switch. Месяц года.

Вводится число, программа печатает, какой это месяц года:

static void Main() {   int m = 6; string s; switch (m) { case 1: case 2: case 12: s="Зима"; break; case 3: case 4: case 5: s="Весна"; break; case 6: case 7: case 8: s = "Лето"; break; case 9: case 10: case 11: s="Осень"; break; default: s="Ничего"; break; } Console.WriteLine(s); }

Циклы

Цикл – это многократное выполнение одинаковой последовательности действий.

В C# доступны 4 разновидности цикла:

● цикл while;

● цикл do while;

● цикл for;

● цикл foreach.

Цикл while

Задача: Ввести целое число (<2000000000) и определить количество цифр в нем.

 

 

int n=int.Parse(Console.ReadLine()); int count=0; while(n!=0) { count++; n=n/10;// так как n-целое, деление целочисленное } Console.WriteLine(count);

 

Формат оператора while:

while (условие) { оператор; }

 

 

 

● можно использовать сложные условия;

● если в теле цикла только один оператор, скобки { и } можно не писать.

Цикл do while

Задача. Организовать ввод данных, ограничив значения числами от 1 до 99.

int a,count=0; do { Console.Write("Введите возраст:"); a=int.Parse(Console.ReadLine()); count++; } while(a<1 || a>99);// Повторять пока условие истинно(true) Console.WriteLine("Вы сделали "+count+" попыток ввода");

 

do { операторы; } while (условие);

 

Тело цикла всегда выполняется хотя бы один раз.


 

Оператор цикла for

Задача. Вывести на экран 5 раз слово «Привет».

 

 

for(int i=0;i<5;i++) { Console.Write(i+" "); Console.WriteLine("Привет"); }

 

 

for (инициализация; условие; итерация) { оператор; }

 

● Если тело цикла состоит из одного оператора, то операторные скобки { и } можно не писать:

● Условие каждый раз пересчитывается.


 

Пример задачи:

Даны два целых числа A и B (A меньше B). Вывести в порядке убывания все целые числа от B до A, а также количество N и сумму S этих чисел.

static void Main() { int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); int k = 0,s=0; for (int i = b; i >= a; i--) { Console.Write(i + " "); k++; s=s+i; } Console.WriteLine("\nk={0} s={1}",k,s); }

Оператор цикла forech

Оператор цикла foreach служит для циклического обращения к элементам коллекции, которая представляет собой группу объектов.

foreach (тип имя_переменной_цикла in коллекция) оператор;

 

using System;   namespace @foreach { class Program { static void Main(string[] args) { string s = "Hello, Foreach"; foreach (char c in s) Console.Write("{0} ", c); } } }

 

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

Continue, break

● continue и break - операторы для управления циклами;

● continue - выполнение следующей итерации цикла;

● break - прерывание текущей итерации цикла.

using System;   namespace @foreach { class Program { static void Main(string[] args) { string s = "1. Привет, Foreach. \n2. А так же break и continue! А это не выведется"; foreach (char c in s) { // Пропускаем цифры if (c >= '0' && c<='9') continue; // Если встречаем! прерываем цикл if (c == '!') break; Console.Write("{0} ", c); } } } }

 


 

Вложенные циклы

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

using System;   namespace for_for2 { class Program { static void Main(string[] args) { for (int i = 0; i < 80; i++) for (int j = 0; j < 24; j++) { Console.SetCursorPosition(i, j);//устанавливаем позицию курсора Console.Write('*'); System.Threading.Thread.Sleep(20);//Делаем паузу } Console.ReadKey(); } } }

 

Вложенные циклы будут продемонстрированы при работе с двумерными массивами.

*Рекурсия

Рекурсией называется механизм работы программы, в котором для решения задачи из подпрограммы вызывается та же самая подпрограмма. Этот способ является альтернативой циклам и в некоторых случаях позволяет написать весьма красивые алгоритмы решения задачи.
Следует понимать, что любой рекурсивный метод можно преобразовать в обычный метод. И практически любой метод можно преобразовать в рекурсивный, если выявить рекуррентное соотношение между вычисляемыми в методе значениями.

Пример 1. Цикл с помощью рекурсии

// Пример вывода чисел от a до b с использованием рекурсивного алгоритма static void Loop(int a, int b) { Console.Write("{0,4} ",a); if (a<b) Loop(a+1,b); }

Пример 2. Найти сумму цифр числа A.

Получить последнюю цифру можно, если найти остаток от деления числа на 10. В связи с этим для разложения числа на составляющие его цифры можно использовать следующий алгоритм:

1. Находим остаток при делении числа А на 10, т.е. получаем крайнюю правую цифру числа;

2. Находим целую часть числа при делении A на 10, т.е. отбрасываем от числа A крайнюю правую цифру;

3. Если преобразованное A > 0, то переходим на пункт 1. Иначе число равно нулю и отделять от него больше нечего.

Способ 1. Нерекурсивный

static long Sum(long a)// нерекурсивный метод { long s=0; while (a>0) // пока a больше нуля { s=s+a%10; // добавляем к сумме последнюю цифру числа а a=a/10; // отбрасываем от числа а последнюю цифру } return s; // возвращаем в качестве результата сумму цифр числа a }

 

Способ 2. Рекурсивный

static long SumCyfr(long a) // рекурсивный метод { if (a==0) // если a =0, то return 0; // возвращаем 0 else return SumCyfr(a/10)+ a%10; // иначе, вызываем рекурсивно сами себя }

 

Структуры для работы со временем

В.NET Framework огромное количество уже готовых структур. Как создавать собственные структуры познакомимся на следующем уроке, а сейчас познакомимся с одной из них:

DateTime - хранит дату и время.

Особенно полезно знать, что при вычитании двух структур DateTime мы получаем промежуток времени. Это позволяет измерять время выполнения программы засекая время в начале и в конце программы.

DateTime start=DateTime.Now; … DateTime finish=DateTime.Now; Console.WriteLine(finish-start);

 



Поделиться:


Последнее изменение этой страницы: 2016-12-29; просмотров: 299; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.162.216 (0.102 с.)