Уроки по C++. Урок 0. Настройка рабочей системы.

Здравствуйте! Я решил написать некоторое количество уроков по C++. Весь код, приведённый мной в этой теме должен гарантированно работать в Linux. Сам я, на момент написания этого топика, использую операционную систему Ubuntu 13.04 и пишу и тестирую всё на ней.
Для Windows придётся вносить незначительные переменные, а именно подключать в начале программы заголовочный файл conio.h, так как Windows терминал (более известный, как командная строка) сразу после выполнения вашей программы закроется, а произойдёт это, если программа не совершает титанический труд очень быстро. Вы даже не успеете разглядеть, что она выведет. Поэтому на платформе Windows используйте функцию getch(), которая станет доступна, после подключения conio.h.
В качестве компилятора я использую g++, а как редактор кода — Geany.
Обязательно читайте книги по программированию. Рекомендую начинать с книги ВВ Подбельского «Стандартный C++».
Начнём с азов, а именно с программы Hello World.
В Geany (можете использовать любой редактор с подсветкой синтаксиса) сохраните его в каталоге my_first_programm под именем hello.cpp. Наберите в нём такой код:

    /*hello.cpp
    * Это моя первая программа, которая не делает ничего полезного, но выводит надпись Hello world!
    * Каждую программу лучше всего начинать с комментария, для чего она служит. Звёздочка в начале этой строки не обязательна, просто для более красивого отображения кода. Это многострочный комментарий. Компилятор его игнорирует, он нужен именно Вам, а не компьютеру.
    */
     
    #include <iostream>//Подключается заголовочный файл потоков ввода/вывода
     
    int main ()//объявляется точка входа в программу
    {//Открывается блок функции main
        std::cout << "Hello world!" << std::endl;//Выводится текст Hello world! std::endl объявляет переход на новую строку.
        return 0;//Так уж принято, что программа должна вернуть какое-либо целое цифровое значение операционной системе. 0 возвращают, если всё прошло успешно.
    }//Закрывается блок функции main
    

Пользователям Windows надо написать так:

    /*hello.cpp
    * Это моя первая программа, которая не делает ничего полезного, но выводит надпись Hello world!
    * Каждую программу лучше всего начинать с комментария, для чего она служит. Звёздочка в начале этой строки не обязательна, просто для более красивого отображения кода. Это многострочный комментарий. Компилятор его игнорирует, он нужен именно Вам, а не компьютеру.
    */
     
    #include <iostream>//Подключается заголовочный файл потоков ввода/вывода
    #include < conio.h>
     
    int main ()//объявляется точка входа в программу
    {//Открывается блок функции main
        std::cout << "Hello world!" << std::endl;//Выводится текст Hello world! std::endl объявляет переход на новую строку. Символ ; ставится после каждого оператора, не являщегося блоком.
        getch();//Ждём нажатия на любую клавишу
        return 0;//Так уж принято, что программа должна вернуть какое-либо целое цифровое значение операционной системе. 0 возвращают, если всё прошло успешно.
    }//Закрывается блок функции main
    

Сохраните файл. Перейдите в терминале в каталог my_first_programm при помощи команды cd. Если вы не знаете команд терминала в linux, то срочно читайте

man man

На английском, так как без него программировать очень туго, особенно в Unix.
Пользователи Windows могут почитать справку по командной строке и её командам в Windows. Но английский также желателен и им.
Считаю, что вы находитесь в каталоге с файлом hello.cpp, в терминале выполняете команду
g++ hello.cpp -o hello

Должен скомпилироваться бинарный файл hello (задан ключом -o hello)
Запустите его командой
./hello

Должно отобразиться сообщение Hello world!

Напишем теперь более полезную программу, считающую сумму двух целых чисел:
//summa.cpp
    #include <iostream>
     
    int main ()
    {
        int a, b;//Объявляем 2 переменные типа int, т.е. целые числа в диапазоне от -2147483648 до 2147483647
        std::cout << "Введите 2 целых числа через пробел" << std::endl;
        std::cin >> a >> b; //Считываем подряд две переменные a и b
        std::cout << a << "+" << b << "=" << a+b << std::endl;//текст при выводе надо заключать в "", а переменные нет.
        return 0;
    }

Так ка Windows не поддерживает UTF8 в командной строке, а соответственно кириллица выведется кракозябрами, то пользователи этой операционной системы должны написать код так:
//summa.cpp
    #include <iostream>
    #include < conio.h>
    #include <clocale>//Для поддержки русского языка при выводе
     
    int main ()
    {
        setlocale(LC_ALL, "russian");//Устанавливаем русскую локаль
        int a, b;//Объявляем 2 переменные типа int, т.е. целые числа в диапазоне от -2147483648 до 2147483647
        std::cout << "Введите 2 целых числа через пробел" << std::endl;
        std::cin >> a >> b; //Считываем подряд две переменные a и b
        std::cout << a << "+" << b << "=" << a+b << std::endl;//текст при выводе надо заключать в "", а переменные нет.
        getch();
        return 0;
    }

И, наконец, напишем более сложную программу, с условным оператором if
Его структура такова:
if(логическое выражение)
{
какие-то операторы,
}
else
{
какие-то операторы,
}

Логическое выражение должно принимать численные значения. В бинарной логике — это 1 (ИСТИНА) и 0 (ЛОЖЬ), но C++ будет трактовать любое число, отличное от 0, как истину. Не путайте знак присваивания a=7 со знаком равенства a==7. Первое выражение даст истину и приравняет переменную a к значению 7. Внутренний механизм его действия будет примерно таков:
1) Приравнять a к 7
2) Дальше с точки зрения компьютера это будет выглядеть как
if(7)
3)Сравнить 7 с 0
4)Так как 7 не равно 0, то значит выражение истинно и необходимо выполнить код в блоке if
Фигурные скобки после if или else не обязательны, если надо выполнить всего 1 оператор, но крайне желательны, чтоб вы не допустили ошибки.

Блок else не является обязательным. В случае, если логическое выражение вернёт истину, выполнятся только те операторы, которые заключены в блоке if, в противном случае те, что заключены в блоке else.
//numbers.cpp
#include <iostream>
 
int main()
{
    float a;
    std::cout << "Введите число\n";// символ \n является управляющим. Он переводит курсор на новую строку. Это пришло в C++ из языка C. Так тоже можно писать.
    std::cin>>a;
    if(a>0)//если a больше 0
    {
        std::cout<< a << ">" << 0<< std::endl;//0 - число, а не текст, его можно и не брать в кавычки
    }
    else
    {
        if(a!=0)//если a не равно 0
        {
            std::cout<< a << "<" << 0<< std::endl;
        }
        else
            std::cout<< a <<" это "<< 0 << std::endl;//Так можно, так как у нас один оператор после else, но лучше так не делать.
    }
    return 0;
}

Домашнее задание:
Написать 4 программы
1)Пользователь вводит с клавиатуры 2 целых числа, надо посчитать их разность.
2)Пользователь вводит с клавиатуры 3 целых числа a b и c. Найти значение x формулы x=2*a+4*b-9*c и вывести число x на экран.
3)Пользователь вводит с клавиатуры по вашему запросу целые числа a, b и c в квадратном уравнении (напомню формулу) a*x2+b*x+c=0. Найти x и написать решение. Т.е. прямо как в тетрадке в школе писали (а может кто из читателей и пишет ;-) ) по всем правилам оформления. Для того, чтобы сделать доступной функцию получения корня, необходимо подключить заголовочный файл math.h. Функция называется sqrt, используется так: y=sqrt(x); (Y равен корень квадратный от X). x передаётся в функцию в качестве аргумента. y храните в переменной типа double, так как может получиться дробное число. Подробнее о типах будет рассказано позже.
4)Пользователь вводит с клавиатуры 2 целых числа, расположить их в порядке возрастания и вывести на экран.

9 комментариев

avatar
Очень не удобно, что код сразу отправляется при нажатии Enter.
avatar
Это… урок??

И ничего код не отправляется.
avatar
Ошибся. При вводе тегов (иначе не работает предварительный просмотр) случайно задел Enter и недописанное сообщение отправилось. Надеюсь администрация исправит этот неудобный момент. Превью можно и без тегов показывать и при вводе тега Ener не должен отправлять сообщение. И да, как установить подсветку c++?
avatar
Имелось в виду в предварительном просмотре.
avatar
Предварительный просмотр вещь темная и исследованию не подлежит :) Что там с подсветкой? Вроде работает…

Тег — вещь обязательная, а enter поменяем.
avatar
Не фурычит при предпросмотре.

А тег я бы требовал ввести перед публикацией, а зачем он перед просмотром нужен? По ходу написания я могу менять тег, так как когда начинаю писать, иногда ход моих мыслей меняется и я могу упомянуть то, что не планировал, а что-то не упомянуть и теги надо переписывать. ИМХО правильнее было бы когда пользователь нажмёт «Опубликовать», то только тогда строго потребовать у него ввод тега, иначе не публиковать, пока не введёт.
avatar
Полноценный предпросмотр без тегов? А дальше что, без заголовка, а может, без текста?..
avatar
При предварительном просмотре ему можно подсовывать сообщение, если тегов нет: «Не забудьте правильно ввести теги» или аналогичное по смыслу. Но можно и так оставить, только поведение Enter исправить. Хотя на текущем моменте развития, пока столь молодого, но многообещающего и удобного ресурса, возможно, стоит выделить отдельную тему обсуждения функционала данного сайта, так как он должен развиваться.
PS
Справка по местному синтаксису желательна, например непонятно, как добавить картинку в предпросмотр на главной.
avatar
Черт, спасибо за такой лестный отзыв! Обязательно реализую.
Жаль, но чтобы добавить комментарий, нужно зарегистрироваться.