Главная » Просмотр файлов » Лабораторные работы МИРЭА 2014

Лабораторные работы МИРЭА 2014 (1017113), страница 12

Файл №1017113 Лабораторные работы МИРЭА 2014 (Лабораторные работы МИРЭА 2014) 12 страницаЛабораторные работы МИРЭА 2014 (1017113) страница 122017-07-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 12)

Длительность выполнения работы: 2 часа.

Потоковый ввод и вывод

Поток, - это объект, который обеспечивает побайтовое движение данных в компьютер или из компьютера. В первом случае поток называется входным, во втором выходным. Особое значение имеют, та называемые, файловые потоки, т.е. потоки для чтения или записи в файл.

Для работы с потоками необходимо подключение заголовочного файла <fstream>, содержащего наборы специальных классов:

  • ifstream - для ввода,

  • ofstream - для вывода,

  • fstream - для чтения и записи данных в один и тот же файл.

Чтобы получить возможность работать с файлом, нужно открыть его с указанием режима доступа, который определяется значением поля open-mode класса ios.

Режим доступа

Стандарт

Действие

app

нет

открывает файл для дозаписи

ate(atend)

да

при открытии файла устанавливает файловый указатель на конец файла

binary(bin)

да

открыть файл в двоичном представлении

in

да

открыть файл для чтения (ввода)

nocreate

нет

если файл не существует, то новый файл не создается

noreplace

нет

если файл уже существует, файл не перезаписывается

out

да

открыть файл для записи (вывода)

trunc

нет

Открывает и усекает существующий файл. Новая информация замещает существующую



Создание потока

Для создания выходного потока объявляется объект класса ofstream. Класс имеет несколько перегруженных конструкторов

Конструктор класса, который создает поток, но не определяет файл к которому подключен поток (это можно сделать позднее c помощью функции open())

ofstream name_stream();

name_stream.open("C:\\myFile.txt");



Конструктор класса, который создает поток, и определяет файл к которому подключен поток

ofstream name_stream("C:\\myFile.txt");



Применение потока без указания режима доступа стирает содержимое файла.

Конструктор класса с именем файла в качестве первого параметра и режимом доступа в качестве второго параметра:

ofstream name_stream("C:\\myFile.txt", ios::out);



Можно объявить константу, определяющую режим открытия файла, например:

const ios::open_mode=ios::out | ios::app;



Если выходной поток не найдет указанный файл, тогда такой файл должен быть создан. Однако это не гарантируется. Например, если в полном имени файла указан не установленный диск.



После того, как предпринималась попытка открыть файл, следует убедиться в том, что файл открыт и готов для записи (или перезаписи):



if (! out_file) {

cerr<<"Error: unable to write to out.txt"<<endl;

exit(1);

}

Все сказанное верно и для входных потоков, открываемых для чтения (или входных файлов):

ifstream in_file("myFile.txt", ios::in);

if (! in_file) {

cerr<<"Error: unable to open myFile.txt"<<endl;

exit(1);

}

При работе с текстовыми файлами наиболее часто встречаются четыре действия:

  • посимвольное чтение

  • посимвольная запись

  • построчное чтение

  • построчная запись



Посимвольное чтение текста.

Функция get(), которая является методом класса istream, применяется для посимвольного чтения текстового файла.

Пример 1. Посимвольное чтение файла и вывод его на экран.

# include <fstream>

# include <iostream>

using namespace std;

int main()

{ char sym;

ifstream in_file ("myFile.txt", ios::in);

if (! in_file) {

cerr<<"Error input file"<<endl;

system("pause");

exit(1);

}

while (in_file) { in_file.get(sym);

cout<<sym;

}

cout<<endl;

system("pause");

return 0;

}

Посимвольная запись текста.

Функция put(), которая является методом ostream, позволяет осуществлять посимвольную запись данных в текстовый файл.

Пример 2.

# include <fstream>

# include <iostream>

# include <string>

using namespace std;

void main()

{ string guote = “Зорко одно лишь сердце. Самого главного глазами не увидишь. А. де Сент Экзюпери”;

ofstream out_file (“Out_file.txt”, ios::out);

if (! out_file) { cerr<<”Error output file”<<endl;

exit(1);

}

for (int i=0; i<guote.size(); i++)

out_file.put(guote[i]);

cout<<”Конец записи”<<endl;

}

Построчное чтение файла.

Обычно построчное чтение и запись файлов работают быстрее посимвольных действий. Для чтения строки из файла воспользуемся функцией getline(), которая является методом класса ifstream. Функция читает строку (в том числе и разделители), пока не встретит символ новой строки ‘\n’, помещая ее в буфер (первый аргумент функции). Максимальный размер буфера задается как второй аргумент функции.

Пример 3.

# include <fstream>

# include <iostream>

using namespace std;

void main()

{ const int LEN=80;

char BUF[LEN];

ifstream in_file (“Input_file.txt”, ios::in);

if (! in_file) { cerr<<”Error input file”<<endl;

exit(1);

}

while (in_file) { in_file.getline(BUF,LEN);

cout<<BUF<<endl;

}

}

Построчная запись текста.

Пример 4.

# include <fstream>

# include <iostream>

# include <string>

using namespace std;

void main()

{ ofstream out_file (“Out_file.txt”, ios::out);

if (! out_file) { cerr<<”Error output file”<<endl;

exit(1);

}

out_file<<”Я не знаю, где встретиться\n”;

out_file<<”Нам придется с тобой,\n”;

out_file<<”Глобус крутится-вертится,\n”;

out_file<<”Словно шар голубой\n”;

}

Записываемые строки являются не объектами класса string, а строками типа *char, завершающимися символом ‘\n’.

Признак конца файла

Признак конца файла приходится искать в файлах, открытых для чтения. Этот признак устанавливается в тот момент, когда в файле не осталось больше данных, которые можно считать.

Признак конца файла анализируется в выражении вида

while (! In_file.eof()) { … }

Для этой цели нельзя пользоваться циклом

do { … } while (! In_file.eof()),

поскольку файл может оказаться пустым.

Однако проверка на конец файла не анализирует ошибки, которые могут встретиться в процессе чтения файла.

Для проверки как конца файла, так и наличия ошибок при его чтении пользуются условием выхода из цикла:

while (In_file.good()) { … }

Оператор цикла

while (In_file) { … }

выполняется до тех пор, пока нет ошибок, в том числе и конца файла (EOF).

Имена файлов и аргументы командной строки

В приведенных выше примерах были использованы файлы с фиксированными именами. Однако более удобны программы, в которых имена файлов для чтения или записи можно ввести с клавиатуры или задать в качестве аргументов командной строки.

Пример 5.

# include <fstream>

# include <iostream>

# include <stdlib.h>

using namespace std;

int main (int argc, char *argv[])

{ char I;

char c;

if (argc<=1) { cout<<”usage: primer.exe filename1 [filename2]”;

return 1;

}

ifstream file;

for(I=1;I<argc-1;I++)

{ if(!file.open(argv[I])) { cout<<”Bad file”;

return 1;

};

cout<<”file “<<argv[I]<<endl;

while(file)

{ c=file.get();

cout<<c;

};

file.close();

}

return 0;

}

Для работы с файловыми потоками любого из стандартных типов, нужно перегрузить операторы ввода и вывода под требуемый тип данных или воспользоваться шаблоном класса, задаваемым с помощью ключевого слова template.

Задания для самостоятельной работы

Для выполнения лабораторной работы необходимо составить программу согласно своему варианту задания из табл.1 и (или) из табл.2 по указанию преподавателя.

Варианты заданий

Таблица 1

Номер варианта

Задание

1

Дан файл f, компоненты которого являются целыми числами. Записать в файл g, компоненты файла f, исключив повторные вхождения чисел.

2

Дан файл f, компоненты которого являются действительными числами. Найти:

  1. наибольшее из значений компонентов f;

  2. наименьшее из значений компонентов с четными номерами;

  3. наибольшее из значений модулей компонентов с нечетными номерами;

  4. сумму наибольшего и наименьшего из значений компонентов файла f;

  5. разность первой и последней компоненты файла f.

3

Дан символьный файл f. Подсчитать число вхождений в файл каждой из букв a, b, c, d, e, f.

Результат вывести в файл g в виде таблицы с комментариями.

4

Дан файл f, компоненты которого являются целыми числами. Записать в файл g все четные числа исходного файла, в файл h – все нечетные. Порядок следования чисел сохраняется. Записать в файл g и h комментарии.

5

Дан текстовый файл, содержащий программу на языке С. Проверить эту программу на соответствие числа открывающих и закрывающих фигурных скобок.

6

Дан символьный файл f. Найти и записать в файл g самое длинное слово файла f, снабдив его комментарием.

7

Дан файл f, компоненты которого являются целыми числами. Получить в файле g все компоненты файла f:

  1. являющиеся четными числами;

  2. делящиеся на 3 и не делящиеся на 7;

  3. являющиеся точными квадратами.

Записать в файл g комментарий.

8

Дан файл f. Создать два файла, записав в первый из них все четные числа, расположив их в порядке возрастания, а во второй – все нечетные, расположив их в порядке убывания.

9

Дан текстовый файл f. Переформатировать исходный файл, разделяя его на строки так, чтобы каждая строка содержала столько символов, сколько содержит самая короткая строка исходного файла.

10

Дан файл f. Создать два файла, записав в первый из них среднее геометрическое всех четных чисел, а во второй – среднее арифметическое всех нечетных чисел.

11

Дан числовой файл f. Выбрать все значения, которые делятся нацело на 2 и 4, но не делятся на 6. Записать эти значения в файл g, а все остальные – в файл h.

12

Дан текстовый файл f. Определить, являются ли первые два символа цифрами и если да, то четно ли это число. Записать его в файл g, если оно четно и в h ,если оно нечетно.

13

Дан текстовый файл f. Создать новый файл g и переписать в него исходный файл в обратном порядке, разделив пробелами.

Таблица 2

Номер варианта

Задание

1

Сформировать массив на диске, содержащий сведения о пациентах глазной клиники. Структурный тип содержит поля: фамилия пациента, пол, возраст, место проживания (город), диагноз.

Написать программу, которая выбирает необходимую информацию с диска и выводит на экран:

- количество иногородних, прибывших в поликлинику;

- список пациентов старше Х лет с диагнозом J.

2

Сформировать массив на диске, содержащий сведения о сотрудниках института. Структурный тип содержит поля: фамилия работающего, название отдела, год рождения, стаж работы, должность, оклад.

Написать программу, которая выбирает необходимую информацию с диска и выводит на экран:

- список сотрудников пенсионного возраста на сегодняшний день с указанием стажа работы;

- средний стаж, работающих в отделе Х.

3

Сформировать массив на диске, содержащий сведения об отправлении поездов дальнего следования с Казанского вокзала. Структурный тип содержит поля: номер поезда, станция назначения, время отправления, время в пути, наличие билетов.

Написать программу, которая выбирает необходимую информацию с диска и выводит на экран:

- время отравления поездов в город Х во временном интервале от А до В часов;

- наличие билетов на поезд с номером ХХХ.

Номер варианта

Задание

4

Сформировать массив на диске, содержащий сведения о том, какие из пяти предлагаемых дисциплин по выбору желает изучать студент. Структурный тип содержит поля: фамилия студента, индекс группы, пять дисциплин, средний балл успеваемости. Выбираемая дисциплина отмечается символом 1, иначе – пробелом.

Написать программу, которая выбирает необходимую информацию с диска и выводит на экран список студентов, желающих прослушать дисциплину X. Если число желающих превышает 4 человека, то отобрать студентов, имеющих более высокий средний балл успеваемости.

5

Сформировать массив на диске, содержащий сведения о нападающих команды «Спартак». Структурный тип содержит поля: имена нападающих, число заброшенных ими шайб, число сделанных голевых передач, заработанное штрафное время.

Написать программу, которая выбирает необходимую информацию с диска и выводит на экран четырех лучших игроков по сумме очков (голы + передачи).

6

Сформировать массивна диске, содержащий сведения об ассортименте обуви в магазине фирмы. Структурный тип содержит поля: артикул, наименование, количество, стоимость одной пары. Артикул начинается с буквы Д – для дамской обуви, М – для мужской, П – для детской.

Написать программу, которая выбирает необходимую информацию с диска и выводит на экран:

- сведения о наличии и стоимости обуви артикула X;

- ассортиментный список дамской обуви с указанием наименования и имеющегося в наличии числа пар каждой модели.

7

Сформировать массив на диске, содержащий сведения о наличии билетов на рейсы аэрофлота. Структурный тип содержит поля: номер рейса, пункт назначения, время вылета, время прибытия, количество свободных мест в салоне.

Написать программу, которая выбирает необходимую информацию с диска и выводит на экран:

- время вылета самолетов в город X;

- наличие свободных мест на рейс в город X с временем отправления Y.

8

Сформировать массив на диске, содержащий сведения о личной коллекции книголюба. Структурный тип содержит поля: шифр книги, автор, название, год издания, местоположение (номер стеллажа).

Написать программу, которая выбирает необходимую информацию с диска и выводит на экран:

- местоположение книги, автора X названия Y;

- список книг автора Z, находящихся в коллекции;

- число книг издания XX года, имеющихся в библиотеке.

9

Сформировать массив на диске, содержащий сведения о сдаче студентами сессии. Структурный тип содержит поля: индекс группы, фамилия студента, оценки по пяти экзаменам.

Написать программу, которая выбирает необходимую информацию с диска и выводит на экран:

  • фамилии неуспевающих студентов с указанием индексов групп и количества задолженностей;

  • средний балл, полученный каждым студентом группы X, и всей группы в целом.

10

Сформировать массив на диске, содержащий сведения об ассортименте игрушек в магазине. Структурный тип содержит поля: название игрушки, цена, количество, возрастные границы (2 - 5).

Написать программу, которая выбирает необходимую информацию с диска и выводит на экран:

  • название игрушек, которые подходят детям от 1 до 3 лет;

  • стоимость самой дорогой игрушки и ее название;

  • название игрушки, которая по стоимости не превышает
    X руб. и подходит ребенку в возрасте от A до B лет.

Значения A, B, X вводятся с клавиатуры.

11

Сформировать массив на диске, содержащий сведения о телефонах абонентов. Структурный тип содержит поля: фамилия абонента, место жительства (название улицы, номер дома), год установки телефона.

Написать программу, которая выбирает необходимую информацию с диска и выводит на экран:

  • номер телефона по вводимой с клавиатуры фамилии абонента;

  • количество установленных телефонов с XXXX года;

  • список номеров телефонов, принадлежащих жильцам определенного дома и улицы.

Номер года, название улицы и номер дома вводятся с клавиатуры.

12

Сформировать массив на диске, содержащий сведения о количестве изделий категорий A, B, C, собранных рабочим за месяц. Структурный тип содержит поля: фамилия сборщика, наименование цеха, количество изделий по категориям, собранных рабочим за месяц.

Считая заданными значения расценок SA, SB, SC за выполненную работу по сборке единицы изделия категорий A, B, C, выбрать необходимую информацию с диска и вывести на экран:

  • общее количество изделий категорий A, B, C, собранных рабочим цеха;

средний размер заработной платы рабочих цеха X.

13

Сформировать массив на диске, содержащий сведения о количестве изделий, собранных сборщиками цеха за неделю. Структурный тип содержит поля: фамилия сборщика, количество изделий, собранных им ежедневно в течение шестидневной недели, т.е. раздельно в понедельник, вторник и т.д. Написать программу, которая выбирает необходимую информацию с диска и выводит на экран:

  • фамилию сборщика и общее количество деталей, собранных им за неделю;

  • фамилию сборщика собравшего наибольшее количество изделий, и день, когда он достиг наивысшей производительности труда.

Контрольные вопросы

  1. Что такое поток?

  2. Что представляет собой файловый указатель?

  3. Перечислить режимы доступа к файлу.

  4. Как открыть и как закрыть файл?

Лабораторная работа №8

Программирование в среде C++ Builder

Цель работы: приобретение навыков работы с указателями

Характеристики

Тип файла
Документ
Размер
3,06 Mb
Тип материала
Высшее учебное заведение

Список файлов лабораторной работы

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6510
Авторов
на СтудИзбе
302
Средний доход
с одного платного файла
Обучение Подробнее