Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Типизированые Файлы

.pdf
Скачиваний:
16
Добавлен:
01.04.2015
Размер:
118.23 Кб
Скачать

Типизированные файлы Пример 1. Запись и считывание одного числа.

#include <stdio.h>

 

 

#include <conio.h>

 

 

#include <iostream.h>

 

 

long a;

 

 

void vvod()

 

 

{ FILE *fo=fopen("2.out","w");

 

 

 

cout<<"a="; cin>>a;

 

 

}

fwrite(&a, sizeof(a), 1, fo);

fclose(fo);

void obr()

 

 

{

FILE *fi=fopen("2.out","r");

 

 

fread(&a, sizeof(a), 1, fi);

 

}

cout<<"a*a="<<a*a<<endl;

fclose(fi);

void main()

 

 

{ clrscr();

 

 

}

vvod(); obr(); getch();

 

 

Пример 2. Работа с массивами.

#include <stdio.h> #include <conio.h> #include <iostream.h> long a[5];

void vvod()

{ FILE *fo=fopen("2.out","w"); int i;

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

{ cout<<i<<": "; cin>>a[i];} fwrite(a, sizeof(a), 1, fo);

} fclose(fo);

void obr()

{ FILE *fi=fopen("2.out","r");

1

 

int s=0;

 

 

fread(a, sizeof(a), 1, fi);

 

for (int i=0;i<5;i++) s+=a[i];

 

for (i=0;i<5;i++) cout<<a[i]<<' ';

 

cout<<endl;

 

 

cout<<"s="<<s<<endl;

}

fclose(fi);

 

void main()

 

{ clrscr();

vvod(); obr(); getch(); }

Пример 3. Работа со структурами.

#include <stdio.h>

 

 

 

#include <conio.h>

 

 

 

#include <iostream.h>

 

 

 

#include <stdlib.h>

 

 

 

long n;

 

 

 

 

 

struct {

char type[20]; int opt, rozn;} mon;

void vvod()

 

 

 

{ FILE

 

*fo=fopen("2.out","a");

 

 

do

 

{

 

cout<<"Наименование товара: "; cin>>mon.type;

 

if (mon.type[0]=='0'){ fclose(fo); break;}

 

cout<<"Розничная цена: "; cin>>mon.rozn;

 

cout<<"Оптовая цена: ";

cin>>mon.opt;

}

fwrite(&mon, sizeof(mon), 1, fo);

} while (1);

 

 

 

void korr()

 

 

 

{ FILE *fo=fopen("2.out","r+");

int i, n;

cout<<"Input nuber record:"; cin>>n;

fseek(fo,n*sizeof(mon),SEEK_SET);

 

{

cout<<n<<":";

fread(&mon, sizeof(mon), 1, fo);

 

cout<<mon.type<<' '<<mon.opt<<' '<<mon.rozn<<'\n';

}fseek(fo,n*sizeof(mon),SEEK_SET); cout<<"Наименование товара: "; cin>>mon.type;

2

cout<<mon.type;
cout<<"Розничная цена: "; cin>>mon.rozn; cout<<"Оптовая цена: "; cin>>mon.opt; fwrite(&mon, sizeof(mon), 1, fo); fclose(fo);

}

 

 

 

void obr()

 

 

{

FILE *fi=fopen("2.out","r");

 

 

while (1)

{ fread(&mon, sizeof(mon), 1, fi);

if (feof(fi)) break;

 

} cout<<mon.type<<' '<<mon.opt<<' '<<mon.rozn<<'\n';

}

fclose(fi);

 

 

void main(){

 

 

while (1)

 

 

{

cout<<"1. Ввод данных\n";

 

 

cout<<"2. Обработка данных\n";

 

 

cout<<"3. Korrection данных\n";

 

cout<<"4. Выход\n"; cout<<"Ваш выбор: "; cin>>n; switch (n){

case 1: vvod();break; case 2: obr();break; case 3: korr();break;

} case 4: exit(0); } getch();

}

3

Задания для решения на компьютере

1.Пусть дан файл целых чисел f. Определите, сколько раз в нем повторяется максимальное значение (за один проход).

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

3.Написать программу содержащую процедуры создания файла с компонентами типа t=array[1..10] of real и обработки созданного файла:

1)определяющего среднее арифметическое записей файла;

2)определяющего наибольшие значения записей;

3)определяющего отдельно,сумму положительных и сумму отрицательных чисел записей.

Программа должна работать под управлением простейшего меню.

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

1.База студент. Структура записи:

²ФИО (40 знаков¿);

²номер курса (1 знак); ² номер группы (1 знак);

²успеваемость 3 экзамена в каждой из 10 сессий;

²форма обучения (целевая, договорная) (1 знак);

²экзамен:

наименование предмета (10 знаков);оценка (1 знак).

2. Телефонный справочник. Структура записи:

² ФИО (40 знаков); ² адрес:

улица (20 знаков);

номер дома (4 знака);

квартира (3 знака);

4

²номер телефона (6 знаков).

3.Каталог файлов. Структура записи:

²имя файла (8 знаков);

²спецификация (3 знака);

²дата создания:

день (2 знака);месяц (2 знака);год (2 знака);

² количество блоков (4 знака).

4. Каталог книг. Структура записи: ² автор (40 знаков);

² название (80 знаков); ² од издания (4 знака);

² специальность (40 знаков).

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

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

базы и записей,

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

2.База "Студент". Занесите в отдельный файл записи из файла Студент, добавив оценки заданной группы за последнюю сессию. Считать, что зимняя сессия сдана, а добавляются оценки за летнюю сессию.

3.База "Студент". Занесите в отдельный файл записи из файла Студент, добавив сведения о новых студентах.

4.База "Студент". Занесите в отдельный файл записи из файла Студент, исключив сведения об отчисленных студентах.

5

Студент считается отчисленным, если он имеет хотя бы одну неудовлетворительную оценку.

5.База "Студент". Из файла Студент занесите в отдельный файл записи об отличниках.

6.База "Студент". Из файла Студент занесите в отдельный файл записи о не успевающих студентах.

7.База "Студент". Подсчитайте средний балл по заданному предмету на заданном курсе.

8.База "Студент". Подсчитайте средний балл каждой группы по заданному номеру курса и средний балл курса.

9.База "Студент". На каждом курсе найдите группу (группы),- в которой больше всего отличников.

10.База "Студент". Занесите в отдельный файл записи из файла Студент о студентах, имеющих не более одной четверки за последнюю сессию.

11.База "Студент". Занесите в отдельный файл записи из файла Студент о студентах 5-го курса, упорядочив их по убыванию сумм баллов за все время обучения (ФИО, балл).

12.База "Студент". Занесите в отдельный файл записи из файла Студент, выполнив перевод студентов на следующий курс. Данные о студентах 5-го удалить.

13.База "Студент". Занесите в отдельные файлы записи о студентах различных форм обучения.

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

15.База "Каталог книг". Занесите в отдельный файл все произведения заданного пользователем автора.

6

16.База "Каталог книг". По заданному значению года издания занесите в отдельный файл сведения о произведениях, изданных в указанном году.

17.База "Каталог книг". По заданной специальности занесите в отдельный файл сведения обо всех изданиях (ФИО, название, год издания).

18.База "Каталог книг". Найдите специальность, по которой имеется наибольшее число книг. Считать, что различных специальностей не более 100.

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

20.База "Каталог файлов". Перепишите его в отдельный файл, упорядочив записи по количеству блоков.

21.База "Каталог файлов". Занесите в отдельный файл записи о файлах с заданной спецификацией.

22.База "Каталог файлов". Занесите в отдельный файл записи о файлах с заданным именем.

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

24.База "Каталог файлов". Найдите такие файлы, которые есть в трех модификациях со спецификациями *.PAS, *.OBJ, *.EXE.

25.База "Телефонный справочник". Выберите и занесите в отдельный файл по заданному адресу (улица, номер дома) сведения об абонентах, имеющих телефоны.

26.База "Телефонный справочник". Выберите и занесите в отдельный файл сведения об абонентах, имеющих телефоны, номера которых начинаются с заданных двух цифр.

27.База "Телефонный справочник". Найдите по ФИО номера телефонов и адреса абонентов.

7

28.База "Телефонный справочник". Найдите, номер АТС (первые две цифры номера телефона), имеющей наибольшее число абонентов.

29.База "Телефонный справочник". По номеру телефона найдите ФИО и адрес владельца.

Домашнее задание

1.Создайте файл целых чисел f. Числа считываются из стандартного устройства ввода. Признаком конца ввода является число 9999.

2.Создайте файл целых чисел, занося в него числа Фибоначчи, не превосходящие заданного числа N.

3.Пусть даны два файла целых чисел f1, и f2. найдите в файле f2 число, самые близкое по величине к минимальному значению файла f1.

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

5.Пусть дан файл целых чисел. Определите, являются ли числа в файле упорядоченными по возрастанию.

6.Пусть дан файл целых чисел. Определите, являются ли числа в файле упорядоченными (по возрастанию или по убыванию).

7.Пусть дан файл, хранящий последовательность целых чисел. Определите, является ли последовательность знакопеременной.

8.Пусть дан файл целых чисел. Выберите наибольшее из них, принадлежащее интервалу [a,b]. Концы интервала a, b вводятся со стандартного устройства ввода.

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

исходный файл: 20 10 4-1-2000 -10 41 62; файл-результат: 34 -3 0 -10 103.

8

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

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

12.Пусть дан файл целых чисел f1. Создайте два новых файла f2 и f3 из положительных и отрицательных чисел соответственно. Если какой-то из созданных файлов окажется пустым, сообщите об этом.

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

исходный файл: : 2 4 3 8 15 -1 -3 10 1; первый файл-результат: f2: 2 4-1 1; второй файл-результат: f3: 3 8 15 -3 10.

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

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

16.Пусть в файлах f1 и f2 целые числа упорядочены по возрастанию. Создайте файл f3, объединив f1 и f2 и сохранив упорядоченность.

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

18. Пусть дан файл целых чисел. Определите наибольшую сумму подряд идущих чисел, образующих возрастающую последовательность.

19.Пусть дан файл целых чисел. Определите, образуют ли числа арифметическую прогрессию.

9

20.Пусть дан файл целых чисел. Значения в нем имеют следующий

смысл: n1 f11 f11 ::: f1n

n2 f21 f21 ::: f2n

. . .

ãäå n1 - количество оценок первого студента, f11 f11 ::: f1n оценки первого студента, n2 количество оценок второго студента, f21 f21 ::: f2n оценки второго студента и т. д.

Задание:

a) найдите номер студента, имеющего наибольшую среднюю оценку;

b) создайте файл вещественных чисел со средними оценками каждого студента.

21. Пусть даны два файла .целых чисел. Определите, совпадают ли они.

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

23. Пусть дан файл целых чисел с диапазоном значений от a до b. Определите, сколько раз встречается каждое значение в файле.

24. Пусть матрица A целых чисел размером 100 £ 100 записана по строкам в файле. Определите, есть ли в ней нулевые строки.

25. Пусть матрица A целых чисел размером 100 £ 100 записана по строкам в файле. Определите, является ли она единичной.

26. Пусть матрица A целых чисел размером 100 £ 100 записана по

строкам в файле. Перенесите в новый файл m-й столбец матрицы (т задается вводом).

27. Пусть матрица A целых чисел размером 100 £ 100 записана по строкам в файле. Определите, упорядочены ли значения m-го столбца по возрастанию (m задается вводом).

28. Пусть матрица A целых чисел размером 100 £ 100 записана

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

10