Создать файл f, компонентами которого являются 10 целочисленных массивов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите написать. Создать файл f, компонентами которого являются 10 целочисленных массивов a1,.., a10, заполненных случайными числами. Требуется преобразовать каждый из массивов, заменив наибольший элемент нулем. Полученные массивы должны быть записаны в тот же самый файл f. Разрешается использовать вспомогательный файл g.

Решение задачи: «Создать файл f, компонентами которого являются 10 целочисленных массивов»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. #define NUM_OF_ARRAYS 10
  6. #define SIZE_OF_ARRAY 12
  7.  
  8. int* createArray(size_t sz);
  9. void fillArray(int* a, size_t sz);
  10. int* readArray( FILE* file, size_t sz);
  11. void writeArray(FILE* file, int* a, size_t sz);
  12. int max(int *a, size_t sz);
  13. void replaceMax(int *a, size_t sz);
  14. void printArray(int* a, size_t sz);
  15. void check_file(FILE* file);
  16. void check_array(int* a);
  17. void createFile(FILE* file, const char *fn);
  18. void modifyFile(FILE *f);
  19.  
  20. int main(){
  21.     FILE *f=NULL;
  22.     srand(time(0));
  23.     createFile(f, "data.dat");
  24.     puts("----------------------------------");
  25.     modifyFile(f);
  26.     return 0;
  27.     }
  28.    
  29. void modifyFile(FILE *file){
  30.     size_t i=0, n=SIZE_OF_ARRAY;
  31.     long rpos, wpos;
  32.     file=fopen("data.dat", "r+b");
  33.     check_file(file);
  34.     for(i=0; i<NUM_OF_ARRAYS; ++i){
  35.         wpos=ftell(file);
  36.         int *b=readArray(file, n);
  37.         check_array(b);
  38.         rpos=ftell(file);
  39.         replaceMax(b,n);
  40.         fseek(file, wpos, SEEK_SET);
  41.         writeArray(file, b, n);
  42.         fseek(file, rpos, SEEK_SET);
  43.         free(b);
  44.     }
  45.     rewind(file);
  46.     for(i=0; i<NUM_OF_ARRAYS; ++i){
  47.         int *b=readArray(file, n);
  48.         check_array(b);
  49.         printArray(b,n);
  50.         free(b);
  51.     }
  52. }
  53.  
  54.  
  55. void createFile(FILE* file, const char *fn){
  56.     size_t i=0;
  57.     size_t n=SIZE_OF_ARRAY;
  58.     file=fopen(fn, "wb");
  59.     check_file(file);
  60.     for(i=0; i<NUM_OF_ARRAYS; ++i){
  61.         int *a=createArray(n);
  62.         printArray(a,n);
  63.         writeArray(file, a, n);
  64.         free(a);
  65.     }
  66.     fclose(file);
  67. }
  68.    
  69. void check_array(int* a){
  70.     if(!a){
  71.         puts("No memory.");
  72.         exit(EXIT_FAILURE);
  73.         }
  74.     }
  75.    
  76. void check_file(FILE* file){
  77.     if(!file){
  78.         perror ("file not found");
  79.         exit(EXIT_FAILURE);
  80.         }
  81.     }
  82. void printArray(int *a, size_t sz){
  83.     size_t i=0;
  84.     for(i=0; i<sz;++i){
  85.         printf("%6d", *(a+i));
  86.         }
  87.     puts("");
  88.     }
  89.  
  90. int* createArray(size_t sz){
  91.     int *a=(int*)malloc(sz*sizeof(int));
  92.     check_array(a);
  93.     fillArray(a, sz);
  94.     return a;
  95.     }
  96.    
  97. void fillArray(int *a, size_t sz){
  98.     size_t i=0;
  99.     for(i=0; i<sz;++i){
  100.         a[i]=rand()%100+1; // 0..99
  101.     }
  102. }
  103.    
  104. int* readArray( FILE *file, size_t sz){
  105.     int *arr=(int*)malloc(sz*sizeof(int));
  106.     check_array(arr);
  107.     fread(arr, sizeof(int), sz, file);
  108.     return arr;
  109. }
  110.  
  111. void writeArray(FILE *file, int* a, size_t sz){
  112.     fwrite(a, sizeof(int), sz, file);
  113.     }
  114.  
  115. int max(int *a, size_t sz){
  116.     size_t i=0;
  117.     int max=a[i];
  118.     for (i=1; i<sz; ++i){
  119.         if(max<a[i])
  120.             max=a[i];
  121.     }
  122.     return max;    
  123. }

Объяснение кода листинга программы

Код представляет собой программу для работы с файлом data.dat, который содержит 10 массивов по 12 целых чисел. В основной функции создается файл data.dat, если он не существует, и открывается для чтения и записи. Затем в цикле создаются 10 массивов, заполняются случайными числами от 1 до 100, записываются в файл, затем считываются обратно, проверяются на корректность заполнения, выводится на экран и освобождается память. Далее в функции modifyFile в цикле сначала считываются все массивы из файла, затем заменяется максимальное значение в каждом массиве на следующее по порядку, после чего обновленные массивы записываются обратно в файл. В конце программы выводится сообщение о успешном выполнении.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.917 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы