Программирование потоков ввода-вывода
Разработать ООП для формирования дампа любого заданного файла. Именаисходного файла и результирующего файла дампа должны передаваться программе через аргументы командной строки ее вызова. Исходный файл может иметь произвольный текстовый или бинарный формат. Результирующий файл дампа должен иметь текстовую структуру, идентичную стандартному выводу команды od из OS UNIX с ключом – x, где 2-х байтовые слова исходного файла кодируются короткими целыми числами без знака, которые записаны в системе счисления по основанию 16. При разработке программы нужно использовать методы бесформатного ввода и форматного вывода файловых потоков.
Файл дампа 16 имеет текстовый формат символьных строк фиксированной длины. Каждая строка кодирует 8 двухбайтовых слов целыми числами, которые разделены пробелом. Каждое число записано в системе счисления по основанию 16 и дополнено лидирующими нулями до 4 цифр. В начале каждой строки дампа указано смещение ее первого слова от начала исходного файла. Смещение измеряется в байтах и записано в системе счисления по основанию 8. Запись смещения дополнена лидирующими нулями до 7 цифр. Последняя строка дампа содержит запись размера исходного файла в формате, аналогичном смещению.
Искомый текст:
od -x OS UNIX dump\n
Файл дампа 16:
0000000 646f 2d20 2078 534f 5520 494e 2055 7564 706d
0000020 706d 000a
// Word hex dump as UNIX od -x
#include <iostream>
#include <fstream>
#include <ios>
#include <iomanip>
using namespace std; // объявление пространства имен
int main(int argc, char* argv[]) {
unsigned short i=0; // код слова
unsigned offset = 0; // смещение слова
// проверка числа аргументов
if(argc < 2) {
cerr << "Usage: asod source-file target-file" << endl;
return(0);
} // if
// задать входной поток
ifstream input(argv[1]);
if(input == 0) {
cerr << argv[1] << ": Can't open to read" << endl;
return(-1);
}
// задать выходной поток
ofstream output;
output.open(argv[2]);
if(output == 0) {
if(!argv[2])
argv[2] = "target";
cerr << argv[2] << ": Can't open to write" << endl;
return(-2);
}
// Установить выравнивание и заполнение полей вывода дампа
// input.unsetf(ios::skipws);
output.setf(ios::right, ios::adjustfield);
output.fill('0');
// Вывод начального смещения
output << oct << setw(7) << offset;
// Цикл ввода-вывода
while(input.read((char *)&i, 2)) { // чтение слова
offset += 2; // увеличить счетчик смещения
output << " " << hex << setw(4) << i; // вывод очередного слова
i = 0; // инициализация кода слова
if((offset % 16) == 0) // вывод смещения
output << endl << oct << setw(7) << offset;
} // while
// вывод последнего слова
if(input.gcount() == 1) {
output << " " << hex << setw(4) << i;
offset++;
} // if
// вывод последнего смещения
output << endl;
if(offset % 16)
output << oct << setw(7) << offset << endl;
// закрыть потоки ввода-вывода
input.close();
output.close();
return(0); // корректное завершение программы
} // main
Варианты заданий для восьмой лабораторной работы
--------------------------------------------------------------------------------------------------------------------
Разработать объектно-ориентированную программу для измерения размера заданного файла в байтах, килобайтах и мегабайтах. Имя измеряемого файла должно передаваться программе через аргумент командной строки ее вызова. Результат измерения размера файла должен отображаться информационным сообщением в потоке протокола стандартной диагностики (сerr). Эта диагностика должна иметь формат записи суммы числа мегабайтов, килобайтов и байтов, которые в совокупности составляют размер файла (M + K + B). При разработке программы следует использовать методы позиционирования файловых потоков ввода без чтения данных из них.
F01
--------------------------------------------------------------------------------------------------------------------
Разработать объектно-ориентированную программу для подсчета количества непустых строк любого заданного текстового файла. При этом пустыми считаются строки, где отсутствуют любые символы, кроме необязательных пробелов и табуляций. Имя текстового файла для подсчета числа непустых строк должно передаваться программе через аргумент командной строки ее вызова. Результат подсчета должен отображаться информационным сообщением в потоке протокола стандартной диагностики (сerr). При разработке программы необходимо использовать методы бесформатного ввода файловых потоков и исключить ее зависимость от длины строк измеряемого файла.
F02
--------------------------------------------------------------------------------------------------------------------
Разработать объектно-ориентированную программу для подсчета количества слов в любом заданном текстовом файле. При этом словом считается любая последовательность букв без различия регистра, которая отделена от других фрагментов текста символами пробелов, табуляций или знаками пунктуации и перевода строки. Имя текстового файла для подсчета числа слов должно передаваться программе через аргумент командной строки ее вызова. Результат подсчета должен отображаться информационном сообщением в потоке протокола стандартной диагностики (сerr). При разработке программы следует использовать оператор форматного ввода файловых потоков.
F03
--------------------------------------------------------------------------------------------------------------------
Разработать объектно-ориентированную программу подсчета количества абзацев в любом заданном текстовом файле. При этом считается, что абзацы разделены с помощью пустых строк, которые не содержат других символов, кроме необязательных пробелов и табуляций. Имя текстового файла в указанном формате должно передаваться программе через аргумент командной строки ее вызова. Результат подсчета числа абзацев в нем должен отображаться информационным сообщением через поток протокола стандартной диагностики (сerr). При разработке программы следует использовать методы бесформатного ввода класса файловых потоков, а также исключить ее зависимость от длины абзаца.
F04
--------------------------------------------------------------------------------------------------------------------
Разработать объектно-ориентированную программу для измерения общего числа единичных разрядов во всех байтах любого заданного файла. Его имя должно передаваться программе через аргумент командной строк. Результат измерения должно отображать информационное сообщение в потоке протокола стандартной диагностики (сerr). При разработке программы следует использовать методы бесформатного ввода символов классов файловых потоков. Кроме того, в программе должен быть реализован эффективный вычислительный алгоритм, который минимизирует число сравнений разрядов для каждого байта. При этом необходимо также исключить повторные измерения одинаковых байтов.
F05
--------------------------------------------------------------------------------------------------------------------
Разработать объектно-ориентированную программу для определения размера самой длинной и короткой непустой строки любого заданного текстового файла. При измерении строк в них не должны учитываться лидирующие и хвостовые пробелы или символы табуляции. Имя текстового файла для указанных измерений должно передаваться программе через аргумент командной строки ее вызова. Результат измерения и сравнения длин строк должен быть отображен информационным сообщением через поток стандартной диагностики (сerr). При разработке программы необходимо использовать методы бесформатного ввода файловых потоков и исключить ее зависимость от длины строк измеряемого файла.
F06
--------------------------------------------------------------------------------------------------------------------
Разработать объектно-ориентированную программу для поиска всех строк любого заданного текстового файла, длина которых превышает установленную максимальную величину. Имя файла и предельный допустимый размер его строк должны передаваться программе через аргументы командной строки ее вызова. Итоговый результат поиска длинных строк должен отображаться информационным сообщением в потоке протокола стандартной диагностики (сerr), где перечислены их длины и порядковые номера в заданном текстовом файле. При разработке программы необходимо использовать методы бесформатного ввода файловых потоков.
F07
--------------------------------------------------------------------------------------------------------------------
Разработать объектно-ориентированную программу поиска самого длинного слова в любом заданном текстовом файле. При этом под словом понимается любая последовательность символов, которая состоит из букв и (или) цифр. Имя файла должно передаваться программе через аргумент командной строки ее вызова. Если в заданном файле имеется несколько различных слов равной максимальной длины, то программа должна перечислять все такие слова. Все найденные слова и число повторений каждого из них должны отображаться через поток стандартного вывода (сout). При разработке программы следует использовать методы форматного ввода файловых потоков.
F08
--------------------------------------------------------------------------------------------------------------------
Разработать объектно-ориентированную программу для поиска всех различных слов любого заданного текстового файла, длины которых превышают установленную максимальную величину. При этом под словом понимается любая последовательность символов, которая состоит из букв и (или) цифр. Имя текстового файла и предельная длина слова в нем должны передаваться программе через два аргумента командной строки ее вызова. Все найденные слова без повторений должны отображаться через поток стандартного вывода (сout). При разработке программы следует использовать методы форматного ввода файловых потоков и исключить какие-либо ограничения по числу обнаруженных слов.
F09
--------------------------------------------------------------------------------------------------------------------
Разработать объектно-ориентированную программу для поиска в любом заданном текстовом файле абзаца, который состоит из максимального числа строк. При этом считается, что абзацы разделены пустыми строками, где нет других символов, кроме необязательных пробелов и табуляций. Имя текстового файла для поиска таких абзацев должно передаваться программе через аргумент командной строки ее вызова. Число строк и смещение по строкам максимального абзаца от начала файла должно быть отображено через поток стандартной диагностики (сerr). При разработке программы следует применить методы бесформатного ввода файловых потоков и исключить ее зависимость от размера абзацев файла.
F10
--------------------------------------------------------------------------------------------------------------------
Разработать объектно-ориентированную программу для поиска по образцу любой заданной последовательности символов в строках текстового файле. Имя текстового файла и образец искомой последовательность символов должны передаваться программе через 2 аргумента командной строки ее вызова. При этом поиск образца должен осуществляться с точностью до регистра букв и разделителей в строках текстового файла. Количество обнаруженных вхождений заданного образца в файл должно отображаться информационным сообщение в потоке протокола стандартной диагностики (сerr). При разработке программы необходимо применить методы бесформатного ввода файловых потоков.
F11
--------------------------------------------------------------------------------------------------------------------
Необходимо разработать объектно-ориентированную программу, которая отображает в потоке стандартного вывода (сout) требуемое число начальных строк любых заданных текстовых файлов. Имена всех файлов и число их начальных строк для вывода должны передаваться программе аргументами командной строки ее вызова. При этом требуемое число начальных строк должно быть указано после специального ключа (-n). Если такой ключ отсутствует, то из всех заданных файлов должна отображаться первая строка. При разработке программы необходимо применить методы бесформатного ввода файловых потоков и исключить ее зависимость от длины строк заданных файлов.
F12
--------------------------------------------------------------------------------------------------------------------
Необходимо разработать объектно-ориентированную программу, которая отображает через поток стандартного вывода (сout) требуемое число концевых строк из любого заданного текстового файла. Имя файла и число его концевых строк для вывода должны передаваться программе через аргументы командной строки ее вызова. Если число концевых строк не указано, то по умолчанию должна отображаться только одна последняя строка заданного файла. При разработке программы необходимо применить методы бесформатного ввода и позиционирования файловых потоков. Следует также обеспечить независимость программы от максимальной длины строк файла.
F13
--------------------------------------------------------------------------------------------------------------------
Разработать объектно-ориентированную программу для поиска кодов символов в любом диапазоне от 0 до 255, которые наиболее часто встречаются в заданном файле. Имя файла и диапазон кодов должны передаваться программе аргументами командной строки ее вызова. При этом диапазон кодов должен быть задан парой чисел, которые записаны через тире. Результат поиска должен отображаться информационным сообщением в потоке протокола стандартной диагностики (сerr), где указаны коды и число повторений всех наиболее часто используемых символов файла. При разработке программы необходимо применить методы бесформатного ввода символов файловых потоков.
F14
--------------------------------------------------------------------------------------------------------------------
Разработать объектно-ориентированную программу разбиения любого файла на заданное число частей равной длины. Имя файла и требуемое количество частей должны передаваться программе через аргументы командной строки ее вызова. Все части, полученные в после разбиения исходного файла, должны сохраняться в отдельных файлах текущего каталога. При этом базовые имена всех частей должны совпадать с базовым именем исходного файла. Полное имя файла каждой части должно иметь цифровой суффикс, который определяет ее номер в порядке разбиения исходного файла. При разработке программы следует применить методы бесформатного ввода-вывода файловых потоков.
F15
--------------------------------------------------------------------------------------------------------------------
Разработать объектно-ориентированную программу конкатенации любого заданного набора файлов. Имена всех сливаемых файлов должны передаваться программе через аргументы командной строки ее вызова. Заданные файлы должны объединяться в порядке перечисления их имен в командной строке вызова программы. Результат слияния заданных файлов должен быть отображен через поток стандартного вывода (сout). При этом содержимое каждого следующего файла должно отображаться после предыдущего без какого-либо промежутка. При разработке программы необходимо применить методы бесформатного ввода и вывода файловых потоков.
F16
--------------------------------------------------------------------------------------------------------------------
Разработать объектно-ориентированную программу для исключения из заданного текстового файла всех отображаемых символов, номера позиций которых в его строках находятся в указанном диапазоне. Имя файла и диапазон позиций исключаемых символов строк должны передаваться программе через аргументы командной строки ее вызова. При этом диапазон позиций должен быть задан парой чисел, которые разделены тире. Когда правая позиция диапазона превышает длину строки, должны быть исключены все символы до конца строки. Результаты исключений должны отображаться через поток стандартного вывода (сout). При разработке программы следует применить методы бесформатного ввода файловых потоков.
F17
--------------------------------------------------------------------------------------------------------------------
Разработать объектно-ориентированную программу для разбиения любого файла на части заданной фиксированной длины. Имя файла и требуемый размер части в байтах должны передаваться программе через аргументы командной строки ее вызова. Полученные в результате части исходного файла должны быть сохранены в отдельных файлах текущего каталога. Базовые имена этих частей должны совпадать с базовым именем исходного файла. Полное имя файла каждой части должно иметь цифровой суффикс, который определяет ее номер в порядке разбиения исходного файла. При разработке программы следует применить методы бесформатного ввода-вывода файловых потоков.
F18
--------------------------------------------------------------------------------------------------------------------
Разработать объектно-ориентированную программу исключения лидирующих и хвостовых пробелов или табуляций в строках любого заданного текстового файла. Имя этого файла должно передаваться программе через аргумент командной строки ее вызова. Когда имя файла для указанной текстовой обработки не задано, должны рассматриваться строки потока стандартного ввода (cin). В любом случае результат обработки текста должен отображаться строками потока стандартного вывода (сout). При разработке программы следует применить методы бесформатного ввода-вывода файловых и стандартных потоков, а также исключить ее зависимость от длины строк любого исходного текста.
F19
--------------------------------------------------------------------------------------------------------------------
Разработать объектно-ориентированную программу для исключения из любого текстового файла повторений пустых строк, чтобы из каждой группы пустых соседних строк оставалась только одна. При этом пустыми считаются строки, где отсутствуют любые другие символы, кроме необязательных пробелов и табуляций. Имя исходного текстового файла должно передаваться программе через аргумент командной строки ее вызова. Результирующий текст после исключений повторов пустых строк должен отображаться через поток стандартного вывода (сout). При разработке программы необходимо использовать методы бесформатного ввода файловых потоков и исключить ее зависимость от длины строк заданного файла.
F20
--------------------------------------------------------------------------------------------------------------------
Литература
1. Standard for the C Programming Language ISO/IEC 9899, 1990.
2. Standard for the C++ Programming Language ISO/IEC 14882, 1998.
3. Архангельский А.Я. Компоненты общего назначения библиотеки C++ Builder 5. М.: Издательство БИНОМ, 2001. 416 с.
4. Бокс Д. Сущность технологии COM. Библиотека программиста. 4-е изд. СПБ.: Питер, 2001. 400 с.
5. Пол Айра. Объектно - ориентированное программирование на C++: пер. с англ. 2-е изд. СПБ.: Невский Диалект; М.: Издательство БИНОМ, 2001. 462 с. [Pohl Ira. Object-Oriented Programming Using C++. 2nd ed. Addison-Wesley, 1996. 576 p.].
6. Пратт Т., Зелковиц М. Языки программирования: разработка и реализация. 4-е изд. СПБ.: Питер, 2002. 688 с.
7. Страуструп Б. Язык программирования C++: пер. с англ / под ред. Н.Н. Мартынова. Специальное изд. М.: Бином, 2011. 1035 c. [Stroustrup B. The C++ Programming Language. Special ed. Addison-Wesley, 2000. 1029 p.].
8. Шилдт Г. Самоучитель C++. 3-е изд. СПБ.: БХВ-Петербург, 2002. 688 с. [Schildt H. Teach Yourself C++. 3d ed. McGraw-Hill, 1998. 768 p.].
9. Волосатова Т.М., Родионов С.В. Объектно-ориентированное программирование на С++. Режим доступа: http://bigor.bmstu.ru/?cnt/?doc=VU/base.cou (дата обращения 01.06.2013).
Дата добавления: 2021-07-22; просмотров: 472;