Quantcast
Channel: C# – Svetlin Nakov – Official Web Site and Blog
Viewing all 42 articles
Browse latest View live

Конкурс “Най-добра статия относно книгата “Въведение в програмирането със C#”

$
0
0

clip_image001За всички фенове и критици на книгата “Въведение в програмирането със C#” организираме конкурс “Най-добра статия към книгата Intro C# Programming”. Авторите на 15-те най-креативни публикации, които изразяват личното им мнение и оценка на книгата, ще получат за награда безплатно хартиено копие на книгата с автографи от нейните автори и специална “.NET Ninja” тениска.

Авторите на 3-те най-отличаващи се ревюта ще бъдат поканени на официалното парти по случай излизането на книгата на пазара и ще имат възможност да празнуват заедно с нейните автори и редактори.

Конкурсът се провежда онлайн и ще продължи до 30.09.2011 г.

 

Условия за участие

  1. Всеки участник трябва да създаде авторско съдържание (статия / резюме), свързано с книгата „Въведение в програмирането със C#“ на български или английски език.
  2. Съдържанието може да включва: текст, изображения и видео. Текстът трябва да е авторски и да не дублира вече съществуващо съдържание, достъпно онлайн.
  3. Необходимо е публикацията да включва линк към официалния сайт на книгата: http://www.introprogramming.info/intro-csharp-book/.
  4. Резюмето трябва да бъде публикувано в авторитетна онлайн медия (блог, сайт с ИТ тематика, списание, ИТ медия).
  5. Материали и мнения, публикувани в дискусионни групи, форуми или социални медии няма да се приемат.
  6. Не се приема copy-paste съдържание или такова, което дублира напълно или отчасти съществуващ материал за книгата.
  7. Не се приемат нецензурни текстове, снимки и видео материали.
  8. Всеки участник трябва да изпрати по имейл до academy@telerik.com линк към своята статия, заедно със своето име и контакти за връзка най-късно до 30.09.2011 г.

Запознайте се с детайлните условия за участие в конкурса.

Оценяване

  1. По-високо се оценяват статии и резюмета, които споделят впечатления от книгата по същество, а не в стил ” книгата  е много  добра и полезна …”.
  2. По-високо се оценяват материали с критичен поглед към съдържанието, които изтъкват силните страни на книгата, но не спестяват и нейните слабости.

Награди

Авторите на 3-те най-добри статии ще имат възможност да станат част от партито по случай отпечатването на книгата и пускането й на пазара.

15 книги “Въведение в програмирането със C#” с автографи от нейните автори ще бъдат раздадени заедно с тениски “.NET Ninja” на участниците, създали най-интересни авторски ревюта на книгата.

Още информация

Повече информация относно настоящият конкурс можете да получите от официалния сайт на книгата: www.introprogramming.info/intro-csharp-book/, както и от страницата на “Въведение в програмирането със C#” във Facebook.


300 младежи ще се обучават безплатно за софуерни инженери в Академията на Телерик

$
0
0

Become .NET Ninja for FreeЗа трета поредна година Академията на Телерик за софтуерни инженери обявява своята програма за безплатно обучение и работа за .NET софтуерни инженери (.NET software engineers), инженери по качеството (QA and test automation engineers) и инженери по поддръжката за разработчици (developer support). Програмата има за цел да обучи безплатно на практическо програмиране, софтуерно инженерство и софтуерни технологии мотивирани млади хора, които да започнат успешно своята кариера в областта на разработката на софтуер.

Нов сезон на програмата “Telerik Software Academy”

Новият сезон на програмата “Telerik Software Academy” (2011-2012) ще започне в края на октомври 2011 г. с нови 300 участника (10 групи по 30 души, присъствено). Учебните занятия ще се проведат в учебните зали на Телерик в София. Успешно завършилите ще получат възможност за работа в световноизвестната българска фирма Telerik Corp. (работодател #1 на България за 2010 г.) при изключително атракивни условия.

Етапи на безплатното обучение

Безплатното обучение по програмата “Telerik Academy for Software Engineers” се състои от поредица от курсове (4 нива). Концепцията на тази уникална програма за безплатно обучение и старт в кариерата е “най-старателните успяват”. В края на всяко ниво от обучението участниците държат практически изпит по програмиране върху изучавания материал и в следващата част продължават само част от участниците – постигналите най-добри резултати. Всеки участник преминал успешно първите 3 нива от обучението избира между 3 специалности за последното ниво:

  • .NET Software Engineer
  • QA and Test Automation Engineer
  • Developer Support

Класирането за всяка от специалностите става по успех, както в университетите. В първите 3 нива обучението е напълно доброволно, безплатно и без ангажименти – се изисква подписване на договор и няма обвързване за продължаване в следващите нива. При началото на последното ниво на обучение участниците подписват договор, с който се съгласяват, ако завършат успешно и бъдат поканени, да се присъединят към екипа на Телерик за не по-малко от 2 години.

Първо ниво: курс C# Fundamentals – част I

Първото ниво на Академията започва с 300 души в курса “C# Programming Fundamentals – част I). Този курс е за абсолютно начинаещи и обхваща най-базовите основи на компютърното програмиране, които се изучават в средните училища: езикът C#, променливи, данни, оператори, конструкции за управление, условни конструкции и цикли. Към курса е разработена безплатна книга-учебник “Въведение в програмирането със C#”, безплатни уроци по програмиране, видеоуроци, задачи и решения към тях.

В края на курса участниците полагат практически изпит върху изучавания материал и най-добре представилите се 150 продължават в следващото ниво. Първото ниво ще започне през октомври 2011 г. и ще продължи около месец и ще се провежда 2 пъти седмично по 4 часа.

Можете да разгледате учебната програма лекциите и да гледате видеозаписи от курса C# Fundamentals от неговия уеб сайт: http://csharpfundamentals.telerik.com.

Второ ниво: курс C# Fundamentals – част II

Второто ниво на програмата “Академия за софтуерни инженери” продължава с малко по-сложни концепции от основите на компютърното програмиране: масиви, бройни системи, методи, рекурсия, използване на обекти, управление на изключенията, обработка на текст и символни низове, дефиниране на класове и работа с текстови файлове. Обучението продължават около 1 месец, два пъти седмично по 4 часа.

Обученията във второто ниво на Академията за софтуерни инженери завършват с изпит по практическо програмиране върху изучавания материал. В следващото ниво продължават най-добре представилите се 90 участници.

Трето ниво: курс C# Fundamentals – част III

Третото ниво на програмата за безплатно обучение и работа за софтуерни инженери обхваща значително по-сложни концепции от програмирането като фундаментални структури от данни (списъци, опашка, стек, дървета, хеш-таблици и графи), алгоритми и сложност, качествен програмен код и изграждане на алгоритмично мислене и умения за ефективно решаване на задачи по програмиране. Обучението продължава 1 месец, по 2 пъти седмично по 4 часа (както предните две нива).

В края на третото ниво на програмата “Академия на Телерик за софтуерни инженери” участниците, които имат желание да продължат безплатното си обучение и да започнат след завършване работа в Телерик, кандидатстват за една от трите специалности в академията (.NET developer, QA engineer, developer support engineer). Обучението продължава в три паралелни групи по направления, а класирането се извършва по успех.

Очаква се по трите специалности на Академията да бъдат приети за обучение в четвъртото (последно ниво) съответно:

  • .NET Software Engineer – 20-30 участници
  • QA and Test Automation Engineer – 20-25 участници
  • Developer Support – 10-20 участници

В първите 3 нива обученията са без обвързване, без договори – свободни и безплатни. Приетите за обучение в последното ниво на Академията сключват договор за работа в Телерик след завършването си. Договорът ги задължават да посещават съвестно учебните занятия, да положат всички изпити и да се отнасят старателно към учебния процес, а след завършване, ако бъдат одобрени, да работят в Телерик поне 2 години при изключително добри условия и отлично заплащане (спомнете си, че Телерик е в челото на класацията на най-добрите работодатели в България вече няколко години подред).

Четвърто ниво: .NET / QA / Dev. Support

Последното ниво на обученията в Академията за софтуерни инженери е най-сериозно, задълбочено и продължително. В засисимост от специалността безплатното обучение продължава още от 2 до 5 месеца, но вече целодневно. Обхватът на специализираните обучения е много голям, тъй като дава професия “софтуерен инженер” и работа в престижна световна софтуерна фирма. В Телерик работят изключителни професионалисти и изискванията за постъпване в компанията са много високи. За пълно овладяване на съвременните софтуерни технологии е необходима продължителна практика и създаване на трудови навици и в Академията на Телерик ще ги усвоите и натрупате (ако достигнете до последното ниво).

Курс .NET Essentials

Курсът .NET Development Essentials подготвя професионалисти за работа като софтуерни инженери с .NET платформата. Курсът продължава около 5 месеца, целодневно и обхваща всички по-важни софтуерни технологии, които един .NET програмист трябва да владее, за да е добър в професията си: от основните APIs на .NET Framework, unit testing, бази данни, SQL, SQL Server, ADO.NET, LINQ, ORM технологии, Entity Framework, Web front-end технологии, HTML, CSS, JavaScript, HTML5, ASP.NET, ASP.NET MVC, Windows Presentation Foundation (WPF), Silverlight, уеб услуги, WCF, софтуерни инженерство, работа в екип, сорс контрол хранилища, SCRUM и много други.

Курс QA and Test Automation

Курсът Software Quality Assurance and Test Automation подготвя инженери по управление и осигуряване на качеството. В него се получават задълбочени практически умения за осигуряването на качеството на софтуера и автоматизирано тестване. Основната му цел е да запознае курсистите с най-важното от QA инженерството, като се фокусира върху примери от практиката. Курсът покрива разнообразие от теми като: тестване на жизнения цикъл на приложенията, автоматизирано тестване, white-box и black-box техники за тестване, уеб и десктоп тестване, управление на тестове и редица инструменти за тестване, които улесняват работния процес чрез автоматизация на тестването.

Курс Developer Support

Обучението по направление за инженери по поддръжка на разработчиците, използващи продуктите на Телерик се провежда в курса “.NET Development Support”. Той обхваща както технологични компетенции, застъпени широко в курса “.NET Essentials”, така и методологически компетенции и умения за работа с клиенти, soft skills, умения за писане, умения за разрешаване на инциденти, за описание на инциденти и решения, изготвяне на документация и други.

Инструктори

Програмата “Софтуерна академия на Телерик” се ръководи лично от д-р Светлин Наков, който преподава на всички участници в курсовете. Телерик разполага с две учебни зали в София (Младост 1) съответно с капацитет 70 и 120 места. Преподавателският екип включва опитни специалисти от Телерик, бивши шампиони от националните олимпиади по програмиране и информационни технологии, с отлична подготовка и лекторски умения.

Кандидатстване за академията на Телерик

За да кандидатствате за безплатнитe обучения по програмата “Telerik Software Academy” е необходимо да изпратите актуално CV на английски език и мотивационно писмо до academy@telerik.com не-по късно от 16 октомври 2011 г.

Изисквания към кандидатите

Изисквания за участие в безплатните обучения по програма “Telerik Software Academy”

  • Силна мотивация за професионално развитие като софтуерен инженер
  • Стремеж за развитие в дългосрочен план и отдаденост на професията и работата
  • Технически английски език и отлично владеене на български език
  • Компютърна грамотност
  • Възможност и желание за работа на пълен работен ден след завършване (8 часа на ден)

Не се изискват каквито и да са умения по програмиране. Курсовете са подходящи за напълно начинаещи, стига да са запалени по компютрите.

Приемни изпити

Приемният изпит е под формата на 3 теста:

  • Английски език – тест

  • Тест за интелигентност (IQ тест)

  • Компютърна грамотност – тест

За повече информация около изпита, кандидатстването и приемните изпити посетете официалния сайт на Академията: http://www.telerik.com/academy/join.aspx.

Ако имате въпроси, пишете на academy@telerik.com – отговаряме в рамките на 1 работен ден.

Още от академията на Телерик

Ако езикът C# не ви допада или все още нямате желание или възможност да участвате в програмата “Софтуерна академия на Телерик” (все пак тя отнема от 5 до 10 месеца), ви предлагаме няколко безплатни курса по горещи съвременни софтуерни технологии, които можете да посещавате на живо или да запишете онлайн като дистанционно обучение:

Всички курсове в Академията на Телерик са безплатни! Към тях сме публикували за безплатно изтегляне лекции, уроци, учебни материали, видеолекции (видеоуроци), задачи и примерни проекти.

В курсовете могат да участват всички: ученици, студенти, работещи, безработни, учители, преподаватели и всички други с интереси към съвременните технологии за разработка на софтуер. Станете програмист / софтуерен инженер / софтуерен разработчик безплатно!

Завършилите с отличие безплатните обучения на Светлин Наков и Телерик получават сертификати и препоръка за започване на работа в индустрията.

Успехи на всички!

Стартират курсовете по мобилни приложения, ASP.NET MVC и Client-Side Web Development

$
0
0

За всички фенове на програмирането и разработката на софтуер имаме прекрасна новина. Стартират дългоочакваните безплатни курсове от новия семестър в Академията на Телерик за софтуерни инженери. Вече имаме конкретни дати за началото на курсовете по разработка на многоплатформени мобилни приложения, уеб разработка с ASP.NET MVC и уеб програмиране от страна на клиента Client-Side Web Development. Забавихме се, тъй като изграждаме нова голяма учебна зала със 120 седящи места, специално за обученията в Академията на Телерик.

Безплатен курс “Разработка на мобилни приложения”

курс “Разработка на мобилни приложения”Курсът „Разработка на мобилни приложения“ започва на 25.10.2011 г. (вторник) и ще се провежда в голяма учебна зала на Академията на Телерик, която се намира на адрес: София, ж.к. Младост-1А, бул. Ал. Малинов 31 (в сватбения мол, на втория етаж).

Курсът се състои от четири основни части, обхващащи платформите Android, iOS / iPhone, Windows Phone 7 и многоплатформена разработка на мобилни приложения.

През първата част „Многоплатформени мобилни приложения”, студентите ще изучават как да разработват съвременни мобилни проложения с технологията Adobe PhoneGap. Обучението обхваща основите на HTML5, JavaScript, jQuery Mobile, технологията PhoneGap, достъп до външни данни и услуги чрез jQuery и AJAX, работа със REST и JSON, управление на хардуера на мобилното устройство, разработка на игри и разработка на практически проект. Обученията се провеждат веднъж седмично (вторник от 18:00 до 21:00 часа) в рамките на 4 месеца.

За да посещавате безплатния курс за разработка на междуплатформени мобилни приложения, трябва да се регистрирате онлайн. Може да участвате присъствено или дистанционно (онлайн) като гледате видеолекциите и предавате домашни и проекти.

Безплатен курс “Уеб програмиране от страна на клиента”

курс “Уеб програмиране от страна на клиента”Безплатният курс “Уеб програмиране от страна на клиента” започва на 22.10.2011 г. (събота) и ще се провежда в голяма учебна зала на Академията на Телерик, която се намира на адрес: София, ж.к. Младост-1А, бул. Ал. Малинов 31 (в сватбения мол, на втория етаж).

Курсът обхваща най-съвременните концепции, технологии и инструменти за разработка на HTML5 приложения с JavaScript и уеб програмиране от страна на клиента. Ще се изучават програмиране на JavaScript, ООП с JavaScript, jQuery и други JavaScript frameworks, client-side UI библиотеки (KendoUI, YUI, jQuery UI), уеб дизайн за мобилни устройства и разработка на уеб приложения с HTML5, CSS3, JavaScript, jQuery AJAX, REST услуги и JSON. Обучението се провежда веднъж седмично (събота от 10:00 до 14:00) за период от 4 месеца.

Желаещите да участват в курса трябва да изпратят по CV, cover letter на английски език и портфолио (уеб сайтове и проекти, в които са участвали) до academy@telerik.com. Може да участвате присъствено или дистанционно (онлайн) като гледате видеолекциите и предавате домашни и проекти.

Безплатен курс “Уеб приложения с ASP.NET MVC”

курс “Уеб приложения с ASP.NET MVC”Безплатният курс “Уеб приложения с ASP.NET MVC” започва на 26.10.2011 г. (сряда) в голямата учебна зала на Академията на Телерик, която се намира на адрес: София, ж.к. Младост-1А, бул. Ал. Малинов 31 (в сватбения мол, на втория етаж).

Курсът по разработка на уеб приложения с ASP.NET MVC предоставя знания и умения, необходими на всеки желаещ да се занимава сериозно с уеб програмиране с технологиите на Microsoft и .NET платформата. Обучението включва: платформата .NET, ASP.NET MVC, HTML5, CSS3, JavaScript, jQuery, както и основите на C#, SQL и Entity Framework. Курсът се провежда веднъж седмично (сряда от 18:00 до 21:00 часа) в рамките на 4 месеца.

За да посещавате безплатния курс, е достатъчно само да се регистрирате онлайн. Може да участвате присъствено или дистанционно (онлайн) като гледате видеолекциите и предавате домашни и проекти.

Безплатен курс по C# в софтуерната академия на Телерик

Програмата “Софтуерна академия на Телерик” предоставя безплатно, задълбочено обучение по програмиране за C# и .NET на студенти и начинаещи програмисти. Програмата “софтуерна академия” се състои от поредица курсове. Започва се с безплатен курс “Въведение в програмирането със C#”, който се състои от 3 части. След всяка част се провежда изпит и продължават най-добрите участници. Следващите курсове отново са безплатни, но участниците се ангажират ако завършат успешно да кандидатстват за работа в Телерик. Те са в 3 направления: за софтуерни инженери (.NET developer), за QA инженери и за developer support инженери:

Софтуерна академия на Телерик - учебна програма

Желаещите да участват трябва да изпратят CV и Cover Letter на английски език до 23.10.2011. За повече информация за кандидатстването в софтуерната академия и приемните изпити посетете нейния уеб сайт: http://academy.telerik.com/academy/apply. Участието е само в присъствена форма.

Безплатен PHP курс

За всички, които се интересуват от програмиране на PHP и MySQL организираме 9-дневен безплатен PHP курс. По принцип обучението е за ученици, част от училищната академия за софтуерни инженери, но ако има свободни места, могат да участват не само ученици.

Изисквания за всички курсове

изискванияСамо силно мотивирани и сериозни кандидати ще могат да участват в безплатните курсове на Академията на Телерик. Участниците, които не предават в срок домашните си или показват слаби резултати по време на изпитите, няма да имат възможност да продължат обучението си в присъствена форма и ще освободят места за други, по-мотивирани участници. Завършилите с отличие курсисти получават сертификат и награди от спонсора на Академията – Телерик.

Simplified Console Input Class for C#, Similar to “cin >> a >> b” in C++ and java.util.Scanner

$
0
0

Recently I was again asked how do we perform “cin >> a >> b” in C# or how we can enter a sequence of numbers from the console in C#. In C++ we have very powerful class called “cin” (more correctly std::cin located in the standard library “iosteam”) that overloads the >> operator and allows entering anything from the standard input (stdin): numbers, characters, strings and other data types.

I searched for “cin in C#” and found nothing similar to “std::cin” for C#, so I needed to write such a class.

The Nakov.IO.Cin Class – “cin” Functionality for C# / .NET

Initially I had an idea to implement my C# “cin” class exactly like in C++. Unfortunately this was impossible because the C# language has certain limitations:

  • You cannot override the >> operator in C# for any type except int
  • You cannot override the >> operator in C# for output / by-ref types (e.g. out int, ref int)
  • You cannot add extension methods to the Console class because it is static (so additions like Console.Cin, Console.NextInt(), Console.In << x << b and Console.Cin.NextInt() cannot be added to it)

Finally I decided to implement my C# console simplifies reader it in a way similar to the Java syntax used in the java.util.Scanner class. See the code below:

namespace Nakov.IO
{
    using System;
    using System.Text;
    using System.Globalization;

    /// <summary>
    /// Console input helper for C# and .NET. Allows simplified reading of numbers and string
    /// tokens from the console in a way similar to "cin" in C++ and java.util.Scanner in Java.
    /// </summary>
    ///
    /// <copyright>
    /// (c) Svetlin Nakov, 2011 - http://www.nakov.com
    /// </copyright>
    ///
    /// <example>
    /// // In C++ we will use "cin >> x >> y;"
    /// // Using Nakov.IO.Cin we can do the same as follows:
    /// int x = Cin.NextInt();
    /// double y = Cin.NextDouble();
    /// </example>
    ///
    public static class Cin
    {
        /// <summary>
        /// Reads a string token from the console
        /// skipping any leading and trailing whitespace.
        /// </summary>
        public static string NextToken()
        {
            StringBuilder tokenChars = new StringBuilder();
            bool tokenFinished = false;
            bool skipWhiteSpaceMode = true;
            while (!tokenFinished)
            {
                int nextChar = Console.Read();
                if (nextChar == -1)
                {
                    // End of stream reached
                    tokenFinished = true;
                }
                else
                {
                    char ch = (char)nextChar;
                    if (char.IsWhiteSpace(ch))
                    {
                        // Whitespace reached (' ', '\r', '\n', '\t') -->
                        // skip it if it is a leading whitespace
                        // or stop reading anymore if it is trailing
                        if (!skipWhiteSpaceMode)
                        {
                            tokenFinished = true;
                            if (ch == '\r' && (Environment.NewLine == "\r\n"))
                            {
                                // Reached '\r' in Windows --> skip the next '\n'
                                Console.Read();
                            }
                        }
                    }
                    else
                    {
                        // Character reached --> append it to the output
                        skipWhiteSpaceMode = false;
                        tokenChars.Append(ch);
                    }
                }
            }

            string token = tokenChars.ToString();
            return token;
        }

        /// <summary>
        /// Reads an integer number from the console
        /// skipping any leading and trailing whitespace.
        /// </summary>
        public static int NextInt()
        {
            string token = Cin.NextToken();
            return int.Parse(token);
        }

        /// <summary>
        /// Reads a floating-point number from the console
        /// skipping any leading and trailing whitespace.
        /// </summary>
        /// <param name="acceptAnyDecimalSeparator">
        /// Specifies whether to accept any decimal separator
        /// ("." and ",") or the system's default separator only.
        /// </param>
        public static double NextDouble(bool acceptAnyDecimalSeparator = true)
        {
            string token = Cin.NextToken();
            if (acceptAnyDecimalSeparator)
            {
                token = token.Replace(',', '.');
                double result = double.Parse(token, CultureInfo.InvariantCulture);
                return result;
            }
            else
            {
                double result = double.Parse(token);
                return result;
            }
        }

        /// <summary>
        /// Reads a decimal number from the console
        /// skipping any leading and trailing whitespace.
        /// </summary>
        /// <param name="acceptAnyDecimalSeparator">
        /// Specifies whether to accept any decimal separator
        /// ("." and ",") or the system's default separator only.
        /// </param>
        public static decimal NextDecimal(bool acceptAnyDecimalSeparator = true)
        {
            string token = Cin.NextToken();
            if (acceptAnyDecimalSeparator)
            {
                token = token.Replace(',', '.');
                decimal result = decimal.Parse(token, CultureInfo.InvariantCulture);
                return result;
            }
            else
            {
                decimal result = decimal.Parse(token);
                return result;
            }
        }
    }
}

How Cin.NextDouble() Works?

My class Nakov.IO.Cin allows simplified entering string tokens, integer numbers, floating-point numbers and decimal numbers in C# from the standard input (the console). When reading a sequence of numbers, we can separate them with a single space, multiple spaces, new line separators or any other sequence of whitespace characters: spaces, tabs, new lines (\n, \r\n), etc.

In addition Nakov.IO.Cin solves the culture-specific problem with the decimal point separator which may be “,” in some countries (like Bulgaria) and “.” in other countries (like USA and Canada). The Cin.NextDouble() and Cin.NextDecimal() methods accept a Boolean parameter which specifies whether the numbers should be parsed using the default decimal separator (specified in the regional settings in Windows) or by accepting both separators: “.” and “,”. By default both decimal separators are accepted when entering numbers by Nakov.IO.Cin.NextDouble() and Nakov.IO.Cin.NextDecimal().

Using the Nakov.IO.Cin Class – Example

In the below example I show how to use the class “Nakov.IO.Cin” to enter integer numbers, floating-point numbers, decimal numbers and string tokens:

using System;
using Nakov.IO; // see http://www.nakov.com/tags/cin

public class CinExample
{
    static void Main()
    {
        Console.Write("Enter your name: ");
        string name = Console.ReadLine();

        Console.Write("Enter two integers x and y separated by whitespace: ");
        // cin >> x >> y;
        int x = Cin.NextInt();
        double y = Cin.NextDouble();

        Console.Write("Enter your age: ");
        int age = int.Parse(Console.ReadLine());

        Console.WriteLine("Name: {0}, Age: {1}", name, age);
        Console.WriteLine("x={0}, y={1}", x, y);

        Console.Write("Enter a positive integer number N: ");
        int n = Cin.NextInt();

        Console.Write("Enter N decimal numbers separated by a space: ");
        decimal[] numbers = new decimal[n];
        for (int i = 0; i < n; i++)
        {
            numbers[i] = Cin.NextDecimal();
        }

        Console.Write("The numbers in ascending order: ");
        Array.Sort(numbers);
        for (int i = 0; i < n; i++)
        {
            Console.Write(numbers[i]);
            Console.Write(' ');
        }
        Console.WriteLine();

        Console.WriteLine("Enter two strings seperated by a space: ");
        string firstStr = Cin.NextToken();
        string secondStr = Cin.NextToken();
        Console.WriteLine("First str={0}", firstStr);
        Console.WriteLine("Second str={0}", secondStr);
    }
}

Translating from C++ “cin” to C# Using the C# “cin” Class

Once you have included the class Nakov.IO.Cin to your C# / VB.NET project, you could translate the following C++ program into C#:

Sample C++ code entering a number N and a sequence of N integer numbers, separated by a space (or any other sequence of whitespace characters):

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;

    int* numbers = new int[n];
    for (int i = 0; i < n; i++)
    {
        cin >> numbers[i];
    }

    for (int i = 0; i < n; i++)
    {
        cout << numbers[i] << ' ';
    }
}

The same code written in C# using the C# “cin” class (Nakov.IO.Cin) is as follows:

using System;
using Nakov.IO; // see http://www.nakov.com/tags/cin

public class EnteringNumbers
{
    static void Main()
    {
        int n;
        n = Cin.NextInt();

        int[] numbers = new int[n];
        for (int i = 0; i < n; i++)
        {
            numbers[i] = Cin.NextInt();
        }

        for (int i = 0; i < n; i++)
        {
            Console.Write(numbers[i] + " ");
        }
    }
}

With both the programs (the C++ and the C# one) you are free to enter all the requested numbers on a single line (e.g. “3   1 –2   3”) or on separate lines (e.g. “\r\n 3 \r\n   1 \t –2 \r\n\r\n  3”)) and they will be parsed correctly, as expected.

Download the Nakov.IO.Cin Class

195 души продължават да учат безплатно програмиране и C# в Софтуерната академия на Телерик след първия C# изпит

$
0
0

На 6-7 декември 2011 г. се проведе първият междинен изпит по програмиране на C# за учащите в софтуерната академия на Телерик – програма за безплатно обучение на софтуерни инженери и работа в Телерик.

Академия на Телерик - C# изпит - 7 декември 2011

В програмата кандидатстваха около 450 души, от които за обучение в началото на ноември 2011 г. бяха приети 306 участници. Предстои те да бъдат обучавани между 5 и 10 месеца (според специалността) и най-сериозните и най-старателните 60 от тях да започнат работа като софтуерни инженери в софтуерната корпорация Телерик – работодател #1 на България и световен лидер в разработката на софтуерни продукти, технологии и инструменти в помощ на разработчиците на софтуер.

За програмата “софтуерна академия” – безплатно обучение и работа в Телерик

Програмата за безплатно обучение и работа следва следната схема: C# обучение по основи на програмирането, част I (306 души) –> изпит –> продължават най-добрите –> C# програмиране, част II (195 души) –> изпит –> продължават най-добрите –> C# програмиране, част III (120 души) –> изпит –> най-добрите 60 продължават в 3 специалности –> .NET developer (учат още 5 месеца целодневно); QA инженер (учат още 4 месеца вечерно); developer support инженер (учат още 3 месеца вечерно). Достигналите последната фаза на обученията овладяват безплатно професията “софтуерен инженер” и 60 от тях започват работа в една от най-добрите софтуерни компании в света.

Първият изпит по C# програмиране в софтуерната академия на Телерик

След първия месец на безплатни уроци по основи на програмирането, решаване на задачи, упражнения и тренировки, участниците в курса трябваше да се явят на първия си изпит, след който в програмата трябва да продължат 180-200 души. На изпита се явиха около 270 души, които се състезаваха върху 5 практически задачи по програмиране за 6 часа.

Академия на Телерик - C# изпит - 6 декември 2011

Шампионите от първия C# изпит

Най-добре представилите се участници в курса решиха самостоятелно всичките 5 задачи в рамките на определеното им време. Някои бяха по-бързи и предадоха верни решения само за 2 часа, докато други успяха едва в края на позволеното им време от 6 часа. Следва списък от най-добре представилите се на изпита курсисти (до момента, по азбучен ред). Това не са всички класирани за следващия етап от обученията, а хората с резултат близък до максималния (5 решени задачи):

  • А. Ж. Колев
  • А. Г. Петров
  • А. П. Петков
  • А. Р. Венчев
  • А. К. Сотиров
  • А. Ст. Богданов
  • Б. С. Статев
  • Б. Ан. Желязков
  • В. Вл. Букуров
  • В. Ст. Стайков
  • Вл. Хр. Ценев
  • В. Г. Вълков
  • Г. Б. Синеклиев
  • Г. В. Стоянов
  • Г. И. Петров
  • Г. М. Матеев
  • Г. П. Ваклинов
  • Гр. В. Генев
  • Д. И. Тачев
  • Д. К. Маджаров
  • Д. В. Агайна
  • Е. П. Генчева
  • И. Б. Бабалев
  • И. Б. Тончев
  • И. Д. Ненчовски
  • И. Ст. Стоянов
  • И. Цв. Колчагов
  • К. Ст. Попов
  • Кр. Д. Ташков
  • Кр. Н. Николов
  • Л. Л. Цонов
  • М. М. Маринов
  • М. Б. Пенков
  • М. И. Янков
  • М. Л. Нинов
  • М. К. Господинов
  • М. Вл. Рогелов
  • М. И. Стефанов
  • Н. А. Банкин
  • Н. И. Вълчев
  • П. Д. Колев
  • П. В. Вълчев
  • П. Т. Сотирова
  • С. Д. Георгиева-Христова
  • С. Н. Димитров
  • С. В. Радков
  • С. Д. Стоянов
  • С. А. Стоянов
  • С. В. Василев
  • Т. И. Илиев
  • Хр. Ж. Маринов

Класирането в софтуерната академия

Класирането за продължаването в следващия етап от обученията в софтуерната академия на Телерик е базирано не само на изпита по практическо програмиране на C#, но и на няколко други критерия, които бяха обявени в началото и бяха взети в предвид:

  • Прилежно предадени домашни за всяка от изучаваните теми
  • Есе за професията на софтуерния инженер
  • Всекидневен отчет за свършеното по обученията в курса (C# игра)
  • Докладвани грешки и проблеми в учебника по C# програмиране
  • Активно участие в онлайн дискусиите във форума на курса
  • Указана помощ в обучението на колеги от курса

По всички тези критерии в челото на генералното класиране са следните участници в курса (списъкът не е пълен):

  • Л. Л. Цонов – 108.00 т.
  • М. И. Стефанов – 107.50 т.
  • Т. И. Илиев – 104.00 т.
  • Д. К. Маджаров – 104.00 т.
  • Ст. Вл. Радков – 103.00 т.
  • Д. И. Тачев – 102.00 т.
  • А. Ст. Богданов – 100.00 т.
  • Д. В. Агайна – 100.00 т.
  • П. Д. Колев – 99.50 т.
  • Кр. Н. Николов – 99.00 т.
  • П. В. Вълчев – 99.00 т.
  • М. Л. Нинов – 99.00 т.
  • Б. А. Желязков – 99.00 т.
  • И. Б. Бабалев – 98.00 т.
  • М. Вл. Рогелов – 98.00 т.
  • Н. И. Вълчев – 98.00 т.
  • В. Вл. Букуров – 98.00 т.
  • Е. П. Генчева – 98.00 т.
  • Г. П. Ваклинов – 97.00 т.
  • Ст. А. Стоянов – 97.00 т.
  • Г. М. Матеев – 97.00 т.
  • П. Т. Сотирова – 96.50 т.
  • М. М. Маринов – 96.00 т.
  • Г. В. Стоянов – 96.00 т.
  • И. Ст. Стоянов – 96.00 т.
  • Ст. Хр. Гочев – 95.00 т.
  • Н. Н. Петрова – 94.50 т.
  • Хр. Ж. Маринов – 94.00 т.
  • К. Й. Вандов – 94.00 т.
  • В. Г. Станкова – 93.50 т.
  • М. К. Господинов – 93.00 т.
  • М. И. Янков – 93.00 т.
  • Ст. Д. Стоянов – 92.50 т.
  • Ст. В. Василев – 92.50 т.
  • С. Н. Димитров – 92.50 т.
  • Г. И. Петров – 92.17 т.
  • И. Д. Ненчовски – 92.00 т.
  • Ат. Г. Цанков – 92.00 т.
  • А. П. Петков – 91.83 т.
  • И. Б. Тончев – 91.50 т.
  • К. Ст. Попов – 91.00 т.
  • В. Ст. Стайков – 91.00 т.
  • А. Р. Венчев – 90.83 т.
  • В. Г. Вълков – 90.50 т.
  • Вл. И. Илиев – 90.50 т.
  • С. Д. Георгиева-Христова – 90.00 т.

Шампиони по отделните критерии

Освен на изпита и в генералното класиране, имаме шампиони, които се отличиха и по другите критерии за оценяване в този първи етап на софтуерната академия. Всички те ще получат награди и продължават в следващия етап от курса.

Най-добро есе за професията “софтуерен инженер”

Най-добро есе за професията на софтуерния инженер и предизвикателствата пред всеки, който се захваща с нея, е написал Стефан Стефанов Байчев.

Най-висока активност във форума на курса

Най-висока активност в дискусионния форум на C# курса e реализирал Стамо Христов Гочев. Той е публикувал общо 161 мнения за периода на първия месец от курса и е бил активен в дискусиите във форума през 23 различни дни.

Най-висока активност в отчета за работа по курса

Най-висока активност в отчета за всекидневната работа по обучението си в курса е постигнала Надежда Николова Петрова. Тя е отчела общо 120 различни действия в т. нар. “C# игра” (решаване на задачи, четене на статии, упражнения и др.) извършени в 50 различни дни.

Най-много докладвани грешки в учебника

Най-много грешки в учебника по основи на програмирането със C# е докладвала Вася Георгиева Станкова – 124.

Най-активно указване на помощ на колеги

Най-активно е помагал на своите колеги от курса по време на учебните занятия, при работа по домашните и по време на подготовката за изпитите по програмиране Николай Евгениев Демирев. Той е помагал на 13 свои колеги.

Задачите от изпита по C# програмиране

Първият изпит по основи на програмирането със C# се проведе в да поредни дни на 6 и 7 декември 2011 г. От общо 306 участника в курса на първия изпит се явиха общо около 270 души, разпределени в 8 групи (2 дни – сутрин и следобед, в двете учебни зали на Телерик, паралелно). От тях ненулеви резултати изкараха 230 участника в курса. Имаше и участници, които за 6 часа не можаха да решат дори частично нито една от задачите.

Задачите бяха лесни за опитен софтуерен инженер (отнемат по 5-10 минути за прочитане на условието, по 10-15 минути за решаване и по 5-10 минути за тестване), но за начинаещи в програмирането се оказаха сериозно предизвикателство. Учащите в курса са учили до момента 6 теми и задачите на изпита бяха съобразени с тези знания и не включваха допълнителен учебен материал:

  • Въведение в програмирането – езика C# и среда за програмиране Visual Studio
  • Примитивни типове данни и променливи – числа, аритметика с цели и дробни числа, символен тип, променливи и данни
  • Оператори, изрази и конструкции – оператори в езика C# (булеви, аритметични, за сравнение, за присвояване), изрази, константи, литерали, прости програмни конструкции
  • Вход и изход от конзолата – четене на входни данни и отпечатване на текст и числа на конзолата
  • Условни конструкции – конструкции за избор и изпълнение на блокове команди според входно булево условие (if, if-else, switch-case)
  • Цикли – изпълняване на блокове команди многократно според различни входни и изходни условия (for-цикли, while-цикли, do-while-цикли, foreach-цикли и т.н.)

Въпреки, че учебният материал е много малък като обем, той дава възможност за доста разнообразни задачи: пресмятане на формули, работа с битове, пресмятания с цикли, отпечатване на различни фигури, измисляне и имплементация на не много сложни алгоритми и други.

Автори на задачите и на авторските решения са Светлин Наков, Николай Костов и Мартин Иванов.

C# изпит по програмиране – 6 декември

Условията на всички задачи в изпитите в академията на Телерик за софтуерни инженери по традиция се дават на английски език.

Задача “Ship Damage” – условие

Inside the sea (a standard Cartesian /rectangular/ coordinate system) we are given a ship S (a rectangle whose sides are parallel to the coordinate axes), a horizontal line H (the horizon) and three catapults, given as coordinates C1C2 and C3 that will be used to fire the ship. When the attack starts, each catapult shoots a projectile exactly into the positions that are symmetrical to C1C2 and C3 with respect to the horizon H. When a projectile hits some of the corners of the ship, it causes a damage of 25%, when it hits some of the sides of the ship, the damage caused is 50% and when it hits the internal body of the ship, the damage is 100%. When the projectile does not reach the ship, there is no damage. The total damage is a sum of the separate damages and can exceed 100%.

At the figure below a sea, a ship S, a line H, three points C1C2 and C3 and their hit positions are shown:

Ship Damage - example

Your task is to write a program that calculates the total damage caused after the attack over the ship.

Задача “Ship Damage” – вход

The input data should be read from the console.

There will be exactly 11 lines holding the integer numbers SX1SY1SX2SY2HCX1CY1CX2CY2CX3, and CY3.

The ship S is given by any two of its opposite corners and is non-empty (has positive width and height).

The line H is given by its vertical offset.

The points C1C2 and C3 are given as couples of coordinates and cannot overlap each other.

The line and the ship cannot overlap.

The input data will always be valid and in the format described. There is no need to check it explicitly.

Задача “Ship Damage” – изход

The output data should be printed on the console.

The output should consist of a single line holding the total damage given as percentage.

Задача “Ship Damage” – ограничения

The numbers SX1SY1SX2SY2HCX1CY1CX2CY2CX3, and CY3 are all integers between -100 000 and 100 000, inclusive.

Allowed work time for your program: 0.1 seconds.

Allowed memory: 16 MB.

Задача “Ship Damage” – примери

Input Output Input Output
-11
6
-6
3
1
-9
-3
-12
-4
-6
-1 
125%
-6
6
-11
3
1
-9
-4
-11
-1
2
2 
75%

Задача “Ship Damage” – авторско решение

Авторското решение проверява разрушенията за всяко от трите попадения директно. Очертанията на кораба се смятат във формат (minX, minY, maxX, maxY). Няма други особености. Нарочно са използвани само изучавани до момента в C# курса програмни техники и езикови конструкции (не използва масиви, списъци и методи):

using System;

class ShipDamage
{
    static void Main()
    {
        // Read the input
        int sx1 = Int32.Parse(Console.ReadLine());
        int sy1 = Int32.Parse(Console.ReadLine());
        int sx2 = Int32.Parse(Console.ReadLine());
        int sy2 = Int32.Parse(Console.ReadLine());
        int h = Int32.Parse(Console.ReadLine());
        int cx1 = Int32.Parse(Console.ReadLine());
        int cy1 = Int32.Parse(Console.ReadLine());
        int cx2 = Int32.Parse(Console.ReadLine());
        int cy2 = Int32.Parse(Console.ReadLine());
        int cx3 = Int32.Parse(Console.ReadLine());
        int cy3 = Int32.Parse(Console.ReadLine());

        // Find the hit points (apply symmetrics)
        cy1 = 2 * h - cy1;
        cy2 = 2 * h - cy2;
        cy3 = 2 * h - cy3;

        // Find the ship bounds
        int minX = Math.Min(sx1, sx2);
        int maxX = Math.Max(sx1, sx2);
        int minY = Math.Min(sy1, sy2);
        int maxY = Math.Max(sy1, sy2);

        int totalDamage = 0;

        // Check the corners damage
        if ((cx1 == minX || cx1 == maxX) && (cy1 == minY || cy1 == maxY))
        {
            totalDamage += 25; // Hit in the corner
        }
        if ((cx2 == minX || cx2 == maxX) && (cy2 == minY || cy2 == maxY))
        {
            totalDamage += 25; // Hit in the corner
        }
        if ((cx3 == minX || cx3 == maxX) && (cy3 == minY || cy3 == maxY))
        {
            totalDamage += 25; // Hit in the corner
        }

        // Check the borders damage
        if (((cx1 == minX || cx1 == maxX) && (cy1 > minY && cy1 < maxY)) ||
            ((cy1 == minY || cy1 == maxY) && (cx1 > minX && cx1 < maxX)))
        {
            totalDamage += 50; // Hit in the border
        }
        if (((cx2 == minX || cx2 == maxX) && (cy2 > minY && cy2 < maxY)) ||
            ((cy2 == minY || cy2 == maxY) && (cx2 > minX && cx2 < maxX)))
        {
            totalDamage += 50; // Hit in the border
        }
        if (((cx3 == minX || cx3 == maxX) && (cy3 > minY && cy3 < maxY)) ||
            ((cy3 == minY || cy3 == maxY) && (cx3 > minX && cx3 < maxX)))
        {
            totalDamage += 50; // Hit in the border
        }

        // Check the internal body damage
        if ((cx1 > minX) && (cx1 < maxX) && (cy1 > minY) && (cy1 < maxY))
        {
            totalDamage += 100; // Hit in the internal body
        }
        if ((cx2 > minX) && (cx2 < maxX) && (cy2 > minY) && (cy2 < maxY))
        {
            totalDamage += 100; // Hit in the internal body
        }
        if ((cx3 > minX) && (cx3 < maxX) && (cy3 > minY) && (cy3 < maxY))
        {
            totalDamage += 100; // Hit in the internal body
        }

        Console.WriteLine(totalDamage + "%");
    }
}

Задача “Tribonacci” – условие

The Tribonacci sequence is a sequence in which every next element is made by the sum of the previous three elements from the sequence.
Tribunacci - formula

Write a computer program that finds the Nth element of the Tribonacci sequence, if you are given the first three elements of the sequence and the number N. Mathematically said: with given T1, T2 and T3 – you must find Tn.

Задача “Tribonacci” – вход

The input data should be read from the console.

The values of the first three Tribonacci elements will be given on the first three input lines.

The number N will be on the fourth line. This is the number of the consecutive element of the sequence that must be found by your program.

The input data will always be valid and in the format described. There is no need to check it explicitly.

Задача “Tribonacci” – изход

The output data should be printed on the console.

At the only output line you must print the Nth element of the given Tribonacci sequence.

Задача “Tribonacci” – ограничения

The values of the first three elements of the sequence will be integers between -2 000 000 000 and 2 000 000 000.

The number N will be a positive integer between 1 and 15 000, inclusive.

Allowed working time for your program: 0.25 seconds.

Allowed memory: 16 MB.

Задача “Tribonacci” – примери

Input Output Input Output
1
1
1
4
3
2
3
4
10
335

Задача “Tribonacci”– авторско решение

Авторското решение смята числата като директно прилага формулата, но работи с типа BigInteger, защото редицата нараства твърде бързо и би препълнила всички възможни примитивни числови типове в езика C#:

using System;
using System.Numerics;

class Tribonacci
{
    static void Main()
    {
        // Read input
        BigInteger trib1 = new BigInteger(int.Parse(Console.ReadLine()));
        BigInteger trib2 = new BigInteger(int.Parse(Console.ReadLine()));
        BigInteger trib3 = new BigInteger(int.Parse(Console.ReadLine()));
        int n = int.Parse(Console.ReadLine());

        // Calculate the Tribonacci sequence
        if (n == 1)
            Console.WriteLine(trib1);
        else if (n == 2)
            Console.WriteLine(trib2);
        else if (n == 3)
            Console.WriteLine(trib3);
        else
        {
            for (int i = 4; i < = n; i++)
            {
                BigInteger tribNew = trib1 + trib2 + trib3;
                trib1 = trib2;
                trib2 = trib3;
                trib3 = tribNew;
            }
            Console.WriteLine(trib3);
        }
    }
}

Задача “Fir Tree” – условие

Christmas Eve is coming so even programmers have to prepare!

In the spirit of the event your task is to write a program that prints a fir tree to the console.

The format of the tree is shown in the examples bellow.

Задача “Fir Tree”– вход

The input data should be read from the console.

On the only input line you have an integer number N, showing the height of the tree.

The input data will always be valid and in the format described. There is no need to check it explicitly.

Задача “Fir Tree”– изход

The output data should be printed on the console.

You must print the fir tree on the console. Each row contains only characters “.” (point) or “*” (asterisk).

The first row should have exactly one “*” in the middle (that is the top of the tree) and each of the next lines two more.

The last line should have exactly one asterisk in the middle, showing the stem of the tree.

Задача “Fir Tree”– ограничения

The number N is a positive integer between 4 and 100, inclusive.

Allowed working time for your program: 0.25 seconds.

Allowed memory: 16 MB.

Задача “Fir Tree”– примери

Input Output Input Output
5
...*...
..***..
.*****.
*******
...*...
9
.......*.......
......***......
.....*****.....
....*******....
...*********...
..***********..
.*************.
***************
.......*.......

Задача “Fir Tree”– авторско решение

Решението е абсолютно тривиално. Тази задача по трудност е за 3-4 клас. Ако някой не е успял да я реши след един месец усърдно учене, трябва да се замисли дали програмирането наистина е за него. Авторското решение смята за всеки ред броя звездички и броя точки отляво и отдясно и ги печата. Накрая печата стъблото.

using System;

class FirTree
{
    static void Main()
    {
        // Read the input
        int n = int.Parse(Console.ReadLine());

        // Print the tree
        for (int i = 0; i < n - 1; i++)
        {
            string dots = new string('.', (n - i) - 2);
            string stars = new string('*', (i * 2) + 1);
            Console.Write(dots);
            Console.Write(stars);
            Console.Write(dots);
            Console.WriteLine();
        }

        // Print the stem
        string finalDots = new string('.', n - 2);
        Console.Write(finalDots);
        Console.Write("*");
        Console.Write(finalDots);
        Console.WriteLine();
    }
}

Задача “We All Love Bits!” – условие

One of the things the programmers love the most is bitwise operations. The “bitwise guy” is a synonym for a programmer that loves bits more than everything else in programming. Mitko is a “bitwise guy”. He invented a new bitwise algorithm. The algorithm takes one positive integer P, makes magic with it and returns a new positive integer. He also defined a new number P~ which represents the number P in binary numeral system with inverted bits. All zeros in P are ones in P~ and all ones in P are zeros in P~. For example if we have P = 9 (which is 1001in binary numeral system) its inverted number P~ will be equal to 6 (which is 110 in binary numeral system). But that’s not all! He invented another number P`, which represents reversed number P in binary numeral system. For example if we have P = 11 (which is 1011 in binary numeral system) its reversed number P` is equal to 13 (which is 1101 in binary numeral system). Mitko’s magical algorithm takes a number P and transforms it to a new numberPnew using the following bitwise transformation: Pnew = (P ^ P~) & P`.

Your task is to write a program that transforms a sequence of N positive integer numbers using Mitko’s algorithm.

Задача “We All Love Bits!” – вход

The input data should be read from the console.

At the first input line there will be one positive integer – the number N.

At each of the next N lines there will be one positive integer – the consequent number that must be converted using Mitko’s algorithm.

The input data will always be valid and in the format described. There is no need to check it explicitly.

Задача “We All Love Bits!” – изход

The output data should be printed on the console.

The output must consist of N lines, containing the transformed numbers for each number from the input.

Задача “We All Love Bits!” – ограничения

The number N will be positive integer number between 1 and 800, inclusive.

Each of the N numbers will be positive integer numbers between 1 and 2 147 483 647, inclusive.

Allowed working time for your program: 0.20 seconds.

Allowed memory: 16 MB.

Задача “We All Love Bits!” – примери

Input Output Input Output
1
2 
1
2
19
248
25
31

Задача “We All Love Bits!” – авторско решение

Авторското решение на задачата използва факта, че (P ^ P~) е винаги число, състоящо се само от единици във всичките си битове. Следователно Pnew = (P ^ P~) & P` = P`. Така задачата се опростява до обръщане на двоичните цифри на дадено число отзад напред. Решението преминава през двоичните цифри на P отдясно наляво и ги прибавя в десния край на новополученото число Pnew. Имплементацията е доста проста:

using System;

class WeAllLoveBits
{
    static void Main()
    {
        // Read N
        int n = int.Parse(Console.ReadLine());

        // For all N numbers
        for (int i = 1; i < = n; i++)
        {
            // Read P
            int p = int.Parse(Console.ReadLine());

            // calculate pNew
            int pNew = 0;
            while (p > 0)
            {
                pNew < < = 1;
                if ((p & 1) == 1)
                {
                    pNew |= 1;
                }
                p > > = 1;
            }

            // Write pNew
            Console.WriteLine(pNew);
        }
    }
}

Задача “Pillars” – условие

You are given a list of 8 bytes (positive integers in the range [0…255]) n0n1, …, n7. These numbers represent a square grid consisting of 8 lines and 8 columns. Each cell of the grid could either be empty or full. The first line is represented by the bits of n0, the second – by the bits of n1 and so on, and the last line is represented by the bits of n7. Each bit with value 1 denotes a full cell and each bit with value 0 denotes an empty cell. The lines are numbered from the first (top) to the last (bottom) with the numbers 0, 1, …, 7. The columns are numbered from right to left with the indices 0, 1, …, 7. The figure shows a square grid and its representation by a sequence of 8 numbers n0n1, …, n7:

Pillars - example

We are allowed to put a vertical pillar over any of the columns in the grid. Pillars split the grid into two sides (left and right) and the column holding the pillar is ignored. Write a program that finds the leftmost column where the pillar can be put so that the full cells on the left side and on the right side are equal number. For example, in the figure if we put the pillar at column 5, it will split the grid into two sides and both sides will have exactly 3 full cells.

Задача “Pillars” – вход

The input data should be read from the console.

There will be exactly 8 lines each holding the integer numbers n0n1, …, n7.

The input data will always be valid and in the format described. There is no need to check it explicitly.

Задача “Pillars” – изход

The output data should be printed on the console.

If a pillar splitting the grid into two vertical sides each holding the same number of full cells exists, print its column index on the first line and the number of full cells in each of the sides. If multiple pillars can do the job, print only the leftmost. If no such pillar exists, print the string “No” on the console (just one line holding the word “No”).

Задача “Pillars” – ограничения

The numbers n0n1, …, n7 are positive integers in the range [0…255].

Allowed work time for your program: 0.25 seconds.

Allowed memory: 16 MB.

Задача “Pillars” – примери

Input Output Input Output
0
64
0
8
0
12
224
0 
5
3
3
0
0
0
0
0
0
0
No

Задача “Pillars” – авторско решение

Това е най-сложната задача от първия изпитен ден. Тя изисква работа с битове и двоична бройна система, измисляне на прост алгоритъм въхру матрица с размер 8 на 8 и използване на вложени цикли. За всяка възможна колона (от 0 до 7) се проверява, ако се сложи разделящата стена в нея, колко пълни клетки ще останат вляво и вдясно от нея. Клетките вляво и вдясно се броят чрез проверка на всички колони вляво и вдясно по всичките 8 реда. Ако има няколко решения, най-лявото от тях се запомня по естествен начин, защото се намира най-късно (то има най-голям индекс на колона). Следва имплементацията, която може съществено да се подобри, ако се използват масиви и методи, но тъй като те не са все още изучавани в курса по C# програмиране, тяхната употреба е съзнателно избегната:

using System;

class Pillars
{
    static void Main()
    {
        // Read the input numbers
        int num0 = Int32.Parse(Console.ReadLine());
        int num1 = Int32.Parse(Console.ReadLine());
        int num2 = Int32.Parse(Console.ReadLine());
        int num3 = Int32.Parse(Console.ReadLine());
        int num4 = Int32.Parse(Console.ReadLine());
        int num5 = Int32.Parse(Console.ReadLine());
        int num6 = Int32.Parse(Console.ReadLine());
        int num7 = Int32.Parse(Console.ReadLine());

        // Find the optimal pillars
        int bestCount = Int32.MinValue;
        int bestIndex = Int32.MinValue;
        for (int index = 0; index < = 7; index++)
        {
            // Count the full cells on the left side
            int leftCount = 0;
            for (int leftIndex = index + 1; leftIndex < = 7; leftIndex++)
            {
                leftCount += (num0 >> leftIndex) & 1;
                leftCount += (num1 >> leftIndex) & 1;
                leftCount += (num2 >> leftIndex) & 1;
                leftCount += (num3 >> leftIndex) & 1;
                leftCount += (num4 >> leftIndex) & 1;
                leftCount += (num5 >> leftIndex) & 1;
                leftCount += (num6 >> leftIndex) & 1;
                leftCount += (num7 >> leftIndex) & 1;
            }

            // Count the full cells on the right side
            int rightCount = 0;
            for (int rightIndex = 0; rightIndex < = index - 1; rightIndex++)
            {
                rightCount += (num0 >> rightIndex) & 1;
                rightCount += (num1 >> rightIndex) & 1;
                rightCount += (num2 >> rightIndex) & 1;
                rightCount += (num3 >> rightIndex) & 1;
                rightCount += (num4 >> rightIndex) & 1;
                rightCount += (num5 >> rightIndex) & 1;
                rightCount += (num6 >> rightIndex) & 1;
                rightCount += (num7 >> rightIndex) & 1;
            }

            if (leftCount == rightCount)
            {
                bestCount = leftCount;
                bestIndex = index;
            }
        }

        if (bestCount != Int32.MinValue)
        {
            Console.WriteLine(bestIndex);
            Console.WriteLine(bestCount);
        }
        else
        {
            Console.WriteLine("No");
        }
    }
}

Тестове на журито

Както на всяко състезание по алгоритмично програмиране, и на този изпит проверката на задачите се базира на тестови примери, които покриват по възможно най-пълен начин всички интересни случаи за входните данни. За всяка задача има лесни тестове, по-трудни тестове и екстремални тестове – около границата на входа (най-малки и най-големи числа) и други интересни случаи, които изискват специално внимание при изготвяне на решенията на задачите. Всяка задача се оценява с по 10 теста, всеки от които дава по еднакъв брой точки. В приложения файл са дадени нулевите тестове (от условията на задачите) и десетте изпитни теста, както и съответните им верни изходи.

Изтеглете тестовете на журито от изпита по C# програмиране от 6 декември 2011 г. в софтуерната академия на Телерик: Tests-CSharp-Exam-I-6-December-2011.rar.

C# изпит по програмиране – 7 декември

Във втория изпитен ден задачите бяха аналогични на задачите от първия ден, но се оказаха малко по-сложни и общите резултати бяха по-слаби. Това наложи да скалираме резултатите в края на двата изпитни дни с цел уеднаквяване на средните резултати от двата дни, за да е честен изпитът спрямо всички участници.

Следват условията на задачите, авторските решения и тестовете на журито.

Задача “Fighter Attack” – условие

A rectangular plant P located in east-west direction is under attack by a fighter aircraft flying over it on the west. When the fighter launches a missile we have its coordinates F. It is assumed that the missile’s direction is always straight on the west and the missile always hits the target after a fixed distance D in front of the fighter.

To simplify our model we assume the land is built of square cells of size 1 x 1 located in east-west direction and each cell has integer Cartesian coordinates {x, y}. In this model the plant can be represented by a rectangular area of cell and the missile always hits some of the square cells (inside or outside of the plant).

When the missile hits a certain cell, the damage over it is 100%, on the cells staying on the left and on the right of it the damage is 50% and in front of it the damage is 75%. The total damage is sum of the separate damages and can exceed 100%.

You are given the location of the plant P, the location of the fighter F and the distance D. Write a program that calculates the damage over the plant after the attack. Note that the missile could hits the plant partially of fully or can hit some area outside of the plant and cause no damage.

At the figure below a plant P, a fighter F, a distance D and the missile hit point are shown along with the damage caused over the cells by the hit. Note that some of the damaged cells are outside of the plant and thus the total damage is 225%:

Fighter Attack - example

Your task is to write a program that calculates the total damage caused after the attack over the plant.

Задача “Fighter Attack” – вход

The input data should be read from the console.

There will be exactly 7 lines holding the integer numbers PX1PY1PX2PY2FXFY, and D. The plant P is given by the coordinates of any two of its opposite corners and is non-empty (consists of at least one cell). The location of the fighter is given as cell coordinates FX, and FY and the distance D is given as an integer number.

The input data will always be valid and in the format described. There is no need to check it explicitly.

Задача “Fighter Attack” – изход

The output should consist of a single line holding the total damage given as percentage.

Задача “Fighter Attack” – ограничения

The numbers PX1PY1PX2PY2FXFY, and D are all integers in the range [-100 000 … 100 000].

Allowed work time for your program: 0.1 seconds.

Allowed memory: 16 MB.

Задача “Fighter Attack” – примери

Input Output Input Output Input Output
2
5
6
3
-6
3
9
225%
2
5
6
3
-6
5
7
75%
6
5
2
3
0
1
-3
0%

Задача “Fighter Attack” – авторско решение

Задачата се решава директно, следвайки условието. Първо се изчисляват границите на завода, който е под атака във формат (minX, maxX, minY, maxY) и координатите на четирите точки на удара. След това се изчисляват попаденията и се изчислява сумарният размер на разрушенията. Ето и сорс кода на авторското решение:

using System;

class FighterAttack
{
    static void Main()
    {
        // Read the input
        int px1 = Int32.Parse(Console.ReadLine());
        int py1 = Int32.Parse(Console.ReadLine());
        int px2 = Int32.Parse(Console.ReadLine());
        int py2 = Int32.Parse(Console.ReadLine());
        int fx = Int32.Parse(Console.ReadLine());
        int fy = Int32.Parse(Console.ReadLine());
        int d = Int32.Parse(Console.ReadLine());

        // Find the plant bounds
        int minX = Math.Min(px1, px2);
        int maxX = Math.Max(px1, px2);
        int minY = Math.Min(py1, py2);
        int maxY = Math.Max(py1, py2);

        // Find the hit points
        int hitX = fx + d;
        int hitY = fy;
        int hitUpX = hitX;
        int hitUpY = hitY - 1;
        int hitDownX = hitX;
        int hitDownY = hitY + 1;
        int hitRightX = hitX + 1;
        int hitRightY = hitY;

        // Calculate the damage over the plant
        int totalDamage = 0;
        if (hitX > = minX && hitX < = maxX && hitY > = minY && hitY < = maxY)
        {
            totalDamage += 100;
        }
        if (hitUpX > = minX && hitUpX < = maxX && hitUpY > = minY && hitUpY < = maxY)
        {
            totalDamage += 50;
        }
        if (hitDownX > = minX && hitDownX < = maxX && hitDownY > = minY && hitDownY < = maxY)
        {
            totalDamage += 50;
        }
        if (hitRightX > = minX && hitRightX < = maxX && hitRightY > = minY && hitRightY < = maxY)
        {
            totalDamage += 75;
        }

        // Print the damage
        Console.WriteLine(totalDamage + "%");
    }
}

Задача “Astrological Digits” – условие

The astrological digit of a given number N is a digit calculated by the number’s digits by a special algorithm. The algorithm performs the following steps:

(1) Sums the digits of the number N and stores the result back in N.

(2) If the obtained result is bigger than 9, step (1) is repeated, otherwise the algorithm finishes.

The last obtained value of N is the result, calculated by the algorithm.

Задача “Astrological Digits” – вход

The input data should be read from the console.

The only line in the input contains a number N, which can be integer or real number (decimal fraction).

The input data will always be valid and in the format described. There is no need to check it explicitly.

Задача “Astrological Digits” – изход

The output data should be printed on the console.

You must print the calculated astrological digit of the number N on the first and only line of the output.

Задача “Astrological Digits” – ограничения

The number N will be in range [-1.7 × 10−308… 1.7 × 10308]

N will have no more than 300 digits before and after the decimal point.

The decimal separator will always be the “.” symbol.

Allowed working time for your program: 0.2 seconds.

Allowed memory: 16 MB.

Задача “Astrological Digits” – примери

Input Output Input Output Input Output
8
8
-1337
5
1234567.8900
9

Задача “Astrological Digits” – авторско решение

Задачата е изключително лесна, но трябва да се съобразят ограниченията на входните данни. Въведеното число може да има доста голям брой цифри преди и след десетичната запетая и следователно не може да бъде събрано в нито един от вградените в C# числови типове. Следователно входът трябва да бъде четен или символ по символ или да бъде прочетен в string и да бъде след това обработен символ по символ. Всички символи от входа, които са цифри се сумират, а останалите се пропускат. След това, ако сумата е повече от 9, отново се сумират цифрите на полученото число (по класическия алгоритъм чрез делене на 10 и сумиране на остатъците) и така докато се достигне сума, по-малка от 9. Ето и сорс кода на авторското решение:

using System;

class AstrologicalDigits
{
    static void Main()
    {
        // Read the number and sum its digits
        ulong sumOfDigits = 0;
        while (true)
        {
            int ch = Console.Read();
            if (ch == (int)'\n' || ch == (int)'\r' || ch == -1)
            {
                // The input number is finished --> stop reading any more
                break;
            }
            if (ch > = '0' && ch < = '9')
            {
                ulong digit = (ulong)ch - (ulong)'0';
                sumOfDigits = sumOfDigits + digit;
            }
        }

        // Continue to sum the digits until a single digit is obtained
        while (sumOfDigits > 9)
        {
            ulong nextSumOfDigits = 0;
            while (sumOfDigits > 0)
            {
                ulong lastDigit = sumOfDigits % 10;
                nextSumOfDigits = nextSumOfDigits + lastDigit;
                sumOfDigits = sumOfDigits / 10;
            }
            sumOfDigits = nextSumOfDigits;
        }

        Console.WriteLine(sumOfDigits);
    }
}

Задача “Sand-Glass” – условие

Once upon a time a powerful wizard was born. His name was Gwenogfryn and soon he became a great sorcerer. Kind-hearted he was. He would only use his magic to protect humans from the evil witches that would come at night. Gwenogfryn, however was a pacifist and did not want to fight or hurt the witches, so he came up with another solution. He would catch the witches and throw them into a sand-glass (the only prison a witch cannot escape from). Unfortunately, he is running out of sand-glasses. Help Gwenogfryn catch all witches by making your own sand-glasses.

Задача “Sand-Glass” – вход

The input data should be read from the console.

You have an integer number N (always odd number) showing the height of the sand clock.

The input data will always be valid and in the format described. There is no need to check it explicitly.

Задача “Sand-Glass” – изход

The output should be printed on the console.

You should print the hourglass on the console. Each row can contain only the following characters: “.” (dot) and “*” (asterisk). As shown in the example: the middle row must contain only one ‘*’ and all other symbols must be “.”. Every next row (up or down from the middle one) must contain the same number of ‘*’ as the previous one plus two. You should only use “.” to fill-in the rows, where necessary.

Задача “Sand-Glass” – ограничения

The number N will be a positive integer number between 3 and 101, inclusive.

Allowed working time for your program: 0.25 seconds.

Allowed memory: 16 MB.

Задача “Sand-Glass” – примери

Input Output Input Output
5
*****
.***.
..*..
.***.
*****
7
*******
.*****.
..***..
...*...
..***..
.*****.
*******

Задача “Sand-Glass” – авторско решение

Авторското решение е абсолютно тривиално – просто върти цикли и смята колко звездички и колко точки отляво и отдясно да отпечата на всеки ред. Тази задача е може би най-лесната от втория изпитен ден. Ако някой не може да я реши, поне частично, и е учил цял месец програмиране, тряба да с замисли дали програмирането е за него. Ето и сорс кода на решението:

using System;

class SandGlass
{
    static void Main()
    {
        string line = Console.ReadLine();
        int n = int.Parse(line);

        for (int i = 0; i < = n / 2; i++)
        {
            string dots = new string('.', i);
            string stars = new string('*', n - 2 * i);
            Console.WriteLine("{0}{1}{2}", dots, stars, dots);
        }

        for (int i = n / 2 - 1; i > = 0; i--)
        {
            string dots = new string('.', i);
            string stars = new string('*', n - 2 * i);
            Console.WriteLine("{0}{1}{2}", dots, stars, dots);
        }
    }
}

Задача “Dancing Bits” – условие

Gergana loves dancing and she also likes bits (she doesn’t know what bits really are, but she knows that she likes them). Few days ago she accidently invented a new term – “dancing bits”.

If you ask her what “dancing bits” mean she will tell you that it’s a sequence of identical bits (so the bits can dance together – zeros can only dance with other zeros, the same applies for ones).

You are given N positive integer numbers that are converted to binary numeral system and are concatenated together in one big sequence of bits.

For example: if we have 4 numbers: 5 (101 in binary numeral system), 6 (110 in binary numeral system), 14 (1110 in binary numeral system) and 143 (10001111 in binary numeral system) their concatenation will be 101110111010001111.

You are also given a positive integer K - the number of identical bits (zeroes or ones that can dance together).

Write a program that finds the number of all “dancing bits” (the sequences of equal bits) with a length of exactly K bits. Your program should search in the concatenation of the given N numbers.

For example, if we have 4 numbers (5, 614 and 143, the concatenation of their binary representation is 101110111010001111) and we are searching for the total number of all sequences of equal bits with an exact length of 3 bits, the answer will be 3 (the sequences are bolded in the concatenation above).

In this example we have two sequences of “dancing bits” – “111″ consisting of only ones and one sequence of “dancing bits” – “000″ consisting of only zeros. Note that the sequence “1111″ is not a sequence of exact 3 identical bits.

Задача “Dancing Bits” – вход

The input data should be read from the console.

At the first input line there will be one positive integer – the number K.

At the second input line there will be another positive integer – the number N.

At each of the next N lines there will be one positive integer – the N numbers that represent the input sequence of bits.

The input data will always be valid and in the format described. There is no need to check it explicitly.

Задача “Dancing Bits” – изход

The output data should be printed on the console.

The only output line must contain the answer – the number of “dancing bits” sequences found.

Задача “Dancing Bits” – ограничения

The number K will be positive integer number between 1 and 25 600, inclusive.

The number N will be positive integer number between 1 and 800, inclusive.

Each of the N numbers will be positive integer numbers between 1 and 2 147 483 647, inclusive.

Allowed working time for your program: 0.25 seconds.

Allowed memory: 16 MB.

Задача “Dancing Bits” – примери

Input
Output
Input
Output
3
4
5
6
14
143 
3
1
4
2
10
42
170
20

Задача “Dancing Bits” – авторско решение

Тази задача не е от най-лесните. Алгоритъмът, който е имплементиран в решението, чете и обработва входа число по число. За всяко от тях той първо пропуска водещите нулеви битове отляво, а след това обработва останалите битове един по един. При обработката на значещите битове, се запазват в две променливи какъв е последният бит и колко поредни еднакви на него бита са обработени до момента. При смяна на текущия бит от 0 към 1 или от 1 към 0, това означава, че текущата редица еднакви битове е свършила и започва нова (с дължина 1). Когато текущата редица еднакви битове е свършила, ако тя има дължина K, значи сме намерили “танцуваща редица” и трябва да увеличим брояча. Накрая, когато всички числа и всички битове свършат, отново имаме редица с еднакви числа и трябва също да я проверим дали дължината й е K. Интересни гранични случаи за тестване са само единици (например числото 255 много пъти или само редици с дължина 1, например числото 2 много пъти). Задачата лесно може да се обърка и затова трябва да се тества обстойно. Ето и пълния сорс код на авторското решение:

using System;

class DancingBits
{
    static void Main()
    {
        int k = int.Parse(Console.ReadLine());
        int n = int.Parse(Console.ReadLine());
        int len = 0;
        int lastBit = -1;
        int dancingBitsCount = 0;
        for (int i = 0; i < n; i++)
        {
            int num = int.Parse(Console.ReadLine());

            // Skip the leading zeroes in num
            int firstNonZeroBit = 0;
            for (int bitNum = 31; bitNum > = 0; bitNum--)
            {
                int currentBit = (num > > bitNum) & 1;
                if (currentBit == 1)
                {
                    firstNonZeroBit = bitNum;
                    break;
                }
            }

            // Process the digits of num (without the leading zeroes)
            for (int bitNum = firstNonZeroBit; bitNum > = 0; bitNum--)
            {
                int currentBit = (num > > bitNum) & 1;
                if (currentBit == lastBit)
                {
                    // The current bits continues the last sequence
                    len++;
                }
                else
                {
                    // The sequence is changed - > start a new sequence
                    if (len == k)
                    {
                        dancingBitsCount++;
                    }
                    len = 1;
                }
                lastBit = currentBit;
            }
        }

        // Check the last sequence
        if (len == k)
        {
            dancingBitsCount++;
        }

        Console.WriteLine(dancingBitsCount);
    }
}

Задача “Lines” – условие

You are given a list of 8 bytes (positive integers in the range [0…255]) n0n1, …, n7.

These numbers represent a square grid consisting of 8 lines and 8 columns.

Each cell of the grid could either be empty or full. The first line is represented by the bits of n0, the second – by the bits of n1 and so on, and the last line is represented by the bits of n7.

Each bit with value 1 denotes a full cell and each bit with value 0 denotes an empty cell.

The lines are numbered from the first (top) to the last (bottom) with the numbers 0, 1, …, 7.

The columns are numbered from right to left with the indices 0, 1, …, 7.

The figure shows a sample square grid and its representation by a sequence of 8 numbers n0n1, …, n7:

Lines - example

line is any sequence of full cells staying on the same row or column.

At the figure above we have two lines of 4 cells and two lines of 3 cells and 11 lines of 1 cell.

You need to create a program that finds the longest line in the grid and the number of lines with the longest length.

At the figure we have two largest lines with length of 4 cells.

Задача “Lines” – вход

The input data is should be read from the console.

There will be exactly 8 lines each holding the integer numbers n0n1, …, n7.

It is guaranteed that there exists at least one line in the grid (the grid is not empty).

The input data will always be valid and in the format described. There is no need to check it explicitly.

Задача “Lines” – изход

The output consists of two integers placed on separate lines.

The first line should hold the length of the longest line in the grid.

The second line should hold the number of lines with the maximal length.

Задача “Lines” – ограничения

The numbers n0n1, …, n7 are positive integers in the range [0…255].

Allowed work time for your program: 0.25 seconds.

Allowed memory: 16 MB.

Задача “Lines” – примери

Input Output Input Output
8
72
8
8
16
28
240
0 
4
2
246
247
248
249
250
251
252
253
8
4

Задача “Lines” – авторско решение

Тази задача също не е от най-лесните. По принцип трябва да се реши с матрица, която да се обхожда с вложени цикли, но тъй като масиви и матрици в C# курса още не са изучавани, авторското решение ползва 8-те входни числа вместо матрица. За достъп до определен ред и колона се извлича съответният бит (по номер на колона) от съответното входно число (по номер на ред). Алгоритъмът за намиране на най-дългите линии е прост: проверяват се всички хоризонтални и вертикални линии и от тях се намира най-дългата. Ако има няколко най-дълги, се броят. Като се започне в определена позиция (ред и колона), се тръгва надясно по хоризонтал. Докато има битове със стойност 1, понеже те са част от една и съща линия, се броят колко са. Ако текущата линия стане по-дълга от най-дългата за момента, тя се запомня. Ако стане равна на най-дългата за момента, се увеличава броят на най-дългите линии. Ако се стигне до бит със стойност 0, се започва търсенето на нова линия по съответния хоризонтал от нулата. След като се проверят линиите от всички хоризонтали, се прави аналогично сканиране на всички линии по вертикалите. Има и един особен случай: ако най-дългата линия се състои само от една пълна клетка (дължина 1), то тази клетка (линия) е едновременно хоризонтална и вертикална и алгоритъмът я брои два пъти (веднъж по хоризонтала и веднъж по вертикала). В този случай е необходимо общият брой на намерените линии да се раздели на две. Следва пълният сорс код на авторското решение. Не е ползвана матрица, както и методи, защото още не са учени в C# курса. С тях решението би било по-елегантно, но целта на авторското решение е да покаже как се решава задачата с изучаваните средства:

using System;

class Lines
{
    static void Main()
    {
        // Read the input numbers
        int num0 = Int32.Parse(Console.ReadLine());
        int num1 = Int32.Parse(Console.ReadLine());
        int num2 = Int32.Parse(Console.ReadLine());
        int num3 = Int32.Parse(Console.ReadLine());
        int num4 = Int32.Parse(Console.ReadLine());
        int num5 = Int32.Parse(Console.ReadLine());
        int num6 = Int32.Parse(Console.ReadLine());
        int num7 = Int32.Parse(Console.ReadLine());

        int bestLen = 0;
        int bestCount = 0;

        // Check all horizontal lines
        for (int row = 0; row < = 7; row++)
        {
            int rowBits = 0;
            switch (row)
            {
                case 0: rowBits = num0; break;
                case 1: rowBits = num1; break;
                case 2: rowBits = num2; break;
                case 3: rowBits = num3; break;
                case 4: rowBits = num4; break;
                case 5: rowBits = num5; break;
                case 6: rowBits = num6; break;
                case 7: rowBits = num7; break;
            }

            int len = 0;
            for (int col = 0; col < = 7; col++)
            {
                int cell = (rowBits > > col) & 1;
                if (cell == 1)
                {
                    len++;
                    if (len > bestLen)
                    {
                        bestLen = len;
                        bestCount = 0;
                    }
                    if (len == bestLen)
                    {
                        bestCount++;
                    }
                }
                else
                {
                    len = 0;
                }
            }
        }

        // Check all vertical lines
        for (int col = 0; col < = 7; col++)
        {
            int len = 0;
            for (int row = 0; row < = 7; row++)
            {
                int rowBits = 0;
                switch (row)
                {
                    case 0: rowBits = num0; break;
                    case 1: rowBits = num1; break;
                    case 2: rowBits = num2; break;
                    case 3: rowBits = num3; break;
                    case 4: rowBits = num4; break;
                    case 5: rowBits = num5; break;
                    case 6: rowBits = num6; break;
                    case 7: rowBits = num7; break;
                }

                int cell = (rowBits > > col) & 1;
                if (cell == 1)
                {
                    len++;
                    if (len > bestLen)
                    {
                        bestLen = len;
                        bestCount = 0;
                    }
                    if (len == bestLen)
                    {
                        bestCount++;
                    }
                }
                else
                {
                    len = 0;
                }
            }
        }

        // Check for the special case when the largest cell has size 1x1
        if (bestLen == 1)
        {
            // Cells with size 1x1 were counted twice - > recalculate them
            bestCount = bestCount / 2;
        }

        Console.WriteLine(bestLen);
        Console.WriteLine(bestCount);
    }
}

Тестове на журито

Както и първия изпитен ден, всички предадени решения на задачи се оценяват автоматизирано чрез серия тестове. За всяка задача има лесни тестове, по-трудни тестове и екстремални тестове – около границата на входа (най-малки и най-големи числа). Всяка задача се оценява с по 10 теста, всеки от които дава по еднакъв брой точки. В приложения файл са дадени нулевите тестове (от условията на задачите) и десетте изпитни теста, както и съответните им верни изходи.

Изтеглете тестовете на журито от изпита по C# програмиране от 7 декември 2011 г. в софтуерната академия на Телерик: Tests-CSharp-Exam-I-7-December-2011.rar.

Състезателната система за автоматично оценяване на задачите BGCoder

В Академията на Телерик е разработена judge система за автоматично тестване и оценяване на задачи по програмиране, достъпна публично от сайта www.bgcoder.com:

BG Coder - състезателна система за оценяване на задачи по програмиране

Системата “BG Coder” позволява многократно изпращане на решения по всяка задача по време на изпитите и предоставя пълен фийдбак в реално време, т.е. изпълнява веднага изпратените решения върху тестовете на журито и връща информация кои тестове са преминали успешно и кои не.

Тренировъчен и изпитен режим в BG Coder

Системата “BG Coder” работи в два режима – режим “тренировка” и режим “изпит”.

В режим “тренировка” всеки може да се регистрира и да тренира върху примерни изпитни задачи, да изпраща решения и да получава след това резултатите от изпълнените автоматично тестове – кои тестове минават успешно и кои не минават и по каква причина (грешен резултат, пресрочено време за изпълнение, грешка по време на изпълнение, грешка при компилация и т.н.).

В режим “изпит” системата позволява изпращане на задачи само от участници в изпита и в рамките на определеното за изпита време.

Класация на участниците във всяко състезание (изпит)

И в двата режима се поддържа класация на всички участници, която се обявява публично и се обновява в реално време. Така всеки участник може да види кои задачи са решили неговите колеги и колко точки имат на всяка от задачите:

BG Coder - система за автоматично тестване и оценяване на на задачи по програмиране

Свободна тренировка в BG Coder

Всички приятели на програмирането могат да се регистрират свободно в BG Coder и да тренират върху задачите от няколко тренировъчни изпита и от изпитите от 6 и 7 декември. С времето ще добавяме още тестови състезания (изпити) с много задачи – лесни и трудни, по възможностите на всеки. За момента се поддържа само език C#, но се предвижда разширяване на системата с поддръжка и на други езици за програмиране.

Успех на всички в програмирането!

Безплатна школа по програмиране за деца (3-6 клас) в София –от март 2012

$
0
0

Школа по програмиране за деца - Telerik KidsДетската академия на Телерик стартира безплатен кръжок по програмиране за деца във възраст от 3-ти до 6-ти клас в София в началото на март 2012 г.

Безплатните обучения имат за цел да запалят интереса на подрастващите към компютрите и програмирането и да развиват тяхното алгоритмично мислене и уменията им да разсъждават логично и да решават задачи по програмиране. Уроците са подходящи за деца с интереси към математика и точни науки, компютри и технологии и им дават добър старт, съобразен с възрастта им, който им позволява след време да напреднат и да овладеят професията “софтуерен инженер”, както и да се занимават активно с компютърни науки.

Школата по програмиране за деца дава възможност на малчуганите да направят безплатно първите си стъпки в програмирането с езика C++ в компютърните зали на софтуерната Академия на Телерик в София под надзора на квалифицирани инструктори с богат опит в обучението на деца.

Светлин Наков преподава в софтуерната академияКога и къде се провеждат уроците по програмиране за деца?

Безплатният кръжок по програмиране за деца стартира на 04.03.2012 г. и ще се провежда всяка неделя от 09:00 часа в учебната зала на Академията в София (на адрес ж.к. Младост-1, бул. „Александър Малинов“ 31, в Сватбения комплекс „Булевард“, на втория етаж). Безплатният курс е с продължителност един учебен срок с възможност за продължение през следващата учебна година с изучаване на по-задълбочени теми.

Учебната зала на софтуерната академия е с капацитет 250 души и е оборудвана с компютри, аудио-визуална и мултимедийна техника по най-съвременните стандарти за компютърни обучения. Ще запишем за участие всички кандидати (дори да са 500 или 5 000), но след първите месеци ще продължаваме само с тези от тях, които са наистина амбицирани, старателни и проявяват траен интерес към програмирането.

Групи за начинаещи и напреднали

Безплатните уроци по програмиране ще се провеждат на групи от по 20-30 ученика, от които най-силните ще преминават в групата за напреднали, а останалите, ако имат траен интерес, също ще продължават обучението си безплатно в групи, съобразени с нивото им. Целта е по-силните ученици да се развиват и да се подготвят за шампиони по българските и международните олимпиади, за което е необходима дългогодишна много сериозна работа. В академията ще започва нова група на всеки 3 месеца и след първите няколко занятия ще се отсяват участниците, които се справят най-добре, за да им се обърне по-голямо внимание.

Състезания по програмиране за деца

състезания по програмиранеВсички участници в школите по програмиране за деца ще мерят сили веднъж месечно в национално онлайн състезание. Към момента всеки месец в онлайн състезанията на Telerik Kids Academy участват над 300 деца от цялата страна. Възможността да се състезават на национално ниво всеки месец дава допълнителна мотивация на малчуганите да напредват в програмирането.

Състезанията се провеждат в системата за онлайн оценяване BG Coder и се оценяват автоматично и безпристрастно от компютър.

Задачите се подготвят от Школа А & Б (Шумен), която е известна с подготовката на национални и международни шампиони по информатика.

Преподаватели в школата по програмиране за деца

Школата по програмиране за деца в София ще се ръководи от Явор Никифоров, преподавател с дългогодишен опит в обучението по информатика и програмиране за ученици в малките възрастови групи. Негови възпитаници редовно участват в български и международни състезания по информатика, оглавявайки челните места в класиранията. Инициативата е част от глобалната мрежа от кръжоци по програмиране за деца, която е изградена в 12 града в цяла България по проекта “Telerik Kids Academy”.

Учебна програма на кръжока по програмиране за деца

Малчуганите, които ще навлязат в компютърното програмиране в кръжока за деца в София, ще изучават основите на програмирането и по-конкретно слените теми (на начално ниво):

  • Алгоритми и алгоритмично мислене
  • Типове данни и операции в езика С++
  • Въвеждане и извеждане на данни в C++
  • Условни оператори в езика C++
  • Анализ на текст, съставен от краен брой символи
  • Цикли. Видове цикли в C++
  • Алгоритми с последователно въвеждани елементи
  • Алгоритми, свързани с теория на числата
  • Едномерни масиви
  • Основни задачи за обработка на едномерен масив
  • Обработка на последователно въведени знаци и на текст
  • Функции, дефиниране и извикване на функции, параметри, връщане на резултат, рекурсия
  • Бройни системи. Пресмятания в двоична и шестнайсетична бройна система
  • Бързодействие на програмите. Оптимизации за скорост
  • Динамично оптимизиране (dynamic programming)

Защо избрахме езика за програмиране C++

C++Всички сме наясно, че езикът C++ не е най-подходящият за изучаване от деца, които тепърва навлизат в програмирането, нито е най-масово използваният в съвременната разработка на софтуер. Избрахме C++, тъй като той е стандарт на всички големи национални и международни състезания по програмиране. Наясно сме, че Java, C# и PHP са далеч по-масово използвани в практиката езици, но една от основните цели на школата по програмиране е да подготвя състезатели за олимпиадите и състезанията по програмиране, информатика и информационни технологии, а за тях се изисква най-вече C++.

Изисквания към кандидатите

Школата на Telerik Kids Academy е подходяща за всички будни деца, които проявяват интерес към компютрите, математиката и програмирането. Тъй като обучението стартира от нулата, от учениците не се изискват никакви предварителни знания, освен начални умения за работа с компютър (да могат да пишат на клавиатура). Могат да участват ученици от 3-ти до 6-ти клас и по изключение по-малки деца.

Как така обучавате безплатно, няма ли нещо нередно?

Софтуерната академия на Телерик обучава безплатно на програмиране и разработка на софтуер ученици, студенти, работещи, безработни и дори пенсионери от няколко години насам. Хиляди са преминали нашите безплатни курсове и уроци по програмиране. Инициативата за безплатните обучения е частна и се спонсорира от световноизвестната софтуерна фирма Телерик като част от програмата й за безвъзмездно подпомагане на българското образование и софтуерната индустрия.

Телерик е българска фирма, с български собственици, основана в България, с над 500 служители по целия свят, световен лидер в производството на инструменти за бърза разработка на софтуерни приложения. Собствениците на Телерик са успели предприемачи с родолюбив български дух и са убедени, че е по-разумно да подкрепят развитието на България и на младото поколение софтуерни специалисти вместо да си купуват скъпи коли, яхти, хотели и самолети и по тази причина безвъзмездно даряват за образование на младите хора в родната си страна шестцифрени суми всяка година.

Записване за школите по програмиране

За участие в безплатните уроци по програмиране за деца в Детската академия на Телерик, трябва да попълните онлайн регистрационната форма.

Допълнителна информация можете да получите от сайта на Детската академия на Телерик за ученици (http://telerik-kids.com), както и по e-mail: academy@telerik.com.

Безплатни уроци по изграждане на настолни приложения със C# и WPF –училищна академия

$
0
0

C# и WPF безплатни уроциУчилищната софтуерна академия кани ученици, учители и студенти с интерес към програмирането и практическата разработка на софтуер на безплатно тридневно обучение по разработка на настолни приложения с езика C# и технологията за изграждане на графичен потребителски интерфейс WPF (Windows Presentation Foundation) и подготовка за ИТ теста от Националната ИТ олимпиада (НОИТ) на 22-24 февруари 2012 г. в София.

По традиция безплатните уроци се провеждат в София по три дни всеки месец, целодневно и включват теоретично представяне на изучаваните технологии и практическа работа в компютърните зали на софтуерната академия. Този път темата е разработката на desktop (настолни) приложения с езика за програмиране C#, технологията WPF за изграждане на графичен потребителски интерфейс (GUI) базиран на XAML презентация и използване на бази данни.

Кога и къде ще се проведат C# и WPF уроците?

Безплатните уроци по програмиране на C#, XAML, WPF и разработка на настолни приложения с графичен потребителски интерфейс за Windows с бази данни ще се проведат в София в голямата учебна зала на софтуерната академия (бул. Александър Малинов 31, сватбен мол, етаж 2) в периода 22-24 февруари 2012 г. Обученията са безплатни, но всички евентуални разходи по пътуване и настаняване са за сметка на участниците. За участниците, които не са от София, са осигурени нощувки на преференциални цени в Парк-хотел Москва.

Кой може да участва?

По идея уроците в училищната софтуерна академия са предназначени за ученици и учители от средните училища, но тъй като учебната зала на софтуерната академия е огромна (има 250 седящи места), може да участват всички, които имат желание и интерес към практическото C# програмиране и разработка на desktop приложения.

C# и WPF – учебна програма

Учебната програма на C# и WPF уроците е продължение на уроците по основи на програмирането със C# и бази данни:

  1. Подготовка за теста на НОИТ
  2. Преглед на XAML и WPF технологиите за изграждане на rich GUI приложения в Windows 7 / 8
  3. Контейнери на елементи в WPF – прозорци, панели, табове, изграждане на layout
  4. Основни контроли в WPF – текст, бутони, линкове, менюта, toolbars, sliders, user controls
  5. Разработка на десктоп приложения с WPF – текст, 2D графика, 3D графика
  6. Стилове и шаблони във WPF
  7. Концепции от WPF: dependency properties, attached properties, logical tree
  8. Data Binding в WPF – връзване на контролите с източници на данни, Data Contexts, валидация, конвертори, релативни и статични източници
  9. Работа с WPF и бази данни – показване и редактиране на данни от SQL Server чрез Entity Framework и data binding, paging, master-details навигация

Регистрация за уроците по C#, WPF и бази данни

За участие в безплатните C#, XAML и WPF уроци трябва да се регистрирате на сайта на ученическата академия по разработка на софтуер: http://academy.telerik.com/school-academy/registration.

137 преминаха в третата част на C# курса в софтуерната академия

$
0
0

C# изпит в софтуерната академия на ТелерикНа 6, 7 и 8 февруари се проведоха поредните междинни изпити по програмиране за отсяване на най-силните участници в програмата за безплатно обучение и работа в Телерик, наречена “софтуерна академия”. Програмата предвижда безплатно обучение и работа за около 60 участника в нея, които преминават през много сериозно 10-месечно обучение.

През ноември 2011 г. в Академията на Телерик започна безплатен C# курс с 300 участника. След месец и половина интензивни уроци по програмиране на C# и усилено решаване на задачи през декември се проведе първи междинен изпит по програмиране за подбор на най-добрите участници в курса, които да продължат безплатното си обучение за софтуерни инженери в академията. След първия междинен C# изпит в софтуерната академия продължиха 195 души.

Вторият междинен C# изпит в академията

В началото на февруари се проведе вторият междинен изпит от C# курса, след който по програмата “софтуерна академия” продължават да се обучават безплатно 137 души (и още 11 служители на Телерик). Изпитът беше сложен: 5 задачи на ниво нацинална олимпиада по информатика за 8 часа.

Резултати от изпита

В изпита участваха над 150 души, от които средният резултат беше малко повече от 100 точки от възможни 500. Шампионите на изпита се представиха значително по-силно от средностатистическият участник. Ето резултатите от изпита на първите 20 в класирането:

  • L. Tsonov – 470
  • K. Tashkov – 470
  • N. Valchev – 455
  • V. Stankova – 360
  • M. Penkov – 355
  • B. Nistorov – 345
  • G. Stoyanov – 335
  • V. Bukurov – 335
  • H. Marinov – 325
  • M. Marinov – 325
  • S. Stoyanov – 315
  • V. Staikov – 310
  • M. Stefanov – 295
  • I. Nenchovski – 270
  • S. Radkov – 270
  • M. Rogelov – 270
  • N. Petrova – 255
  • A. Sotirov – 245
  • S. Vladimirov – 245

Решенията на задачите бяха оценявани автоматизирано от състезателната система “BG Coder”, в която задачите от изпитите са налични за свободно практикуване.

Класиране на участниците в софтуерната академия за третата част на C# курса

Софтуерната академия на Телерик е сериозна програма, в която участниците се обучават продължително време на принципите на разработка на софтуер в съвременната ИТ индустрия. В академията се ценят амбицията, старателността и усърдието, с което участниците се развиват като програмисти и софтуерни инженери. Организаторите на курса търсят най-сериозните и най-мотивираните участници, а не непременно най-умните или най-можещите, защото ако си умен и можещ, но не се развиваш усърдно, рано или късно по-сериозните и мотивирани участници ще те изпреварят.

За преминавне към следващия етап от обученията беше направено класиране по няколко предварително обявени критерия:

  • Резултати от практически изпит по програмиране
  • Предадени домашни за всяка една от темите в C# курса
  • Активност в дискусионния форум
  • Докладване на грешки в учебника и в лекциите
  • Указване на помощ на колеги от курса
  • Превод на глава от учебника от бъгарски на английски език (по желание)
  • Участие в конкурса по прграмиране на PC Magazine и Telerik (отборно)

Участниците предварително избират специалността, в която искат да се развиват за напред. Те подреждат професиите, за които кандидатстват, по реда на предпочитанията си (като при кандидатстване в университет). Възможнте професии за три: Software Developer, QA Software Engineer и Developer Support.

Ето и крайното класиране на участниците и специалностите, по които са приети за обучение в третата част на C# курса:

# Name Score Career
1 V. Stankova 102.72 Software Developer
2 L. Tsonov 101.10 Software Developer
3 K. Tashkov 87.67 Software Developer
4 N. Valchev 84.25 Software Developer
5 M. Stefanov 78.79 Software Developer
6 I. Nenchovski 74.67 Software Developer
7 G. Stoyanov 73.99 Software Developer
8 V. Bukurov 68.45 QA Software Engineer
9 M. Rogelov 66.94 Software Developer
10 M. Penkov 66.08 Software Developer
11 M. Marinov 65.42 QA Software Engineer
12 V. Staikov 64.86 Software Developer
13 S. Stoyanov 63.25 Software Developer
14 S. Vladimirov 63.01 QA Software Engineer
15 D. Madjarov 62.12 Software Developer
16 S. Radkov 61.07 Software Developer
17 Z. Branzov 59.33 Developer Support
18 N. Petrova 58.51 Software Developer
19 G. Vaklinov 57.64 QA Software Engineer
20 N. Demirev 57.42 Software Developer
21 K. Nikolov 56.79 Software Developer
22 K. Vandov 56.70 Software Developer
23 D. Tachev 55.71 Software Developer
24 B. Nistorov 54.92 Software Developer
25 H. Marinov 54.75 Software Developer
26 G. Mitev 54.36 Software Developer
27 P. Kolev 53.22 Software Developer
28 M. Vasilev 52.92 Software Developer
29 G. Mateev 51.82 Software Developer
30 M. Draganov 50.70 Software Developer
31 M. Yankov 50.32 Software Developer
32 A. Sotirov 49.75 Software Developer
33 E. Yusein 49.60 Developer Support
34 S. Dimitrov 49.25 Software Developer
35 B. Statev 47.15 Software Developer
36 K. Popov 46.65 Software Developer
37 S. Bogdanova 46.41 QA Software Engineer
38 D. Bakalov 46.23 QA Software Engineer
39 A. Bogdanov 45.82 Software Developer
40 E. Gencheva 44.80 QA Software Engineer
41 S. Gochev 44.68 Software Developer
42 G. Georgiev 44.52 Software Developer
43 A. Angelov 44.49 Software Developer
44 K. Dimitrov 43.66 Software Developer
45 V. Tsenev 43.08 Software Developer
46 I. Babalev 42.25 Software Developer
47 K. Georgiev 41.78 QA Software Engineer
48 P. Valchev 41.63 QA Software Engineer
49 A. Valchev 41.55 Developer Support
50 V. Kirilov 40.50 Software Developer
51 N. Velikov 40.38 QA Software Engineer
52 K. Kotorov 40.17 Software Developer
53 S. Tacheva 40.11 Developer Support
54 V. Bojinov 39.49 Software Developer
55 T. Iliev 38.86 Software Developer
56 N. Stoychev 38.68 Software Developer
57 K. Gatev 38.49 QA Software Engineer
58 V. Iliev 37.68 Software Developer
59 M. Georgiev 37.66 QA Software Engineer
60 I. Ivanov 37.08 Software Developer
61 I. Kolchagov 36.86 Software Developer
62 F. Havaluova 35.91 Software Developer
63 M. Gebov 35.42 Software Developer
64 M. Karamachev 33.80 Software Developer
65 I. Stoyanov 33.70 Software Developer
66 P. Varbanov 33.02 QA Software Engineer
67 V. Amiorkov 32.75 Software Developer
68 A. Djenkov 32.50 Software Developer
69 S. Chonov 32.50 Software Developer
70 V. Shterev 31.83 Developer Support
71 N. Bankin 31.67 Software Developer
72 B. Zhelyazkov 31.65 QA Software Engineer
73 A. Petrov 31.65 Software Developer
74 F. Fischbach 31.43 QA Software Engineer
75 S. Georgieva-Hristova 31.33 Software Developer
76 D. Zhelyazkov 30.75 Developer Support
77 T. Mitev 30.67 Software Developer
78 I. Angelov 30.41 QA Software Engineer
79 N. Angelov 29.95 Developer Support
80 A. Kolev 29.85 Software Developer
81 G. Sinekliev 29.67 Software Developer
82 I. Dyankov 29.67 Software Developer
83 K. Dimitrov 29.36 Developer Support
84 B. Gutsev 29.12 QA Software Engineer
85 K. Dayradzhiev 28.75 Software Developer
86 D. Vasilev 28.67 Software Developer
87 D. Boikliev 28.45 Software Developer
88 V. Vulkov 28.08 Developer Support
89 S. Markov 27.75 Software Developer
90 A. Kirev 27.52 QA Software Engineer
91 T. Kirchev 27.43 Developer Support
92 V. Hristov 27.16 QA Software Engineer
93 P. Sotirova 26.31 Developer Support
94 D. Agayna 26.23 Developer Support
95 V. Kotseva 26.17 QA Software Engineer
96 V. Stanev 26.05 Developer Support
97 D. Todorov 25.63 QA Software Engineer
98 N. Ilieva 25.35 Developer Support
99 A. Georgieva 25.23 QA Software Engineer
100 N. Mehmed 24.99 Developer Support
101 K. Gitsov 24.86 QA Software Engineer
102 B. Dimitrov 24.50 Developer Support
103 B. Boev 24.25 QA Software Engineer
104 P. Stanev 23.96 QA Software Engineer
105 N. Avramov 23.90 QA Software Engineer
106 T. Stoyanov 23.81 Developer Support
107 V. Tabakov 23.80 QA Software Engineer
108 A. Petkov 23.55 Developer Support
109 M. Ivanov 23.17 Developer Support
110 M. Ninov 22.84 Software Developer
111 T. Todorov 22.21 QA Software Engineer
112 P. Benov 21.35 Developer Support
113 J. Stoyanova 21.14 Developer Support
114 G. Petrov 21.06 Developer Support
115 A. Venchev 20.75 QA Software Engineer
116 V. Raikova 20.56 Developer Support
117 V. Dimitrova 20.33 Developer Support
118 S. Stoyanov 19.83 Developer Support
119 A. Lazarov 19.83 QA Software Engineer
120 O. Ivanov 19.67 Developer Support
121 V. Dakov 19.50 QA Software Engineer
122 P. Asenov 18.92 Developer Support
123 G. Genev 18.00 Developer Support
124 P. Pavlov 17.73 Developer Support
125 V. Banov 17.33 Developer Support
126 D. Petkov 16.95 QA Software Engineer
127 N. Dimitrov 16.89 QA Software Engineer
128 J. Ivanova 16.50 QA Software Engineer
129 R. Totalov 16.44 Developer Support
130 D. Kralev 15.50 QA Software Engineer
131 B. Boevski 15.07 Developer Support
132 T. Lilyanova 15.00 Developer Support
133 P. Kirov 14.75 Developer Support
134 Y. Krumov 14.33 Developer Support
135 M. Petrova 13.10 Developer Support
136 R. Radev 12.33 Developer Support
137 I. Gergov 12.04 Developer Support

Задачи и решения от втория междинен изпит по програмиране

Вторият междинен изпит по програмиране беше доста труден. За 8 часа участниците трябваше да решат 5 задачи на ниво национална олимпиада по инфоматика (НОИ). Дори състезатели с опит в националния отбор на България имаха труднст и не можаха да решат всички задачи.

Задачите на изпита нарочно са трудни, за да се поддържа високо нивото. Академията не се бори да произведе просто някакви програмисти, а топ специалисти на световно ниво. Това изисква много сериозна и продължителна работа, решаване на стотици задачи, писане на десетки проекти, преминаване през десетки изпити, изучаане на десетки езици и софтуерни технологии и писане на няколко десетки хиляди реда код. Добър програмист не се става за 1 ден, нито за 1 месец. Ние успяваме за 1 година да дадем много солидни основи и да подготвим шампионите от софтуерната академия да станат топ програмисти на световно ниво. Това не се случва с всички участници, а само с най-амбицираните и най-старателните, които за една година поставят програмирането като основен приоритет в живота си и посвещават основната чат от времето си на него.

Следват 5 комплекта задачи от вторите междинни изпити в академията за софтуерни инженери. Всеки комплект съдържа условия на задачите (на английски език), авторски решения на C# и набор тестове, с които се установява дали дадено решени работи коректно, включително при граничните, специалните и екстремалните случаи за всяка задача. За да се запази форматирането на задачите, сме ги записали в PDF формат.

Примерен изпит по програмиране – задачи и решения (1.02.2012 г.)

Примерният изпит по програмиране беше упражнение, през което преминаха участниците в софуерната академия в клас, по време на часовете в курса “C# Fundamentals”. Те бяха решавани заедно с инструктурите в курса като упражнение.

Тренировъчен изпит по програмиране – задачи и решения (5.02.2012 г.)

Тренировъчният изпит по програмиране беше практическа тренировка, проведена един ден преди реалните изпити, пресъздаваща на 100% изпитите и задачите, които предстоят.

Изпит по програмиране – първи ден – задачи и решения (6.02.2012 г.)

Следват задачите от първия изпитен ден.

Изпит по програмиране – втори ден – задачи и решения (7.02.2012 г.)

Ето и задачите от втория изпитен ден.

Изпит по програмиране – трети ден – задачи и решения (8.02.2012 г.)

Ето ги и задачите от третия изпитен ден.


Школа по програмиране за деца на морето: 3-14 септември, за ученици от цялата страна

$
0
0

лятна школа по програмиране за деца в КитенЗа радост на най-малките ни приятели и техните родители Детската академия по програмиране (Telerik Kids Academy) съвместно със Софийската математическа гимназия (СМГ) организират лятна школа по програмиране за деца в гр. Китен в периода 3-14 септември 2012 г.

В школата могат да участват ученици от цялата страна на възраст от четвърти до седми клас. Ще има група за напълно начинаещи и група за напреднали.

Програма на лятната школа по програмиране в Китен

Учебната програма включва основи на програмирането и подготовка за националните състезания по информатика и програмиране:

  • Езикът C++ – основни конструкции
  • Алгоритми за решаване на задачи по програмиране
  • Подготовка за състезания по програмиране

Тъй като разходите по настаняването на учениците са значителни, този път школата не е безплатна. Участниците заплащат цена от 375 лв. която включва всички разходи: път, настаняване, храна, обучение, застраховка и други.

Записване за школата по програмиране на морето?

За повече информация за школата по порграмиране в Китен през септември прочетете официалната покана за събитието: http://www.telerik-kids.com/sofia/morska-lager-shkola.

Новата учебна година в софтуерната академия

$
0
0

Приближава новата учебна година (2012-2013) в софтуерната академия – образователен център #1 в България за безплатно обучение на софтуерни инженери, в който учат над 4000 души (към юли 2012 г). Предстоящото издание на академията за софтуерни инженери ще бъде много по-мащабно, по-интересно и ще дава повече възможности от от предходните издания.

Telerik Software Academy - Season 2012-2013

Очаквайте скоро официалните учебни планове и новата образователна концепция на Академията. За сега ще разкрия само няколко ключови нововъведения за идната учебна година (септември 2012 – август 2013):

  • Ще приемем минимум 700 души и няма да поставяме ограничение за броя участници в безплатната образователна програма “софтуерна академия”. Всички, които преминат входния си изпит (IQ тест, тест по английски и ИТ тест), ще бъдат приети за безплатно обучение за софтуерни инженери. Това може да са 1000, 2000, дори повече студенти – колкото издържат приемните изпити.
  • Ще открием нови специалности. Към съществуващите специалности “.NET разработчик”, “QA инженер” и “Софтуерен инженер по поддръжката на клиенти” добавяме още няколко: “Уеб front-end разработчик”, “XAML front-end разработчик”, “Разработчик на сървърни услуги”, “ASP.NET уеб разработчик”, “Разработчик на мобилни приложения”, “Windows 8 разработчик”, “Специалист по дигитален маркетинг” и други.
  • Ще разбием учебната програма до много на брой малки курсове. Всички курсове ще са малки (под 1 месец обучение, следвано от практически изпит или практически курсов проект). За различните специалности ще има поредица задължителни курсове (learning track) + изборни дисциплини за свободно записване. Предвиждаме около 20 различни курса: фундаментални и технологични, както и много практически проекти в екип.
  • Повечето курсове в академията ще могат да се записват свободно извън програмата “софтуерна академия”. Ще може да се участва онлайн и присъствено (със задължително присъствени изпити и защити на проекти). Ще могат да се записват и гимназиални ученици. Академията ще може да се кара и за повече от една година, т.е. ако закъсате с някой от курсовете и не ги преминете от първи опит, ще може да ги вземете следващата година и да продължите образованието си за специалността, за която се борите.
  • Обучението преминава на 3 семестъра:
    • Първи семестър (септември 2012 – януари 2013): ще се изучават основи на програмирането и на уеб технологиите + изграждане на инженерно мислене (обучението ще е публично и достъпно за всички желаещи)
    • Втори семестър (февруари 2013 – юни 2013): ще се изучават по-задълбочено програмиране, уеб технологии и бази данни (обучението ще е публично и достъпно за всички желаещи)
    • Трети семестър (юни 2013 – септември 2013): ще се изучават .NET разработка, QA инженерство, работа с клиенти, уеб програмиране, ASP.NET, XAML, мобилни технологии, Windows 8 разработка (обучението ще е само за участниците в академията с достатъчно високи резултати до момента)
  • Ще въведем практическа работа в екипи по проекти на академията още от началните месеци на обучението. Участниците в академията ще трупат практически опит и ще работят в екипи по различни направления месеци наред, за да натрупат работен опит и умения да се сработват със своите колеги. Студентите ще участват в инициативи за свободно споделяне и разпространение на знания, организирани от академията.

Отпечатахме 1000 учебника по основи на програмирането

Безплатният учебник по основи на програмирането, по който вече 3 години студентите в софтуерната академия учат фундаменталните принципи на програмирането, алгоритмите и структурите от данни, беше преиздаден за пореден път. Този път отпечатахме 1000 нови бройки за да посрещнем нуждите на новите студенти на есен.

C# книга

Регистрация за софтуерната академия

Регистрацията за безплатно участие в новия сезон на софтуерната академия е достъпна от сайта на инициативата: http://academy.telerik.com/academy/. В момента тече предварителна регистрация, така че имате време да подготвите старателно своите документи за кандидатстване (CV + cover leter) и да се подготвите за приемните изпити (IQ, English и IT test).

История на софтуерната академия

Академия за софтуерни инженери - безплатно обучение и работаПредстои 4-тото издание на програмата “софтуерна академия”, която предоставя качествено практическо обучение за софтуерни специалисти и работа на най-добрите от тях в Телерик (работодател #1 на България за 2010 г.). Академията на Телерик започна през 2009 г. с обучения на няколко десетки студента и достигна многохилядни безплатни обучения през 2012 г.

  • Telerik Academy 2009-2010 – бяха приети за безплатно обучение 96 участника и от тях около 25 започнаха работа в Телерик след успешно завършване на програмата “софтуерна академия” на длъжност “Junior .NET Developer” и “Junior Developer Support Engineer”.
  • Telerik Academy 2010-2011 – бяха приети за безплатно обучение 115 участника, които намаляха на 66 след първия изпит и от тях накрая около 40 завършиха успешно и започнаха работа в Телерик с придобитата квалификация на длъжности “програмист”, “инженер по осигуряване на качеството на софтуер” и “софтуерен инженер по поддръжката”, след успешно завършване на програмата “софтуерна академия”.
  • Telerik School Academy – през октомври 2010 г. започнаха безплатните обучения по разработка а софтуер за гимназиални ученици за подготовка за националната олимпиада по информационни технологии. В инициативата се обучават стотици ученици от цялата страна и на практика всички първенци от Националната ИТ олимпиада.
  • Telerik Academy 2011-2012 – бяха приети за безплатно обучение 300 участника, след първия изпит продължиха 195, след втория изпит – 137 и от тях успешно завършиха около 80 души, които започнаха работа в Телерик след успешно завършване на програмата “софтуерна академия” по направления “.NET developer”, “QA Engineer”, “Developer Support Engineer” и “Front-End Developer”.
  • Telerik Kids Academy – през септември 2011 г. стартира инициативата Кидс академия по програмиране за деца (4-6 клас) с школи по програмиране в цялата страна. В академията учат над 400 деца от цялата страна, които формират над 70% от състезателите по програмиране във възраст 4-6 клас (статистиката е от юни 2012 г.).
  • Telerik Algo Academy – през февруари 2012 г. започна инициативата “алго академия” за тренировки и обучения по състезателно програмиране и подготовка на национални и международни състезания и олимпиади по информатика. В инициативата участват стотици ученици, сред които и шампионите по програмиране от националния отбор на България, които се състезават по международните олимпиади.
  • Telerik Academy 2012-2013 ще бъде най-мащабният сезон на академията. Очаква се над 700 души да започнат безплатно обучение за софтуерни инженери по програмата “софтуерна академия”, от които над 100 да започнат работа в Телерик като .NET програмисти, C# разработчици, сървърни разработчици, QA инженери, софтуерни разработчици по поддръжката на клиенти, front-end специалисти, уеб разработчици, Windows 8 разработчици, разработчици на мобилни приложения, SEO специалисти и други.

На къде отива софтуерната академия?

growПредстоят ни много позитивни промени в посока трансформация към “софтуерен университет” – посока, в която се движим лека полека от години. Надяваме през 2014 г. да успеем да направим съвместна университетска програма с водещ български или чуждестранан ВУЗ или да успеем да се трансформираме в колеж като запазим обучението безплатно и с високо качество.

  • Ще запазим всички обучения в академията безплатни, както са били и до момента. Ще продължим да приемаме участници за присъствено и онлайн обучение. Ще продължим да записваме всички учебни занятия като видеа, които ще продължават да са свободно достъпни.
  • Ще продължаваме да се развиваме и да се разширяваме, да добавяме нови безплатни курсове по фундаментални дисциплини, свързани със софтуерното инженерство и технологични курсове по практическа разработка на софтуер.
  • В дългосрочен план ще работим за добавяне на диплома за висше образование (професионален бакалавър) към добитата професионална квалификация и професия. Ще търсим начини да организираме и бакалавърски и магистърски програми по специалности, свързани с практическо софтуерно инженерство, продуктов мениджмънт, управление на софтуерни проекти и технологично предприемачество. Надяваме се да успеем да ги направим достъпни за всички.
  • В още по-дългосрочен план ще продължаваме да подпомагаме българското образование по софтуерни технологии на ученическо и студентско ниво в още по-големи мащаби и ще продължим да развиваме софтуерната индустрия като цяло, за да направим някой ден България силициевата долина на Европа.

3-дни безплатно обучение за C# в училищната софтуерна академия

$
0
0

На 12, 13 и 14 ноември 2012 г. организираме поредния безплатен курс за млади софтуерни инженери в училищната софтуерна академия. Този път темата е “Програмиране на C# 4.5”.

Учебна програма на C# курса

Курсът обхваща основите на програмирането с езика C# и платформата .NET Framework 4.5 и Visual Studio 2012 и е началото на поредица курсове за разработка на приложения за Windows 8 със C# и XAML. Учебната програма обхваща съвсем базови, начални познания.

Ден 1 (12 ноември)

  • Примерен ИТ Тест за подготовка за НОИТ
  • Въведение в C# и .NET
  • Основи на C#
  • Масиви

Ден 2 (13 ноември)

  • Многомерни масиви
  • Ползване на обекти
  • Линейни структури данни в C#
  • Речници, хеш-таблици и множества в C#
  • Основи на обектно-ориентираното програмиране в C#

Ден 3 (14 ноември)

  • Делегати
  • LINQ и ламбда изрази
  • Принципи в обектно-ориентирането програмиране
  • Асинхронно изпълнение и C# 4.5

Регистрация за C# курса

За безплатно участие в курса по C# програмиране (14-14 ноември 2012) трябва да се регистрирате на сайта на инициативата: C# курс 12-14 ноември, София.

Алго академия: структури от данни и STL (20-21 ноември, София)

$
0
0

За любителите на състезателното програмиране правим поредното тренировъчно състезание и обучение за подготовка за националните и международните състезания и олимпиади по информатика и програмиране: Алго академия за структури от данни и библиотеката STL в C++ платформата. Безплатното обучение и тренировъчното състезание към него ще се проведат в София на 20 и 21 ноември 2012 г. в софтуерната академия.

Учебна програма по структури от данни и STL

Ще изучаваме базовите структури от данни в програмирането:

  • Списъци, стекове, опашки, свързани, статични, саморазтягащ се масив, вектор
  • Дървовидни структури от данни, дървета, балансирани дървета за търсене, графи
  • Хеш-таблици, речници и множества
  • Библиотеката STL, която имплементира всички тези структури от данни в C++
  • Стандартни алгоритми от STL

Регистрация

Регистрации за безплатно участие се приемат на сайта на Академията по алгоритмично и състезателно програмиране: http://academy.telerik.com/algoacademy/data-structures.

Интелигентни системи, машинно зрение, машинно самообучение, невронни мрежи, генетични алгоритми – 19-21 декември

$
0
0

За напредналите в компютърните алгоритми, за хората, които искат да преминат отвъд ежедневната оперативна работа, и за всички любители на напредналите технологии предлагаме уникален за България практически курс по разработка на интелигентни системи.

На 19, 20 и 21 декември в софтуерната академия на Телерик ще се проведе безплатен курс по изкуствен интелект (artifical intelligence – AI), разработка на интелигентни системи, машинно зрение, машинно самообучение, невронни мрежи и генетични алгоритми. Курсът се организира съвместно с фирма Ten Touch, която разработва интуитивни потребителски интерфейси, базирани на интелигентни системи.

Програма на AI курса

Курсът съчетава съвременна теория и подходи в областта на разработката на интелигентни системи и практическа работа – писане на работещ код, който решава задачи от практиката. Ще има много демонстрации и задачи, които ще се пишат на C++ с инструменти и библиотеки като Code::Blocks и OpenCV. Препоръчително е да имате поне начални умения за програмиране на C++.

Ден I – 19.12.2012

  • Въведение в интелигентните системи
    • Какво е интелигентна система?
    • Изкуствен интелект – класически и модерни подходи
    • “Вграден” интелект – подчинение срещу разнообразие
  • Машинно зрение
    • Основи на цифровите изображения
    • Основни методи за обработка на цифрови изображения
    • Символен анализ на цифрови изображения
  • Имплементация на алгоритъм за филтрация, детекция и трансформация на судоку пъзел в изображение. Част от подалгоритмите ще бъдат имплементирани на С++, а за други ще се ползва OpenCV със С++ API

Ден II – 20.12.2012

  • Въведение в машинното самообучение
    • Класификация и регресия
    • Обучение с и без надзирател
    • Генерализиране и конкретизиране
    • Модели за машинно самообучение
  • Невронни мрежи
    • Какво е невронна мрежа?
    • Как работят невронните мрежи?
    • Какво е пространство на решенията, локални и глобални минимуми?
    • Алгоритъм за обучение чрез проникване на грешката

Ден III – 21.12.2012

  • Генетични алгоритми и изкуствен живот
    • Популации от индивиди
    • Генотип, фенотип, кросинговър и мутации
    • Изкуствена еволюция и акумулативна избирателност
    • Генетични алгоритми
    • Колективен интелект

Лектор на курса по интелигентни системи

Лектор на обучението по разработка на интелигентни системи е Светлин Пенков – специалист по интелигентни системи, иновативни потребителски интерфейси, HCI (human computer interraction), машинно зрение и изкуствен интелект. Той учи последна година магистратура по роботика в университета в Reding (United Kingdom).

Регистрация за безплатното AI обучение

За да се регистрирате за безплатния курс по разработка на интелигентни системи, посетете официалния сайт на инициативата: http://academy.telerik.com/algoacademy/artificial-intelligence.

735 души продължават присъствено в софтуерната академия

$
0
0

След първата сесия от изпити в софтуерната академия на Телерик в следващите курсове от програмата за безплатно обучение и работа за софтуерни инженери  преминаха 720 души в присъствена форма на обучение и 730 в онлайн форма на дистанционно обучение (общо 1450 души). С това софтуерната академия затвърди позициите си на най-сериозната институция за подготовка на кадри за софтуерната индустрия в България и лидер в образованието за софтуерни инженери.

Изпит по практическо програмиране със C# в софтуерната академия на Телерик - 27-29 декември 2012 г.

Изпитите по HTML и уеб технологии

От записаните 3616 души за безплатно обучение по уеб технологии и HTML на изпит се явиха 1449 души. По правило на изпит се допускат обучаващите се в присъствена форма и всички онлайн участници, които са предали всичките си домашни от курса.

Изпитът беше под формата за затворен тест и се провежда присъствено в София в продължение на няколко седмици. Показвайки задоволителни знания и умения, от явилите се участници 1337 положиха успешно HTML изпита. От тях 778 души изкараха отлични резултати и ще могат да се борят за завършване на специалностите от направление “уеб технологии” ако се справят добре и в следващите курсове в направлението (CSS, рязане на сайтове, CMS системи, SEO, Photoshop, JavaScript програмиране и UI дизайн).

Абсолютен шампион в крайното класиране по предмета “HTML основи” е Т. Куртев, следван от Н. Желязков и В. Георгиев. Тримата ще получат специални награди от академията.

Примерни въпроси за теста по HTML можете да намерите в студентската система  с учебните материали от HTML курса.

Без да преувеличаваме, можем да считаме, че HTML курсът в софтуерната академия е най-масовият курс за обучение на уеб специалисти, провеждан някога в България. Горди сме, че 1337 души усвоиха успешно основите на езика HTML и продължават обучението си като уеб разработчици в академията.

Изпитите по основи на програмирането и C#

За безплатно обучение в курса по основи на програмирането с езика C# (част I) се записаха 3346 души. От тях 1119 души се явиха на изпит по програмиране на C#. Това са близо 1000 души, които се обучаваха присъствено и още 120 души от онлайн участниците в курса, които написаха и предадоха в срок всичките си домашни.

Изпитът по практическо програмиране с езика C# се състои от тест и решаване на задачи. На теста се явиха всички сериозни участници в курса (1119 души), а най-добре представилите от тях 508 участници се явиха и на практически изпит по програмиране.

По идея тестът е затворен, провежда се на място в София в рамките на една седмица и на него се явяват голям брой участници. Най-силните от тях се класират за практически изпит (понеже организирането на присъствен изпит за всички не е по силите на организаторите).

Практическият изпит по програмиране на C# се проведе в три последователни дни (27, 28, 29 декември) с три различни комплекта задачи с приблизително еднаква трудност. Участниците (160-170 души на ден) имаха по 6 часа за да решат и предадат 5 задачи по практическо програмиране в системата за автоматизирано оценяване BG Coder. В трите изпитни дни имаше общо 108 души с максимален брой точки (5 напълно решени задачи), а средният брой решени задачи беше 3.5. Задачите не бяха лесни, така че това е изненадващо силен резултат. Той потвърждава концепцията, че тестът отсява най-силните участници от C# курса, които имаха възможност да се явят на задачи по практическо програмиране.

Курса “C# програмиране – част I успешно преминаха 925 души. От тях отлична оценка изкараха 360 души. Всички тези участници в софтуерната академия могат да продължат безплатното си обучение по направление “програмиране” и ако преминат успешно и останалите курсове, да добият някоя от предлаганите в академията професии от софтуерната индустрия.

Примерни въпроси за C# теста, както и изпитните задачи от двата дни заедно с авторските решения и тестовете можете да намерите в студентската система  с учебните материали от курсa C# – част I.

В крайното класиране за курса “C# – част I” първи се класира Т. Куртев, а след него се наредиха К. Диков и С. Киров. Честито на топ шампионите. Те ще получат специални награди от академията.

От академията никой не отпада!

Софтуерната академия на Телерик разглежда подаряването на качествено образование в една от най-търсените в света професии като модерен и изключително резултатен начин за провеждане на корпоративна социална отговорност. Софтуерната академия обучава безплатно на професията “софтуерен инженер” няколко хиляди души от цяла България от всички възрастови групи. На най-силните 5% от придобилите професия в академията имат възможност да се присъединят към продуктовите екипи на Телерик (работодател #1 за България за 2012 г.), а останалите започват работа в други фирми, за което академията съдейства. До момента няма успешно завършил академията, който да не е започнал работа по придобитата специалност.

Софтуерната академия на Телерик може да бъде завършена по едно или няколко направления (специалности), за една година или за няколко години, в присъствена или в онлайн форма. Тъй като присъствените места в учебните зали на академията са ограничени, за тях се класират само най-добре представилите се участници в курсовете по предварително обявени критерии, които включват предадени домашни, резултати от изпити, споделяне на знания и помощ на колеги, помагане на колеги във форума, присъствия на учебни занятия и други. Всички останали могат да се запишат свободно за онлайн обучение.

Оценяването в курсовете (взет изпит / скъсан) се извършва единствено на базата на изпитните резултати (тестове, практически изпити, проекти).

Класирането за участие в присъствените обучения се извършва на базата на по-комплексни критерии: изпитни резултати, домашни, присъствия в час, споделяне на знания и взаимопомощ и други.

След приемни изпити през септември и октомври 2012 г. в присъствена форма на обучение бяха приети 1000 души. След изпитите по HTML и C# част I в присъствена форма на обучение в академията продължават 735 души. Всички останали могат да участват в курсовете от академията онлайн.

Напомняме на всички участници в курсовете на академията, че ако изпълнят определени изисквания (най-често се изисква предаване на всички домашни), могат да се явят на изпитите за всеки един от курсовете и независимо дали се обучават присъствено или онлайн. Разликата между присъственото и онлайн обучението е най-вече във възможността да се посещават на живо учебните занятия и да се получава на живо помощ от инструкторите. В този смисъл от академията никой не отпада, просто по-силните участници продължават присъствено, а останалите – онлайн.

13 души преминават от онлайн към присъствено обучение

Заради постигнати силни резултати на изпитите по C# и HTML (и двата) и цялостно силно представяне (по всички критерии за оценяване) имаме 13 души, които ще имат възможността да преминат от онлайн към присъствено обучение считано от януари 2013 г. Такова прехвърляне ще се прави само при изключителни ситуации, например постигнати топ резултати и при условие, че прехвърлените към присъствено обучение участници си подадат документите и да наваксат с приемните изпити за академията.

Какво следва?

Безплатните обучения в софтуерната академия следват предварително обявения учебен план. По програма следват следните три курса и съответно изпити към тях:

Цялостната концепция на академията, професиите, курсовете, изпитите и всичко останало за тази уникална програма за безплатно добиване на професия и започване на работа в софтуерната индустрия можете да научите от видеото от информационния ден на академията: http://www.nakov.com/blog/2012/08/24/.

Следващата по-сериозна стъпка в развитието на академията най-вероятно ще бъде добавяне на диплома за висше образование към безплатните обучения и добиване на професия, т. е. изграждането на свободен софтуерен университет.

580 продължават безплатното си обучение в софтуерната академия след изпитите по CSS и C# част 2

$
0
0

C# изпит - февруари 2013Измина поредната изпитна сесия в софтуерната академия. Около 800 млади софтуерни специалисти се явиха на изпитите по CSS стилизиране и програмиране на C# – част II през февруари 2013 г. Този път изпитите се оказаха малко по-трудни от декемврийската изпитна сесия в академията и имаме по-малко шампиони.

Изпитът по C# програмиране – част II

701 участници в софтуерната академия се явиха на изпита по C# част II. От тях ненулеви резултати (поне 5 точки от 500 възможни) имат 569 души. Във основа на всички компоненти от оценяването курса завършиха успешно 541 души, а от тях с отличие се представиха 273 участника.

Оценяване в C# курса

C# изпит - февруари 2013В софтуерната академия “взет изпит” означава да покажеш, че си научил поне минимален набор знания и умения за съответния курс (тройка), а “отлично представяне” означава отлична оценка (шестица). Практическият изпит (5 задачи по програмиране за 6 часа присъствено в академията) е най-важният компонент за оценяването в курса, но не е единствен. Резултатите на участниците се формират от практически изпит, предаване на домашни в срок, проверка и анонимно оценяване на чуджи домашни, присъствие на учебните занятия, активност в дискусионните форуми на академията, споделяне на знания и помагане на други участници, участие в конкурса по програмиране организиран съвместно с PC Magazine Bulgaria. Всички тези критерии за оценяване се взимат под внимание с предварително определена тежест и така се формира крайната оценка.

Шампиони в C# курса

Най-висок резултат на практическия изпит по програмиране изкара Е. Стоянов, който реши коректно всички задачи в рамките на 6-те часа, с които разполагаха участниците, и изкара максималния брой 500 точки.

Абсолютен шампион на C# курса (част 2) е Дж. Жеков, който изкара 125 от възможни 140 точки (цялостен резултат по всичките критерии за оценяване).

Изпитът по програмиране в отразен в “24 часа”

Една от изпитните задачи по C# стана повод националният ежедневник “24 часа” да пише за изпитите в софтуерната академия: Куката от “Под прикритие” в задача на изпит за програмисти.

Задачи и решения от изпита по C# – част II

Всички изпитни задачи по “C# – част II” заедно с авторските решения и тестовете от трите изпитни дни (5, 6 и 11 февруари 2013 г.) са публикувани на сайта на курса “C# част 2”. Задачите от изпитите са качени за практикуване в състезателната judge система BGCoder.

Изпитът по CSS стилизиране

IMG_7667805 участници в софтуерната академия се явиха на изпита по CSS стилизиране. От тях ненулеви резултати (поне 5 точки от 300 възможни) имат 795 души. Курса завършиха успешно 758 души, а от тях с отличие се представиха 373 участника.

Оценяване в курса по CSS

Оценяването в курса по CSS стилизиране се извърши по предварително обявените критерии: практически изпит (3 задачи HTML без стилове за стилизиране по определен начин за 2 часа), домашни, присъствия а учебните занятия, участие във форумите, споделяне на знания и помагане на колеги със задачите и участие в конкурса по програмиране с PC Magazine.

Шампиони от CSS курса

64 души  постигнаха максимален резултат на CSS изпита като решиха отлично без грешка всички задачи. Абсолютен шампион на CSS курса (общо по всички критерии за оценяване) е Ф. Бонев.

Абсолютен шампион по C#2 и CSS

Най-високи резултати общо (по C# част II и CSS стилизиране) постигна Дж. Жеков, който е и изключително активен във форума и в своя блог и неуморно помага на колегите си в обучението им в софтуерната академия.

Задачи и решения от изпита по CSS стилизиране

Всички изпитни задачи по “CSS стилизиране” заедно с авторските решения от четирите изпитни дни (11-13 февруари 2013 г.) са публикувани на сайта на CSS курса.

Какво следва в академията?

безплатни обучения в софтуерната академияСофтуерната академия продължава и занапред да предоставя на участниците в нея качествено обучение безплатно, професия и работа в софтуерната индустрия.

От февруари 2013 г. студентите в софтуерната академия продължават присъствено и онлайн обучение по следните учебни дисциплини, насочени към фундаменталните основи на програмирането и практическата разработка на софтуер:

  • Курс по обектно-ориентирано програмиране (ООП)
  • Курс по JavaScript – част I
  • Курс по операционни системи
  • Курс по рязане на сайтове (Slice & Dice)
  • Курс по споделяне на знания и работа в екип

Изброените курсове се провеждат едновременно през периода февруари – март 2013 г. присъствено за преминалите успешно февруарските изпити в академията и онлайн за всички останали. Няма ограничение за записване, а до изпит по традиция ще бъдат допуснати участниците, които са предали всичките си домашни. Можете да се запишете за тези курсове от студентската система на академията.

Нов прием в академията през април 2013!

софтуерна академияОчакайте нов прием в софтуерната академия през април 2013 г. След приемни изпити по IQ, компютърни умения и английски език ще класираме първите 500 кандидата с най-добри резултати за новия предварителен сезон на академията.

500 души ще се обучават онлайн и ще идват на присъствени консултации и на изпити в академията през периода май – октомври 2013 г. Те ще имат достатъчно време да научат HTML, CSS и C# (част 1 и част 2), да се подготвят и явят на изпити и да се присъединят през януари 2014 г. към групата от ессения прием в академията (който по традиция започва през септември-октомври 2013 г.). Очаквайте повече подробности през март (когато ще обявим официално новия прием).

Софтуерен университет?

Борим се да добавим към качественото безплатно обучение за софтуерни инженери и университетска диплома (висше образование). От години подаряваме образование, професия и работа в най-търсената професия в света на хиляди, но сега предстои да добавим и международно призната диплома за висше образование. Още е много рано да коментираме този проект, но ще ви споделя, че има големи шансове успеем да стартираме софтуерния университет от септември 2013 г.


Кой език за програмиране да учим?

$
0
0

Наскоро ми попадна статистиката на колегата Мирослав Мирославов за търсенето на софтуерни инженери в българската софтуерна индустрия и не можах да се стърпя да направя коментар на тези данни и да посоча малко изводи, които можем да си направим от тях.

Класация за търсенето на софтуерни инженери в България (SV Index, юни 2013)

SofiaValley-programming-index-jobs

Ето я и класацията за езиците на програмиране в България на SofiaValley във вид на таблица (източник: http://sofiavalley.com/sv-index-june-2013):

Позиция

Език за програмиране

Срещания

Дял

1

JavaScript

236

23,89 %

2

Java

172

17,41 %

3

PHP

163

16,50 %

4

C#

116

11,74 %

5

C

107

10,83 %

6

C++

97

9,82 %

7

Python

40

4,05 %

8

ObjectiveC

22

2,23 %

9

VisualBasic

19

1,92 %

10

Ruby

13

1,32 %

11

Delphi

3

0,30 %

Обръщам внимание на следната важна подробност на този индекс: “Индексът е изграден на база колко обяви за работа има в страната към днешна дата, в които се споменава даден език за програмиране”. Ще дискутираме след малко защо споменаването на даден език за програмиране не означава непременно работа само с него, т.е. класацията трябва да се интерпретира внимателно.

Изводи, коментари и размишления за класацията

Ако гледаме горната класация, излиза, че трябва да учим JavaScript и това е едва ли не най-важният език за програмиране в днешно време. Наистина, JavaScript се очертава като задължителна технология, за почти всички софтуерни инженери, статистиката е вярна. Обаче наистина ли JavaScript е най-важният език за програмиране в света (или поне в българската софтуерна индустрия)? Нека разгледаме следващите езици в класацията: Java, PHP и C#.

За какво се ползва Java?

Java е език за разработка на сървърни приложения, сериозна бизнес логика, големи индустриални системи, включващи сложна обработка и изискващи голяма надеждност. По Java обикновено се подразбира не само езика Java, но и платформите Java и Java EE. На Java се пишат както сложни server-side системи, така и уеб базиран софтуер. Примерно да вземем три от най-големите Java играчи в българската софтуерна промишленост: SAP Labs Bulgaria, VMware Bulgaria и MB Bulgaria (Moneybookers). И трите фирми пишат големи проекти с тежка бизнес логика, с която обработват финансова и бизнес информация, комуникират с други системи, с бази данни и cloud услуги. И трите фирми обаче предоставят малко или много уеб базиран интерфейс на своите Java приложения и този уеб базиран интерфейс познайте на какво се пише?

Не искам да се ангажирам с цифри, но по мое мнение между 50% и 70% от Java софтуерът, който се пише в България и по света съчетава Java и уеб технологии, т.е. ползват се едновременно Java и JavaScript, HTML и CSS. Какво излиза? Ами за голяма част от Java програмистите (30% – 50% по мое мнение) е задължително да знаят JavaScript, HTML и CSS, за да пишат своите Java приложения. Останалите или не пишат уеб приложения, или имат front-end инженер в екипа, който пише уеб частта, а те пишат само сървърната част.

Какво означава това за статистиката? Ами голяма част от тези близо 24% JavaScript програмисти, дето се търсят на пазара за труда, са всъщност Java програмисти, които по между другото трябва да пишат и JavaScript. Реално една част от JavaScript програмистите от горната статистика, са всъщност Java програмисти и за тях JavaScript не е основен език, а допълнителен.

За какво се ползва PHP?

Едва ли някой ще спори, че PHP е език за писане на уеб приложения, предимно за малки проекти с несложна логика. Има и изключения, разбира се, но PHP на практика е език и технология за създаване на динамични уеб сайтове и клиентски уеб приложения и рядко се ползва за нещо друго. PHP не е подходящ за сървърни приложения с тежка логика, както и за мобилни и настолни приложения (има изключения, знам, но са малък процент от пазара). При по-големи системи PHP се ползва за front-end частта (заедно с HTML, CSS и JavaScript), т.е. за изграждане на уеб базиран потребителски интерфейс към по-сериозна и тежка логика (за пример ще дам Facebook, който има PHP базиран уеб интерфейс и Java базирана сървърна логика в cloud среда).

Какво означава фактът, че PHP се ползва предимно за писане на уеб сайтове и уеб приложения? Това означава, че PHP винаги се позлва заедно с HTML, CSS и JavaScript, а от това можем да си направим извода, че на практика почти всички PHP програмисти са едновременно HTML, CSS и JavaScript експерти. По мое мнение над 95% от PHP програмистите пишат освен на PHP и на JavaScript. Отново става дума, че JavaScript не им е основен език, а допълнителен (както SQL е допълнителен език за почти всички, които ползват бази данни).

За какво се ползва C#?

Езикът C# се ползва за изграждане на всякакви софтуерни приложения и системи: от тежка сървърна логика (където конкурира Java) до уеб приложения (където конкурира PHP) и настолни приложения (където е почти без конкуренция върху Windows платформата) и мобилни приложения (където конкурира Java за Android устройствата и Objective C за iOS устройствата).

C# е доста универсален език, с който се програмира всичко, но има сериозно ограничение – той не е отворена платформа с отворен код. Като собственост на Microsoft, езикът C# се ползва предимно в Microsoft екосистемата, т.е. за програмиране под Windows (сървърни приложения по Windows, cloud приложения в Windows среда, уеб приложения под Windows с ASP.NET и мобилни приложения в Windows Phone и Windows 8). Ако C# и .NET бяха отворени език и платформа (като Java и PHP), вероятно C# щеше да е най-популярният език за програмиране в света.

Отново, както при Java и PHP програмистите, трябва да си зададем въпроса доколко един C# програмист трябва да ползва JavaScript. Отговорът е лесен: ако пише уеб приложения, един C# разработчик трябва да знае HTML, CSS и JavaScript. По мое мнение между 60% и 80% от C# програмистите ползват в ежедневието си и JavaScript.

За какво се ползва JavaScript?

JavaScript е скриптов език за изграждане на потребителски интерфейс в клиентски уеб приложения. На JavaScript се пише тази чат от съвременните софтуерни приложения, която работи в уеб браузъра. С езика JavaScript се изгражда модерен HTML5 базиран потребителски интерфейс (UI) за уеб и мобилни приложения. Езикът JavaScript е тясно свързан с уеб front-end технологиите HTML и CSS и почти винаги се ползва съвместно с тях.

JavaScript е помощен език за web front-end приложения, не основен. На него се пише клиентската част на приложенията (това, което потребителят вижда) и рядко се ползва за сървърната част (логиката и данните на приложенията и тяхната обработка). Технологията Node.js позволява JavaScript да се ползва за сървърни приложения, но по една или друга причина тя не се използва масово.

Повечето съвременни уеб приложения се състоят от клиентска част за потребителския си интерфейс (изградена върху HTML, CSS и JavaScript), сървърна част за своята сървърна логика (написана на Java, PHP или C#) и база данни за съхранение на своите данни (релационна като MySQL или SQL Server или Oracle или нерелационна NoSQL база като MongoDB). Тази типична организация на приложенията е известна в софтуерното инженерство като “трислойна архитектура” и може да се каже, че JavaScript е език само за единия слой на приложенията (уеб потребителският интерфейс) и следователно е помощен език. По същия начин езикът SQL се ползва само в базата данни и също е помощен език, не основен като C# и Java.

Класацията на топ 4 езиците: JavaScript, PHP, Java и C#

Какво излиза от горните разсъждения? Ако тези разсъждения са верни, излиза, че 40% от Java програмистите са едновременно JavaScript програмисти, 95% от PHP програмистите са едновременно JavaScript програмисти и 70% от C# програмистите са JavaScript програмисти. Реално делът на чистите JavaScript програмисти никак не е голям.

И наистина, ако разгледаме обявите за работа в българската софтуерна индустрия, ще се убедим, че много често JavaScript се търси като допълнителен, а не като основен език. Има, разбира се, и професия JavaScript developer, която често пъти се обявява като front-end developer или като mobile developer, когато става дума за уеб фронт-енд и HTML5 и JS базирани мобилни приложения, но по-често се търсят специалисти, които едновременно пишат на JavaScript и на някой сървърен език като C#, Java или PHP.

Изводът според мен е категоричен: JavaScript не е най-търсеният език в българската софтуерна индустрия и се е позиционирал толкова високо в класацията на езиците за програмиране, защото се ползва масово от PHP, C#, Java и Python програмисти. JavaScript не се ползва единствено от C / C++ програмистите, защото те не пишат уеб приложения (с много дребни изключения).

Изводи за пазара на труда в софтуерната индустрия

В крайна сметка до какво стигнахме? Според мен не е правилно да се прави класация на езици за програмиране, защото помощни езици като JavaScript и SQL ще излязат на челните места, без това да съответства на тяхната значимост за индустрията. Точно това видяхме и в класацията SV Index: според нея JavaScript е най-важният език в софтуерната индустрия, а всъщност Java, PHP и C# са по-важни от гледна точка на това дали ще ви наемат на работа.

Според мен езиците и технологиите трябва да се разглеждат съвместно като технологични платформи, примерно PHP+MySQL+HTML+CSS+JavaScript или C#+SQL-Server+ASP.NET-MVC+HTML+CSS+JavaScript. Ако обърнете внимание на обявите за работа, винаги изискваният вървят заедно, примерно ако се търси PHP специалист, обикновено се изискват MySQL, HTML, CSS и JavaScript. Ако се търси C# специалист, обикновено се изискват още SQL Server, HTML, CSS и JavaScript. Следователно класацията трябва да се изгражда на базата на група технологии, които се ползват съвместно, а не по отделни езици за програмиране (като PHP, Java и SQL) и отделни технологии (като уеб услуги, REST, ASP.NET MVC и Django). За съжаление не съм попадал на такава класация за българската софтуерна индустрия до момента.

Трябва ли да учим JavaScript?

Краткият отговор е “Да, учете JavaScript, ще ви трябва”. По мое мнение “JavaScript developer” е добра професия, но е още по-добре да знаете да програмирате и от страна на сървъра (малко C# или Java или PHP или Node.js или Python / Ruby + малко бази данни + уеб услуги с REST и JSON).

JavaScript си остава език, с който се пише част от приложението (уеб front-end частта), а не цялото приложение, защото приложенията почти винаги имат сървърна част и почти винаги тя се пише на друг език. В близките години не очаквам съществени промени и смятам, че всеки разработчик на софтуер трябва да знае малко HTML, CSS и JavaScript + малко бази данни и SQL + малко уеб услуги и REST. Всички тези технологии са част от професията и трябва да се знаят, независимо на какъв език пишете!

Кой език за програмиране да учим?

Много хора ме питат от кой език за програмиране да започнат. Това е сложен въпрос и няма еднозначен отговор. Зависи каква е целта им. Например, ако някой иска да се научи да прави уеб сайтове, най-добре е да започне от HTML + CSS + JavaScript и да продължи с PHP, бази данни и уеб услуги. Ако някой иска да пише уеб приложения, може да започне от HTML + CSS + JavaScript и паралелно да учи програмиране със C# или Java и бази данни. Програмирането пък включва в себе си структури от данни, алгоритми, обектно-ориентирано програмиране и качествен програмен код. Ако някои иска да учи разработка на мобилни приложения за iOS, нещата са съвсем различни и трябва да учи Objective C + iOS платформата.

Моето мнение и съвет към начинаещите в програмирането е следното:

  • Научете поне един език за програмиране с общо предназначение (C# или Java). Така ще влезете в програмирането като концепция. Това включва структури от данни и алгоритми, обектно-ориентирано програмиране и ползване на базови библиотеки (programming APIs). Ако научите C#, много лесно можете да минете на Java или друг език.
  • Научете поне един скриптов език, най-добре JavaScript. Езиците за програмиране си приличат и се различават. Ако знаете един сървърен език (C# или Java) + един скриптов език (JavaScript или PHP или Python), ще знаете основните парадигми в програмните езици и всеки следващ език ще ви е много лесен.
  • Научете основните технологии в разработката на софтуер: бази данни и SQL, уеб услуги и REST, уеб front-end технологии (HTML, CSS и JavaScript) и поне една мобилна платформа (Android, iOS или Windows 8).

Реално въпросът кой език да уча е грешен! Не трябва да учите само един език. Трябват да научите едновременно много езици и много технологии! Не може само със C# или Java или PHP. Не може и само с HTML, CSS и JavaScript. Не може и само с бази данни. Трябва да знаете от всичко по малко и много от това, което в момента работите. По конкретно, за да сте добър софтуерен инженер, трябва да знаете по малко от следните програмни езици, платформи и технологии:

  • Технологии за потребителски интерфейс (front-end): HTML, CSS, JavaScript и JS frameworks (+ други ако се наложи)
  • Технологии за сървърно програмиране (server-side): C# или Java или PHP или Python(+ други ако се наложи)
  • Технологии за работа с данни (back-end): бази данни и SQL, ORM технологии, уеб услуги и REST (+ други ако се наложи)
  • Други технологии и платформи (ако се наложи): мобилни платформи, cloud технологии, софтуерно инженерство, операционни системи, вградени системи, езици от по-ниско ниво като C и C++,  …

Ако някой се изцепи, че е добър C# или PHP програмист, но не знае нищо от изброените по-горе технологии, значи не е добър програмист. Няма такова понятие като “добър Java програмист” или “добър PHP програмист”. Или си добър програмист, или си менте! Ако си добър програмист, ще можеш да пишеш на всичко. Днес на PHP, след месец на Java, догодина на C#. Днес уеб приложения с HTML, CSS и JavaScript, слд 2 месеца мобилни приложения с Java и Android и т.н. Добрият програмист е добър, защото знае как се прави софтуер, знае всички основни езици, платформи и технологии, а “Java програмист” и “C# програмист” са просто временни специализации. Те не могат да означават добър програмист. Има добри програмисти, които пишат основно на Java, има и недобри. Да си програмист (или по-точно софтуерен инженер) е професия, която изисква да учиш всеки ден. Ако това не ти приляга, работи нещо друго.

Ако съм начинаещ, от кой език да започна?

И все пак ако съм начинаещ, от къде да започна? Има само един съвет, който мога да дам с абсолютна убеденост, че е правилен: започни от софтуерната академия! В нея се учат всички основни езици, платформи и софтуерни технологии, които се ползват днес в индустрията, съчетани с основите на програмирането, софтуерното инженерство и екипната работа.

Защо да се запиша в софтуерната академия?

Ако сте начинаещ и искате да станете софтуерен инженер, най-лесният начин е през софтуерната академия. Абсолютно безплатно! В България вече (от няколко години насам) има качествено и безплатно образование за софтуерни разработчици. Софтуерната академия на Телерик дарява качествено обучение, професия и работа и път в живота на хиляди млади хора.

Какво учим в софтуерната академия?

В софтуерната академия учите безплатно всички основни езици за програмиране, платформи и технологии, които ви осигуряват задълбочено навлизане в професията “софтуерен инженер” и работа в софтуерната индустрия:

  • Основи на програмирането – алгоритмично мислене, решаване на проблеми, структури от данни и алгоритми, обектно-ориентирано програмиране, качествен програмен код.
  • Един език за програмиране с общо предназначение – C#. Изучават се в дълбочина езикът и C# и платформата .NET Framework, основните библиотеки и програмни APIs, свързани с .NET платформата.
  • Един динамичен (скриптов) език за програмиране – JavaScript. Изучава се не само езикът JavaScript, но и всички основни технологии, библиотеки и технологични рамки, използвани заедно с него – jQuery, JavaScript OOP и JS UI frameworks.
  • Уеб front-end технологии: HTML, CSS, JavaScript, създаване на уеб сайтове, CMS системи, Photoshop, SEO и UX технологии (потребителско изживяване).
  • Бази данни и уеб услуги (сървърно програмиране): бази данни, SQL Server и MySQL, NoSQL бази данни, ORM технологии за достъп до данни, уеб услуги и REST.
  • Технологични платформи: уеб разработка (ASP.NET MVC), мобилна разработка (базирана на HTML5 и PhoneGap, какво и Windows 8), десктоп разработка (базирана на C# и XAML), cloud технологии, софтуерно инженерство.
  • Работа в екип – в академията сериозно наблягаме на екипната работа по практически проекти и всеки месец организираме поне по един задължителен team work.
  • Soft skills обучения – обучаваме освен по технологии, и по нетехнически теми като личностно развитие, ИТ предприемачество, бизнес умения, здраве и спорт и други.

Как да се запиша за софтуерната академия?

Софтуерната академия стартира два пъти в годината: през пролетта и през есента. Приемът е няколко хиляди души (присъствено обучение) и няма ограничение за онлайн участниците. Продължителността на обучението е около година – година и половина. В академията натоварването е огромно, учи се много здраво, по 8-10 часа на ден в продължение на година. Завършат около 20% от започналите, но пък стават доста добри софтуерни инженери (макар и начинаещи). Има много домашни, които трябва да се правят, защото иначе отпадаш на изпитите. Изисква се висока мотивация и да отделиш много време, но си струва. Софтуерната академия е най-късият път към професията “софтуерен инженер”, при това напълно безплатен. Следващият прием ще бъде септември 2013 г.

За въпроси, свързани със софтуерната академия, използвайте форумът на Академията. Колегите отговарят на всички въпроси до няколко часа:

http://forums.academy.telerik.com

Софтуерната академия е една от стъпките по инициативата “България – силициева долина на Европа”, която е голямата цел на автора на настоящата статия Светлин Наков.

Fundamentals of Programming with C#: Free Book, Videos, Presentations and Mind Maps

$
0
0

C# Programming Fundamentals Book (by Svetlin Nakov & Co.)After years of hard work  the free book “Fundamentals of Computer Programming with C#” was finally published (in September 2013). The free C# book comes with free video lessons, presentation slides, mind maps, exercises, guidelines and exercise solutions to help learners to study the foundations of computer programming and trainers to teach newbies in programming, C#, data structures, algorithms, logical thinking and problem solving.

It was amazing project accomplished by my team of 80+ volunteer contributors (authors, editors, translators and many others). The book was originally written in Bulgarian language and based on the Java platform, later translated to C# and improved and finally translated to English.

C# Book – Free Programming Tutorial (Book + Videos)

The free C# programming book consists of 1122 pages: from basic concepts like variables, expressions, statements and loops to advanced topics like recursive algorithms, hash-tables, balanced trees and high-quality code.

The free book “Fundamentals of Computer Programming with C#” (http://www.introprogramming.info) is a comprehensive computer programming tutorial that teaches programming, logical thinking, data structures and algorithms, practical problem solving and high-quality code construction with many examples in C#, exercise assignments and solution guidelines.

The C# book comes with free video lessons, presentations, mind maps, practical exercises and solutions. Learn programming by watching video lessons and practicing computer programming. This is an efficient  modern approach to start learning software development.

Comprehensive Programming e-Book for Beginners, Intermediates and Experienced Developers

Intro C# Book by Nakov - free programming book, videos and slidesThis free book on fundamentals of programming teaches the major programming concepts and way of thinking needed to become a skillful software engineer and the C# language in the meantime. It is a strong start for anyone who wants to become a great developer. It teaches not just the programming language syntax, but how to design algorithms and solve practical problems.

The free programming book is good for beginners and intermediate-level developers who want to put a solid base for a successful career in the software engineering industry. Even experienced developers could fill their gaps in the fundamentals of programming, data structures, algorithms and high-quality code design.

Free C# Programming Book – Read Online

The free book on programming fundamentals (the Bulgarian C# book) covers the basic concepts of programming, the C# language, Visual Studio and basic APIs of the .NET Framework, object-oriented programming principles (OOP), as well as advanced topics like hash-tables, graphs and recursion.

The free programming book consists of 26 chapters for beginners, intermediate programmers and experts. Read online the free computer programming book by Svetlin Nakov and his team:

Read the free programming fundamentals book here: http://www.introprogramming.info/english-intro-csharp-book/read-online/. We are a non-commercial team, so no registration is required. Just read the C# book for free.

C# Videos – Free Programming Video Tutorial

The free programming fundamentals book is accompanied by 27 free video lessons on C# programming (42 hours), free C# presentation slides (27 PPTX presentations) and mind maps, as well as hundreds of exercises with solutions and live examples.

Free CSharp Programming Video Lessons

The free C# programming videos are a comprehensive video course on computer programming fundamentals and C# programming. Sites like PluralSight and Linda.com provide paid C# video lessons. Why not learn C# and programming concepts for free? Just try. No registration, no email, nothing is required. We operate under a non-commercial project and thus every resource we build is free.

Technologies Covered in the C# Book

Intro C# Book - 3D CoverThe main book intent is to teach concept, not technologies. We teach you to think like a developer, to solve problems, to construct algorithms, to write solid code, to test efficiently, to think about the performance, choose the right data structures and algorithms, use the object-oriented principles correctly, to write high-quality classes and methods, use exception handling correctly, to process string text efficiently, to use recursion correctly, to use advanced data structures like self-balancing search trees, hash-tables and graphs to solve complex real-world problems, etc.

The books does not teach technologies like databases, web development, mobile applications and cloud computing but it reveals the true way to master the basics of programming regardless of the languages, technologies and tools. technologies change every day but the fundamental concepts of computer programming are nearly the same for the last 15 years. This book focus on these fundamentals: the core of computer programming which is a foundation for all software technologies, frameworks, languages and tools. Once you learn programming though this free C# book and video lessons, you can easily switch to other languages like Java, PHP, JavaScript, Python or Ruby. The important thing is to learn the way of thinking, problem solving approach and programming concepts. The rest is just a tool which changes over the time – languages, technologies, tools, etc.

C# Presentation Slides – Free C# Resources for Trainers

Free C# programming teaching resources by Svetlin NakovIf you are a trainer, speaker, university professor, school teacher or just a person who wants to teach others how to program, you have a great free resources to provide programming and C# lessons. The entire book content is presented in condensed form as free presentation slides (in PowerPoint format) and homework exercises ready-to-use by any trainer (non-commercially).

We provide for free, under the Creative Commons Open-Source License (CC-Attribution-NonCommercial-ShareAlike) all our C# programming presentation slides (PPTX presentations) + live demos, exercises and solution guidelines + reference videos.

Svetlin Nakov and other trainers teach C# and programming fundamentals for many years in his courses in Sofia University, Technical University of Sofia, New Bulgarian University, National Academy for Software Development, Telerik Software Academy and Software University, using the C# programming book and especially the presentation slides and live demos coming with the free C# book. Over 5000 students have passed live programming training  (as of January 2014) using our C# programming trainer’s resources (C# slides, C# live demos, C# book and others).

C# Source Code Examples

The book is accompanied by free C# source code examples for each book chapter, ready to be opened in Visual Studio to simplify playing with the code. You may experiment how the code works, modify and play with it. It is highly recommended that you run the sample code while reading the book chapters and play with the code: try changing the code, try extending it, try breaking it, even rewriting it in a new fashion.

A piece of C# source code in Visual Studio

The source code examples illustrate the book content in practice. Most of the sample code comes with live video demonstration as part of our free C# programming video lessons distributed with the book.

Mind Maps of the Book and the Free C# Lessons

Do you use mind mapping? Mind maps are tools to improve your memory and learning by using diagrams to visually represent the most important information by using words with associations and images. To improve your learning process a team of volunteers created an interactive mind map on the C# programming fundamentals book that represents the entire book with ability to drill-down into its chapters and zoom-in / zoom-out over the information and its associations:

C# programming mind maps

You can read the book or watch the free video lessons and revise what you have learned from time to time through these mind maps and this will ensure better understanding, better memorization and more efficient learning process. Just try the C# book mind maps, it is free.

The Free C# Programming e-Book Comes in PDF, ePub, Kindle, DOC, DOCX, HTML and Other eBook Formats

The free book on fundamentals of computer programming and C# comes free in many modern e-book formats. The book was originally written in MS Word (in DOCX format). Later it was exported as PDF, which is the recommended format that opens on all modern large screens devices. Additionally the book was published as HTML to allow publishing it on the book’s official web site: http://www.introprogramming.info/english-intro-csharp-book/read-online/.

The free C# book in many ebook formats (PDF, DOCX, ePub, mobi)

A real challenge was to export the book in high-quality e-book formats like ePub and Mobi (Kindle). The high-quality export was done the following way: first the ePub format was exported from MS Word using Calibre. Then the epub file was manually edited and significantly improved in Sigil. The HTML and CSS behind the ePub archive was converted to modern HTML5 responsive layout and now the C# book epub opens correctly and with good quality at any screen resolution (from 320 x 200 to very large screens) in all modern e-book readers.

The Kindle version was really a pain. The mobi format used in Kindle devices is hard to be managed. As of October 2013 there is no mobi editor available anywhere. The book was converted from epub to mobi through Calibre and the results is acceptable quality Kindle ebook. Some tables, layout and source code are incorrectly formatted but this cannot be easily fixed. Sorry, Kindle readers, try the PDF version if your device can read PDF!

We highly recommend the PDF version of the free C# book because it is correctly formatted, opens everywhere and the links inside work correctly. The epub / mobi versions could display incorrectly portions of the text, images, tables and source code examples.

Download the free C# book in many formats from it web site: http://www.introprogramming.info/english-intro-csharp-book/downloads/.

C# Book Project Sponsors

The team behind this volunteer-driven open-course project wants to thank to the sponsors who helped this free C# book, video lessons and presentation slides to be published in English and distributed freely.

Initially Tеlеrik and Tеlеrik Sоftwаrе Аcаdеmу helped us with volunteers and internal resources, helped to attract authors and contributors and supported the publishing of the Bulgarian version of the C# book:

Tеlеrik Cоrp. Tеlеrik Sоftwаrе Аcаdеmу

Superhosting.BG provided a rock-solid hosting platform for our web site:

Superhosting.BG

The Bulgarian Association of Software Developers (BASD) provided resources and volunteers to help us with this open-source project with significant social impact over the software development community:

Bulgarian Association of Software Developers (BASD)

The Software University Foundation helped us building the interactive web site of the entire book family (the Intro C# English book, the Intro C# Bulgarian book and the Intro Java book):

Software University Foundation

Amazon Kindle bookstore: The C# Programming Fundamentals Book by Svetlin Nakov & Co.

The Bulgarian C# Book in Amazon, Google and Other Bookstores

After its publishing the free book on programming fundamentals with C# was shipped to the biggest bookstores across the world. Where possible, the book was offered as free download. Some bookstores work with paid books only so we uploaded the book as paid entry with the link for free download in its description:

C# Programming eBook Mobile Apps

C# Programming Fundamentals for Android AppWe even created an Android mobile application for the free C# programming book: C# Programming Book for Android.

The Android app is designed to easily locate the C# book assets:

  • Read the book online
  • Watch the C# programming videos online
  • See the PowerPoint C# slides for each book chapter
  • Browse the C# book mind maps
  • Download the C# book in many formats (ePub, PDF, DOCX, …)
  • View the Bulgarian C# and the Bulgarian Java books online
  • Learn more about the book and its accompanying resources

C# Programming Book: The Paperback Edition

The “Fundamentals of Computer Programming with C#” book (English version) has been published in hardware form (as paperback) under the ISBN numbers: 978-954-400-773-7 (9789544007737) and 954-400-773-3 (9544007733). The book is sold as paper-copy (paperback) in the publisher’s online store which ships internationally. The price of the paper copy of the C# book is 6.56 EUR. The shipping for Bulgaria is 2 EUR but international shipping is more expensive then the printed book itself.

CSharp-Book-Order-Now-Banner Intro-CSharp-Book-Nakov-Paperback-Copies CSharp-Book-Order-Now-Banner

The Team Behind the Free C# Book Project

The C# Fundamentals book was an amazing project done by amazing team! More than 80 people contributed to this open-source / open-knowledge project: to build a high-quality book for programming beginners that lays the foundation for becoming a skillful software engineer.

Originally the programming fundamentals book was written in the period 2008-2009 in Bulgarian for the Java language and platform. The original team of Java authors, editors and contributors was the following (in alphabetical order): Boris Valkov, Danail Aleksiev, Hristo Todorov, Lachezar Bozhkov, Luchesar Cekov, Marin Georgiev, Mario Peshev, Mariyan Nenchev, Mihail Stoynov, Nikolay Nedyalkov, Nikolay Vasilev, Petar Velev, Radoslav Ivanov, Rumyana Topalska, Stefan Staev, Svetlin Nakov, Teodor Stoev, Veselin Kolev, Vladimir Tsanev and Yosif Yosifov. The team was lead by Svetlin Nakov who managed to motivate all the contributors to write their chapter of the book and to catch up with the deadlines.

Later, in the period 2009-2011 the Java fundamentals book was translated to C# (in Bulgarian language). In fact it was not just a direct translation, but the book was significantly revised and improved during its adoption to the C# language, the .NET platform and the Visual Studio IDE, even new chapters were written. The team was lead by Svetlin Nakov and Veselin Kolev who both put a lot of effort to guide the process and retain the high-quality of the content. The Bulgarian C# book was published in June 2011. The team of the Bulgarian C# authors, editors and contributors to the Bulgarian C# book project was the following (in alphabetical order): Dilyan Dimitrov, Doncho Minkov, Hristo Germanov, Iliyan Murdanliev, Marin Georgiev, Mihail Stoynov, Mihail Valkov, Mira Bivas, Nikolay Kostov, Nikolay Nedyalkov, Nikolay Vassilev, Pavel Donchev, Pavlina Hadjieva, Radoslav Ivanov, Radoslav Kirilov, Radoslav Todorov, Stanislav Zlatinov, Stefan Staev, Svetlin Nakov, Teodor Bozhikov, Teodor Stoev, Tsvyatko Konov, Vesselin Georgiev, Veselin Kolev, Yordan Pavlov and Yosif Yosifov (partially shown on the image below):

C# book authors

The English translation of the Bulgarian C# book started in January 2012. The project was organized and the team was lead by Svetlin Nakov. The book was split into 42 pieces (chapters and parts of chapters) and each piece was assigned to a different volunteer translator (mostly students from Telerik Software Academy). Some translators were doing well their jobs and was awarded additional pieces of the book to translate. Finally each chapter was reviewed by a different team member to clean-up the translation mistakes and laxities. After that a long period of detailed review was passed to ensure the highest book quality. Many people were involved. Svetlin Nakov put enourmous effort to clean-up the translation style, the book content and formatting. He also reviewed a few chapters and improved their content, rewrote a few examples, fixed hundreds of bugs and updated the content to C# 4.0 and .NET 4.5 and Visual Studio 2012. Many other people helped the English C# book to be prepared with high quality and to clean-up translation bugs (George Georgiev, Ivaylo kenov, Ina Dobrilova Aneliya Stoyanova, Hristo Radkov, and others). The project of C# book translation from Bulgarian to English took the period from January 2012 to September 2013.

A lot of work was put to develop the web site for the C# / Java / BG / EN books. It was joint contribution of many people, mainly Viktor Ivanov and Peter Nikov under the guidance the main driver of the project Svetlin Nakov. A nice contribution to the C# English book site was the interactive mind map created by a large group of Telerik Academy students and by Vladi Stanev who coded the UI in JavaScript.

The full change logs of the C# book development (for the Bulgarian and the English version) are available at the C# book project repository at Google Code: https://code.google.com/p/introcsharpbook/source/list.

Big Thank to All C# / Java Free Programming Book Contributors!

Thank you my team by Nakov (the # book team lead)Dear colleagues, big thank you! It was amazing project and it became reality due to all of you, who voluntarily worked on these free C# and Java programming books, who didn’t sleep to do their job, to catch the deadline. Big thanks to all these contributors (given in alphabetical order): Alexandra Mileva, Alon Rotem, Aneliya Stoyanova, Angel Angelov, Atanas Valchev, Blagovest Buyukliev, Boris Valkov, Boyan Dimitrov, Danail Aleksiev, Dilyan Dimitrov, Dimitar Bonev, Doncho Minkov, Doroteya Agayna, Dyanko Petkov, Franz Fischbach, George Halachev, George K. Georgiev, George S. Georgiev, Georgi Mitev, Georgi Todorov, Georgi Vaklinov, Hristo Germanov, Hristo Radkov, Hristo Todorov, Iliyan Murdanliev, Ina Dobrolova, Ivan Nenchovski, Ivaylo Dyankov, Ivaylo Gergov, Ivaylo Kenov, Jasmina Stoyanova, Kristian Dimitrov, Kristina Nikolova, Lachezar Bozhkov, Lachezar Tsekov, Lora Borisova, Marin Georgiev, Mario Peshev, Mariyan Nenchev, Martin Gebov, Martin Radev, Martin Yankov, Mihail Stoynov, Mihail Valkov, Mira Bivas, Momchil Rogelov, Nedjaty Mehmed, Nencho Nenchev, Nikolay Angelov, Nikolay Kostov, Nikolay Nedyalkov, Nikolay Vassilev, Pavel Benov, Pavel Donchev, Pavlina Hadjieva, Petar Velev, Peter Nikov, Radoslav Ivanov, Radoslav Kirilov, Radoslav Todorov, Rumyana Topalska, Stanislav Vladimirov, Stanislav Zlatinov, Stefan Staev, Svetlin Nakov, Teodor Bozhikov, Teodor Rusev, Teodor Stoev, Tihomir Iliev, Todor Mitev, Tsvyatko Konov, Vasya Stankova, Ventsi Shterev, Vesselin Georgiev, Vesselin Kolev, Vesselina Raikova, Viktor Ivanov, Vladimir Amiorkov, Vladimir Stanev, Vladimir Tsanev, Vladislav Karamfilov, Yoan Krumov, Yordan Pavlov, Yosif Yosifov, Zhelyazko Dimitrov. You are a great team, a real heroes!

Project Roadmap: What Comes Later?

Project Roadmap: Free C# and Java Programming Fundamentals BooksNo one knows what comes later! I am tired of working on this family of programming books. It took 6 years of hard work to build the Bulgarian Intro Java book, the Bulgarian Intro C# book and the English Intro C# book. I learned a lot on how to lead teams of volunteers, how split the work between the team members and how to define scope and deadlines, how to manage the risks, how to fix wrong work and missed deadlines. It was a great experience to work with 80+ volunteers over the years. Than you!

Possible next steps for this project could be the following:

  • Update the free Java book to the latest Java version (it was written in 2008 for Java 5)
  • Translate the free Bulgarian Intro Java book into English
  • Write a C++ version of the programming fundamentals book
  • Split the book into smaller pieces (1200+ pages is too big, right?)
  • Record Java video lessons following the book (in Bulgarian and English) and Java PowerPoint slides

I cannot guarantee anything of the above will ever happen, but I hope to find an energy and good teams of volunteers to move these projects forward again and give more and more for the developer’s community.

The C# Book Fan Club

Become a fan of the free C# / Java programming fundamentals books and help us to promote these books, video lessons and other great resources for programmers-beginners throughout the world.

Little-Baby-Likes-the-CSharp-Book-Nakov-English

C# book social share boxLet’s share, promote and recommend the C# Fundamentals book:

  • Vote +1 in Google+ for the C# / Java fundamentals free books web site.
  • Share this publication in your Facebook / Twitter / Google+ profile.
  • Write a blog post about the free C# fundamentals book and videos in your blog. You may find images and informational texts in the book’s SVN repository here.
  • Write a book review in Amazon / Google Books / Goodreads, …
  • Recommend to your friends the C# book and videos.

You may find the social share / like buttons at the top right corner of the book’s site home page.

The official Facebook page for the free C# fundamentals book is located at: http://facebook.com/IntroCSharpBook.

Happy reading, video watching, problem solving and playing with C# and Visual Studio with the “Fundamentals fo Computer Programming with C#” book.

Become a skillful software developer, start with the free C# book and videos.

Database Apps, Entity Framework, SQL Server, XML & JSON – Practical Hands On Lab by Nakov

$
0
0

The goal of this practical hands on lab is to learn how to develop database applications with C#, Entity Framework and SQL Server. If you follow the tutorial steps below, you will learn how to create a database, map the database to EF data model (database first and code first), query the database, import and export data, parse and create XML and JSON. This lab is part of the practical course “Database Applications” @ Software University.

Note: the source code in all examples below is intentionally given as image to avoid copy-pasting.

Requirements

Problem 0. Restore the Database

You are given a MS SQL Server database “Geography holding continents, countries, currencies, monasteries and rivers, available as SQL script. Restore the database “Geography by running the provided SQL script: Create-Geography-Database-SQL-Server.sql.

Step 1. Connect to MS SQL Server using SQL Server Management Studio. You may use MS SQL Express Edition, MS SQL Developer Edition of MS SQL LocalDB (version 2012, 2014 or later). Example (connecting to SQL 2014 LocalDB):

clip_image002[6]

Step 2. Run the SQL script to create the database schema and load sample data in the tables (drag and drop the file “Create-Geography-Database-SQL-Server.sql” into the SQL Server Management Studio and execute it):

clip_image004[6]

The SQL script should execute without errors:

clip_image006[6]

Step 3. Refresh the Databases. You should see the database “Geography“. It should hold several tables (Continents, Countries, Currencies, Monasteries, Rivers and CountriesRivers).

Ensure you have data in all tables:

clip_image008[6]

Problem 1. Entity Framework Mappings (Database First)

Create an Entity Framework (EF) data model of the existing database “Geography” (map the database tables to C# classes). Use the “database first” model in EF. To test your EF data model, list all continent names.

Step 1. Start Visual Studio. Use Visual Studio 2013 or later. Create a new Blank Solution called Db-Apps-Lab“:

clip_image010[6]

Step 2. Create a new C# Console Application in your blank VS solution called “EF-Mappings“:

clip_image012[6]

Step 3. Add a reference to “Entity Framework” through the NuGet Package Manger in Visual Studio:

clip_image014[6]

Step 4. Add a new ADO.NET Entity Data Model named “Geography“:

clip_image016[6]

Step 5. Create a database first EF mappings (choose the EF Designer from existing database):

clip_image018[6]

Step 6. Create a database connection to your “Geography” database in MS SQL Server:

clip_image020[6]

Step 7. Select all tables to be mapped in the EF data model:

clip_image022[6]

Step 8. Visual Studio will create for you a EF database first data model (EDMX file):

clip_image024[6]

Step 9. To list all continent names, write some code:

clip_image026[6]

Step 10. Run your program. It should list the continent names from the database:

clip_image028[6]

Step 11. Rename the class “Program” to “ListContinents“. Also, rename the file name. Rename your project from “EF-Mappings” to “1. EF-Mappings” (this is the solution of the first lab problem and you will have more problems: 2, 3, 4, …).

Problem 2. Export Rivers as JSON

Write a C# application based on your EF data model for exporting all rivers along with their countries in the following JSON format:

rivers.json

[
  { "riverName": "Nile", "riverLength": 6650, "countries": ["Burundi","Democratic Republic of the Congo","Egypt","Eritrea","Ethiopia","Kenya","Rwanda","South Sudan","Sudan","Tanzania","Uganda"] },
  { "riverName": "Amazon", "riverLength": 6400, "countries": ["Bolivia","Brazil","Colombia","Ecuador","Guyana","Peru","Venezuela"] },
  { "riverName": "Yangtze", "riverLength": 6300, "countries":["China"] },
  …
]

Write the output in a JSON file named rivers.json. Include in the output the rivers with no countries (if any). The JSON file code formatting is not important.

Order the rivers by length (from the longest) and the countries for each river alphabetically.

For better performance, ensure your program executes a single DB query and retrieves from the database only the required data (without any unneeded rows and columns).

Step 1. Create a new Console Application called “Export-Rivers-as-JSON in your VS solution:

clip_image030[6]

Step 2. Rename the project from “Export-Rivers-as-JSON to “2. Export-Rivers-as-JSON“:

clip_image032[6]

Step 3. Set the current VS project as startup project:

clip_image034[6]

Step 4. Add a NuGet reference to the package “Entity Framework“:

clip_image036[6]

Step 5. To reuse the EF data model from the previous exercise, add a reference to the project holding the previous problem “1. EF-Mappings“:

clip_image037[6]

clip_image039[6]

Step 6. Rename the class “Program” to “ExportRiversAsJson“.

Step 7. Write some C# code to list all rivers:

clip_image041[6]

Step 8. Run the program to see the “No connection string” exception:

clip_image043[6]

Step 9. Add the connection string settings to your App.config file or copy the entire App.config file from the previous example:

clip_image045[6]

Step 10. Now run your program again. It should list all rivers:

clip_image047[6]

Step 11. Write a LINQ query to select all rivers, their name, length and countries:

clip_image049[6]

Step 12. Test your query by running the program and checking the output.

Step 13. Add the requested sorting by river length (from longest) and sorting by country name alphabetically:

clip_image051[6]

Step 14. Print the results to the console with a foreach loop.

Step 15. Finally, you have to convert the results to JSON. You can use the JavaScriptSerializer. First add a reference to the .NET assembly System.Web.Extensions.dll:

clip_image053[6]

Step 16. Use the following code to serialize the results as JSON string:

clip_image055[6]

Step 17. Finally, save the result JSON string to a text file named “rivers.json“. Find in Internet how to “write text to file in C#“. You may use File.WriteAllText(…).

Step 18. Run and test your program. Open the output file bin\Debug\rivers.json in Visual Studio and check whether is holds the correct results as expected. Un-minify the JSON to check it for correctness. If the “Un-minify” option is unavailable, update your Visual Studio to the latest version or install Web Essentials for Visual Studio (http://vswebessentials.com).

clip_image057[6]

Step 19. Check for performance problems and ensure your program executes a single SQL query. You might use the SQL Express Profiler to see all executed queries:

clip_image059[6]

Problem 3. Export Monasteries by Country as XML

Write a C# application based on your EF data model for exporting all monasteries by country to a XML file named monasteries.xml in the following XML format:

monastries.xml

<?xml version="1.0" encoding="utf-8"?>
<monasteries>
  <country name="Bhutan">
    <monastery>Taktsang Palphug Monastery</monastery>
  </country>
  <country name="Bulgaria">
    <monastery>Bachkovo Monastery “Virgin Mary”</monastery>
    <monastery>Rila Monastery “St. Ivan of Rila”</monastery>
    <monastery>Troyan Monastery “Holy Mother's Assumption”</monastery>
  </country>
  …
</monasteries>

Exclude all countries with no monasteries. Use an XML parser by choice.

Order the countries alphabetically and the monasteries in each country also alphabetically.

For better performance, ensure your program executes a single DB query and retrieves from the database only the required data (without unneeded rows and columns).

Step 1. Create a new Console Application called “Export-Monasteries-as-XML in your VS solution.

Step 2. Rename the project from “Export-Monasteries-as-XML to “3. Export-Monasteries-as-XML“.

Step 3. Add a NuGet reference to the package “Entity Framework“.

Step 4. Add a reference to the project holding EF data model “1. EF-Mappings“.

Step 5. Rename the class “Program” to “ExportMonasteriesAsXml“.

Step 6. Copy the App.config from the project “1. EF-Mappings“. Thus, you will copy the DB connection string.

Step 7. Write some code to list all monasteries, for example:

clip_image061[6]

Step 8. Run and test your code. Ensure the monasteries are listed correctly:

clip_image063[6]

Step 9. Write a query to select all the monasteries alphabetically along with all their countries alphabetically. To test your query, print the monasteries and their countries to the console. Your code might look similar to this:

clip_image065[6]

Step 10. Exclude from the query the countries with no monasteries. You may use a .Where(…) filter along with monasteries.Any().

Note that you should first filter the data, then sort and finally select. If you put the .Where(…) filter last, it will cause runtime error during the translation of the LINQ query to SQL.

Step 11. Test again to ensure all countries with their monasteries are listed correctly.

Step 12. Check for performance problems and ensure your program executes a single SQL query (and the N+1 query problem is avoided). You might use the SQL Express Profiler to see all executed queries:

clip_image067[6]

Step 13. Now you have to build the output XML. The easiest way is to use the XElement class (the LINQ to XML parser). You can start with the root element:

clip_image069[6]

Step 14. Then you can iterate through all countries and append each country as child XElement:

clip_image071[6]

Step 15. As next step you could iterate though all monasteries in each country and attach the current monastery as child XElement:

clip_image073[6]

Step 16. Print the output XML on the console to ensure it is correct.

Step 17. Finally save the XML to file:

clip_image075[6]

Step 18. Check the output file bin\Debug\monasteries.xml:

clip_image077[6]

Problem 4. Import Rivers from XML

Write a C# application based on your EF data model for importing into the DB a set of rivers given in the XML file rivers.xml. The rivers come in the following XML format:

rivers.xml

<?xml version="1.0" ?>
<rivers>
  <river>
    <name>Maritsa</name>
    <length>480</length>
    <outflow>Aegean Sea</outflow>
    <countries>
      <country>Bulgaria</country>
    </countries>
  </river>
  <river>
    <name>Madre de Dios</name>
    <length>1130</length>
    <drainage-area>125000</drainage-area>
    <average-discharge>4915</average-discharge>
    <outflow>Beni River</outflow>
    <countries>
      <country>Peru</country>
      <country>Bolivia</country>
    </countries>
  </river>
  …
</rivers>

The name, length and outflow elements are mandatory. The drainage-area, average-discharge and countries elements are optional.

You should parse the XML and throw an exception in case of incorrect data, e.g. when a required element is missing or an invalid value is given. The size of the XML file will be less than 10 MB. Use an XML parser by choice.

Step 1. Create a new Console application named “Import-Rivers-From-XML” in your VS solution.

Step 2. Rename the application to “4. Import-Rivers-From-XML“.

Step 3. Add a NuGet reference to the package “Entity Framework“.

Step 4. To reuse the EF data model, add a reference to the project “1. EF-Mappings“.

Step 5. Rename the class “Program” to “ImportRiversFromXml“. Rename also the file “Program.cs” to “ImportRiversFromXml.cs“.

Step 6. Replace your local App.config file with the App.config from the project “1. EF-Mappings“. This will copy transfer your connection string settings.

Step 7. To test whether you have correctly configured EF, the DB connection string and you have database access, you can query for the number of rivers from the database and print the result on the console:

clip_image079[6]

Step 8. The next step is to parse the XML input file. First, create a sample file rivers.xml and put inside the rivers from the example:

clip_image081[6]

clip_image083[6]

Step 9. As a next step, load the XML and print it on the console. You might use the XDocument parser:

clip_image085[6]

Step 10. Test your program to ensure you have loaded the XML correctly.

Your compiled project (.exe file) is located in bin\Debug folder, so if you want to load the rivers.xml from the root of your C# project, it should be accessed through the path “..\..\rivers.xml“.

If the XML fails to parse, check whether is it correct. In the problem description, the sample XML is unfinished (it holds “” at the last line), so you need to finish it.

Step 11. Now you have loaded the XML in the memory as XDocument. The next step is to iterate through all rivers. You may select them with an XPath selector “/rivers/river“. Then, you can print the selected nodes:

clip_image087[6]

If the XPathSelectElements(…) extension method is unavailable, add “using System.Xml.XPath“.

Step 12. Test your code to ensure it selects and prints all rivers correctly.

Step 13. Now you should extract the data from each river. First, extract the mandatory fields:

clip_image089[6]

Step 14. Next, extract the optional fields: drainage area and average discharge. Each optional field should be explicitly checked for null:

clip_image091[6]

Step 15. Test your code. The easiest way is to put a breakpoint and ensure the river data is correctly parsed:

clip_image093[6]

Alternatively, you can print the parsed river data on the console:

clip_image095[6]

Step 16. Now parse the countries for each river in the same way, with an XPath selector “countries/country“, then print the rivers with its countries on the console:

clip_image097[6]

Note: You should relative XPath selector “countries/country“, not full. If you use XPath selector “/countries/country” (with leading “/“), it will select nothing. If you use “/rivers/river/countries/country“, it will select all countries for all rivers.

Step 17. Test your project to ensure the rivers data is correctly parsed.

Step 18. The next step is to import the parsed rivers into the database. First create a River entity, fill its properties and save it to DB:

clip_image099[6]

Step 19. Check whether the rivers are imported in the database with SQL Server Management Studio:

clip_image101[6]

Step 20. Now write the code to load the countries for each river in the database. You need to find each country by its name and then add it to the current river:

clip_image103[6]

Step 21. Finally, run the program and check in the database whether the countries are correctly added to the imported rivers:

clip_image105[6]

Problem 5. EF Code First: Countries, Mountains and Peaks

Create an Entity Framework (EF) code first data model for keeping countries, mountains and peaks.

  • Countries have country code (2 Latin letters) and country name.
  • Mountains have a name and belong to multiple countries.
  • Peaks have a name, elevation and mountain.

Step 1. Create a new Console application named “Mountains-Code-First” in your VS solution.

Step 2. Rename the application to “5. Mountains-Code-First“.

Step 3. Add a NuGet reference to the package “Entity Framework“.

Step 4. Rename the class “Program” to “MountainsCodeFirst“. Rename also the file “Program.cs” to “MountainsCodeFirst.cs“.

Step 5. Create a new Entity Framework Code First Data Model. Click on the VS project, select [Add] -> [New Item…] -> [Data] -> [ADO.NET Entity Data Model]. Name it “MountainsContext“:

clip_image107[6]

Choose “Empty Code First model“:

clip_image109[6]

Visual Studio will generate for you a skeleton for your MountainsContext:

clip_image111[6]

Step 6. Now create your first entity class Country. It should hold country code (two characters, primary key) and country name (string, required). Entity classes should be public. The Country class might look like this:

clip_image113[6]

Step 7. Add the Country entity in your DB context. First clean-up the MountainsContext class, then add a DbSet of countries:

clip_image115[6]

Step 8. The best way to continue is to test the project. First, configure the database connection string in App.config. It should hold the server name (e.g. “(localdb)\MSSQLLocalDB” or “.\SQLEXPRESS“) and the database name (e.g. “Mountains“):

clip_image117[6]

Step 9. To test the EF code first data model, try to find the countries count from the database:

clip_image119[6]

Step 10. Run your application. It should print “0” on the console, without any error messages.

  • If your application runs without errors, it should have created the database “Mountains” (see your connection string). Try to open the database and check whether the “Countries” tables is correctly defined. It should have columns “Code” (primary key) and “Name” of correct data type.

clip_image121[6]

  • If your application fails with an exception, this is most probably due to incorrect connection string. You can fix your connection string in your App.config file.

Step 11. It looks like EF has generated the column Country.Code of type nvarchar(2) instead of char(2). This can be fixed by the configuration attribute [Column]:

clip_image123[6]

Step 12. Now run the code after the fix. It will fail with “InvalidOperationException: The model has changed since the database was created.”. This is completely normal, because the project has not been configured to use “Code First Migrations“:

clip_image125[6]

Step 13. By default the migration strategy in EF code first projects is CreateDatabaseIfNotExists. You can change this strategy with another: DropCreateDatabaseIfModelChanges. This EF database migration strategy will work well in our case, but avoid it in production systems, because it drops the database with all data in all tables each time when you modify the EF data model. To change the default DB migration strategy, put this code at the application start:

clip_image127[6]

Step 14. Now run again your project. It should drop the existing database and re-create it again to apply the changes in the EF code first data model.

Sometimes, you could get an exception: System.Data.SqlClient.SqlException: Cannot drop database “Mountains” because it is currently in use. If this happens, ensure you have closed SQL Server Management Studio and any other applications that use the database.

In the typical case, your program will run and will display “0” countries in the database, because it will be empty after the drop and create.

Step 15. Now open the SQL Server Management Studio and insert a few new records in the Countries table:

clip_image129[6]

Step 16. Run your program again. It should show how many countries are available in the database.

Step 17. The next step is to define the Mountain and Peak entity classes:

clip_image131[6] clip_image133[6]

Step 18. Modify your EF database context to register the new entity classes:

clip_image135[6]

Step 19. Run your program to test the modified EF data model. The database should be automatically dropped and re-created with tables for the new entity classes. Check the structure of the tables in the database:

clip_image137[6]

Step 20. Now we have the Countries, Mountains and Peaks tables in the DB, but no relations are defined between them. Let’s define the relationships:

  • Countries have many mountains (many-to-many):

clip_image139[6]

  • Mountains have many peaks (one-to-many) and belong to many countries (many-to-many):

clip_image141[6]

  • Peaks belong to certain mountain (many-to-one):

clip_image143[6]

Step 21. Now test your EF code first data model by creating a few countries, mountains and peaks:

clip_image145[6]

Step 22. Run the code. Your database should have a few countries, mountains and peaks:

clip_image147[6]

Step 23. To check whether the tables have correct relationships, create a database diagram in SQL Server Management Studio. It should hold the tables Countries, Mountains, Peaks and the many-to-many table MountainsCountries and correct relationships:

clip_image149[6]

Problem 6. EF Code First: Seed the Database

Seed your database with a few countries, mountains and peaks using the EF migrations framework. It is OK to drop the database in case of model changes or use any other migration strategy.

  • Countries: Bulgaria and Germany.
  • Mountains: Rila, Pirin and Rhodopes, all in country Bulgaria.
  • Peaks: Musala (elevation 2925, Rila), Malyovitsa (elevation 2729, Rila) and Vihren (elevation 2914, Pirin).

To test your data model, list all mountains along with their countries and peaks.

Step 1. Seeding the database means to initially load some data after the database is created or modified. To seed the database, we could create our own database migration class by inheriting some of the existing EF migration classes (e.g. DropCreateDatabaseIfModelChanges) and override their Seed(…) method:

clip_image151[6]

The Seed(…) method will be invoked after the database is dropped and re-created. You need to configure the application to use your new migration strategy class:

clip_image153[6]

Step 2. Now drop the database and run the program. It should invoke the Seed(…) method. Check the results in the database. You should have 3 countries (“Bulgaria” and “Germany” from the seed method and “Absurdistan” from the main program):

clip_image155[6]

Step 3. Now list all mountains along with their countries and peaks in order to test the seed:

clip_image157[6]

Step 4. Run the program to test whether it works correctly. The output should be like this:

clip_image159[6]

ASP.NET MVC Practical Hands-On Lab Tutorial (Free from the Software University)

$
0
0

As part of the ASP.NET MVC Web Development course at the Software University I developed a practical MVC hand-on lab (tutorial) that gives rich experience in building data-driven Web applications with ASP.NET MVC, ASP.NET MVC 5, SQL Server, C#, Visual Studio, Entity Framework (code first), AJAX, jQuery, Bootstrap and other modern technologies and tools. In this lab you will create a web based event management sytem, from zero to fully working web application. Enjoy this free practical ASP.NET MVC tutorial for beginners. The source code is intentionally given as images to avoid copy-pasting.

ASP.NET MVC Lab (May 2015) – Web Based Events Management System

The goal of this lab is to learn how to develop ASP.NET MVC data-driven Web applications. You will create MVC application to list / create / edit / delete events. The recommended development IDE to use for this Lab is Visual Studio 2013 with the latest available updates + SQL Server 2012. Let’s start building the event management system in ASP.NET MVC step by step.

Project Assignment

Design and implement a Web based event management system.

· Events have title, start date and optionally start time. Events may have also (optionally) durationdescription, location and author. Events can be public (visible by everyone) and private (visible to their owner author only). Events may have comments. Comments belong to certain event and have content (text), date and optional author (owner).

·  Anonymous users (without login) can view all public events. The home page displays all public events, in two groups: upcoming and passed. Events are shown in short form (title, date, duration, author and location) and have a [View Details] button, which loads dynamically (by AJAX) their description, comments and [Edit] / [Delete] buttons.

· Anonymous users can register in the system and login / logout. Users should have mandatory email, password and full name. User’s email should be unique. User’s password should be non-empty but can be just one character.

· Logged-in users should be able to view their own events, to create new events, edit their own events and delete their own events. Deleting events requires a confirmation. Implement client-side and sever-sidevalidation data validation.

· A special user “admin@admin.com” should have the role “Administrator” and should have full permissions to edit / delete events and comments.

Step 1.  Empty Visual Studio Solution

Create a new empty Visual Studio Solution named “Events-Lab“:

image001

This VS solution will hold your projects: data layer project and ASP.NET Web application project.

Step 2.  Empty MVC Project with User Accounts

Create and empty ASP.NET MVC project by the default Visual Studio template with built-in user accounts and authentication. First, click on the solution, choose [Add] à [New Project…]:

image002

Choose [Visual C#] à [Web] à [ASP.NET Web Application]. Name the application “Events.Web“. It will hold your ASP.NET MVC Web application (controllers, views, view models, etc). The data access layer (entity classes + Entity Framework data context) will be separated in another application.

image003

Next, choose the “MVC” project template + “Individual User Accounts” as authentication type.

image004

Visual Studio will generate an ASP.NET MVC application by template, which will serve as start (skeleton) for your Events management system. The application uses a typical Web development stack for .NET developers:ASP.NET MVC 5 as core Web development framework, Bootstrap as front-end UI framework, Entity Framework as data layer framework, ASP.NET Identity system as user management framework, and SQL Server as database.

Step 3.   Customize the MVC Application

The project generated by the Visual Studio template needs many adjustments. Let’s customize the generated code for your Events management system.

1.       Edit the connection string in the Web.config file to match your database server settings. In our case, we will use a database “Events” in MS SQL Server 2014 Local DB: (LocalDb)\MSSQLLocalDB:

image005

2.       Delete some unneeded files:

o   AssemblyInfo.cs – holds application metadata (not needed at this time)

o   App_Data folder – holds the application database (not needed, we will use SQL Server Local DB)

o   favico.ico – holds the Web application icon used in the browser location bar. We will not use it. We can add it later.

o   Project_Readme.html – holds instructions how to start out MVC project

image006

3.       Build and run the application to check whether it works, e.g. by clicking [Ctrl + F5]:

image007

4.       Test the user registration functionality. You should have out-of-the-box user registration, login and logout:

image008

You have a problem. By default, the MVC application is configured to use too complex passwords. This will make hard the testing during the development.

5.       Let’s change the password validation policy:

·         Modify the PasswordValidator in the file App_Start\IdentityConfig.cs:

image009

·         Modify the password minimum length in the class RegisterViewModel. It is located in the file  Models\AccountViewModels.cs:

image010

·         Modify the password minimum length in the SetPasswordViewModel and ChangePasswordViewModel classes, located in the file  Models\ManageViewModels.cs:

image011

6.       Recompile and run the application again. Test the user registration, login and logout again. E.g. try to register user “test@test.com” with password “1“:

image012

After a bit of waiting, Entity Framework will create the database schema in SQL Server and the MVC application will register the user in the database and will login as the new user:

image013

7.       Open the database to ensure it works as expected. You should have a database “Events” in the MS SQL Server Local DB, holding the AspNetUsers table, which should hold your registered user account:

image014

8.       Now let’s edit the application layout view. Edit the file \Views\Shared\_Layout.cshtml.

·         Change the application’s title:

image015

·         Change the navigation menus. Change the home page link. Replace the “About” and “Contact” links with the code shown below. The goal is to put “My Events” and “Create Event” links for logged-in users only. Anonymous site visitors will have only “Events” link to the home page, while logged in users will be able to see their events and create new events:

image016

·         Change the application footer text as well:

image017

·         Remove the junk code from the home controller’s default view \Views\Home\Index.cshtml:

image018

·         Remove the unneeded HomeController‘s actions “About” and “Contacts“:

image019

·         Delete the unneeded Home controller’s views About.cshtml and Contact.cshtml:

image020

9.       Now run the application to test it again. It should look like this for anonymous users:

image021

After login, the application should display the user’s navigation menus. It should look like this:

image022

Now you are ready for the real development on the Events management system. Let’s go.

Step 4.  Separate the EF Data Model from the MVC Application

The application structure is not very good. It mixes the entity data models with the Entity Framework data context and the MVC view models for the views and MVC input models for mapping the forms. Let’s restructure this.

1.       Create a new Class Library project “Events.Data” in your solution in Visual Studio:

image023

2.       Delete the unneeded files from the Events.Data project:

image024

3.       Move the file Events.Web\Models\IdentityModels.cs to the new project Events.Data. You can use [Edit] à [Cut] à [Paste].

image025

4.       Now the Visual Studio Solution will not compile. Many errors will be shown if we rebuild with [F6]:

image026

We need to fix some issues: class names, file names, library references, project references, etc.

5.       Extract the class ApplicationUser into a file named “ApplicationUser.cs“. Change its namespace to “Events.Data“. Your code should look like this:

image027

6.       Rename the IdentityModel.cs file to ApplicationDbContext.cs. This file will hold your Entity Framework database context – the class ApplicationDbContext. Change its namespace to Events.Data. Your code should look like this:

image028

7.       Your code will still not compile. Now you should add NuGet references to the missing libraries: Entity Framework, Microsoft.AspNet.Identity.Core and Microsoft.AspNet.Identity.EntityFramework:

image029

image030

It is enough to reference the package “Microsoft.AspNet.Identity.EntityFramework“. The others depend on it and will be installed by dependency.

8.       Fix the missing using …” in the code. The project Events.Data should compile without errors.

9.       The project Events.Web will not compile due to missing classes: ApplicationUser and ApplicationDbContext. Let’s fix this.

10.   Add project reference from Events.Web project to Events.Data project:

image031

11.   Fix the missing using Events.Data;” statements in the Events.Web project.

Now the project should compile correctly. If not, check your library and project references and “using” statements.

12.   Test the MVC application. It should work correctly. Test the Home Page, Register, Login and Logout:

image032

Step 5. Define the Data Model

Now you are ready to define the data model for the Events management system: entity classes + Entity Framework database context + data migration classes. Let’s define the entity classes:

1.       First, add a full name in the ApplicationUser class. It will hold the name of the event’s author:

image033

2.       Next, create your Event class. It will hold the events and their properties:

image034

image035

Compile your code. It should compile without errors.

3.       Create your Comment class. It will hold the comments for each event:

image036

Compile your code. It should compile without errors.

4.       Add comments to the Event class:

image037

image038

Compile again your code. It should compile without errors.

5.       Modify the ApplicationDbContext class to include the events and comments as IDbSet<T>:

image039

Compile again your code. It should compile without errors.

6.       Run the MVC application. It will fail at the Login action. Think why!

image040

You need a migration strategy for the database, right? How shall changes in the DB schema be handled?

Step 6.   Configure Database Migrations

Now you will configure automatic migration strategy for the database to simplify changes in the database schema during the project development.

1.       First, enable the database migrations from the Package Manager console for the Events.Data project:

image041

The command “Enable-Migrations” will generate a file Migrations\Configuration.cs in the Events.Data project:

image042

2.       The generated DB migration class has non-informative name. It is a good practice to rename it: Configuration à DbMigrationsConfig. Rename the file that holds this class as well: Configuration.cs àDbMigrationsConfig.cs.

image043

3.       Edit the DB migration configuration: make the class public (it will be used by the MVC project); enable automatic migrations; enable data loss migrations:

image044

4.       Set the database migration configuration in the database initializer in your Global.asax file in your MVC Web application:

image045

5.       Now run the MVC application to test the new database migration strategy. Rebuild the application and run it. The application will fail!

image046

Seems like the database migration has not been executed, right? You could also check the database:

image047

The new tables (Events and Comments) are missing.

6.       Let’s fix this problem. The easiest way is just to drop the database:

image048

7.       Let’s run the MVC Web application again and try to login. It will say “Invalid login“:

image049

This is quite normal: we dropped the entire database, right? Let’s see what the database holds now:

image050

8.       Let’s register a new account. The application will fail with “Entity Validation Errors“:

image051

The problem comes from the field “FullName” in the ApplicationUser class. It is required but is left empty.

9.       We need to change the RegisterViewModel, the Register.cshtml view and the Register action in the AccountController to add the FullName property:

image052

image053

image054

10.   Now run the application and try to register a new user account. It should work correctly:

image055     image056

Step 7.  Fill Sample Data in the DB (Seed the Database)

You are ready to fill the database with sample data. Sample data will help during the development to simplify testing. Now let’s fill some data: create admin account and a few events with few comments. The easiest way to do this is to create a Seed() method in the database migration strategy.

1.       In the Seed() method check whether the database is empty. If it is empty, fill sample data. The Seed() method will run every time when the application starts, after a database schema change. You can use sample code like this:

image057

In this example, the default administrator user will be “admin@admin.com” with the same password. This will simplify testing, because some actions require administrator privileges in the system.

2.       Now, let’s create the admin user and the administrator role and assign administrator role to the admin user:

image058

image059

3.       Next, create some events with comments:

image060

4.       Add some code to create a few more events:

·         Few upcoming events

·         Few passed events

·         Few anonymous events (no author)

·         Events with / without comments

5.       Drop the database and restart the Web application to re-create the DB.

If you get “Cannot open database” error, stop the IIS Server, rebuild and run the MVC application again:

image061

Stopping the IIS Express web server (Internet Information Services):

image062

6.       Check the data in the Events database. It should hold few records in the Events, Comments, AspNetUsers, AspNetRoles and AspNetUserRoles:

image063

Now you have sample data in the Events database and you are ready to continue working on the Events management MVC Web application.

Step 8.  List All Public Events at the Home Page

Listing all public events at the home page passes through several steps:

·         Create EventViewModel to hold event data for displaying on the home page.

·         Create UpcomingPassedEventsViewModel to hold lists of upcoming and passed events.

·         Write the logic to load the upcoming and passed events in the default action of the HomeController.

·         Write a view to display the events at the home page.

1.       Create a class Models\EventViewModel.cs to hold event data for displaying on the home page:

image064

2.       Create a class Models\UpcomingPassedEventsViewModel.cs to hold lists of upcoming and passed events:

image065

3.       Create a class Controllers\BaseController.cs to hold the Entity Framework data context. It will be used as base (parent) class for all controllers in the MVC application:

image066

4.       First extend the BaseController from the HomeController to inherit the DB context:

image067

5.       Now write the code in the default action Index() of the HomeController to load all public events:

image068

The idea of the above code is to select all public events, ordered by start date, then transform them from entity class Event to view model class EventViewModel and split them into two collections: upcoming and passed events.

6.       Finally, create the view to display the events at the home page – \Views\Home\Index.cshtml:

image069

7.       The above code shows the upcoming events only. Add similar code to list the passed events as well.

8.       You need to define a display template for the EventViewModel class. It will be used when the Razor engine renders this code: @Html.DisplayFor(x => x.UpcomingEvents). Create the display template in the file\Views\Shared\DisplayTemplates\EventViewModel.cshtml:

image070

9.       Build and run the project to test whether it works correctly. If you have a luck, the code will be correct at your first attempt. The expected result may look like this:

image071

10.   Now let’s add some CSS styles to make the UI look better. Append the following CSS style definitions at the end of the file \Content\Site.css:

image072

11.   Refresh the application home page to see the styled events:

image073

12.   Good job! Events are displayed at the home page. Now let’s optimize a bit the HomeController. It holds a code that loads an Event object into a new EventViewModel object:

image074

This code can be moved to the EventViewModel class to make the HomeController cleaner:

image075

Looks complex, but it is not really. This static property is used in .Select(…) queries to transform Event into EventViewModel. Such transformations are boring and work better encapsulated in the view model class. Now the HomeController can use this static property as follows:

image076

13.   Build and test the project again to ensure it woks correctly after the refactoring.

Step 9.  List Events Details with AJAX

The next step in the development of the Events management application is to display event details dynamically with AJAX. The goal is to achieve the following functionality:

image077

1.       First, let’s define the EventDetailsViewModel class that will hold the event details:

image078

It will internally refer the CommentViewModel class:

image079

2.       Next, let’s write the AJAX controller action, that will return the event details when users click the [View Details] button:

image080

The above logic is not quite straightforward, because event details should be shown only when the user has permissions to access them:

·         The event author can view and edit its own events (even private).

·         System administrators can view and edit all events (even private).

·         Public events are visible by everyone, but not editable by everyone.

3.       It is quite good idea to extract the check whether the current user is administrator in the BaseController:

image081

4.       Next, let’s create the partial view that will be returned when the AJAX request for event detail is made. The partial view for the above AJAX action should stay in \Views\Home\_EventDetails.cshtml.

First, display the event description:

image082

Next, list the event comments:

image083

Finally, show [Edit] and [Delete] buttons when the user has edit permissions:

image084

5.       Now, let’s edit the events display template \Views\Shared\DisplayTemplates\EventViewModel.cshtml and add the AJAX call in it:

image085

6.       Let’s test the new functionality. Everything works fine, except that the AJAX action link is executed as normal link without AJAX:

image086

7.       What is missing? The script that handle the AJAX calls are not loaded in the page. Let’s add it.

·         First, install the NuGet package Microsoft.jQuery.Unobtrusive.Ajax in the project Events.Web:

image087

·         Register the Unobtrusive AJAX script in the bundles configuration file App_Start\BundleConfig.cs, just after the jQuery bundle registration:

image088

·         Include the unobtrusive AJAX script in the view which needs AJAX: \Views\Home\Index.cshtml

image089

This code will render the “~/bundles/ajax” bundle in the section “scripts” in the site layout:

image090

8.       Now the AJAX functionality should work as expected:

image091

The network requests in the Web browser developer tools shows that the AJAX call was successfully executed:

image092

Step 10.   Create New Event

The next feature to be implemented in the Events management system is “Create New Event“. This will require creating a “New Event” form (Razor view) + input model for the form + controller action to handle the submitted form data.

1.       First, let’s define the input model for the create or edit event form. It will hold all event properties that the user will fill when creating or editing an event. Let’s create the class Models\EventInputModel.cs:

image093

It is a good idea to attach validation annotations like [Required] and [MaxLength] for each property to simplify the validation of the form.

2.       Next, let’s create the “New Event form. The easiest way to start is by using the Razor view generator in Visual Studio. Create a folder “\Views\Events“. Right click on the “Events” folder and choose [Add] à [View…]:

image094

Enter a view name Create“. Select template Create“. Select the model class EventInputModel (Events.Web.Models)“. Click [Add] to generate the view:

image095

Visual Studio will generate the “Create Event” form:

image096

3.       Now customize the generated form. Change several things:

·         Change the Title à “Create Event”

image097

·         Remove the “Back to List” link:

image098

·         Add [Cancel] link to “My Events”, just after the [Create] button:

image099

4.       Create EventsController to handle the actions related to events: create / edit / delete / list events.

image100

image101

image102

5.       Add the “Create” action (HTTP GET) to display the “New Event” form:

image103

6.       Build the project, run it and test the new functionality (login and click [Create Event]). The “New Event” form should be rendered in the Web browser:

image104

Create New Event Logic

After the “Create New Event” form is ready, it is time to write the logic behind it. It should create a new event and save it in the database. The correct way to handle form submissions in ASP.NET MVC is by HTTP POST action in the controller behind the form. Let’s write the “Create New Event” logic.

1.       First, extend the BaseController to inherit the database context:

image105

2.       Next, write the action to handle POST \Events\Create:

image106

3.       Run and test the code. Now creating events almost works:

image107

When the form is submitted, the result will be like this:

image108

This is quite normal. The “My” action in the EventsController is not missing.

4.       Let’s define the action “My” and the view behind it in the EventsContoller:

image109

Create an empty view \Views\Events\My.cshtml (it will be implemented later):

image110

5.       Now run and test the application again:

image111 àimage112

Check the database to see whether the new event is created:

image113

6.       At the home page the new event is not listed. Why? The event is not public. Let’s make the “Is Public?” check box in the “New Event” form checked by default:

image114

Step 11. Notification System (Info / Error Messages)

The next big step will be to add a notification system to display informational and error messages like these:

image115

Typically, MVC controller actions that modify DB objects (e.g. EventsController.Create) work as follows:

·         Check the model state. If the validation fails, the model state will be invalid and the controller will re-render the form. The form will show the errors for each incorrect field.

·         If the model state is correct, create / edit the database object behind the form.

·         Add a notification message to be shown at the top of the next page shown in the Web application.

·         Redirect to another page that lists the created / modified DB object.

As the “Post-Redirect-Get” pattern says, in Web applications it is highly recommended to redirect to another page after executing an action that changes something at the server side:http://en.wikipedia.org/wiki/Post/Redirect/Get.

The missing part in ASP.NET MVC is the notification system, so developers should either create it, or use some NuGet package that provides notification messages in ASP.NET MVC. Let’s install and use the NuGet packageBootstrapNotifications:

1.       From the package management console in Visual Studio install the NuGet package BootstrapNotifications in the Events.Web project:

image116

NuGet will add the class Extensions\NotificationExtensions.cs:

image117

NuGet will also add a partial view \Views\Shared\_Notifications.cshtml:

image118

2.       To display the notification messages (when available) at the top of each page in the MVC project, render the _Notifications partial view in the site layout, just before the @RenderBody():

image119

3.       Put notifications in the controller actions after successful database change.

Use NotificationType.INFO for information messages (success) and NotificationType.ERROR for error messages. Not that these notifications will render after the first redirect to another page, because the implementation relies on the TempData dictionary in ASP.NET MVC.

Add notification messages after db.SaveChanges() in the actions that change the database, followed by RedirectToAction(…):

image120

4.       Run and test the application. Create an event to see the “Event created.” notification message:

image121

This looks a bit ugly, so add a fix in the \Content\Site.css:

image122

5.       Save the changes, refresh the site with [Ctrl + F5] and create a new event to test the changes:

image123

Step 12.  Date / Time / Duration UI Controls

The “New Event” form displays fields for entering date + time and duration. Currently the editor for these fields is not user-friendly. The date format is unclear and there is not calendar control. Let’s fix this. Let’s add “date-time picker” for the date and duration fields:

1.       Install the NuGet package “Bootstrap.v3.Datetimepicker.CSS“:

image124

It will add the following files to your MVC project:

·         \Scripts\bootstrap-datetimepicker.js

·         \Scripts\moment.js

·         \Content\bootstrap-datetimepicker.css

These files should be includes in all pages that use the date-time picker.

2.       Create CSS and JavaScript bundles for the date-time picker:

image125

3.       Create a placeholder for the CSS bundles in the _Layout.cshtml:

image126

It will be used later to inject the date-time picker’s CSS from the events editor form.

4.       Add the date-time picker’s scripts and CSS files in the “New Event” form, in \Views\Create.cshtml:

image127

This code will inject the specified CSS from the bundles in the page header:

image128

It will also inject the specified JavaScript from the bundles at the end of the page:

image129

5.       Now the site is ready to add the date-time picker in the “New Event” form. Let’s try to attach the date-time picker for the field “StartDateTime” in \Views\Events\Create.cshtml:

image130

6.       Now rebuild the project and run the code to test the new functionality. It does not work due to JavaScript error:

image131

7.       Seems like jQuery is not loaded. This is because the script for attaching the datetimepicker for the StartDateTime field uses jQuery, but the jQuery library loads later, at the end of the HTML document. This is easy to fix, just move the jQuery reference at the start of the HTML code in _Layout.cshtml:

image132

8.       Now rebuild the project and run the code to test again the new functionality. It should now work correctly:

image133

9.       In similar way, add a time picker for the “Duration” field:

image134

10.   Test the new duration picker by starting the Web application:

image135

Step 13.   Client-Side Unobtrusive Validation

Now the “New Event” form works as expected. There is a small UI problem: when invalid data is entered, the form validation is executed at the server side and the user sees the validation errors after post-back, with a small delay.

Let’s try to add client-side form validation. This is really easy, just insert the Microsoft jQuery Unobtrusive validation JavaScript bundle at the page holding the form:

image136

Test the “New Event” form to ensure the validation is now client side.

Step 14.         List My Events

Now let’s list current user’s events at its personal events page: \Events\My.

1.       First, add [Authorize] attribute in the EventsController:

image137

The [Authorize] attribute will redirect the anonymous users to the login form. It says that all controller actions of the EventsController can be accessed by logged-in users only.

2.       Next, add the HTTP GET controller action “My” in EventsController that will display current user’s events:

image138

3.       Finally, create the view My.cshtml behind the above action. It is essentially the same like the Index.cshtml view of the HomeController, right? Duplicating code is very bad practice, so let’s reuse the code. First, extract a partial view \Views\Shared\_Events.cshtml, then reference it from \Views\Events\My.cshtml and again from \Views\Home\Index.cshtml:

image139

image140

image141

4.       Test the new functionality “My Events“, as well as the old functionality “Home Page“:

image142

image143

5.       Try also to access “My Events” for anonymous user. The application should redirect you to the login page:

image144

Step 15. Edit Existing Event Form

The “Edit Event” functionality is very similar to “Create Event“. It uses the same input model Events.Web.Models.UpcomingPassedEventsViewModel. Create a view \Views\Events\Edit.cshtml and reuse the logic from \Views\Events\Create.cshtml by extracting a partial view \Views\Events\_EventEditorForm.

Step 16.  Edit Existing Event Logic

Write the controller action for editing events in the EventsController.

1.       Write a HTTP GET action “Edit” to prepare the form for editing event. In case of invalid event ID, show an error message and redirect to My Events“:

image145

2.       The logic in LoadEvent(id) method loads an existing event in case the user has permissions to edit it:

image146

3.       Write a HTTP POST action “Edit” to save the changes after submitting the event editing form. It should first check the event ID and show an error of case of non-existing event or missing permissions. Then it checks for validation errors. In case of validation errors, the same form is rendered again (it will show the validation errors). Finally, the Edit method modifies the database and redirects to “My Events“:

image147

4.       Run and test the new functionality “Edit Event” by opening \Events\Edit\3.

Step 17.   Handling HTML Special Characters

Try to create an event named “<New Event>“:

image148

It will fail, because by default ASP.NET MVC does not allow forms to send HTML tags in the fields values. This is to help protecting from Cross-Site Scripting (XSS) attacks. You will see an ugly error page:

image149

This is very easy to fix, just add [ValidateInput(false)] attribute in the BaseController:

image150

Step 18.   Delete Existing Event Form

Create a form and controller action, similar to “Edit Event”. The form should load the event data in read-only mode with [Confirm] and [Cancel] buttons.

Step 19.   Delete Existing Event Logic

The logic behind the “Delete Event” from is similar to “Edit Event”. Try to implement is yourself.

Step 20.   Add Comments with AJAX

For each comment implement [Add Comment] button that shows (with AJAX) a new comment form. After the form is submitted, it creates a comment and appends it after the other comments for the current event. Comments can be added by the currently logged-in user and anonymously (without login).

Step 21.  Delete Comments

Comments can be deleted only by their author (owner) and by administrators. Display [Delete] button right after each comment in the events (if deleting is allowed). Clicking [Delete] should delete the comment after modal popup confirmation.

Step 22.    Add Paging

Implement paging for the events. Display 15 events per page. At each page display the pager holding the number of pages as well as [Next Page] / [Previous Page] links.

Step 23.   Upload and Display Event Image

Modify the “Create Event” form to upload an image for the event (optionally). The image should be at most 100 KB, max width 400, max height 400, min width 100 and min height 100 pixels. Images should be gif, png orjpeg files, stored in the file system, in files named like this: event-185.png. Hold the images in a directory “~/Images“. Protect the directory to disable direct HTTP access to it.

Create an action /event/image/{id} to download and display an event image. It should read the image from the file system and display it if the user is allowed to view it (owner or administrator or public event).

Modify the event listing views to display the image for each event (when available). Use max-width and max-height attributes to ensure the image will resize correctly for different sizes of its container.

The Full Source Code of the Events MVC Application

Download the fully-functional application source code here: https://softuni.bg/trainings/24/ASP-NET-MVC-May-2015 (see section “Lab”).

Първи стъпки в ORM технологиите с Entity Framework (Наков @ БСУ хакатон 2015)

$
0
0

Бази данни - безплатен курс в СофтУниДнес бях лектор в Бургас на хакатона на Бургаския свободен университет. Направих чудеса от храброст да обясня като за абсолютно начинаещи само за час и половина какво е база релационна данни и как работи, какво са обектите в ООП и как мапваме C# класове и обекти към таблици и редове от базата данни чрез ORM framework и да демонстрирам как се използва Entity Framework (EF) – водещата ORM технология от .NET света за достъп до данни. Показах инсталиране на EF, генериране на EF DbContext по съществуваща база данни (database first with EF) и как да генерираме база данни по съществуващи C# класове с връзки между тях (EF code first). Демонстрирах заявки върху данните с LINQ, работа с АPI-то на EF, извличане на данни, добавяне, промяна и изтриване (CRUD). Показах и автоматичните миграции на DB схемата при промяна на модела на данните при code first подхода в Entity Framework.

Както винаги, записах видео и го споделям заедно със слайдовете за всички с интереси към програмирането и базите данни.

Видео за ORM и Entity Framework – как да работим с бази данни от C#?

Слайдове – Entity Framework ORM – първи стъпки

Ако сте се запалили по темата, можете да гледате безплатно курсовете по бази данни и ORM технологии в СофтУни:

Viewing all 42 articles
Browse latest View live