Лабораторная работа №6 Тема: Потоковый ввод-вывод в языке С++. Цель: Изучение принципов работы с файлами через механизм потокового ввода-вывода на языке С++, приобретение практических навыков работы с файлами в С++. 1. 2. 3. 4. Задания для самостоятельного выполнения. Методические указания. Пример выполнения задания. Рейтинговый контроль. 1. Задания для самостоятельного выполнения Вариант №1 Написать программу, которая считывает текст из файла и выводит на экран предложения, содержащие максимальное количество знаков пунктуации. Вариант №2 Написать программу, которая считывает текст из файла и выводит на экран все его предложения в обратном порядке. Вариант №3 Написать программу, которая считывает текст из файла и выводит на экран сначала вопросительные, затем повествовательные предложения. Вариант №4 Написать программу, которая считывает текст из файла и выводит его на экран, заменив каждую первую букву слов, начинающихся с гласной буквы на введённый с клавиатуры символ. Вариант №5 Написать программу, которая считывает текст из файла и выводит на экран только те строки в которых встречаются цифры. Вариант №6 Написать программу, которая считывает текст из файла и выводит на экран слова текста, начинающиеся и оканчивающиеся на гласные буквы. Вариант №7 Написать программу, которая считывает текст из файла и выводит на экран только предложения, состоящие из заданного количества слов. Вариант №8 Написать программу, которая считывает текст из файла и определяет, сколько в нём слов, состоящих не более чем из четырёх слов. Вариант №9 Написать программу, которая считывает текст из файла и выводит на экран только предложения в которых нет запятых. Вариант №10 Написать программу, которая считывает текст из файла и выводит на экран только строки содержащие заданное число. Вариант №11 Написать программу, которая считывает текст из файла и выводит на экран слова, начинающиеся с гласной буквы. Вариант №12 Написать программу, которая считывает текст из файла и выводит на экран меняя местами два соседних слова. 2. Методические указания Для выполнения данной лабораторной работы необходимо изучить теоретический материал по теме «Файлы» Для взаимодействия с устройством ввода/вывода программист должен создать новый поток и связать его с целевым устройством и осуществлять операции ввода/вывода работая с потоком. Поток–некая совокупность байт пересылаемая между некоторым устройством ввода/вывода и оперативной памятью. Для создания потока: FILE*fopen(char*filename,char*node); Режим открытия потока Состоит из 2-х частей: 1)Режим доступа 2)Тип потока Режим доступа Используются английские буквы r, w, a. r–открыть для чтения(файл должен существовать) w–режим открытия на запись(если файл не существует то создается, если существует, то обнуляется) a–открытие потока на дозапись(файл должен существовать) r+–открытие существующего файла на чтение и запись w+–открытие файла на чтение и запись(если файл не существует то создается, если существует, то обнуляется) Тип потока t–текст b–двоичный Пример: … FILE*fp; if((fp=fopen(“tmp.dat”,”w+”))==NULL) printf(“Ошибка открытия”); else {//работа с файлом … fclose(fp); } Команды fcloseall(); –закрывает все потоки. feof–возвращает 0 если достигнут конец строки fseek–позволяет перемещать курсор fseek(FILE*stream, int offset, int base); смещение на offset байт относительно base SEEK_SET-начало потока SEEK_END-конец потока SEEK_CUR-текущее положение ferror(FILE*stream)–возвращает ненулевое значение если возникла ошибка при работе с потоком fputc(char*str, FILE*stream)-вставляет(записывает) в поток строку str. Данная лабораторная работа предусматривает в качестве контроля отчет в печатном виде и его защита Отчет должен включать в себя: 1. 2. 3. 4. Текст задания Блок – схему Программный код с комментариями Примеры рез-та работы программы. 3. Пример выполнения задания: На диске имеется текстовый файл с произвольным именем. В файл A.TXT вывести все слова из заданного количества букв (количество букв в слове вводится), каждое в отдельной строке. Текст программы: #include<stdio.h> #include<conio.h> #include<iostream.h> #include<string.h> main() { int c,x=0,i,j=0; cout<<"BBEDITE DLINY CLOBA"; cin>>c; FILE *A,*f; if (f=fopen("C:\\f.txt","r")) { char s[100]; A=fopen("C:\\A.txt","w+"); fgets(s,100,f); for (i=0;i<=strlen(s);i++) { if (s[i]!=' ') x++; if (s[i]==' '){if (x==c) { for(j=i-x;j<x;j++) {fprintf(A,"%c",s[j]);} fprintf(A,"\n");j=0; } x=0;} } puts(s); } else puts("error"); getch();return 0; } Начало Ввод c fopen("C:\\f.txt","r") i=1 s[i]!=’ ‘ x++ s[i]==’ ‘ x==c j=i-x Вывод s[j] j=0 x=0 x strlen(s) Вывод слов “Error” Конец 4. Рейтинговый контроль. Выполнение задания в аудитории Отчет лабораторной работы Максимум за работу Минимум за работу 2 балла 2 балла 4 балла 0 баллов