[VK]http://vk.com/video_ext.php?oid=-66674957&id=167881046&hash=9de1925dbafbc515&hd=3[/VK]
Темы занятия 2 (Объявление и вызов методов. Знакомство со структурами и классами.)
• Разбор домашнего задания • Функции и их разновидности • Передача параметров по значению и по ссылке • Параметры ref, out. Использование params. • var + foreach • Структуры и классы, введение. public/private • static методы
Код из урока:
using System;
namespace TestApp2
{
internal class Program
{
const int N = 10;
const int lot = 10;
static int[] my_positions = new int[N] {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};
static bool IsPositionBad(int positionNumber, int[] someprices)
{
return my_positions[positionNumber] > someprices[positionNumber];
}
static void ClosePosition(int positionToCloseNumber, int[] someprices)
{
// Something, we close position, imagine complex code here
Console.WriteLine(my_positions[positionToCloseNumber] - someprices[positionToCloseNumber]);
// my_positions[positionToCloseNumber] = -1;
// someprices[positionToCloseNumber] = 0;
}
static void payTaxes(ref double sum)
{
sum *= 0.87;
Console.WriteLine(sum);
}
static void getTotal(out int total)
{
total = 0;
for (int i = 0; i < N; i++)
{
total = my_positions[i] * lot;
}
}
static int getTotalOf(params int[] positions) // getTotalOf(int a, int b, int c ...)
{
int sum = 0;
foreach (var i in positions)
{
sum += i*lot;
}
return sum;
}
private static void Main(string[] args)
{
var prices = new int[N];
var r = new Random();
for (int i = 0; i < N; i++)
{
prices[i] = my_positions[i] + r.Next(-10, 10);
}
for (int i = 0; i < N; i++)
{
if (IsPositionBad(i, prices)) ClosePosition(i, prices);
}
//------------------------------
Console.WriteLine("---------------------");
for (int i = 0; i < N; i++)
{
Console.WriteLine("{0} \t {1}", my_positions[i], prices[i]);
}
Console.WriteLine("---------------------");
double my_sum = 100.25;
payTaxes(ref my_sum);
Console.WriteLine(my_sum);
int main_total;
getTotal(out main_total);
Console.WriteLine(main_total);
int a = 900;
int paramsTotal = getTotalOf(200, a, 300, 400);
Console.WriteLine(paramsTotal);
Console.ReadLine();
}
}
}
Домашнее задание
Реализовать структуру JapanCandles, 2-3 обычных метода и 1-2 статических. Заготовка ниже.
struct JapanCandles
{
public double openPrice;
public double closePrice;
public double minPrice, maxPrice;
public CandleColor isBlack;
//2-3
public bool isDodje(JapanCandles candle)
{
return Math.Abs(openPrice - closePrice) < Double.Epsilon;
}
//1-2
static public int countHammers(JapanCandles[] candles)
{
// counting code here
return 0;
}
static public void fillRandom(JapanCandles[] candles)
{
var r = new Random();
for (int i = 0; i < candles.Count(); i++)
{
candles[i].openPrice = 100 + Math.Sin(i*10);
candles[i].closePrice = 150 + Math.Sin(i * 10);
}
}
}
Решение домашнего задания
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Hometask2
{
class Program
{
private const int N = 10;
enum CandleColor
{
BLACK, WHITE
}
struct JapanCandles
{
public double openPrice;
public double closePrice;
public double minPrice, maxPrice;
public CandleColor color;
//2-3
public bool isDodje() // Этот метод будет работать с полями той структуры, для которой будет вызван
{
return Math.Abs(openPrice - closePrice) < Double.Epsilon;
}
public bool isMarubozu() // аналогично, проверяем цвет и разчитываем длину хвостов
{
if (color == CandleColor.BLACK)
return (openPrice / maxPrice) > 0.9 && (minPrice/closePrice) > 0.9;
return (closePrice / maxPrice) > 0.9 && (minPrice/openPrice) > 0.9;
}
public bool isUpHammer()
{
if (color == CandleColor.BLACK)
return (openPrice / maxPrice) > 0.8 && (minPrice / closePrice) < 0.8;
return (closePrice/maxPrice) > 0.8 && (minPrice/openPrice) < 0.8;
}
//1-2
static public int countMarubozus(JapanCandles[] candles) // А вот статический метод уже должен принимать параметры
{
int count = 0;
foreach (var japanCandle in candles) // проходим по всему массиву
{
if (japanCandle.isMarubozu()) count++; // используем нестатичный метод для каждого элемента
}
return count;
}
static public int countUpHammers(JapanCandles[] candles) // аналогично
{
int count = 0;
foreach (var japanCandle in candles)
{
if (japanCandle.isUpHammer()) count++;
}
return count;
}
static public void fillRandom(JapanCandles[] candles) // случайное заполнение
{
var r = new Random();
double val;
for (int i = 0; i < candles.Count(); i++)
{
val = 100 + Math.Sin(i*10); // Пусть синус
candles[i].openPrice = val + r.Next(-10,10);
candles[i].closePrice = val + r.Next(-10, 10);
candles[i].minPrice = Math.Min(candles[i].openPrice, candles[i].closePrice) + r.Next(-15, -5);
candles[i].maxPrice = Math.Max(candles[i].openPrice, candles[i].closePrice) + r.Next(5, 15);
if (candles[i].closePrice > candles[i].openPrice) candles[i].color = CandleColor.WHITE;
else candles[i].color = CandleColor.BLACK;
}
}
}
static void Main(string[] args)
{
JapanCandles[] candles = new JapanCandles[N]; // создаем, как обычный массив встроенного типа
JapanCandles.fillRandom(candles); // тут 2 вызова статичных методов, потому имя структуры, а не массива
int marz = JapanCandles.countMarubozus(candles);
Console.WriteLine("{0} marubozus in candles", marz);
Console.ReadLine();
}
}
}
Вложения: Проект
Комментарии (4)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Подготовка инструктора видео просто ужасная:
Посмотрите пару бесплатных курсов от Google, CodeSchool, CodeAcademy не говоря уже про Linda и т.д. - подача информации также важна, как и качество. Сделать 5 разлиных, но структурированных примеров лучше, чем 1 час видео с кодом на несколько листов и добавлением/удалением методов, переменных и т.д. и перескакиванием вверх/вниз
Видно, что как программист инструктор компетентный, но этого мало, так как задача передать опыт, а не просто "отчитать" лекцию на импровизированных примерах
P.S. Свечи имеют параметры OHLC (Open, High, Low, Close)
Абсолютно согласен с devruss, смотреть очень неприятно.
Спасибо за конструктивные замечания, будем совершенствоваться.
Я бы хотел возразить критике devruss'а! Как раз понимание общей структуры видео у автора есть, и очень неплохое! Да, способ передачи материала у автора необычный, его можно охарактеризовать не как сухая начитка лекции, а как демонстрация практического применения языка на примерах! Автор хорошо показывает краеугольные моменты и разбирает примеры ошибок (как например с ссылочными/обычными типами данных) которые могут встретиться нам, ученикам, при самостоятельном программировании! Лично мне после просмотра все стало понятно, хотя язык с# не знаю и книжек не читал.
//Сделать 5 разлиных, но структурированных примеров лучше, чем 1 час видео с кодом на несколько листов и добавлением/удалением методов, //переменных и т.д. и перескакиванием вверх/вниз // //Видно, что как программист инструктор компетентный, но этого мало, так как задача передать опыт, а не просто "отчитать" лекцию на //импровизированных примерах
По мне лучше как раз такой код на несколько листов с добавлением/удалением чем начитка лекции в стиле "по книге Г.Шилдта". Да, требуется внимательное слежение за мыслью автора, но тогда чудесным образом листание кода вверх/вниз приобретет для вас смысл и добавит понимания.
//- "чтобы не писать совсем бред" означает, что примеры непродуманы и неподготовлены //- абсолютно монотонный голос
Здесь согласен, хотя примеры все же продуманы, но действительно автор видео не подготовлен и рассказывает "видео на лету". И слышно тихо, приходиться вслушиваться. Так же с темой трейдинга он знаком плохо и непрофессионально. Но есть понимание языка на высоком уровне и нормальная техника преподавания, повторюсь, стиль не лекционной начитки материала, а именно преподавания, у автора есть, что компенсирует эти недочеты, здесь все-таки представлен курс по с# а не по s#.
Пишу этот коммент, потому что у меня как у новичка данных курсов при прочтении этих через-чур негативно-критических рецензий к урокам(здесь и в других ветках), сформировалось уж очень неправильно-нехорошее впечатление об данном лекторе, но сам видеоурок (конкретно 2-й) приятно порадовал. Другие уроки пока не смотрел :)