Запись урока:
Часть 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. Полное руководство - также учебник прикреплен к теме.
Темы занятия:
Среда программирования Visual Studio 2010, основные возможности .
Объявление и инициализация переменных, типы данных (см. стр. 67 Шилдта).
Операторы (см. стр. 97 Шилдта):
- Арифметические операции(+, -, /, *, %);
- Инкремент/Декремент (i, i, --i, i--);
- Операции сравнения (==, !=, <, >, <=, >=);
- Логические операции(&&, ||);
- Условный оператор и оператор ветвления:
- Оператор if (см. стр. 121 Шилдта);
- Оператор switch (см. стр. 125);
- Операторы циклов:
- С предусловием - while (см. стр. 137);
- С постусловием - do-while (см. стр. 138);
- Оператор цикла for (см. стр. 129);
Код с занятия:см. Вложения
Домашнее задание:
- Прочитать об использовании модификаторов параметра ref и out (см. стр. 223 Шилдта; в Интернет-справочнике C# - ref, out)
- Скачать программу TortoiseHg.
- Дописать метод IsLeap для определения високосности года (см. статью на Википедии - "Год является високосным в двух случаях: либо он кратен 4, но при этом не кратен 100, либо кратен 400." Другой пример алгоритма расчета).
- Дописать в функцию DayInMonths параметр "год", учесть его для февраля на основании разработанного метода.
Полезные ссылки:
Пример решения домашней задачи.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Homework
{
class Program
{
enum Month
{
Jan, Feb, Mar,
Apr, May, Jun,
Jul, Aug, Sep,
Oct, Nov, Dec
}
static bool IsLeap(int year)
{
// Либо ((кратен 4) но (не кратен 100)) либо (кратен 400)
//if (((year%4 == 0) && (year%100 != 0)) || (year%400 == 0))
// return true;
//else
// return false;
return ((year%4 == 0) && (year%100 != 0)) || (year%400 == 0);
}
static int DaysInMonth(Month month, int year) //параметр "год" добавлен
{
switch (month)
{
case Month.Jan:
case Month.Mar:
case Month.May:
case Month.Jul:
case Month.Aug:
case Month.Oct:
case Month.Dec:
return 31;
case Month.Apr:
case Month.Jun:
case Month.Sep:
case Month.Nov:
return 30;
case Month.Feb:
//if (IsLeap(year))
// return 29;
//else
// return 28;
return IsLeap(year) ? 29 : 28;
// Используется тернарный оператор:
// http://ru.wikipedia.org/wiki/Тернарная_условная_операция
}
return 0;
}
static void Main(string[] args)
{
int year;
Month feb = Month.Feb; // переменная типа Month, в которой хранится Month.Feb,
// т.е. указан месяц февраль из перечисления enum
bool YearIsValid; // переменная для проверки корректности введенного года
do
{
Console.Write("Введите год: ");
string strYear = Console.ReadLine(); // считываем год
YearIsValid = int.TryParse(strYear, out year); // преобразуем в число и проверяем правильность преобразования
//из строкового формата в числовой в переменную year
} while (!YearIsValid);
Console.WriteLine("В феврале этого года {0} дней.", DaysInMonth(feb, year));
}
}
}
Вложения: Исходные коды
Kommentare (12)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Качество видео мягко говоря не очень. Меню практически не видно. Не нужно пережимать так сильно.
HD включали ?
Да, сорри, отключилось. Спасибо.
В 1 части при описании смены культур: Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); VC# подчеркивает красным "Thread" - Элемент Thread не существует в текущем контексте, и CultureInfo - не удалось найти имя типа или пространства имен "CultureInfo" (пропущена директива using или ссылка на сборку?) Когда я добавил в директиву using: using System.Threading; и using System.Globalization; ошибки пропали. Но лектор на этом внимание не акцентировал, у него при написании кода всё было гладко и он в директиву using ничего не добавлял. В чем нюанс?
В конце первой части шла речь о переменных типа string. Был приведен код суммирования строк: string name = "Иван"; name = name + " Петров"; Я захотел вывести на консоль "Его полное имя: Иван Петров", добавил код Console.WriteLine("Его полное имя: ", name); но в консоль выводится только "Его полное имя: ". Почему?
Вопрос по домашнему заданию:
этот код откомпилируется и ошибок не будет, но, конечно, он без смысленный. В нашем случае функция Isleap возвращает значение типа bool, это то, что нужно для принятия решения в операторе if. Код if (Isleap(year) == true) избыточен в этом смысле (т.е. результат операции == тоже bool, как и Isleap), если так понятнее, то можно и так писать, на результирующий исполняемый файл это не скажется, компилятор оптимизирует.
Это не входит в ДЗ, но всё же спрошу. Хотел написать код, чтобы с консоли вводить не только год, но и месяц. И чтобы в итоге выводилось сообщение: В (таком-то месяце) года (такого-то) (столько-то) дней. Написал вот такой код:
VC# определяет ошибку с string.TryParse - string не содержит определение для TryParse; и ошибка с DaysInMonth(Month month, year) - ни одна из перегрузок метода DaysInMonth не принимает "1" аргументов. Что посоветуете?
UsilaDobry, я бы сделал так:
Тип месяца взял специальный (который мы в рамках урока реализовали), не string. Чтобы преобразовать строку в значение типа нашего месяца, использую обращение к перечислимому типу, так:
И вторая ошибка, которая была, при выводе, это Вы пытались сделать явное преобразование типа, теперь это не нужно, но даже если нужно было бы, то это делается так: (Month)month но не так Month month т.е. тип надо указывать в скобках.
Хотел поиграть с модификатором ref, взял пример из книги Г. Шилдта:
В операторе вывода указывает, что имя х отсутствует в текущем контексте. Как так? Переменная х объявлена, инициализирована.
При объявлении латинский символ, а при использовании русский.