вовдвывыд. Ввод-вывод. Программирование линейных алгоритмов
Скачать 286.71 Kb.
|
Лабораторная работа № 1 Тема: Программирование линейных алгоритмов Цель: Научиться создавать программы на языке «С++», реализующие линейные алгоритмы. Изучить: структуру программы на языке «С++», операторы объявления переменных констант и типов, библиотеку потокового ввода и вывода, правила построения математических и логических выражений. Краткие теоретические сведения Форматирование данных с использованием функций-членов класса ios Флаги форматирования позволяют включить или выключить один из параметров ввода/вывода. Для установки флага используется функция fmtflags setf(fmtflags flags); Функция возвращает значения предыдущих установок флагов форматирования и устанавливает их со значениями заданными параметром flags. Установка флага вывода: cout.setf( ios::/*name_flag*/ ); // где name_flag - это имя флага Доступ к функциям оператора вывода выполняется через операцию точка. Метод setf() принимает один аргумент – имя флага. Флаги вывода объявлены в классе ios, поэтому, перед тем, как обратиться к флагу, необходимо написать имя класса – ios, после которого, с помощью операции разрешения области действия, вызвать нужный флаг. Снятие флага вывода: cout.unsetf( ios::/*name_flag*/ ); // где name_flag - это имя флага Если при вводе/выводе необходимо установить(снять) несколько флагов, то можно воспользоваться поразрядной логической операцией ИЛИ |. В этом случае конструкция языка C++ будет такой: Установка нескольких флагов: cout.setf( ios::/*name_flag1*/ | ios::/*name_flag2*/ | ios::/*name_flag_n*/ ); Снятие нескольких флагов cout.unsetf( ios::/*name_flag1*/ | ios::/*name_flag2*/ | ios::/*name_flag_n*/ ); В таблице 1 подробно описаны основные флаги форматирования, а также показаны примеры использования флагов. Флаг Назначение Пример Результат boolalpha Вывод логических величин в текстовом виде (true, false) cout.setf(ios::boolalpha); bool log_false = 0, log_true = 1; cout << log_false << endl << log_true << endl; true false oct Ввод/вывод величин в восьмеричной cout.setf(ios::oct, ios::basefield); int value = 17; 21 Флаг Назначение Пример Результат системе счисления cout << value << endl; dec Ввод/вывод величин в десятичной системе счисления (флаг установлен по умолчанию) cout.setf(ios::dec, ios::basefield); int value = 17; cout << value << endl; 17 hex Ввод/вывод величин в шестнадцатерично й системе счисления cout.setf(ios::hex, ios::basefield); int value = 17; cout << value << endl; 11 showbase Выводить индикатор основания системы счисления (по умолчанию не выводится) int value = 17; cout.setf(ios::showbase); cout.setf(ios::dec, ios::basefield); cout << value << endl; cout.setf(ios::oct, ios::basefield); cout << value << endl; cout.setf(ios::hex, ios::basefield); cout << value << endl; 17 021 0x11 uppercas e В шестнадцатерично й системе счисления использовать буквы верхнего регистра(по умолчанию установлены буквы нижнего регистра) int value = 17; cout.setf(ios::showbase); cout.setf(ios::uppercase); cout.setf(ios::hex, ios::basefield); cout << value << endl; 0X11 showpos Вывод знака плюс + для положительных чисел int value = 17; cout.setf(ios::showpos); cout << value << endl; +17 scientific Вывод чисел с плавающей точкой в экспоненциальной форме cout.setf(ios::scientific) ; double value = 1024.165; cout << value << endl; 1.024165e+00 3 fixed Вывод чисел с плавающей точкой в фиксированной форме(по умолчанию) cout.setf(ios::fixed); double value = 1024.165; cout << value << endl; 1024.165000 right Выравнивание по правой границе(по умолчанию). cout.width(7); cout << "text" << endl; text Флаг Назначение Пример Результат Сначала необходимо установить ширину поля(ширина поля должна быть заведомо большей чем, длина выводимой строки). left Выравнивание по левой границе. Сначала необходимо установить ширину поля(ширина поля должна быть заведомо большей чем, длина выводимой строки). cout.width(7); cout << "text" << endl; text Для использования манипуляторов необходимо подключить библиотеку iomanip: #include Манипулятор Назначение Пример Результат endl Переход на новую строку при выводе cout << «website:» << endl << «cppstudio.com»; website: cppstudio.com boolalpha Вывод логических величин в текстовом виде (true, false) bool log_true = 1; cout << boolalpha << log_true << endl; true noboolalpha Вывод логических величин в числовом виде (true, false) bool log_true = true; cout << noboolalpha << log_true << endl; 1 oct Вывод величин в восьмеричной системе счисления int value = 64; cout << oct << value << endl; 1008 dec Вывод величин в десятичной системе int value = 64; cout << dec << 6410 Манипулятор Назначение Пример Результат счисления (по умолчанию) value << endl; hex Вывод величин в шестнадцатеричной системе счисления int value = 64; cout << hex << value << endl; 408 showbase Выводить индикатор основания системы счисления int value = 64; cout << showbase << hex << value << endl; 0x40 noshowbase Не выводить индикатор основания системы счисления (по умолчанию). int value = 64; cout << noshowbase << hex << value << endl; 40 uppercase В шестнадцатеричной системе счисления использовать буквы верхнего регистра (по умолчанию установлены буквы нижнего регистра). int value = 255; cout << uppercase << hex << value << endl; FF16 nouppercase В шестнадцатеричной системе счисления использовать буквы нижнего регистра (по умолчанию). int value = 255; cout << nouppercase << hex << value << endl; ff16 showpos Вывод знака плюс + для положительных чисел int value = 255; cout << showpos<< value << endl; +255 noshowpos Не выводить знак плюс + для положительных чисел (по умолчанию). int value = 255; cout < Вывод чисел с плавающей точкой в double value = 1024.165; 1.024165e+003 Манипулятор Назначение Пример Результат экспоненциальной форме cout << scientific << value << endl; fixed Вывод чисел с плавающей точкой в фиксированной форме (по умолчанию). double value = 1024.165; cout << fixed << value << endl; 1024.165 setw(int number) Установить ширину поля, где number – количество позиций, символов (выравнивание по умолчанию по правой границе). Манипулятор с параметром. cout << setw(40) << «cppstudio.com» << endl; __cppstudio.com right Выравнивание по правой границе(по умолчанию). Сначала необходимо установить ширину поля(ширина поля должна быть заведомо большей чем, длина выводимой строки). cout << setw(40) << right << «cppstudio.com» << endl; __cppstudio.com left Выравнивание по левой границе. Сначала необходимо установить ширину поля (ширина поля должна быть заведомо большей чем, длина выводимой строки). cout << setw(40) << left << «cppstudio.com» << endl; cppstudio.com__ setprecision(int count) Задаѐт количество знаков после запятой, где count – количество знаков после десятичной точки cout << fixed << setprecision(3) << (13.5 / 2) << endl; 6.750 setfill(int symbol) Установить символ заполнитель. Если cout << setfill(‘0′) << setw(4) << 15 0015 Манипулятор Назначение Пример Результат ширина поля больше, чем выводимая величина, то свободные места поля будут наполняться символом symbol – символ заполнитель << ends << endl; В системе ввода-вывода C++ каждый поток связан с набором флагов форматирования, которые управляют процессом форматирования информации. В классе ios объявляется перечисление fmtflags, в котором определены следующие значения. Задания для выполнения Задание 1 1. Целое незнаковое число вводится в десятичной системе исчисления, вывести данное число в восьмеричной системе исчисления. 2. С клавиатуры вводится символ, вывести на экран код этого символа в десятичной и шестнадцатеричной системе исчисления. 3. Целое незнаковое число вводится в восьмеричной системе исчисления, вывести данное число в шестнадцатеричной системе исчисления. 4. Код символа вводится в десятичной системе, вывести на экран ASCII символ соответствующий этому коду. 5. Целое незнаковое число вводится в шестнадцатеричной системе исчисления, вывести данное число в десятичной системе исчисления. 6. Код символа вводится в шестнадцатеричной системе исчисления, вывести на экран ASCII символ соответствующий этому коду. 7. Целое незнаковое число вводится в десятичной системе исчисления, вывести данное число в шестнадцатеричной системе исчисления. 8. Код символа вводится в восьмеричной системе исчисления, вывести на экран ASCII символ соответствующий этому коду. 9. Целое незнаковое число вводится в восьмеричной системе исчисления, вывести данное число в десятичной системе исчисления. 10. Вещественное число (тип double) вводится в десятичной системе исчисления, вывести данное число в шестнадцатеричной системе исчисления. 11. Целое незнаковое число вводится в шестнадцатеричной системе исчисления, вывести данное число в восьмеричной системе исчисления. 12. Вещественное число (тип double) вводится в шестнадцатеричной системе исчисления, вывести данное число в десятичной системе исчисления. 13. С клавиатуры вводится символ, вывести на экран код этого символа в восьмеричной и шестнадцатеричной системе исчисления. 14. Целое незнаковое число вводится в шестнадцатеричной системе исчисления, вывести данное число в десятичной системе исчисления. 15. С клавиатуры вводится символ, вывести на экран код этого символа в восьмеричной и десятичной системе исчисления. Задание 2 1. Два незнаковых целых числа вводятся с клавиатуры в десятичной системе исчисления. Найти их сумму, а затем сумму сдвинуть на два разряда влево. Вывести результат в восьмеричной системе исчисления. 2. Два незнаковых целых числа вводятся с клавиатуры в восьмеричной системе исчисления. Разделить первое на второе, а затем частное сдвинуть на один разряд вправо. Вывести результат в шестнадцатеричной системе исчисления. 3. Два незнаковых целых числа вводятся с клавиатуры в шестнадцатеричной системе исчисления. Найти их произведение, а затем провести операцию побитового «И» над произведением и вторым числом. Вывести результат в десятичной системе исчисления. 4. Два незнаковых целых числа вводятся с клавиатуры в десятичной системе исчисления. Найти остаток от деления первого числа на второе, а затем провести операцию побитового «ИЛИ» над остатком и вторым числом. Вывести результат в шестнадцатеричной системе исчисления. 5. Два незнаковых целых числа вводятся с клавиатуры в восьмеричной системе исчисления. Разделить первое число на второе, а затем провести операцию побитового «Исключающего ИЛИ» над частным и первым числом. Вывести результат в десятичной системе исчисления. 6. Два незнаковых целых числа вводятся с клавиатуры в шестнадцатеричной системе исчисления. Вычислить модуль разности этих чисел, а затем к результату применить операцию побитового «НЕ» Вывести результат в восьмеричной системе исчисления. 7. Два положительных целых числа вводятся в десятичной системе исчисления. Сложить их используя побитовую операцию «И», предварительно сдвинув первое число на 2 бита влево, а второе – на 3 бита вправо. Вывести результат в шестнадцатеричной системе исчисления. 8. Два положительных целых числа вводятся в восьмеричной системе исчисления. Сложить их, используя побитовую операцию «ИЛИ», предварительно сдвинув первое число на 1 бит вправо, а второе – на 2 бита влево. Вывести результат в десятичной системе исчисления. 9. Два положительных целых числа вводятся в шестнадцатеричной системе исчисления. Применить побитовую операцию «НЕ» к остатку от деления первого числа на второе число. Вывести результат в восьмеричной системе исчисления. 10. Два положительных целых числа вводятся в десятичной системе исчисления. Сложить их используя побитовую операцию «Исключающее ИЛИ», предварительно инвертировав первое число, а второе сдвинув на 2 бита вправо. Вывести результат в шестнадцатеричной системе исчисления. 11. Даны два символа латинского алфавита (нижний регистр). Определить символ лежащий между этими символами в алфавите. Если такого символа нет, то вывести символ, расположенный слева от центра. Примеры: ‘a’ и ‘e’ → ‘c’, ‘a’ и ‘f’ → ‘c’. 12. С клавиатуры вводятся два целых положительных числа: первое в десятичной системе исчисления, а второе в шестнадцатеричной системе исчисления. Сложить числа, сдвинув первое число на три бита вправо, а второе число на один бит влево. Результат вывести в восьмеричной системе исчисления. 13. С клавиатуры вводятся два целых положительных числа: первое в восьмеричной системе исчисления, а второе в шестнадцатеричной системе исчисления. Сложить числа, инвертировав первое число. Результат сложения сдвинуть на два бита влево. Результат вывести в десятичной системе исчисления. 14. С клавиатуры вводятся два целых положительных числа: первое в десятичной системе исчисления, а второе в восьмеричной системе исчисления. Сложить числа, сдвинув первое число на два бита влево, и инвертировав второе число. Результат вывести в шестнадцатеричной системе исчисления. 15. С клавиатуры вводятся два целых положительных числа: первое в шестнадцатеричной системе исчисления, а второе в десятичной системе исчисления. Сложить числа используя операцию «исключающее ИЛИ», предварительно инвертировав второе число. Результат сдвинуть на один бит вправо. Результат вывести в восьмеричной системе исчисления. Задание 3 1. Дана сторона квадрата a. Найти его периметр P = 4 * a. 2. Дана сторона квадрата a. Найти его площадь S = СТЕПЕНЬ(a;2). 3. Дан диаметр окружности d. Найти еѐ длину L = π * d. В качестве значения π использовать 3.14. 4. Дана длина ребра куба a. Найти объем куба V = СТЕПЕНЬ(а;3). 5. Дана длина ребра куба a. Найти площадь его поверхности S = 6 * СТЕПЕНЬ(а;3). 6. Даны стороны прямоугольника a и b. Найти его площадь S = a * b. 7. Даны стороны прямоугольника a и b. Найти его периметр P = 2 * (a + b). 8. Даны длины ребер a, b, c прямоугольного параллелепипеда. Найти его объем V = a * b * c. 9. Даны длины ребер a, b, c прямоугольного параллелепипеда. Найти площадь поверхности S = 2 * (a * b + b * c + a * c). 10. Найти длину окружности L заданного радиуса R: L = 2 * π * R. 11. Найти площадь круга S заданного радиуса R: S = π * СТЕПЕНЬ(R;2). 12. Найти площадь круга S заданного диаметра: S = π * (СТЕПЕНЬ(D;2) / 4). 13. Даны два числа a и b. Найти их среднее арифметическое: (a + b) / 2. 14. Дано трѐхзначное число. Найти сумму его цифр. 15. Дано трѐхзначное число. Найти произведение его цифр. Контрольные вопросы 1. Из каких блоков состоит структура простейшей программы на языке «С++»? 2. Какие типы данных входят в систему базовых типов языка «С++»? 3. В какой библиотеке описаны флаги и манипуляторы форматированного ввода и вывода? 4. Как объявляются переменные, константы и типы на языке «С++»? 5. Какой синтаксис у оператора присвоения? 6. Какие математические операции присутствуют в языке «С++» и как осуществляется преобразование типов? 7. Какие целочисленные математические операции присутствуют в языке «С++»? 8. Как реализован приоритет при выполнении операций в языке «С++»? |