2 урок


[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();
        }
    }
}

Вложения: Проект




Thanks:


devruss

Avatar
Date: 1/15/2014
Reply


Подготовка инструктора видео просто ужасная:

  • нет понимания общей структуры видео
  • листание кода вверх/вниз на страницу не добавляет понимания
  • "чтобы не писать совсем бред" означает, что примеры непродуманы и неподготовлены
  • абсолютно монотонный голос

Посмотрите пару бесплатных курсов от Google, CodeSchool, CodeAcademy не говоря уже про Linda и т.д. - подача информации также важна, как и качество. Сделать 5 разлиных, но структурированных примеров лучше, чем 1 час видео с кодом на несколько листов и добавлением/удалением методов, переменных и т.д. и перескакиванием вверх/вниз

Видно, что как программист инструктор компетентный, но этого мало, так как задача передать опыт, а не просто "отчитать" лекцию на импровизированных примерах

P.S. Свечи имеют параметры OHLC (Open, High, Low, Close)

Thanks:

nethask

Avatar
Date: 1/16/2014
Reply


devruss: Подготовка инструктора видео просто ужасная:

  • нет понимания общей структуры видео
  • листание кода вверх/вниз на страницу не добавляет понимания
  • "чтобы не писать совсем бред" означает, что примеры непродуманы и неподготовлены
  • абсолютно монотонный голос

Посмотрите пару бесплатных курсов от Google, CodeSchool, CodeAcademy не говоря уже про Linda и т.д. - подача информации также важна, как и качество. Сделать 5 разлиных, но структурированных примеров лучше, чем 1 час видео с кодом на несколько листов и добавлением/удалением методов, переменных и т.д. и перескакиванием вверх/вниз

Видно, что как программист инструктор компетентный, но этого мало, так как задача передать опыт, а не просто "отчитать" лекцию на импровизированных примерах

P.S. Свечи имеют параметры OHLC (Open, High, Low, Close)

Абсолютно согласен с devruss, смотреть очень неприятно.

Thanks:

IvanB

Avatar
Date: 1/17/2014
Reply


Спасибо за конструктивные замечания, будем совершенствоваться.

Thanks:

archmag

Avatar
Date: 1/19/2014
Reply


Я бы хотел возразить критике devruss'а! Как раз понимание общей структуры видео у автора есть, и очень неплохое! Да, способ передачи материала у автора необычный, его можно охарактеризовать не как сухая начитка лекции, а как демонстрация практического применения языка на примерах! Автор хорошо показывает краеугольные моменты и разбирает примеры ошибок (как например с ссылочными/обычными типами данных) которые могут встретиться нам, ученикам, при самостоятельном программировании! Лично мне после просмотра все стало понятно, хотя язык с# не знаю и книжек не читал.

//Сделать 5 разлиных, но структурированных примеров лучше, чем 1 час видео с кодом на несколько листов и добавлением/удалением методов, //переменных и т.д. и перескакиванием вверх/вниз // //Видно, что как программист инструктор компетентный, но этого мало, так как задача передать опыт, а не просто "отчитать" лекцию на //импровизированных примерах

По мне лучше как раз такой код на несколько листов с добавлением/удалением чем начитка лекции в стиле "по книге Г.Шилдта". Да, требуется внимательное слежение за мыслью автора, но тогда чудесным образом листание кода вверх/вниз приобретет для вас смысл и добавит понимания.

//- "чтобы не писать совсем бред" означает, что примеры непродуманы и неподготовлены //- абсолютно монотонный голос

Здесь согласен, хотя примеры все же продуманы, но действительно автор видео не подготовлен и рассказывает "видео на лету". И слышно тихо, приходиться вслушиваться. Так же с темой трейдинга он знаком плохо и непрофессионально. Но есть понимание языка на высоком уровне и нормальная техника преподавания, повторюсь, стиль не лекционной начитки материала, а именно преподавания, у автора есть, что компенсирует эти недочеты, здесь все-таки представлен курс по с# а не по s#.

Пишу этот коммент, потому что у меня как у новичка данных курсов при прочтении этих через-чур негативно-критических рецензий к урокам(здесь и в других ветках), сформировалось уж очень неправильно-нехорошее впечатление об данном лекторе, но сам видеоурок (конкретно 2-й) приятно порадовал. Другие уроки пока не смотрел :)

Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy