1 семинар
Atom
13.02.2013


Запись урока:

Часть 1

[vk]http://vk.com/video_ext.php?oid=-66674957&id=167885987&hash=d536573735784063&hd=3[/vk]

Часть 2

[vk]http://vk.com/video_ext.php?oid=-66674957&id=167885988&hash=edabb2295af7cb8b&hd=3[/vk]

Рекомендованный учебник:
Герберт Шилдт - C# 4.0. Полное руководство - также учебник прикреплен к теме.


Темы занятия:
1. Среда программирования Visual Studio 2010, основные возможности .

2. Объявление и инициализация переменных, типы данных (см. стр. 67 Шилдта).

3. Операторы (см. стр. 97 Шилдта):
  • Арифметические операции(+, -, /, *, %);
  • Инкремент/Декремент (++i, i++, --i, i--);
  • Операции сравнения (==, !=, <, >, <=, >=);
  • Логические операции(&&, ||);

4. Условный оператор и оператор ветвления:
  • Оператор if (см. стр. 121 Шилдта);
  • Оператор switch (см. стр. 125);

5. Операторы циклов:
  • С предусловием - while (см. стр. 137);
  • С постусловием - do-while (см. стр. 138);
  • Оператор цикла for (см. стр. 129);


Код с занятия: см. Вложения

Домашнее задание:
1. Прочитать об использовании модификаторов параметра ref и out (см. стр. 223 Шилдта; в Интернет-справочнике C# - ref, out)
2. Скачать программу TortoiseHg.
3. Дописать метод IsLeap для определения високосности года (см. статью на Википедии - "Год является високосным в двух случаях: либо он кратен 4, но при этом не кратен 100, либо кратен 400." Другой пример алгоритма расчета).
4. Дописать в функцию DayInMonths параметр "год", учесть его для февраля на основании разработанного метода.

Полезные ссылки:
1. Соглашение по оформлению кода C#.
2. Форум для получения быстрых ответов.
3. Культуры.

Пример решения домашней задачи.


Вложения:
Исходные коды

Теги:


Спасибо:


1 2  >
av_zhuravlev

Фотография
Дата: 14.02.2013
Ответить


Качество видео мягко говоря не очень. Меню практически не видно. Не нужно пережимать так сильно.
Спасибо:

Самунджян Артем

Фотография
Дата: 14.02.2013
Ответить


HD включали ?
Спасибо:

av_zhuravlev

Фотография
Дата: 14.02.2013
Ответить


samujan Перейти
HD включали ?


Да, сорри, отключилось. Спасибо.
Спасибо:

UsilaDobry

Фотография
Дата: 31.03.2013
Ответить


В 1 части при описании смены культур: Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); VC# подчеркивает красным "Thread" - Элемент Thread не существует в текущем контексте, и CultureInfo - не удалось найти имя типа или пространства имен "CultureInfo" (пропущена директива using или ссылка на сборку?)
Когда я добавил в директиву using: using System.Threading; и using System.Globalization; ошибки пропали. Но лектор на этом внимание не акцентировал, у него при написании кода всё было гладко и он в директиву using ничего не добавлял. В чем нюанс?
Спасибо:

UsilaDobry

Фотография
Дата: 31.03.2013
Ответить


В конце первой части шла речь о переменных типа string. Был приведен код суммирования строк: string name = "Иван"; name = name + " Петров"; Я захотел вывести на консоль "Его полное имя: Иван Петров", добавил код Console.WriteLine("Его полное имя: ", name); но в консоль выводится только "Его полное имя: ". Почему?
Спасибо:

IvanB

Фотография
Дата: 01.04.2013
Ответить


UsilaDobry Перейти
...
Когда я добавил в директиву using: using System.Threading; и using System.Globalization; ошибки пропали. Но лектор на этом внимание не акцентировал, у него при написании кода всё было гладко и он в директиву using ничего не добавлял. В чем нюанс?

Лектор использовал ReSharper, это дополнение (плагин), разработанное компанией JetBrains для повышения продуктивности работы в Microsoft Visual Studio (wiki). Система выводит подсказки в виде всплывающих панелей, нажав на пункт в этой панели пространство имен автоматически добавляется.

UsilaDobry Перейти
...Я захотел вывести на консоль "Его полное имя: Иван Петров", добавил код Console.WriteLine("Его полное имя: ", name); но в консоль выводится только "Его полное имя: ". Почему?

Потому что правильно так:
Console.WriteLine("Его полное имя: {0}", name); (информация)
или так:
Console.WriteLine("Его полное имя: " + name);
Спасибо: UsilaDobry

UsilaDobry

Фотография
Дата: 01.04.2013
Ответить


Вопрос по домашнему заданию:
1. Почему в операторе switch при проверке условия високосности предлагается код if (Isleap(year)), а не if (Isleap(year) == true)?
2. В сети предлагается условие определение високосности года, как if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)). К примеру, возьмем високосный год 2100, он кратен 4, он кратен 100, и он не кратен 400? Как быть с этим?
Спасибо:

IvanB

Фотография
Дата: 01.04.2013
Ответить


UsilaDobry Перейти
Вопрос по домашнему заданию:
1. Почему в операторе switch при проверке условия високосности предлагается код if (Isleap(year)), а не if (Isleap(year) == true)?

Потому что оператор if проверяет значение в скобках true/false и в зависимости от этого выбирает ту или иную ветку кода. Т.е. можно написать и так:
Код
if (true)
{}
else
{}

этот код откомпилируется и ошибок не будет, но, конечно, он без смысленный.
В нашем случае функция Isleap возвращает значение типа bool, это то, что нужно для принятия решения в операторе if.
Код if (Isleap(year) == true) избыточен в этом смысле (т.е. результат операции == тоже bool, как и Isleap), если так понятнее, то можно и так писать, на результирующий исполняемый файл это не скажется, компилятор оптимизирует.
UsilaDobry Перейти
2. В сети предлагается условие определение високосности года, как if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)). К примеру, возьмем високосный год 2100, он кратен 4, он кратен 100, и он не кратен 400? Как быть с этим?

Судя по статье из Википедии 2100 год не високосный и это соответствует Вашему коду.
Спасибо: UsilaDobry

UsilaDobry

Фотография
Дата: 01.04.2013
Ответить


Это не входит в ДЗ, но всё же спрошу. Хотел написать код, чтобы с консоли вводить не только год, но и месяц. И чтобы в итоге выводилось сообщение: В (таком-то месяце) года (такого-то) (столько-то) дней.
Написал вот такой код:
Код

            int year;
            string month;
            bool YearIsValid;
            bool MonthIsValid;
            do
            {
                Console.Write("Введите год: ");
                string strYear = Console.ReadLine();
                YearIsValid = int.TryParse(strYear, out year);
                Console.Write("Введите месяц в формате Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec");
                string strMonth = Console.ReadLine();
                MonthIsValid = string.TryParse(strMonth, out month);
            } while (!YearIsValid && !MonthIsValid);
            Console.WriteLine("В месяце {0} года {1} {2} дней.", month, year, DaysInMonth(Month month, year));

VC# определяет ошибку с string.TryParse - string не содержит определение для TryParse; и ошибка с DaysInMonth(Month month, year) - ни одна из перегрузок метода DaysInMonth не принимает "1" аргументов. Что посоветуете?
Спасибо:

IvanB

Фотография
Дата: 01.04.2013
Ответить


UsilaDobry, я бы сделал так:
Код
int year;
Month month;
bool YearIsValid;
bool MonthIsValid;
do
{
   Console.Write("Введите год: ");
   string strYear = Console.ReadLine();
   YearIsValid = int.TryParse(strYear, out year);
   Console.Write("Введите месяц в формате Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec : ");
   string strMonth = Console.ReadLine();
   MonthIsValid = Month.TryParse(strMonth, out month);
} while (!YearIsValid && !MonthIsValid);

Console.WriteLine(
   "В месяце {0} года {1} {2} дней.", 
   month, 
   year, 
   DaysInMonth(month, year)
   );

Тип месяца взял специальный (который мы в рамках урока реализовали), не string.
Чтобы преобразовать строку в значение типа нашего месяца, использую обращение к перечислимому типу, так:
Код
Month.TryParse(strMonth, out month);

И вторая ошибка, которая была, при выводе, это Вы пытались сделать явное преобразование типа, теперь это не нужно, но даже если нужно было бы, то это делается так:
(Month)month
но не так
Month month
т.е. тип надо указывать в скобках.
Спасибо: UsilaDobry
1 2  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy