- •Т.Э. Шульга программирование.
- •Глава 1. Основы программирования на языке высокого уровня 6
- •Глава 2. Динамические структуры данных 40
- •Глава 3. Основы объектно-ориентированного программирования 53
- •Введение
- •Глава 1. Основы программирования на языке высокого уровня
- •Void main()
- •Задания
- •1.2. Переменные. Основные типы данных
- •Ввод – вывод значений переменных
- •Форматирование данных при обменах с потоками ввода-вывода
- •Void main()
- •Void main()
- •Преобразование типов
- •Задание 1. Описание переменных и преобразование типов
- •Задание 2. Форматирование вывода
- •1.3. Основные операции
- •Void main ()
- •Задания
- •1.4. Конструкции выбора
- •Void main()
- •Void main()
- •Void main()
- •Задание 1. Обработка введенного символа
- •Задание 2. Вычисление значения функции
- •Задание 3. Применение разветвляющихся алгоритмов при решении простейших задач
- •Задание 4. Mультиветвление
- •1.5. Конструкции цикла и передачи управления
- •Void main()
- •Задание 1. Детерминированные циклы. Простейшие задачи
- •Void main()
- •Задание 2. Итерационные циклы. Простейшие задачи
- •Void main()
- •Int last;
- •Задание 3. Одномерные массивы
- •Void main ()
- •Int a[100],n,max,imax;
- •Задание 4. Вложенные циклы
- •Void main ()
- •Задание 5. Двумерные массивы
- •Void main ()
- •Задание 6. Посимвольная обработка строк
- •Void main()
- •Задание 7. Сортировка массива
- •Void main ()
- •1.6.Функции
- •Int oct (int a)// определение функции
- •Void main()
- •Void main()
- •Int strcmp(const char *str1, const char* str2);
- •Int fclose (file * stream);
- •Int feof(file *stream);
- •Int fseek ( file* stream, long offset, int origin);
- •Задание 1. Определение и вызов функций
- •Задание 2. Рекурсивные функции
- •Задание 3. Использование библиотечных функций string.H
- •Void main()
- •Задание 4. Использование библиотечных функций stdio.H
- •Void main ()
- •Глава 2. Динамические структуры данных
- •Int year;
- •Int children;
- •Задание 1. Структуры
- •Int year;
- •Int month;
- •Int visokos(int year)
- •Vivod (date d)
- •Int day_number(date d)
- •Vivod(mas[I]);
- •Vivod (min(mas,n));
- •Задание 2. Динамический список
- •Int mark;
- •Void vvod ()
- •Void vivod()
- •If (begin)
- •Void vivod_f()
- •If (begin)
- •Void add()
- •Void udol () //
- •If (begin)
- •Void del()
- •Void main ()
- •Задание 3. Использование стеков и очередей
- •Глава 3. Основы объектно-ориентированного программирования
- •Void empty();
- •If (len) delete []s;
- •Void cStr::empty()
- •Задание 1 . Описание простейшего класса
- •Задание 2 . Класс string
- •Void main()
- •Void main ()
- •Задание 3. Класс fstream
- •Задание 4. Наследование
- •Список литературы
Форматирование данных при обменах с потоками ввода-вывода
Данные при обмене с потоками ввода-вывода используют стандартный формат внешнего представления. Например, при выводе чисел каждое из них занимает ровно столько позиций, сколько необходимо для его представления: число 1/3 будет выведено на экран в виде 0.333333. Это не всегда удобно. Форматы представления выводимой информации и правила восприятия данных, вводимых из потока, могут быть изменены с помощью флагов форматирования. Эти флаги унаследованы всеми потоками библиотеки из базового класса ios. Перечислим некоторые флаги, объясняя их действие при значениях, принимаемых этими флагами по умолчанию:
left - вывод значения с левым выравниванием;
right – вывод значения с правым выравниванием;
dec – десятичная система счисления;
осt - восьмеричная система счисления;
hex – шестнадцатеричная система счисления;
showbase – напечатать при выводе признак системы счисления (0x - для шестнадцатеричных, 0 – для восьмеричных);
showpoint – при выводе вещественных чисел обязательно печатать точку и следующие за ней нули;
fixed – для вещественных чисел использовать представление в формате с фиксированной точкой.
Для изменения этих флагов используют функцию setf следующим образом: cout.setf (setbits, field) или cout.setf (setbits). Функция устанавливает флаги в соответствии со значением параметров. Биты, помещенные в параметре field, сбрасываются, а затем устанавливаются те биты, которые указаны в параметре setbits.
Кроме флагов для управления форматом используют компонентные переменные класса, значение которых при выводе данных можно изменить с помощью компонентных функций:
cout.width (x), где x- целое число, задающее минимальную ширину поля вывода;
cout.precision (x), где x – целое число, задающее точку представления вещественных чисел, то есть максимальное количество цифр дробной части при выводе;
cout.fill(x), где x определяет символ заполнения поля ввода до минимальной величины, определенной переменной width. По умолчанию fill имеет значение пробела.
Пример 1. Ввести с клавиатуры и вывести на экран два вещественных числа в формате 2 знака поле запятой и заполнить пространство между ними символом # следующим образом:
32.76#############################5.41##############################
#include <iostream.h>
#include <conio.h>
Void main()
{
float a,b;
int i;
cout << "\nEnter numbers\n";
cin>>a>>b;
clrscr(); //функция очистки экрана, описана в заголовочном
//файле conio.h
cout.setf(ios::fixed); //вывод вещественных чисел в формате с
//фиксированной точкой
cout.setf(ios::left);//вывод значения с левым выравниванием
cout.width(40); //установили ширину поля вывода 40 символов
//(половина ширины экрана)
cout.precision(2);//установили число знаков после запятой
//при выводе вещественно числа
cout.fill('#'); // заполнитель поля вывода #
cout<<a;
cout.width(40);// установили ширину поля вывода 40 символов
cout<<b;
getch();
}
Заметим, что если бы мы не использовали в программе функцию cout.setf(ios::fixed), то функция cout.precision(2) определяла бы количество всех разрядов выводимого числа, а не количество разрядов его дробной части. Кроме того, обратим внимание на повторное использование функции cout.width() перед выводом значения переменной b. Оно обязательно, так как по умолчанию ширина поля равна длине принятого представления выводимого значения.
Более простой способ изменения параметров и флагов форматирования обеспечивают манипуляторы - специальные функции, позволяющие программисту изменять состояния и флаги потока. Манипуляторы библиотеки классов ввода-вывода языка С++ делятся на 2 группы: манипуляторы с параметрами и манипуляторы без параметров. Примерами манипуляторов без параметров служат манипуляторы dec, hex, осt, которые при вводе и выводе устанавливают флаг десятичной, шестнадцатеричной, восьмеричной системы счисления соответственно (до следующего явного изменения) и манипулятор endl , который обеспечивает включение в выходной поток символа новой строки. Манипуляторы с параметрами определены в файле iomanip.h. Наиболее используемые манипуляторы:
setw (x), где x- целое число, задающее минимальную ширину поля вывода;
setfill (x), где x определяет символ заполнения поля ввода до минимальной величины, определенной переменной width;
setpresiction (x), где x – целое число, задающее точку представления вещественных чисел, то есть максимальное количество цифр дробной части при выводе.
Пример 2. Ввести с клавиатуры и вывести на экран целое число в десятичном, шестнадцатеричном и восьмеричном виде следующим образом:
$$$$$$$$$$$$$$$$$$$$$$$$$$$11 0xb 013$$$$$$$$$$$$$$$$$$$$$$$$$$$$
#include <iostream.h>
#include <iomanip.h>
#include <conio.h>