Работа с бинарными файлами
МІНІСТЕРСТВО
ОСВІТИ І НАУКИ, молоді та спорту УКРАЇНИ
Національний аерокосмічний
університет ім. М.Є. Жуковського
“Харківський авіаційний
інститут”
Кафедра комп’ютерних систем
та мереж
Домашнє завдання №2
з дисципліни “Обчислювальна
техніка та програмування”
Робота з бінарними файлами
Виконав студент гр. 516Б Момот О.О.
Перевірив ст. викладач каф. 503 Дужа В. В.
2013
1. Порядок выполнения работы
Написать программу для создания исходного двоичного файла
чисел (тип чисел указан в варианте) с произвольным количеством элементов.
Предусмотреть возможность задания количества элементов и их значения двумя
способами: с клавиатуры (до 10 элементов); с помощью датчика случайных чисел
(свыше 10 элементов). Исходные данные задать, учитывая специфику конкретного
варианта. Реализовать задание в соответствии с вариантом. Результат вычислений
и содержимое исходного файла вывести на экран, если количество элементов в
исходном файле не более 10, а если больше, то результаты вывести в текстовый
файл.
Прочитать из файла действительные восьмибайтные элементы, подсчитать
общее количество элементов файла, а также заменить в файле:
. Все отрицательные элементы на среднее арифметическое всех положительных
элементов файла.
. Алгоритм
программы
. Тестовые
наборы
№ теста
|
Ввод элементов
массива
|
Ожидаемый результат
|
1
|
Размер 5 : -1 -2 -3 -4 5
|
5: 5 5 5 5 5
|
2
|
Размер 5: 1 2 3 -4 -5
|
5: 1 2 3 2 2
|
3
|
Размер 5: 1 1 1 -2 -3
|
5: 1 1 1 1 1
|
4. Код программы
1 #include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <windows.h>
#include <time.h>
#include <string.h>
#define MAX 100
int main(void)
{
FILE *fd,*ft;
char fname[50];
printf("Input name
file: ");
gets(fname);
fd=fopen(fname,"wb+");
if (fd==NULL)
{
printf("Error
in the name file - %s\n",fname);
return 0;
}
int mas[MAX];
int size;
int menu, menu2;
printf("Menu 1\n1 -
Manual input size of array\n2 - Random input size of array\nEnter: ");
while(scanf("%i",
&menu2) != 1 || menu2 >= 3 || menu2 <= 0)
{
printf("Error!
Input correct data: ");
fflush stdin;
}
switch(menu2)
{
case 1:
printf("Input size array: ");
while(scanf("%i",
&size) != 1 || size == 0 || size > 10)
{
printf("Error!
Input correct data: ");
fflush
stdin;
}
break;
case 2: srand(time
(NULL));
int a, b;
printf("Input
first of range: ");
while(scanf("%i",
&a) != 1 || a == 0)
printf("Error!
Input correct data: ");
fflush
stdin;
}
printf("Input
end of range: ");
while(scanf("%i",
&b) != 1 || b == 0)
{
printf("Error!
Input correct data: ");
fflush
stdin;
}
size = rand()%(b
- a + 1) + a;
break;
}
printf("Menu 2\n1 -
Manual input array\n2 - Random input array\nEnter: ");
while(scanf("%i",
&menu) != 1 || menu >= 3 || menu <= 0)
{
printf("Error!
Input correct data: ");
fflush stdin;
}
switch(menu)
{
case 1:
printf("Input
elements of array: ");
for(int i = 0; i
< size; i++)
{
scanf("%d",
&mas[i]);
}
fwrite (mas,
sizeof(double), size, fd);
break;
case 2:
srand(time
(NULL));
int a, b;
printf("Input
first of range: ");
while(scanf("%i",
&a) != 1 || a == 0)
{
printf("Error!
Input correct data: ");
fflush
stdin;
}
printf("Input
end of range: ");
while(scanf("%i",
&b) != 1 || b == 0)
{
printf("Error!
Input correct data: ");
fflush
stdin;
}
for (int i = 0;
i < size; i++)
{
mas[i]
= rand()%(b - a + 1) + a;
}
printf("Elements
of array:\n");
for(int i = 0; i
< size; i++)
{
printf("%d
", mas[i]);
}
fwrite (mas,
sizeof(double), size, fd);
printf("\n");
break;
}
fclose(fd);
fd=fopen(fname,"rb+");
int i = 0, n, mas2[MAX],
mas3[MAX];
double sred, sum = 0, k =
0;
n = fread (mas2,
sizeof(double), size, fd);
for(int j=0; j<n; j++)
mas3[j]=mas2[j];
while(i < n)
{
if(mas2[i]>0)
{
sum =
sum + mas2[i];
k++;
}
}
sred = sum/k;
i = 0;
if (k != 0)
while(i < n)
{
if(mas2[i]<0)
mas2[i]
= sred;
i++;
}
if (n > 10)
{
printf("Answer
writing in the 'answer.txt'\n");
ft=fopen("answer.txt","wt");
fprintf(ft,"The
contents of the source file:\n");
for(int j=0;
j<n; j++)
fprintf(ft,
"%d ", mas3[j]);
fprintf(ft,"\n");
fprintf(ft,"Result:\n");
for(int j=0;
j<n; j++)
fprintf(ft,
"%d ", mas2[j]);
fprintf(ft,"\n");
fprintf(ft,"Number
of elements: %i", n);
fclose(ft);
}
else
{
printf("The
contents of the source file:\n");
for(int i = 0; i
< n; i++)
{
printf("%d
", mas3[i]);
}
printf("\n");
printf("Result:\n");
for(int i = 0; i
< n; i++)
{
printf("%d
", mas2[i]);
}
printf("\n");
printf("Number
of elements: %i", n);
printf("\n");
}
fclose(fd);
system("pause");
return 0;
}
5.
Результат работы программы
№ теста
|
Ввод элементов
массива
|
Результат
|
Вывод
|
1
|
Размер 5 : -1 -2 -3 -4 5
|
5: 5 5 5 5 5
|
Тест пройден
|
2
|
Размер 5: 1 2 3 -4 -5
|
5: 1 2 3 2 2
|
Тест пройден
|
3
|
Размер 5: 1 1 1 -2 -3
|
5: 1 1 1 1 1
|
Тест пройден
|
алгоритм программа файл двоичный
. Вывод о
работоспособности программы
Программа прошла тестирование: в результате выполнения тестов программа
выдала ожидаемые результаты. Программа - работоспособна.