Печатать книгуПечатать книгу

§ 1. Числовые типы данных. Ввод-вывод данных

Сайт: Профильное обучение
Курс: Информатика. 10 класс (Повышенный уровень)
Книга: § 1. Числовые типы данных. Ввод-вывод данных
Напечатано:: Гость
Дата: Воскресенье, 5 Май 2024, 12:23

 Язык программирования С++

Язык C++ является компилируемым языком программирования общего назначения. Он поддерживает следующие парадигмы программирования: процедурное программирование и объектно-ориентированное программирование. Язык имеет стандартную библиотеку, которая включает в себя распространенные типы данных и алгоритмы.

Язык C++ используется для разработки программного обеспечения и является одним из самых популярных языков программирования. Oн позволяет создавать операционные системы и приложения для серверов; используется для написания драйверов устройств и приложений для встраиваемых систем; на нем написано большое количество прикладных программ и компьютерных игр.

Синтаксис C++ унаследован от языка C. Одним из принципов разработки языка С++ было сохранение совместимости с языком C. Существует большое количество программ, которые могут одинаково успешно транслироваться как компиляторами C, так и компиляторами C++. В языке С++ наибольшее внимание уделено поддержке объектно-ориентированного программирования.

Сегодня существует большое количество различных реализаций языка C++, как бесплатных, так и коммерческих. Например, GCC, Visual C++, Embarcadero (Borland) C++ Builder и др. C++ оказал огромное влияние на развитие других языков программирования, в первую очередь на Java и C#, которые в значительной мере унаследовали его синтаксис.

Сред разработки (Integrated Development Environment, IDE — интегрированная среда разработки) на C++ очень много. Наиболее известные из них представлены в примере 1.1.

В первую очередь выбор IDE зависит от уровня программирования. Для новичков лучшие среды разработки — Dev-C++ или Code::Blocks. Для профессионалов подойдут CLion или Visual Studio. Также следует принимать во внимание ОС, поскольку не все среды кроссплатформенны.

В электронном приложении рассматривается среда Code::Blocks.

Язык C++ возник в начале 1980-х гг., когда сотрудник фирмы Bell Labs Бьёрн Страуструп (род. в 1950 г. в Дании) придумал ряд усовершенствований к языку C.

В язык C были добавлены классы, наследование классов, строгая проверка типов, inline-функции и аргументы по умолчанию. Ранние версии языка, первоначально именовавшегося «C with classes» («Си с классами»), стали доступны с 1980 г.

До начала официальной стандартизации язык развивался в основном силами Б. Страуструпа в ответ на запросы программистского сообщества. В 1998 г. был ратифицирован международный стандарт языка C++. Последняя версия стандарта (С++17, также известный как C++1z) принята в 2017 г.

Пример 1.1. Некоторые IDE для разработки программ на языке С++.    
Логотип Название Комментарий
Microsoft Visual Studio Поддерживает не только C++, но и другие языки: Visual Basic, C# и F#
Eclipse Изначально поддерживала только Java, работает под различными операционными системами: Windows/Linux/Mac OS X
CLion Кроссплатформенная много-функциональная IDE. В ней можно писать на C и C++ и заниматься веб-разработкой на HTML(5), CSS, JavaScript, XML
Code::Blocks

Кроссплатформенная, свободная и открытая IDE для C и C++, написанная с использованием GNU C++, можно использовать для языка Fortran

Dev-C++

Бесплатная интегрированная среда разработки для Windows с открытым исходным кодом, требуется всего пару минут для ее установки

 Среда программирования Code::Blocks

Работа со средой программирования Code::Blocks[1] начинается с создания проекта (пример 1.2).

Процесс создания проекта состоит из нескольких шагов.

1. Выбор типа проекта — консольное приложение .
2. 
Выбор языка программирования — С++.
3. 
Выбор папки для сохранения проекта и имени проекта (пример 1.3). В пути к папке проекта не должны содержаться русские буквы и пробелы (в противном случае могут возникать проблемы с отладкой).
4. 
Выбор компилятора и параметров отладчика (здесь оставить настройки по умолчанию).

По завершении будет создана папка, имя которой было указано в строке «Project title». В этой папке будут сохранены файлы проекта (пример 1.4). Файл с расширением cbp (Code::Blocks project) и именем, совпадающим с именем папки, — файл, содержащий описание проекта (при двойном клике по этому файлу проект будет открыт в среде Code::Blocks); файл main.cpp — файл, содержащий код на языке С++ (расширение cpp — C plus plus).

Окно программы состоит из нескольких областей (пример 1.5). Полностью окно приведено в Приложение к главе 1.

В среде Code::Blocks может быть одновременно создано (File → New → Project) или открыто (File → Open…) несколько проектов. Компилируется и выполняется только один — тот, который является активным. Сменить активный проект можно двойным кликом мыши по имени проекта.

При компиляции программы создается выполнимый файл с расширением exe и именем, совпадающим с именем проекта. Этот файл сохраняется в папке Debug (которая создается при первой компиляции проекта). При нажатии на кнопку  осуществляется запуск именно этого файла. Скомпилированный файл может быть запущен вне среды программирования.


[1]Загрузить среду можно по адресу: http://www.codeblocks.org/downloads/binaries. Для ОС Windows скачать файл codeblocks-20.03mingw-setup.exe.

Пример 1.2. Стартовая страница среды разработки Code::Blocks.

Пример 1.3. Выбор папки и имени проекта.

Пример 1.4. Файлы проекта.

Пример 1.5. Области окна программы Code::Blocks.

Запуск и компиляция программ: 

 

Список проектов (имя активного проекта выделено полужирным шрифтом):

Программу перед запуском нужно скомпилировать или воспользоваться значком, объединяющим эти два процесса. Если в программу внесены изменения и она запущена без предварительной компиляции, то будет осуществлен запуск предыдущей версии программы.

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

 Структура программы

Программа на языке C++ состоит из функций, описаний, команд и директив препроцессора (препроцессор — программа, которая выполняет обработку файла исходного кода перед началом компиляции).

При создании проекта в окне редактирования кода уже написана программа (пример 1.6).

#include <iostream>
using namespace std;
int main()
{
  cout << "Hello world!" << endl;
  return 0;
}

Для языка С++ написано большое количество библиотек, которые содержат команды языка. Подключение библиотеки осуществляется директивой #include. Далее указывается имя библиотеки, заключенное в угловые скобки: < >.

В первой строке с помощью директивы #include подключается заголовочный файл библиотеки <iostream>, который содержит необходимую информацию для управления вводом/выводом.

Следующая директива using открывает доступ к пространству имен namespace std, в котором определяются средства стандартной библиотеки языка C++. Пространство имен — некоторое множество, созданное для логической группировки уникальных идентификаторов.

Программа начинается ключевыми словами int main(), далее в фигурных скобках следуют команды языка. Каждая команда должна заканчиваться «;». Последняя команда — return 0[1].

Результат работы программы отражается в отдельном консольном окне (пример 1.7).

Язык С++ чувствителен к регистру используемых символов. Это означает, что команды, которые должны быть записаны строчными буквами, не будут распознаны компилятором, если их записать заглавными.


[1] Подробно о назначении этих команд вы узнаете позже.

По традиции, начавшейся в 1978 г. с примера из книги Брайана Кернигана и Дениса Ритчи «Язык программирования Си», первая программа на любом языке программирования должна просто выводить на экран приветствие миру.

Пример 1.6. Окно среды Code::Blocks с текстом работы программы. 

 Строку    using namespace std;    можно опустить, но тогда нужно будет перед каждой командой, имя которой описано в пространстве имен   std прописывать  std::. Например

 std::cout << "Hello world!" << std:: endl; 

В больших проектах, в которых используются различные пространства имен, а не только стандартное, обычно так и поступают. В учебных проектах используется только стандартное пространство имен. Поэтому прописывается директива об использовании пространства имен  std.

Пример 1.7. Консольное окно с результатом работы программы:

Чувствительность к регистру относится и к именам переменных. Для компилятора С++ переменные с именами n и N — это различные переменные.

 Команда вывода

Демонстрировать работу любой программы имеет смысл только тогда, когда она выводит какую-либо информацию.

В библиотеке iostream реализована поддержка для ввода и вывода встроенных данных типов с использованием стандартных потоков[1]. Для вывода данных используется следующая команда:

cout << значение;

В этой команде: cout — поток, соответствующий стандартному выводу; значок << обозначает действие «поместить значение в выходной поток».

Функция endl, записанная в конце команды cout, означает, что после вывода курсор будет переведен на следующую строку.

Текст, который нужно вывести на экран, заключают в двойные кавычки. Этот текст не анализируется и выводится на экран в том виде, в котором он записан. Если записать текст на русском языке, то на консоли увидим непонятные символы (пример 1.8). Для корректного вывода русских символов необходима команда setlocale(0""); (пример 1.9).

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

Пример 1.10. Посчитать значение выражения 2 + 2 * 2.

____________________________

[1]  Подробно о назначении этих команд вы узнаете позже.

Поток — это независимая последовательность инструкций для выполнения того или иного действия в программе. В одном конкретном потоке выполняется одна конкретная последовательность действий.

 

Пример 1.8. Вывод русских символов:

Пример 1.9. Использование русских символов:

int main()

{

    setlocale(0"");

    cout << "Привет" << endl;

    return 0;

Результат работы программы:

Поскольку русские буквы не всегда отображаются корректно, рекомендуется писать тесты по-английски или транслитом.

Пример 1.10. Текст программы:

int main()

{

    cout << "2+2*2=";

    cout << (2+2*2) << endl;

    return 0;

}

Результат работы программы:

Две команды cout в программе можно объединить в одну, отделив текст от выражения знаками <<:

cout << "2+2*2=" << (2+2*2<< endl;

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

Понятие типа данных

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

Переменная в программировании — именованная ячейка памяти, хранящая значение переменной.

Компьютер может обрабатывать данные разных типов: целые и действительные числа, символы, тексты и др.

Тип данных определяет способ хранения данных в памяти компьютера, диапазон возможных значений данных и операции, которые с этим типом данных можно выполнять.

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

Формат описания переменной:

<тип> <имя переменной>;

Для обозначения имени переменной используются буквы латинского алфавита, цифры и знак «_». Первым символом должна быть буква или знак подчеркивания (пример 1.11).

Тип данных double в языке программирования C++ позволяет работать с числами и выполнять над ними арифметические действия: сложение, вычитание, умножение и деление. Этот тип соответствует типу real в языке программирования Pascal.

Справочную информацию о языке программирования C++ можно найти в Интернете. Одним из наиболее известных ресурсов является сайт cppreference.com.

Русскоязычная версия сайта доступна по адресу https://ru.cppreference.com/

Первым языком программирования, в котором появилась возможность создавать переменные, считается Ассемблер. В 1957 г. появился язык Фортран, который позволил использовать разные числовые типы данных, необходимые для сложных расчетов: целые, вещественные (действительные) и комплексные.

Язык программирования C++ поддерживает возможность работы с большим количеством разнообразных типов данных.

Здесь можно найти аналоги всех тех типов данных, которые знакомы из языка программирования Pascal.

Пример 1.11. Примеры описания переменных:

double x;

double x1 = 0, y1 = 2.4;
double a_2 = -1.7, a_3;

Диапазон возможных значений типа double задается числами в стандартном представлении от 1.7∙10308 до 1.7∙10308. Самое маленькое положительное число типа double приблизительно равно 4.9∙10324. При вычислениях в числе хранится 15—16 цифр.

В С++ кроме типа данных double могут использоваться float и long double.

Тип Диапазон значений Количество цифр
float 3.4∙1038 .. 3.4∙10+38 7—8
long double 3.4∙104932 .. 3.4∙10+4932 19—20

Переменные типа double занимают в памяти компьютера 64 бита, float — 32  бита, long double — 80 бит.

Операция присваивания

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

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

Использовать присваивание можно следующим образом:

<имя переменной> = <выражение>;

В записи арифметического выражения используются знаки математических действий: сложения, вычитания, умножения, деления (пример 1.12). В языке С++ им соответствуют те же символы, что и в языке Pascal: «+», «–», «*», «/».

Приоритет выполнения операций соответствует принятому в математике: сначала выполняются умножение и деление, а затем сложение и вычитание. Для изменения порядка действий в выражениях используются скобки (пример 1.13).

Для записи обыкновенной дроби используется знак деления. Знак умножения опускать нельзя. Целая часть дробного числа отделяется от дробной части точкой.

Пример 1.12. Примеры записи оператора присваивания:

x = 7;

x1 = 3.5;

a_1 = 20 * x + x1 - 32;

y = y + 7;

Пример 1.13. Использование операции присваивания для записи математических выражений:

Выражение Запись на С++
S = (a + b) S = 2*(a + b);
S = a2 S = a * a;
begin mathsize 16px style a space equals fraction numerator x plus y over denominator 3 end fraction end style a = (x + y)/3;

В С++, как и в Pascal, допустимы команды присваивания следующего вида:

  a = a * 2;  

Команда имеет следующий смысл: из ячейки памяти извлекается значение переменной a, затем оно умножается на 2, результат записывается в ту же ячейку памяти. Старое значение переменной a будет потеряно.

Команды, изменяющие значения переменной в С++, принято записывать в сокращенном виде:

Полная запись Сокращенная запись
a = a + 2; a += 2;
b = b - 3; b -= 3;
c = c * 2.3; a *= 2.3;
d = d / 4.5; /= 4,5;

Наиболее часто встречается изменение переменной на 1. Такие записи можно сокращать по-другому:

Полная запись Сокращенная запись
a = a + 1; a++;
b = b - 1; b--;

Ввод данных

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

Для ввода данных используется следующая команда:

cin >> <имя переменной>;

В этой команде: cin — поток, соответствующий стандартному вводу, значок >> обозначает действие «получить из входного потока значение переменной».

Если переменных несколько, их имена отделяются знаками >>.

Ввод данных происходит в консольном окне, которое появляется после запуска программы. После завершения работы программы в этом же окне будет выведен результат (пример 1.14).

Пример 1.14. Ввести два числа, найти и вывести их сумму.

Текст программы:

include <iostream>

using namespace std;

int main()

{

  cout << "Vvedi 2 chisla" << endl;

  double x, y;

  cin >> x; 

  cin >> y;

  double z = x + y;

  cout << "z=" << z << endl;

  return 0;

}

Результат работы программы:

Две переменные можно ввести с помощью одной команды:

     cin >> x >> y;      

Вычисление значения арифметического выражения

Пример 1.15. Даны вещественные x, y, z. Написать программу для вычисления значения выражения begin mathsize 16px style straight a equals fraction numerator 2 x plus 3 y minus z over denominator 3 plus x squared end fraction end style.

Этапы выполнения задания

I.     Исходные данные: переменные x, y, z.

II.     Результат: переменная a.

III. Алгоритм решения задачи. 

1. Ввод исходных данных.
2. Вычисление значения выражения.
3. Вывод результата.

IV. Описание переменных: все переменные, определенные для решения задачи, имеют тип double.

В приведенном примере перед каждой командой ввода записана команда вывода с пояснениями о том, значение какой переменной нужно вводить.

Пример 1.15.  

V. Программа: 

#include <iostream>

 

using namespace std;

 

int main()

{

  double x, y, z;

  cout << "vvedi x = ";

  cin >> x;

  cout << "vvedi y = ";

  cin >> y;

  cout << "vvedi z = ";

  cin >> z;

  double a = (2 * x + 3 * y - z) /
       
 (3 + x * x);

  cout << "a=" << a << endl;

  return 0;

}

VI. Тестирование программы. Для x = 2, y = 3, z = 1 результат должен быть следующим:

VII. Проверить правильность вычислений можно на калькуляторе.

1. Какая команда в языке программирования C++ предназначена для вывода данных?

2. Что определяет тип данных?

3. Для чего используется команда присваивания?

4. Какая команда в языке программирования C++ предназначена для ввода данных?

  

1. Вводится возраст пользователя в годах. Определить возраст пользователя через 2 года.

2. Напишите программу, в которой вводятся три числа: a, b и с. Пускай первое число уменьшают в два раза, а второе увеличивают на 30, третье уменьшают на 1. Выведите измененные значения переменных.

3.     Даны x, y, z. Написать программу для вычисления значения арифметического выражения.

1.  a equals space fraction numerator x space plus space y space minus space z over denominator x to the power of 2 space end exponent plus space 2 end fraction                                 2.  a space equals space 5 space plus space fraction numerator 2 x space minus space z over denominator 3 space plus space y squared end fraction                         3.  a space equals space left parenthesis 1 space plus space z space right parenthesis fraction numerator x space plus space begin display style fraction numerator y over denominator x squared space plus space 4 end fraction end style over denominator 2 space plus space begin display style fraction numerator 1 over denominator x squared space plus space 4 end fraction end style end fraction