Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_stream.doc
Скачиваний:
13
Добавлен:
16.02.2016
Размер:
3.85 Mб
Скачать

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

  1. Что такое поток? Какие преимущества дает потоковый подход к вводу-выводу информации по внешние устройства?

  2. Какие стандартные потоки вам известны? С какими устройствами они связаны по умолчанию?

  3. Как создать собственный поток в программе? Какие режимы доступа к потокам вам известны?

  4. Как осуществляется символьный ввод-вывод в библиотеке stdio?

  5. Что такое текущий указатель потока? Какую роль он играет? Как узнать/изменить позицию указателя?

  6. Для чего предназначен макрос feof? Приведите пример его использования..

  7. Каким образом можно идентифицировать ошибки при работе с потоком?

  8. Проведите сравнительный анализ возможностей вывода массива структур с использованием функций fwrite и fprintf.

  9. Какие средства ввода-вывода предоставляет программисту язык Си++?

Порядок выполнения работы

  1. Ознакомьтесь с теоретическими основами потокового ввода-вывода на языке Си в настоящих указаниях и конспектах лекций.

  2. Получите вариант задания у преподавателя.

  3. Составьте алгоритм решения задачи согласно варианту задания, оформите его в графической форме.

  4. Используя разработанный алгоритм, напишите программу.

  5. Отладьте разработанную программу и покажите результаты работы про­граммы преподавателю.

  6. Составьте отчет по лабораторной работе.

  7. Отчитайте работу преподавателю.

Содержание отчета

Отчет по лабораторной работе должен содержать следующие сведения:

  • название и цель работы;

  • вариант задания;

  • графическую схему алгоритма решения задачи;

  • листинг разработанной программы с комментариями;

- результаты работы программы.

Задание к лабораторной работе №3

Для задачи из лабораторной работы №1 или №2, полученной ранее, реализовать возможность сохранения введенных пользователем данных (содержимого массива структур или списка структур) в файл на диске. Результаты обработки данных также сохранять в файле. При запуске программы предоставлять пользователю выбор – будет он вводить новые данные, или считает данные из файла (название файла должно вводиться пользователем).

Пример выполнения задания к лабораторной работе №4:

Записать в файл несколько структур типа "Книга". Удалить из файла все книги, изданные до указанного года.

#include <stdio.h>

#include <conio.h>

#include <windows.h>

struct book

{

char title[20],author[10];

int year,pages;

};

int main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

char filename[30], ch;

int i=0,n, delYear;

FILE *fp,*temp;

book b,tempb;

printf("Получить данные из файла (1) или с клавиатуры (2)? ");

do

{ch=getche();

}

while(ch!='1' && ch!='2');

temp=fopen("temp","w");

int x=sizeof(book);

if(ch=='2')

{

printf("\nСколько книг?");

scanf("%d",&n);

printf("Название файла для сохранения списка книг?");

scanf("%s",&filename);

fp=fopen(filename,"w+");

if(fp==NULL)

{ printf("Не могу открыть указанный файл");

getch();

return 1;

}

for(i=0;i<n;i++)

{

printf("Введите информацию о книге № %d (название, автор, год издания, кол-во страниц)",i+1);

scanf("%s %s %d %d",b.title,b.author,&b.year,&b.pages);

fwrite(&b,x,1,fp);

}

}

if(ch=='1')

{

printf("\nВ каком файле сохранен список книг? ");

scanf("%s",&filename);

fp=fopen(filename,"r+");

if(fp==NULL)

{ printf("Не могу открыть указанный файл");

getch();

return 1;

}

}

printf("\nКниги до какого года издания удалять? ");

scanf("%d", &delYear);

printf("\nВ файле остаются книги:\n");

fseek(fp,0,SEEK_SET);

i=1;

while(1)

{

fread(&b,sizeof(book),1,fp);

if (feof(fp)) break;

if(b.year>delYear)

{ printf("%d) Название: %15s, автор: %10s, год издания: %4d\n", i, b.title, b.author, b.year);

fwrite(&b,sizeof(book),1,temp);

i++;

}

}

getch();

fclose(fp);

fclose(temp);

remove(filename);

rename("temp",filename);

}

Варианты заданий к лабораторной работе №4.

Вариант №1

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

Вариант №2

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

Вариант №3

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

Вариант №4

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

Вариант №5

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

Вариант №6

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

Вариант №7

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

Вариант №8

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

Вариант №9

Реализовать в программе функцию замену в текстовом файле заданной строки на другую строку, также задаваемую с клавиатуры.

Вариант №10

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

Вариант №11

Написать программу, которая в текстовом файле находит самое короткое предложение и переносит его в конец текста.

Вариант №12

Написать программу, которая в текстовом файле меняет местами два соседних слова.

Вариант №13

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

Вариант №14

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

Вариант №15

Написать программу, которая в текстовом файле находит самое короткое предложение и удаляет его

Вариант №16

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

Вариант №17

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

Вариант №18

Написать программу, которая в текстовом файле меняет местами соседние предложения.

Вариант №19

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

Вариант №20

Написать программу, которая в текстовом файле находит и удаляет рядом стоящие одинаковые слова.

Пример выполнения задания к лабораторной работе №4:

На диске имеется текстовый файл с произвольным именем. В файл words.txtвывести все слова из заданного количества букв (количество букв в слове вводится), каждое в отдельной строке.

Текст программы:

#include<stdio.h>

#include<conio.h>

#include<string.h>

#include<windows.h>

int main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

int wordLength,x=0,i,j=0;

char fileName[20];

printf("Ведите длину слова");

scanf("%d",&wordLength);

printf("Ведите название файла");

scanf("%s",fileName);

FILE *A,*f;

//открываем исходный поток

if (f=fopen(fileName,"r"))

{ char s[100];

A=fopen("d:\\words.txt","w+");

//пока не считаем все строки из потока

while(!feof(f))

{

//считывем строку из потока

fgets(s,100,f);

x=0; //количество символов в очередном слове

i=0;

//пропускаем пробелы и знаки препинания в начале строки

while(s[i]==' '||s[i]==','||s[i]=='\n') i++;

for (;i<=strlen(s);i++)

{

//если очередной символ строки – не пробел, запятая, конец строки – //увеличиваем количество символов в слове

if (s[i]!=' ' && s[i]!=',' && s[i]!='\n') x++;

else

{

//нашли символ, заканчмвающий очередное слово

if (x==wordLength) //если символов в слове насчитали wordLength

{

//записываем все символы слова в файл words.txt

for(j=i-x;j<i;j++)

fprintf(A,"%c",s[j]);

fprintf(A,"\n");j=0;

}

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

while(s[i]==' '||s[i]==',' || s[i]=='\n') i++;

x=1;

}

}

//выводим строку на экран

puts(s);

}

}

else puts("Ошибка открытия файла");

getch(); return 0;

}

Дополнительный пример .

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

#include <stdio.h>

#include <conio.h>

#include <iostream>

using namespace std;

int main()

{

char filename[30],c;

int i=0,n;

FILE *fp,*temp;

cout<<"Enter file name";

cin>>filename;

cout<<"Maximium length of line";

cin>>n;

fp=fopen(filename,"r");

if(fp==NULL)

{

cout<<"Bad file name";

return 1;

}

temp=fopen("temp","w");

while(!feof(fp))

{

c=fgetc(fp);

if (c!='\n')

{

i++;

if (i>n)

{fputc('\n',temp);

i=0;

}

fputc(c,temp);

}

}

fclose(fp);

fclose(temp);

remove(filename);

rename("temp",filename);

getch();

}

Литература

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]