Марафон задач по С++. День 3.

Категория: Школа Программирования Автор: Семён Давыдов Опубликовано: 06-04-2012

Метки: , ,

Евклид 2500 лет назад в своем труде «Начала» изложил разницу между ссылкой и указателем. С++ – язык вне моды и времени.

Финальный забег. Завершающий третий день марафона.

Гарантирую, сегодня придется попотеть. Напомню, что награда победителю марафона – скидка 50% на действительно полезный курс С++. Управление памятью.

Кстати, поскольку разбора задачек еще нет, вновь присоединившиеся могут присылать задачки из первых двух марафонов.

Крайний срок сдачи всего – 21:00, суббота.  Решения присылать на почту c.davydov.prog@gmail.com.

Онлайн рейтинг участников тут.

В теме письма: Имя Фамилия – Марафон С++ – День <1-2-3>

Если создаете проект в Visual Studio, то выбирайте «Empty project» и пишите с чистого листа, чтобы исключить нестандартные вещи, вроде stdafx.h и tmain. На компьютере, который окажется у меня под рукой в момент проверки, скорее всего нет Windows.

День 3.

1. Два в одном.

Какой-то умник поменял местами кнопки в лифте. Поставил вместо первого этажа второй, а вместо второго – первый. Честное слово, мне лень ковырять кнопки. Я лучше перепрограммирую лифт. Но программировать мне тоже лень. На вас вся надежда. Напишите, пожалуйста, функцию-переключатель, которая возвращает 1, если на входе 2 и 2, если на входе 1.

2. Горе от копирования.

Решил я как-то разобраться с тем, как работает копирующий конструктор и оператор =.

Написал такую программу:

#include <iostream>  
 
class Trouble
{
public:
    Trouble() : data(0)
    {}
 
    Trouble(const Trouble& other)
    {
        std::cout << "Copy constructor called\n";
        *this = other;
    }
 
    Trouble operator = (const Trouble& other)
    {
        std::cout << "= operator called\n";
        data = other.data;
        return *this;
    }
 
public:
    void SetData(const int value)
    {
        data = value;
    }
 
    int GetData()
    {
        return data;
    }
 
private:
    int data;
};
 
int main()
{
    Trouble first;
    first.SetData(42);
 
    Trouble second(first);
 
    std::cout << "second.data " << second.GetData() << '\n';
    return 0;
}

Результаты превзошли все ожидания. Что произошло и как это исправить?

3. Выскочка

Есть массив чисел размера N, в котором хранятся целые числа 0 до N-1. Среди всех чисел есть какое-то одно, которое встречается как минимум два раза (возможно, больше). Найти это число за линейное время. Дополнительной памяти у нас совсем немного. Максимум на несколько переменных. Вход – размер массива, сам массив. Выход – число, которое повторяется.

Вход:
6
1 2 3 2 4 5
Выход:
2

«4 мая буду с вами!»

P.S. Объявление победителей и разбор задач состоится в понедельник 9 апреля.

English in my life…

Категория: Курсы, Профессия программист Автор: Гайк Айрапетян Опубликовано: 12-03-2012

Метки: , , ,

Часто ли вы сталкивались с тем, что для быстрого освоения какой-либо технологии вам требовалось прочитать огромное количество материалов на английском языке?

Новые технологии в области IT появляются и развиваются с такой пугающей быстротой. Мы, программисты, живем в мире изменений. Неизменен лишь один факт. Факт, который невозможно отрицать – практически всегда сопровождающая документация по всему новому и интересному пишется на английском языке. На родном языке актуальной информации мало или же её вообще нет. И что же тогда делать?

Легко представить, как вы, вооружившись словарями или электронными переводчиками, принимаетесь читать очередной мануал.

Помимо того, что вы должны вникнуть в детали самой технологии, вы должны еще разобраться с бесконечным рядом незнакомых слов, терминов, грамматических конструкций, оборотов на английском языке. Двойная трудность, не правда ли? А если английский язык не ваша сильная сторона, вы последний раз учили его в школе (или не учили :-) ), или бегло проходили в университете? Вы часто обращали внимание, как раз за разом вы перечитывали трудный абзац, пытаясь найти зерно истины? А времени, сколько его в конечном счете уходило? Читать полностью »

Курс по C++: вопросы и ответы

Категория: Курсы, Школа Программирования Автор: Алексей Захаренков Опубликовано: 10-02-2012

Метки: ,

Нам в ШП стало приходить довольно много вопросов о курсе по С++. Здесь я, как автор курса «C++. Базовый курс», отвечу на самые интересные и важные из них.

Вопрос: Судя по программе, размещенной  у вас на сайте, я вижу, что базовый курс по С++ частично повторяет материал, рассказанный в бесплатном видеокурсе С++ для начинающих. Так ли это? Если да – то сообщите, пожалуйста, конкретно, какие новые знания будут получены в  базовом курсе по С++?

Ответ: Бесплатный курс преследует скорее презентационные цели, нежели обучающие. Посмотрев его, вы можете узнать некоторые возможности языка и научиться писать простые программы, а также оценить стиль изложения материала преподавателем. Но ни глубоких, ни широких знаний или крепких практических навыков он не даёт. Бесплатный курс соотносится с базовым, как трейлер к фильму с самим фильмом.

Вопрос: Какие средства разработки используются в курсе?

Ответ: Видеоуроки записаны с использованием Microsoft Visual C++ 2010 Express. Я учу создавать проекты, компилировать, запускать и отлаживать программы именно в этой среде. Но продвинутые пользователи могут без ущерба использовать другую среду разработки, например Code::Blocks или wxDev-C++. Читать полностью »

Мы нарисуем Вам дизайн бесплатно!

Категория: Курсы, События Автор: Гайк Айрапетян Опубликовано: 08-02-2012

Метки: , ,

Хотите красивый и современный дизайн для своего сайта? Мы нарисуем его Вам! Но обо всём по порядку…

Друзья!

Еще один долгожданный курс ожидает вас в ближайшее время!

Это курс «Web-дизайн. От новичка до профи«. Начало 27 февраля.

Скажу откровенно, изначально мы планировали вести обучение только по языкам программирования, и это было основное наше направление. Но со временем мы поняли, благодаря пожеланиям студентов, что обучение по смежным тематикам просто необходимо. Тем более профессия веб-дизайнера сейчас не только востребована, но и хорошо оплачиваемая.

Действительно, глупо закрывать на это глаза, выстраивая полноценную пошаговую систему обучения, к чему мы так стремимся. Следующим нашим направлением в линейке курсов по созданию сайтов стал веб-дизайн. Читать полностью »

Есть ли жизнь вне веба, или зачем нужен С++ (Конкурс)

Категория: Курсы, События Автор: Алексей Захаренков Опубликовано: 03-08-2011

Метки: , ,

В Школе Программирования с момента её основания главное внимание уделяется языкам программирования, широко используемым в веб-разработке. И это понятно. У многих людей довольно ясное представление, чему можно относительно быстро научиться и как применить полученные знания: забацать свой личный прикольный сайт, сделать интернет-магазин или другую интернет-систему для продвижения бизнеса, фрилансить, наконец. И эту несправедливость мы будем исправлять. Многие не обращают внимание на то, чем прямо или косвенно пользуется веб-разработчик и чему он обязан своей комфортной жизни в труде и отдыхе: текстовые редакторы для написания кода, компиляторы и интерпретаторы и вообще среды разработки, СУБД, браузеры, наконец офисные программы, медиа-проигрыватели, игры и прочие настольные приложения. Надо не забыть системное и особенно серверное программное обеспечение, поддерживающее такую кипящую жизнь во всемирной сети: операционные системы, менеджеры системных ресурсов, веб-сервисы, веб-серверы, поисковые движки и прочее. Кто всё это пишет и на каких языках? Ясно, что не на PHP. И хотя, отвечая на этот вопрос, можно перечислить много различных языков, речь у нас пойдёт о С++.

Итак, область применения С++ мы уже обозначили, следовательно, программист, владеющий С++, не останется без работы. Назову лишь некоторые известные компании, которые широко используют этот язык для разработки своих программных продуктов: Яндекс, Google, ABBYY, Kaspersky, Microsoft. Хоть последняя и форсирует продвижение платформы .NET, но попробуйте поискать информацию о том, на чём написана сама ОС Windows ;)
Читать полностью »