February 13, 2012

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

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# курса:

#NameScoreCareer
1V. Stankova102.72Software Developer
2L. Tsonov101.10Software Developer
3K. Tashkov87.67Software Developer
4N. Valchev84.25Software Developer
5M. Stefanov78.79Software Developer
6I. Nenchovski74.67Software Developer
7G. Stoyanov73.99Software Developer
8V. Bukurov68.45QA Software Engineer
9M. Rogelov66.94Software Developer
10M. Penkov66.08Software Developer
11M. Marinov65.42QA Software Engineer
12V. Staikov64.86Software Developer
13S. Stoyanov63.25Software Developer
14S. Vladimirov63.01QA Software Engineer
15D. Madjarov62.12Software Developer
16S. Radkov61.07Software Developer
17Z. Branzov59.33Developer Support
18N. Petrova58.51Software Developer
19G. Vaklinov57.64QA Software Engineer
20N. Demirev57.42Software Developer
21K. Nikolov56.79Software Developer
22K. Vandov56.70Software Developer
23D. Tachev55.71Software Developer
24B. Nistorov54.92Software Developer
25H. Marinov54.75Software Developer
26G. Mitev54.36Software Developer
27P. Kolev53.22Software Developer
28M. Vasilev52.92Software Developer
29G. Mateev51.82Software Developer
30M. Draganov50.70Software Developer
31M. Yankov50.32Software Developer
32A. Sotirov49.75Software Developer
33E. Yusein49.60Developer Support
34S. Dimitrov49.25Software Developer
35B. Statev47.15Software Developer
36K. Popov46.65Software Developer
37S. Bogdanova46.41QA Software Engineer
38D. Bakalov46.23QA Software Engineer
39A. Bogdanov45.82Software Developer
40E. Gencheva44.80QA Software Engineer
41S. Gochev44.68Software Developer
42G. Georgiev44.52Software Developer
43A. Angelov44.49Software Developer
44K. Dimitrov43.66Software Developer
45V. Tsenev43.08Software Developer
46I. Babalev42.25Software Developer
47K. Georgiev41.78QA Software Engineer
48P. Valchev41.63QA Software Engineer
49A. Valchev41.55Developer Support
50V. Kirilov40.50Software Developer
51N. Velikov40.38QA Software Engineer
52K. Kotorov40.17Software Developer
53S. Tacheva40.11Developer Support
54V. Bojinov39.49Software Developer
55T. Iliev38.86Software Developer
56N. Stoychev38.68Software Developer
57K. Gatev38.49QA Software Engineer
58V. Iliev37.68Software Developer
59M. Georgiev37.66QA Software Engineer
60I. Ivanov37.08Software Developer
61I. Kolchagov36.86Software Developer
62F. Havaluova35.91Software Developer
63M. Gebov35.42Software Developer
64M. Karamachev33.80Software Developer
65I. Stoyanov33.70Software Developer
66P. Varbanov33.02QA Software Engineer
67V. Amiorkov32.75Software Developer
68A. Djenkov32.50Software Developer
69S. Chonov32.50Software Developer
70V. Shterev31.83Developer Support
71N. Bankin31.67Software Developer
72B. Zhelyazkov31.65QA Software Engineer
73A. Petrov31.65Software Developer
74F. Fischbach31.43QA Software Engineer
75S. Georgieva-Hristova31.33Software Developer
76D. Zhelyazkov30.75Developer Support
77T. Mitev30.67Software Developer
78I. Angelov30.41QA Software Engineer
79N. Angelov29.95Developer Support
80A. Kolev29.85Software Developer
81G. Sinekliev29.67Software Developer
82I. Dyankov29.67Software Developer
83K. Dimitrov29.36Developer Support
84B. Gutsev29.12QA Software Engineer
85K. Dayradzhiev28.75Software Developer
86D. Vasilev28.67Software Developer
87D. Boikliev28.45Software Developer
88V. Vulkov28.08Developer Support
89S. Markov27.75Software Developer
90A. Kirev27.52QA Software Engineer
91T. Kirchev27.43Developer Support
92V. Hristov27.16QA Software Engineer
93P. Sotirova26.31Developer Support
94D. Agayna26.23Developer Support
95V. Kotseva26.17QA Software Engineer
96V. Stanev26.05Developer Support
97D. Todorov25.63QA Software Engineer
98N. Ilieva25.35Developer Support
99A. Georgieva25.23QA Software Engineer
100N. Mehmed24.99Developer Support
101K. Gitsov24.86QA Software Engineer
102B. Dimitrov24.50Developer Support
103B. Boev24.25QA Software Engineer
104P. Stanev23.96QA Software Engineer
105N. Avramov23.90QA Software Engineer
106T. Stoyanov23.81Developer Support
107V. Tabakov23.80QA Software Engineer
108A. Petkov23.55Developer Support
109M. Ivanov23.17Developer Support
110M. Ninov22.84Software Developer
111T. Todorov22.21QA Software Engineer
112P. Benov21.35Developer Support
113J. Stoyanova21.14Developer Support
114G. Petrov21.06Developer Support
115A. Venchev20.75QA Software Engineer
116V. Raikova20.56Developer Support
117V. Dimitrova20.33Developer Support
118S. Stoyanov19.83Developer Support
119A. Lazarov19.83QA Software Engineer
120O. Ivanov19.67Developer Support
121V. Dakov19.50QA Software Engineer
122P. Asenov18.92Developer Support
123G. Genev18.00Developer Support
124P. Pavlov17.73Developer Support
125V. Banov17.33Developer Support
126D. Petkov16.95QA Software Engineer
127N. Dimitrov16.89QA Software Engineer
128J. Ivanova16.50QA Software Engineer
129R. Totalov16.44Developer Support
130D. Kralev15.50QA Software Engineer
131B. Boevski15.07Developer Support
132T. Lilyanova15.00Developer Support
133P. Kirov14.75Developer Support
134Y. Krumov14.33Developer Support
135M. Petrova13.10Developer Support
136R. Radev12.33Developer Support
137I. Gergov12.04Developer 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 г.)

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

Tags: , , , , , , , , , , , , , , ,

February 9, 2012

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

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.

Tags: , , , , , , , , , , , , ,

January 9, 2012

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

уроци по C#, бази данни, Entity Framework, XAML и WPFЕто че дойде време за поредното безплатно обучение по програмиране и разработка на софтуер в училищната Академия на Телерик. Този път ще се занимаем с темата за създаване на настолни приложения за Windows.

В рамките на 6 учебни дни (две срещи на училищната софтуерна академия) ще разгледаме езика C#, неговите програмни конструкции и основи (оператори, изрази, условни конструкции, цикли, методи, стрингове, класове, обекти, ООП, структури от данни, колекции и други), програмиране с бази данни и SQL, дизайн на бази данни и E/R диграми, работа с MS SQL Server и технологии за достъп до бази данни от C#, ORM технологии и ADO.NET Entity Framework (EF) и технологиите за създаване на графичесн потребителски интерфейс (GUI) за Windows – XAML, Windows Presentation Foundation (WPF), WPF data binding и други.

Безплатните уроци по C#, бази данни, Entity Framework, XAML и WPF са разделени в две срещи по 3 дни.

Програмиране на C# с бази данни – 23-25.01.2012 г.

Учебната програма на уроците по C# и бази данни училищната академия включва следните теми, свързани с подготовката на националната ИТ олимпиада (НОИТ) и усвояване на съвременните софтуерни технологии:

  1. Подготовка за теста на НОИТ
    Въпроси върху двайсетте теми от конспекта за Националната ИТ олимпиада (НОИТ).
  2. Преглед на платформата .NET
    Какво е .NET и .NET Framework? Архитектура. Common Language Runtime (CLR). Управляван код. Езикът MSIL. Асемблита и мета-данни. .NET приложения. Common Type System (CTS).
  3. Преглед на езика C# – основи
    Ключови думи. Типове данни. Оператори. Изрази. Вход и изход от конзолата. Условни конструкции. Цикли. Масиви. Методи, параметри, връщан резултат, извикване, рекурсия.
  4. Преглед на езика C# – обекти, текстообработка, колекции
    Създаване и използване на обекти. Работа с изключения. Символни низове и обработка на текст. Шаблонни типове. Колекции (списъци, хеш-таблици, наредени дървета). Атрибути.
  5. Обектно-ориентирано програмиране (ООП) с езика C#
    Дефиниране на класове. Модификатори за достъп. Конструктори. Полета, константи и свойства. Статични членове. Структури. Делегати и събития. Интерфейси. Наследяване. Полиморфизъм.
  6. Бази данни, SQL и MS SQL Server
    Релационни бази данни. Принципи при моделирането на данни. Типове данни в SQL Server. Създаване на бази данни в SQL Server. Дефиниране на първични ключове и идентификатори. Създаване на връзки между таблиците (едно-към-едно, едно-към-много, много-към-много). Езикът SQL.
  7. LINQ (C# Language Integrated Query)
    Основи на LINQ. Последователности (IEnumerable<T>). Оператори и изрази в LINQ. LINQ to Objects. Заявки върху колекции. Проектиране, преобразуване и агрегация. Сортиране, групиране, съединяване на таблици и вложени заявки.
  8. ADO.NET Entity Framework – ORM система за достъп до бази данни от C#
    Основи на ORM технологиите. Преглед на Entity Framework (EF). Извличане на данни с EF. Принтиране на SQL заявките. LINQ компоненти на EF. Дизайнерът на Visual Studio за EF. ObjectContext и CRUD операции. Изпълнение на чисти SQL заявки (параметризирани и непараметризирани заявки). Проблемът “N+1 заявки”. Групиране и съединяване на таблици. Закачане и разкачане на обекти.

Десктоп приложения с XAML и WPF – февруари 2012 г.

Следващите тридневни безплатни уроци по програмиране от училищната софтуерна академия очаквайте през февруари 2012 г. Те ще обхващат изграждането на GUI приложения със съвременните технологии за Windows-базиран потребителски интерфейс: WPF, XAML, data binding и други. Програмирането с XAML и WPF е естествено продължение на началните знания по C# програмиране, които ще бъдат усвоени през януари и дава възможност за изграждане на цялостни настолни GUI приложения за Windows с използване на бази от данни.

Регистрация за участие в C# уроците – безплатно

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

Tags: , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

December 12, 2011

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

На 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” – примери

InputOutputInputOutput
-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” – примери

InputOutputInputOutput
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”– примери

InputOutputInputOutput
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!” – примери

InputOutputInputOutput
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” – примери

InputOutputInputOutput
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” – примери

InputOutputInputOutputInputOutput
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” – примери

InputOutputInputOutputInputOutput
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” – примери

InputOutputInputOutput
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” – примери

InputOutputInputOutput
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#, но се предвижда разширяване на системата с поддръжка и на други езици за програмиране.

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

Tags: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

November 23, 2011

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

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

Download the full source code and examples: Nakov.IO.Cin.zip.

Download the C# class source code only: Cin.cs.

Tags: , , , , , , , , , , , , , , , , , , , , , ,

November 7, 2011

Конкурс за разработка на Windows Phone приложения

Windows 7 App ChallengeКолегите от Майкрософт България съвместно с българските .NET и Silverlight потребителски групи, обявиха състезание за разработка на приложения за мобилната платформа “Windows Phone 7”. Ако имате добра и простичка идея, може да участвате в състезанието.

Как се пишат Windows Phone 7 приложения?

Приложенията за Windows Phone 7 (WP7) се пишат на езика C# върху платформа Silverlight, с потребителски интерфейс базиран на XAML и с комуникация към сървърната част с технологии като WCF, REST services, RIA services и ADO.NET Data Services.

За разработка се използва Visual Studio 2010, в който има вграден WP7 емулатор, който ви избявя от нуждата да имате WP7 телефон, за да разработвате мобилни приложения.

Друг вариант да пишете за Windows Phone 7 е чрез HTML5 / JavaScript технологиите, използвайки инструменти и библиотеки като PhoneGap.

Как да участвате?

Изпратете ни своето приложение на тема “Красотата е в простите неща” на http://wp7appcomp.com в секцията за България в срок до 26 декември 2011.

Награди

Наградата за първо място е чисто нов Windows Phone 7 телефон.

Tags: , , , ,

October 13, 2011

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

За всички фенове на програмирането и разработката на софтуер имаме прекрасна новина. Стартират дългоочакваните безплатни курсове от новия семестър в Академията на Телерик за софтуерни инженери. Вече имаме конкретни дати за началото на курсовете по разработка на многоплатформени мобилни приложения, уеб разработка с 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 курс. По принцип обучението е за ученици, част от училищната академия за софтуерни инженери, но ако има свободни места, могат да участват не само ученици.

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

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

Tags: , , , , , , , , , , , , , , , , , , ,

Older Posts »