Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК_ПВМ.doc
Скачиваний:
5094
Добавлен:
21.02.2016
Размер:
2.79 Mб
Скачать

Тема 14. Составление программ решения задач с использованием файла произвольного доступа.

Форма проведения: Решение задач.

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

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

Варианты 1-5.

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

 

Запросы:

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

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

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

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

  5. Определить фирму, по которой возбуждалось уголовное дело более 2-х раз.

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

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

  1. Дана строка S и текстовый файл. Добавить строку S в начало и конец файла.

  2. Дан текстовый файл. Удалить из него первую и последнюю строку.

  3. Дан текстовый файл, содержащий более трех строк. Удалить из него три последние строки.

  4. Дано число k (< 10) и текстовый файл, содержащий более k строк. Создать новый текстовый файл, содержащий k последних строк исходного файла.

  5. Дан текстовый файл. Удалить из него пустые строки.

Методические рекомендации по проведению СРСП.

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

Контрольный пример 2. Дан символьный файл f; заменить в нем все точки и запятые плюсами и записать в файлg.

/* пример 1 */

#include <stdio.h>

#include <string.h>

main()

{ file *f, *g; char *s;

f = fopen("f1.txt", "r"); g = fopen("f2.txt", "w");

while (!feof(f))

{ fgets(s, 20, f);

strrev(s);

fputs(s,g); }

fclose(f); fclose(g);

return 0; }

/* пример 2 */

#include <stdio.h>

main()

{ FILE *f, *g; char с;

f = fopen("f1.txt", "r"); g = fopen("f2.txt", "w");

while (!feof(f))

{ c=fgetc(f);

if (c=='.' || c==',') fputc(‘+’, g);

else fputc(c, g); }

fclose(f); fclose(g);

return 0; }

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

Контрольный пример 4. Дан текстовый файл. Удалить из него все символы, кроме “.” и ”,”.

/* пример 3 */

#include <stdio.h>

main(void)

{ FILE *f;

int a, s=0, p=1;

f = fopen("f.txt", "r");

while (!feof(f)

{ fscanf(f, "%d", &a);

s+=a; p*=a; }

fclose(f);

printf("s = %d, p = %d", s, p);

return 0; }

/* пример 4 */

#include <stdio.h>

#include <conio.h>

main ()

{ char c;

FILE *f1,*f2;

f1=fopen("f1.txt","r"); f2=fopen("f2.txt","w+");

while(!feof(f1))

{ c=fgetc(f1);

if ((c=='.')||(c==',')) fputc(c,f2); }

fclose(f1); fclose(f2);

getch(); return 0; }

Контрольный пример 5. Дан файл, содержащий сведения о сотрудниках фирмы: фамилия, имя, адрес, возраст, телефон, зарплата. Вывести сведения о сотрудниках чей возраст превышает 50 лет.

/* пример 5 */

#include <stdio.h>

#include <conio.h>

#define n 3

struct person

{ char fam[20],name[15], address[30];

int age,phone,salary; };

main ()

{ struct person str_pr;

int i; FILE *f;

clrscr();

f=fopen("f.txt","w+");

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

{ printf("%i person\n",i+1);

printf("Fam: "); scanf("%s",str_pr.fam);

printf("Name: "); scanf("%s",str_pr.name);

printf("Address: ");

scanf("%s",str_pr.address);

printf("Age: "); scanf("%i",&str_pr.age);

printf("Phone: "); scanf("%i",&str_pr.phone);

printf("Salary: "); scanf("%i",&str_pr.salary);

printf("\n");

fwrite(&str_pr, sizeof(str_pr), 1, f); }

fclose(f);

f=fopen("f.txt","r");

while (!feof(f))

{

fread(&str_pr,sizeof(str_pr),1,f);

if (str_pr.age>50)

{

printf("Fam: %s\n",str_pr.fam);

printf("Name: %s\n",str_pr.name);

printf("Address: %s\n",str_pr.address);

printf("Age: %i\n",str_pr.age);

printf("Phone: %i\n",str_pr.phone);

printf("Salary: %i\n",str_pr.salary);

}

}

fclose(f);

getch();

return0;

}