Запись урока:
Часть 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));
}
}
}
Вложения: Исходные коды
Comentários (12)
Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário
Качество видео мягко говоря не очень. Меню практически не видно. Не нужно пережимать так сильно.
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, взял пример из книги Г. Шилдта:
В операторе вывода указывает, что имя х отсутствует в текущем контексте. Как так? Переменная х объявлена, инициализирована.
При объявлении латинский символ, а при использовании русский.