Запись урока:
Часть 1
[vk]http://vk.com/video_ext.php?oid=-66674957&id=167885989&hash=05201124f4ff1c84&hd=3[/vk]
Часть 2
[vk]http://vk.com/video_ext.php?oid=-66674957&id=167885995&hash=c70bf43c89e43ea0&hd=3[/vk]
Темы занятия:
- Контроль версий при помощи TortoiseHg.
- Отличие фундаментальных (int, double и т.д.) типов данных от нефундаментальных (DateTime, TimeSpan). Работа с датой-временем (см. справочник C# DateTime и TimeSpan).
- Массивы: цель использования, инициализация (стр. 178 Шилдта или см. справочник C# "массивы").
- Контейнеры list<>: принцип работы, отличие от массивов (см. справочник C# List<>).
- Работа с файлами (FileStream - стр. 441, StreamReader - стр. 451, или см. доп. файл во вложениях).
- Создание пользовательского класса.
- Методы (стр. 155 Шилдта), конструкторы (стр. 166 Шилдта) и свойства класса (стр. 313 Шилдта) (либо по классам см. доп. файл во вложениях).
Домашнее задание:
Модифицировать метод SmaIndicator.Add() таким образом, чтобы избавиться от цикла при подсчёте.
Изробразить любым доступным способом иерархию классов:
- List, Set, Dictionary,
- SortedList, SortedSet, SortedDictionary,
- LinkedList, Queue, Stack, HashSet
- Прочитать в книге главу, посвящённую классам (глава 6).
Полезные материалы:
- Исключения.
- Оператор цикла foreach - стр. 139 Шилдта
Решение домашней задачи:
public void Add(decimal newValue)
{
// 1. Получить старое значение суммы
decimal sum = Value * _buffer.Count;
// 2. Добавить в неё новое значение (+ в буфер)
sum += newValue;
_buffer.Enqueue(newValue);
// 3. Вычесть самое старое значение (- из буфера), если надо
if (_buffer.Count > Length)
sum -= _buffer.Dequeue();
// 4. Получить новое среднее
Value = sum / _buffer.Count;
// (sum*Len+x-y)/Len => sum + (x-y)/Len
}
Вложения: Исходные коды
Комментарии (9)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Добрый день! После отработки кода части первой 2 семинара в проводнике на файле progam.cs появился восклицательный знак. Что это значит?
Так бывает, если файл переименован или удален. Можно снова распаковать архив и использовать исходный проект, либо попробовать восстановить проект через восстановление нужного файла в соответствующем каталоге.
В данном коде
using (var reader = File.OpenText(@"../../gazp.txt")) { while (!reader.EndOfStream) { string line = reader.ReadLine(); string[] items = line.Split(';');
в строке using... при компиляции выдается сообщение "Необработанное исключение типа "System.IO.FileNotFoundException" в mscorlib.dll", у лектора такого нюанса нет. В чем фишка? Пробую запустить отладку построчно через F10, на этой строке ридер не создается, а появляется то же сообщение.
Исключение System.IO.FileNotFoundException свидетельствует о том, что не найден запрашиваемый файл (msdn).
Просмотрев 2-ю часть, вынес класс Candle из кода Programm в файл Candle.cs и тут же появились две ошибки в работающем коде:
При добавлении свечки компилятор сообщает, что элемент candle не существует в текущем контексте, хотя этот элемент выше строчкой объявлен и инициализирован.
Указаны разные имена в объявлении и использовании, какие-то символы разные латиница/русский. Скопируйте имя объявления в места использования.
Вопрос по ДЗ (домашнему заданию). Вы используете методы _buffer.Enqueue(newValue); и _buffer.Dequeue();. У меня их нет, хотя стоит Visual Studio 2010 Ultimate, resharper. Использую .NET Framework 4. Почему я их не вижу?
Еще вопрос - Как вставлять код программы в этом форуме?
PS. Ваш код ДЗ можно сделать короче на одну переменную (Value) и одну операцию умножения (decimal sum = Value * _buffer.Count;), если выполнять деление при return ( return sum / Length;)
Посмотрел 3 видеосеминар. Вопросы сняты. Они возникли потому, что здесь приведены не все изменения в коде (т.е решение приведено не полностью). Для тех, кто только изучает С# лучше было привести решение полностью или сказать, что полностью решение будет рассмотрено на следующем видеосеминаре.