основы программирования на языке с. Тема Ввод и вывод, используемые в С
Скачать 0.5 Mb.
|
Основы программирования на языке С++ Тема 1. Ввод и вывод, используемые в С++ Цели изучения темы: Цели изучения темы: получить представление об основных парадигмах языка С++; получить информацию, достаточную для написания простейшего консольного приложения на языке С++. Задачи изучения темы: познакомиться с основными парадигмами, поддерживаемыми в языке С++; познакомиться с понятием алгоритма и способами отображения алгоритмов; изучить основные понятия языка С++ и возможности ввода- вывода в С++ на уровне, достаточном для написания простой консольной программы; познакомиться со структурой программы на С++, рассмотреть пример программы. Вопросы темы: 1. Парадигмы программирования для языка С++. 2. Алгоритмы. Запись алгоритмов. 3. Понятия языка С++. 4. Структура программы на языке C++. 5. Потоки. Операции '«' и '»'. Вопрос 1. Парадигмы программирования для языка С++ Парадигма программирования – это стиль написания программ, который подчиняется определенным идеям и правилам. Можно сказать, что язык поддерживает данный стиль, если он предоставляет средства, которые делают использование стиля удобным. Язык не поддерживает стиль программирования, если для написания соответствующей программы требуются чрезмерные усилия когда такой общности нет, достаточно абстракции данных). Обобщенное программирование позволяет описать сложный алгоритм без привязки к конкретному типу данных. Тип данных определяется перед вызовом алгоритма (необходимо, чтобы для этого типа были определены использованные в алгоритме операции): реши, какие требуются алгоритмы; параметризуй их так, чтобы они могли работать со множеством подходящих типов и структур данных. Вопрос 2. Алгоритмы. Запись алгоритмов Алгоритм – это последовательность действий для исполнителя, записанная на формальном языке и приводящая к заданной цели за конечное время. Алгоритм (лат. algorithmi – от араб. имени математика Аль- Хорезми) – конечная совокупность точно заданных правил решения произвольного класса задач или набор инструкций, описывающих порядок действий исполнителя для решения некоторой задачи. Ранее вместо слова «порядок» использовалось слово «последовательность», но по мере развития параллельности в работе компьютеров слово «последовательность» стали заменять более общим словом «порядок». Независимые инструкции могут выполняться в произвольном порядке, параллельно, если это позволяют используемые исполнители. Словарная запись алгоритма. Псевдокод. Псевдокод – компактный, зачастую неформальный язык описания алгоритмов, использующий ключевые слова императивных (командных) языков программирования, но опускающий несущественные для понимания алгоритма подробности и специфический синтаксис. Ключевые слова: НАЧАЛО КОНЕЦ ЕСЛИ … ТО … ИНАЧЕ … КОНЕЦ ЕСЛИ ЦИКЛ … КОНЕЦ ЦИКЛА ВВОД ВЫВОД Пример алгоритма: вычисление факториала числа n (напоминаю, n! = 1*2*3*...*n) НАЧАЛО ВВОД n Пример блок-схемы алгоритма – вычисление факториала числа n (рис. 1). Рис. 1. Пример блок-схемы алгоритма Вопрос 3. Понятия языка С++. Алфавит. Множество символов языка C++ включает: прописные буквы латинского алфавита; строчные буквы латинского алфавита; арабские цифры; разделители: , . ; : ? ! ' " | / \ _ ^ ( ) { } [ ] < > # % & – = + *. Остальные символы могут быть использованы только в символьных строках, символьных константах и комментариях. Язык C++ различает большие и маленькие буквы, таким образом, name и Name – разные идентификаторы. Литералы (константы). Литералы в языке C++ могут быть целые, вещественные, символьные и строковые: целые – 10, 132, -32179; вещественные – 15.75, 1.575e1, .75, -.125; символьные – 'a', 'e', '.', '?', '2'; строковые – «строка». Типы данных в С++ приведены в таблице 2. Таблица 2. Типы данных Тип Диапазон значений Размер (байт) bool true и false 1 signed char -128 … 127 1 unsigned char 0 … 255 1 signed short int -32 768 … 32 767 2 unsigned short int 0 … 65 535 2 signed long int -2 147 483 648 … 2 147 483 647 4 unsigned long int 0 … 4 294 967 295 4 float 3.4e-38 … 3.4e+38 4 double 1.7e-308 … 1.7e+308 8 long double 3.4e-4932 … 3.4e+4932 10 Виды математических операций представлены в таблице 3. Таблица 3. Математические операции Знак Математическая операция * Умножение / Деление и целочисленное деление нацело % Деление по модулю и остаток от деления + Сложение - Вычитание Присваивание. В одной строке может стоять больше одной операции присваивания «=». Пример: a=b=c=d=100; Виды операций отношения представлены в таблице 4. Таблица 4. Операции отношения Операции Описание = = Равно > Больше < Меньше >= Больше или равно <= Меньше или равно != Не равно Циклы и ветвления. В языке программирования С++ существуют такие циклы: цикл for; цикл while; цикл do while. Синтаксис цикла «while» («пока») c предусловием такой: while (условие) { блок инструкций } Цикл «пока» с постусловием отличается от цикла с предусловием тем, что сначала выполняется блок цикла, а потом проверяется условие. Если условие истинно, то цикл будет выполнен еще раз, и так до тех пор, пока условие будет истинно. Синтаксис цикла с постусловием такой (обратите внимание на обязательную точку с запятой после условия): Обратите внимание на комментарии, которые отображаются зеленым. Рис. 2. Программа вычисления факториала целого числа Директива using открывает доступ к пространству имен (англ. namespace) std , в котором определяются средства стандартной библиотеки языка C++. Пространство имен – некоторое множество, созданное для логической группировки уникальных идентификаторов. Отправной точкой выполнения любой программы на С++ является функция main(). Функция содержит четыре элемента: 1) возвращаемый тип – в данном случае int; 2) имя функции – main; 3) список параметров, заключенный в круглые скобки – в данном случае список пуст; 4) тело функции, заключенное в фигурные скобки и представляющее собой блок инструкций. Инструкцией называется часть программы, определяющая действие и не являющаяся директивой препроцессора. Обратим внимание на то, что каждая инструкция в языке C++ заканчивается точкой с запятой. Существуют следующие исключения: директивы препроцессора, начинающиеся с символа # (например, #include); составные операторы и блоки определения функций, которые обрамлены фигурными скобками – { }. Вопрос 5. Потоки. Операции '«' и '»' В рамках данного курса для организации ввода и вывода данных мы будем использовать библиотеку Абстрактно, поток – это последовательность символов, к которой можно получить доступ. Со временем поток может производить или потреблять потенциально неограниченные объемы данных. Мы будем иметь дело с двумя типами потоков. Поток ввода (или еще «входной поток») используется для хранения данных, полученных от источника данных: клавиатуры, файла, сети и т. д. Например, пользователь может нажать клавишу на клавиатуре в то время, когда программа не ожидает ввода. Вместо игнорирования нажатия клавиши, данные помещаются во входной поток, где затем ожидают ответа от программы. И наоборот, поток вывода (или еще «выходной поток») используется для хранения данных, предоставляемых конкретному потребителю данных: монитору, файлу, принтеру и т. д. При записи данных на устройство вывода, это устройство может быть не готовым принять данные немедленно – например, принтер все еще может прогреваться, когда программа уже записывает данные в выходной поток. Таким образом, данные будут находиться в потоке вывода до тех пор, пока принтер не начнет их использовать. Некоторые устройства, такие как файлы и сети, могут быть источниками как ввода, так и вывода данных. Обратите внимание – программисту не нужно знать детали взаимодействия потоков с разными устройствами и источниками данных, ему нужно только научиться взаимодействовать с этими потоками для чтения и записи данных. Оператор извлечения «>>» используется для извлечения значений из потока. Это имеет смысл: когда пользователь нажимает на клавишу клавиатуры, код этой клавиши помещается во входной поток. Затем программа извлекает это значение из потока и использует его. Оператор вставки «<<» используется для помещения значений в поток. Это также имеет смысл: вы вставляете свои значения в поток, а затем потребитель данных (например, монитор) использует их. C++ поставляется с четырьмя предварительно определенными стандартными объектами потоков, которые вы можете использовать (первые два есть в примере программы): cin – поток, связанный со стандартным вводом (обычно это клавиатура); cout –поток, связанный со стандартным выводом (обычно это монитор); cerr – поток, связанный со стандартной ошибкой (обычно это монитор), обеспечивающий небуферизованный вывод; clog – поток, связанный со стандартной ошибкой (обычно это монитор), обеспечивающий буферизованный вывод. Небуферизованный вывод обычно обрабатывается сразу же, тогда как буферизованный вывод обычно сохраняется и выводится как блок. Манипуляторы и форматирование ввода–вывода. Для форматирования выводимой информации в поток вывода можно помещать манипуляторы. Например, команда cout << showpos << 30; приведет к отображению на экране консоли строки +30 После помещения в поток манипулятора, заданный им способ форматирования сохраняется до тех пор, пока не будет применен манипулятор противоположного значения. Поэтому: cout << showpos << 30< +31 Манипуляторы: • showpos – к положительным числам прибавляется знак +; • noshowpos – к положительным числам не прибавляется знак +; • dec – значения выводятся в десятичной системе счисления; • hex – значения выводятся в шестнадцатеричной системе счисления; • hex – значения выводятся в шестнадцатеричной системе счисления; • oct – значения выводятся в восьмеричной системе счисления; • fixed – используется десятичная запись значений; • scientific – используется экспоненциальная запись значений; • showpoint – отображается десятичная точка и конечные нули чисел типа с плавающей запятой; • noshowpoint – не отображаются десятичная точка и конечные нули чисел типа с плавающей запятой; • setprecision(int) – задаем точность для чисел типа с плавающей запятой. Если используется десятичная или экспоненциальная запись чисел, то точность определяет количество цифр после запятой/точки. Обратите внимание, если точность меньше количества значащих цифр, то число будет округлено. Если не используются ни десятичная, ни экспоненциальная запись чисел, то точность определяет, сколько значащих цифр будет отображаться. • internal – знак значения выравнивается по левому краю, а само значение – по правому краю; • left – значение и его знак выравниваются по левому краю; • right – значение и его знак выравниваются по правому краю; • setfill(char) – задаем символ-заполнитель; • setw(int) – задаем ширину поля. Вопросы для самопроверки: 1. Какие парадигмы программирования поддерживает язык С++? 2. Что такое объектно-ориентированное программирование? 3. В чем разница между модульным и объектно- ориентированным программированием? 4. В чем разница между объектно-ориентированным и абстрактным программированием? 5. Как в виде блок-схемы представить цикл «пока»? 6. В чем разница между циклами while и do … while? Как эта разница отразится в соответствующей блок-схеме? 7. С какого места в коде начинается выполнение программы, написанной на C++? |
предоставляет возможности для использования данной техники.
В C++ реализована поддержка следующих парадигм:
процедурное программирование;
модульное программирование;
абстракция данных;
объектно-ориентированное программирование;
обобщенное программирование.
Процедурное программирование – это разделение всей массы программного кода на отдельные блоки (подпрограммы, процедуры, функции), которые выполняют конкретную задачу – дают возможность отладки отдельных частей кода:
реши, какие требуются процедуры;
используй наилучшие доступные алгоритмы.
Модульное программирование – это когда процедуры разнесены по нескольким отдельным файлам (модулям) – данные внутри модуля защищены от случайного изменения в другой части программы:
реши, какие требуются модули;
разбей программу так, чтобы скрыть данные в модулях.
Абстракция данных – программист может создавать свои типы данных, в том числе сложные:
реши, какие требуются типы;
обеспечь полный набор операций для каждого типа.
Объектно-ориентированное программирование – тип данных
«класс», объединяющий в одну сущность набор данных и функции для их обработки. Для классов доступны инкапсуляция, наследование и полиморфизм.
Инкапсуляция – ограничение доступа к составляющим объект компонентам (методам и переменным).
Наследование – позволяет создать дочерний класс, который содержит все атрибуты родительского класса, при этом некоторые из них могут быть переопределены или добавлены в дочернем.
Полиморфизм – разное поведение одного и того же метода в разных классах. Например, мы можем сложить два числа, и можем сложить две строки. В случае использования дочернего класса полиморфизм определяет, что, если метод не переопределен в дочернем классе, то будет вызван метод родительского класса:
реши, какие требуются классы;
обеспечь полный набор операций для каждого класса;
явно вырази общность через наследование (в тех случаях,
ЦИКЛ пока i <= n res = res * i i = i + 1
КОНЕЦ ЦИКЛА
ВЫВОД res
КОНЕЦ
Графическое представление алгоритмов. Блок-схема.
Блок-схемы – это способ графического представления алгоритма, в котором шаги изображаются в виде блоков различной формы, соединенных между собой стрелками (табл. 1).
Таблица 1.
Блоки
Наименование
Обозначение
Функция
Терминатор (старт – стоп)
Вход из внешней среды и возврат в нее: запуск и остановка программы, вызов и завершение процедуры.
Процесс
Выполнение одной или нескольких подряд операций. Операции указываются внутри фигуры.
Решение
Логический оператор ЕСЛИ, имеет один вход и два выхода – «да» и «нет». Внутри фигуры указывается проверяемое условие.
Вызов подпрограммы
Выполнение одной или нескольких операций, определенных в другой части этой же программы – вызов процедуры или функции.
Ввод/вывод
Ввод или вывод данных. Имена переменных, содержащих данные, указываются внутри фигуры.
{
Блок инструкций
} while (условие);
Цикл «for» («для») является универсальным циклом, который может использоваться и вместо цикла «while». Однако в большинстве случаев цикл for используется для того, чтобы некоторая переменная изменялась в заданном диапазоне с заданным шагом.
Синтаксис оператора «for» такой:
for – инициализация; условие; итератор;
инструкция.
Синтаксис ветвления такой:
if – условие;
инструкция или блок инструкций – для ветки ДА;
else;
инструкция или блок инструкций – для ветки НЕТ.
Комментарии.
Компилятор (интерпритатор) может игнорировать часть текста в файле с программным кодом, если выделить ее специальным образом.
Такая часть называется комментарием и используется для заметок программиста самому себе и/или коллегам, а также для подобных других целей.
В C++ комментарий из нескольких строк оформляется так:
/* комментарий */
После знака // весь текст до конца строки считается комментарием.
Вопрос 4. Структура программы на языке C++
Программирование на языке C++ состоит из функций, описаний и директив препроцессора.
Препроцессор – это программа, которая выполняет обработку файла исходного кода перед началом компиляции или интерпретации.
В качестве примера рассмотрим программу вычисления факториала целого числа, соответствующую рассмотренному ранее алгоритму (рис. 2).