МІНІСТЕРСТВО ОСВІТИ І НАУКИ, молоді та спорту УКРАЇНИ
Національний аерокосмічний університет ім. М.Є. Жуковського
“Харківський авіаційний інститут”
Кафедра комп’ютерних систем
та мереж
Домашнє завдання №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 |
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;
}
|
№ теста |
Ввод элементов массива |
Результат |
Вывод |
|
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 |
Тест пройден |
алгоритм программа файл двоичный
Программа прошла тестирование: в результате выполнения тестов программа выдала ожидаемые результаты. Программа - работоспособна.