- •Экзамен 374 Предварительные рассуждения Вступительное слово
- •Исторические факты
- •Начнем!
- •Проба пера
- •Открытие сохраненного проекта
- •Вывод данных
- •Типы данных
- •Хороший стиль программирования
- •Переменные и константы
- •Практический пример
- •Ввод данных
- •Например:
- •Пример:
- •Арифметические операции с числами
- •Литералы
- •Некоторые примеры
- •Домашнее задание
- •Напишите программу, которая вводит число из трех цифр, разделяет число на отдельные цифры и печатает их отдельно друг от друга с тремя пробелами между ними. Преобразование типов
- •Перечисляемые типы
- •Типичная ошибка
- •Хороший стиль программирования
- •Типичная ошибка
- •Выражения
- •Оператор if
- •Структура программы
- •Логические операции
- •Структура множественного выбора switch
- •Практический пример
- •Цикл for
- •Практический пример
- •Цикл do-while
- •Домашнее задание
- •Вызов функции
- •Прототипы функций
- •Разбор программы
- •Область видимости
- •Аргументы по умолчанию
- •Встраивание
- •Перегрузка функций
- •Учебный пример перегруженных функций. Иллюстрация перегрузки
- •Результат работы программы
- •Практические примеры
- •Домашнее задание
- •Примеры домашней работы урока 1 Пример №1
- •Как работает программа
- •Пример №2
- •Как работает программа
- •Примеры домашних работ на создание функций Пример №1
- •Как работает программа
- •Пример №2
- •Как работает программа
- •Массивы
- •Объявление массивов
- •Примеры использования массивов
- •Программа 1
- •Программа 2
- •Обратите внимание!
- •Типичная ошибка программирования
- •Типичная ошибка программирования
- •Программа 3
- •Типичная ошибка программирования
- •Замечание по технике программирования
- •Программа 4
- •Программа 5
- •Программа нахождения минимального и максимального элементов массива
- •Сортировка массивов
- •Домашнее задание
- •Что такое указатели?
- •За кулисами...
- •Как работать с указателями?..
- •Зачем нужны указатели?
- •Указатели и Массивы.
- •Примеры задач
- •Пример 1
- •Пример 2
- •Пример 3
- •Указатели - аргументы функций.
- •Ссылочные параметры
- •Примеры решения задач
- •Домашнее задание
- •Операторы свободной памяти new и delete
- •Функции работы со строками из библиотеки обработки строк
- •Пример 1.
- •Пример2
- •Пример 3
- •Пример задачи на новый материал
- •Домашнее задание
- •Двухмерные массивы, как частный случай многомерных массивов
- •Программа.
- •Результаты работы программы.
- •Многомерные динамические массивы
- •Пример на многомерные динамические массивы
- •Домашнее задание
- •Рекурсия
- •Рекурсии или итерации
- •Указатели на функции
- •Пример №1
- •Результат выполнения программы:
- •Пример №2
- •Результат выполнения программы
- •Пример №3
- •Результаты выполнения программы
- •Определения структур
- •Пример #1 на использование структур
- •Пример #2 на использование структур
- •Оператор указателя на структуру
- •Домашнее задание
- •Тест по c Группа ___________________ф. И. О. ______________________
- •Объектно-ориентированное программирование.
- •Наследование (Inheritance).
- •Инкапсуляция (Encapsulation).
- •Определение класса
- •Конструкторы и деструкторы Инициализация объектов класса: конструкторы
- •Основное назначение конструкторов - инициализация объектов.
- •Использование конструкторов с аргументами по умолчанию
- •Если параметры не передаются конструктору, в определении объекта не нужно включать пустые круглые скобки.
- •Использование деструкторов
- •Когда вызываются конструкторы и деструкторы.
- •Домашнее задание
- •Конструктор копирования
- •Синтаксис конструктора копирования
- •Памятка
- •Пример использования конструктора копирования.
- •Перегруженные конструкторы
- •Экскурс в историю
- •Послесловие к примеру
- •Маленькое замечание
- •Домашнее задание
- •Создание класса ''строка''
- •Перегрузка операций.
- •Общие принципы перегрузки операторов.
- •Преобразования, определяемые классом
- •Пример строкового класса с перегруженными операторами
- •Домашнее задание
- •Дружественные функции (Friend Functions)
- •Пример строкового класса с перегруженными операторами и дружественными функциями
- •Перегрузка операторов new и delete
- •Перегрузка оператора индексирования
- •Класс вектор. Часть1.
- •Класс вектор. Часть 2.
- •Класс вектор. Часть 3.
- •Домашнее задание
- •Наследование (Inheritance). Часть 1.
- •Наследование (Inheritance). Часть 2.
- •Множественное наследование (multiple inheritance)
- •Пример множественного наследования
- •Домашнее задание
- •Статические члены данных
- •Раннее и позднее связывание
- •Виртуальные функции
- •Пример.
- •Абстрактные классы
- •Виртуальный базовый класс
- •Практический пример
- •Домашнее задание
- •Потоки ввода-вывода.
- •Iostream.H: stream - поток, "I" - сокр. Input - ввод, "o" - сокр. Output - вывод.
- •Предопределенные потоки.
- •Операции помещения в поток и извлечения из потока.
- •Файловый ввод-вывод с применением потоков.
- •Конструкторы файловых потоков.
- •Функции для открытия и закрытия файлов.
- •Функции для обмена с потоками.
- •Часто применяемые функции потока.
- •Ввод/вывод массива в/из файл(-а).
- •Практический пример: перекодировка файла.
- •Домашнее задание
- •Немного о файлах...
- •И снова файлы...
- •Пример "Телефонная книга"
- •Файл abonent.H
- •Форматирование данных при обменах с потоками.
- •Состояние потока.
- •Использование аргументов командной строки.
- •Ввод/вывод в с.
- •Домашнее задание
- •Определение шаблонов функций
- •Переопределение шаблонов функций
- •Шаблоны классов
- •Шаблонный класс вектор
- •Шаблонный класс вектор
- •Шаблонный класс вектор
- •Введение
- •Обработка исключительных ситуаций
- •Практический пример
- •Программа
- •Домашнее задание
- •Экзамен
Ввод/вывод массива в/из файл(-а).
Программа в зависимости от выбора пользователя позволяет ввести данные из массива в файл или вывести массив из уже существующего файла на экран. При попытке вывести данные из несуществующего файла выдается сообщение об ошибке. Данные выводятся в файл в следующем формате: в первой строке - размерность массива (через пробел количество строк и столбцов), далее - элементы массива по строкам.
#include<fstream.h>
#include<stdlib.h>
#include<iomanip.h>
void main()
{
char sl;
// вывод на экран меню
do
{
cout << "Выберите: 1. Вывести данные из файла "
<< "2. Записать данные в файл";
cin >> sl;
} while (sl!='1' && sl!='2');
char fileName[80]; // переменная для имени файла
int n, m;
int num;
cout << endl << "Введите имя обрабатываемого файла: ";
cin >> fileName;
// если выбран первый пункт меню - то выводим данные из файла на экран
if (sl == '1')
{
// если файл с указанным именем не существует, выводим сообщение об ошибке
ifstream inF(fileName, ios::in|ios::nocreate);
if (!inF)
{
cout << endl << "Невозможно открыть файл";
exit (1);
}
// считываем размерность массива
inF >> n;
inF >> m;
// считываем элементы массива из файла и выводим их сразу на экран
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
inF >> num;
cout << setw(6) << num;
}
cout << endl;
}
inF.close();
}
// если выбран второй пункт меню - то запрашиваем у пользователя
// данные и выводим их в файл
else
{
// открываем файл для записи, если файл с указанным именем не существует,
// то программа создает его
ofstream outF(fileName, ios::out);
if (!outF)
{
cout << endl << "Невозможно открыть файл";
exit (1);
}
// запрашиваем размерность матрицы и записываем данные в файл
cout << "Введите n, m: ";
cin >> n >> m;
outF << n << ' ' << m << endl;
cout << "Введите элементы матрицы: " << endl;
// запрашиваем элементы массива и записываем их в файл
for (int i = 0; i < n; i++)
{
for(int j=0; j < m; j++)
{
cout << "A[" << i << "][" << j << "]= ";
cin >> num;
outF << num << " ";
}
outF << endl;
}
outF.close();
}
}
Практический пример: перекодировка файла.
Любая теория должна быть востребована практикой. Вашему вниманию предлагается практический пример использования файлов, а именно, перевод файла из кодировок DOS, Koi8 в кодировку WIN. Как всегда, обращайте особое внимание на комментарии.
#include <fstream.h>
void main()
{
fstream f1,f2; // Файловые объекты
char s1[80], s2[80]; // Пути к файлам
cout << "Input filename to read:\n";
cin.getline(s1, 80); // Запрос имени входного файла
cout << "Input filename to write:\n";
cin.getline(s2, 80); // Запрос имени выходного файла
f1.open(s1, ios::in); // Открытие файла на чтение
f2.open(s2, ios::out); // Открытие файла на запись
f1.seekp(0, ios::end); // Файловый указатель перемещается
// в конец файла
int size = f1.tellp(); // Вычисление размера файла
f1.seekp(0, ios::beg); // Возврат файлового указателя
// в начало файла
unsigned char koi8[] = // Таблица кодировки KOI8-R
{0xDE, 0xC0, 0xC1, 0xD6, 0xC4, 0xC5, 0xD4, 0xC3,
0xD5, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE,
0xCF, 0xDF, 0xD0, 0xD1, 0xD2, 0xD3, 0xC6, 0xC2,
0xDC, 0xDB, 0xC7, 0xD8, 0xDD, 0xD9, 0xD7, 0xDA};
unsigned char *buffer;
unsigned char temp;
buffer = new unsigned char[size]; // Создание буфера
f1.read(buffer, size); // Чтение файла в буфер
cout << "1. Dos To Win\n"
<< "2 Koi8 To Win\n";
int n;
cout << "\nInput your choice\n";
cin >> n;
// Выбор направление перекодировки
if(n == 1) { // Dos to Win
for(long i = 0; i < size; i++) {
temp = buffer[i];
if(temp == 0xA)
size--;
if(temp >= 0x80 && temp <= 0xAF)
buffer[i] = temp + 0x40;
else if(temp >= 0xE0 && temp <= 0xEF)
buffer[i] = temp + 0x10;
else if(temp == 0xF0)
buffer[i] = 0xA8;
else if(temp == 0xF1)
buffer[i] = 0xB8;
else if(temp == 0xFC)
buffer[i] = 0xB9;
}
}
else if(n == 2) { // Koi8 to Win
for(long i = 0; i < size; i++) {
temp = buffer[i];
if(temp == 0xA)
size--;
if(temp >= 0xC0 && temp <= 0xDF)
buffer[i] = koi8[temp - 0xC0] + 0x20;
else if(temp >= 0xE0 && temp <= 0xFF)
buffer[i] = koi8[temp - 0xE0];
}
}
// Запись перекодированного буфера в файл
f2.write(buffer, size);
delete [] buffer; //Удаление буфера
f1.close(); //Закрытие входного файла
f2.close(); //Закрытие выходного файла
}
В Вашей папке program есть три текстовых документа во всех кодировках. Можете эксперементировать на них.