C++; Компиляция, стандартный ввод и вывод, типы данных

Компиляция

Что вообще такое программа? Мы будем программой называют набор команд, которые выполняются последовательно. Ясно, что если мы хотим что-то записать, то нам нужен для этого какой-то язык. Беда в том, что языки которые удобно понимать компьютеру (машинный код) не удобно читать людям. Значит нужен какой-то переводчик. Мы напишем программу на языке, который удобно читать нам, а он переведет это на язык, который удобен для компьютера.

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

Хорошо, а почему бы не перевести все заранее? Ведь когда мы читаем книгу иностранного автора, рядом с нами не сидит переводчик. Он один раз перевел книгу с иностранного языка на русский и записал. В программировании такого переводчика назвали бы компилятором.

Ясное дело, что люди таким переводом не занимаются. Все компиляторы и интерпретаторы — это программы. Например, для самый популярный компилятор языка C++ называется g++. Для того, чтобы скомпилировать записанную в файл main.cpp программу, то есть перевести на «компьютерный язык», программу нужно выполнить в консоли команду

g++ main.cpp

После того, как g++ закончит вою работу в рабочей директории (папке) появится файл a.out, если Вы работаете в Linux, или a.exe, если Вы работаете в Windows.

Как установить компилятор

Windows

Самый простой для начинающего вариант поставить среду разработки (IDE), в которую встроен компилятор. Подойдет например Dev-C++. Компиляция и запуск программы в этой среде происходят по нажатию клавиш F9.

Linux
В Ubuntu и подобных дистрибутивах компилятор g++ устанавливается следующей командой.
sudo apt-get install g++

Hello world, заклинания и вывод на экран

Hello world

Хорошо, давайте создадим такой файл с программой и попробуем его скомпилировать. Есть традиция, по которой первая программа, которую пишут на новом языке, выводит сообщение «Hello world». Вот код такой программы на C++.

#include <iostream>

using namespace std; 

int main()
{
    cout << "Hello world" << endl;
}

Давайте разберем то, что здесь написано. Строчка cout << "Hello world" << endl; здесь ключевая. Именно она отвечает за вывод сообщения на экран. Все остальное — это некоторые заклинания, которые нужны, чтобы программа работала.

Ясное дело, что вся остльная чатсть пограммы тоже имеемт свой смысл. Но, к сложалению, сразу его понять будет очень сложно. Постепенно, по мере изучения языка, будет становаться понятно, что означает каждай из них. А пока мы будем просто копировать эти заклинания.

Вывод на экран

Вернемся к строке cout << "Hello world" << endl;. cout — это объект, который отвечает за вывод на экран. Его хитрое устройство позволяет выводить любое количество сообщений, разделенных знаком <<. В данном случае мы выводим два: строчку «Hello world» и объект endl. endl — это специальный объект, который отвечает за перевод строки. Обратим внимание на точку с запятой в конце (;). В C++ любая команда заканчивается точкой с запятой. Подведем итог, разобрав одну команду мы узнали:

  1. За вывод отвечает объект cout.
  2. Можно выводить на экран любое количество сообщений разделенных значком <<.
  3. Любая команда должна заканчиваться символом точка с запятой (;).

Переменные и ввод с клавиатуры

Что такое типы и зачем они нужны?

Хорошо, программу мы написали, но получилась она очень глупая. Например, она не использует память, a без памяти быть умным сложно. Для хранения данных используются переменные. Грубо говоря, переменная — это ящичек, в который мы складываем наши данные.

Как известно, все данные которые хранит компьютер — это набор нулей и единиц, двоичное число. Но, тем не менее, можно как-то закодировать с их помощью не только числа, но и строки, картинки и т.п. Мы не будем сейчас обсуждать как устроены алгоритмы, которые кодируют разные типы данных, а обратим внимание на то, что необходимо помнить какие именно данные мы закодировали.

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

10 02

Петя передал бумажку Васе и предлагает его разгадать что на ней написано. К сожалению, Вася не обязательно угадает, что Петя написал именно второе ноября. Например, Вася может подумать, что на бумажке написано число тысяча два, может подумать, что Петя записывает даты по американскому стандарту, и 10 02 — не второе число десятого месяца, а наоборот, десятое число второго месяца, то есть десятое февраля.

Типы данных в C++

Таким образом, важно знать не только сами данные, но их как они закодированы. В C++ эта проблема решена просто, у каждой переменной есть свой тип, например, в переменной типа int могут лежать только целые числа, в переменной тип char только символы и так далее. То есть, переменная — это не просто ящичек, а ящичек, на котором написано, что в нем лежит.

тип значения что лежит внутри
void пустота пустой тип
int -2147483648 … 2147483647 целое число
float 3.4E-38 … 3.4E+38 вещественное число (число с плавающей точкой)
double 1.7E-308 … 1.7E+308 вещественное число (число с плавающей точкой) двойной точности
char ‘a’, ‘:’, ‘)’, и т.п. символ
bool правда (true) или ложь (falce) логическое значение

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

Хорошо, мы поняли, что есть переменные, у каждой переменной есть свой тип, осталось понять как это использовать. Для того, чтобы завести переменную, нужно дать ей имя и указать ее тип. Давайте заведем целочисленную переменную, и назовем ее foo. Имя переменной может быть любой строкой из одной или большего числа латинских (английских) букв, цифр и символа подчеркивания (_). Буквы могут быть как заглавными так и строчными.

int foo;

int — тип переменной, foo — ее имя, в конце, как положено стоит точка с запятой (;)

Ввод с клавиатуры

Хорошо, переменную мы завели, но теперь в нее надо что-нибудь положить. Помните объект cin, который занимается выводом на экран? У него есть брат близнец cout, который занимается вводом с клавиатуры. Напишем программу,которая будет считывать с клавиатуры число, а потом выводить его на экран.

#include <iostream>

using namespace std; 

int main()
{
    int foo;
    cin >> foo;
    cout << foo;
}

Первую строчку мы уже разобрали, она заводит переменную foo. На второй остановимся по подробнее, в ней мы считываем с клавиатуры число и записывает результат в переменную foo. Обратите внимание, что стрелочки >> направлены из объекта cin в переменную. Легко запомнить, мы вытащили значение из cin и направили его в переменную foo. В третей строчке мы поступаем наоборот, вытаскиваем значение из переменной foo и по стрелочке << отправляем его в объект cout, который выводит значение на экран.

Задачки на переменные, ввод и вывод

  1. Напишите программу, которая выводит на экран сообщение «Hello world» в две строчки.
    Hello 
    World
    
  2. Напишите программу, которая спрашивает у пользователя количество яблок, пользователь вводит с клавиатуры некоторое число n , и программа говорит «There are n apples.».
    How many apples are there? 
    5
    There are 5 apples.
    
    Изменять текст сообщения, когда яблоко только одно, не обязательно.