Организовать обмен компонентов между файлами в соответствии со схемой - C (СИ)

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

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

Заданы файлы f1, f2, f3, f4, f5, компонентами которых являются действительные числа. Организовать обмен компонентов между файлами в соответствии со схемой: f1->f2, f2->f3, f3->f4, f4->f5, f5->f1. Разрешается использовать один промежуточный файл h. У меня есть наработки, но я не могу понять как правильно совершить обмен между файлами. Я уже много разных способов для этого пыталась использовать. Хотя бы объясните как правильно обменивать содержимое файлов - желательно на каком-то примере. Я уже не прошу писать мне программу полностью.
#include <stdio.h>
main()
{float ch1[10], ch2[10], ch3[10], ch4[10], ch5[10];
int n, i;
printf("Vvedite n:\n");
scanf("%i", &n);
FILE *f1;
f1=fopen("g:\\prog13\\f1.txt", "w");
printf("Vvedite chisla\n");
for(i=0;i<n;i++)
{scanf("%f", &ch1[i]);}
for(i=0;i<n;i++)
fprintf(f1, "%8.3f", ch1[i]);
fclose(f1);
FILE *f2;
f2=fopen("g:\\prog13\\f2.txt", "w");
printf("\nVvedite chisla\n");
for(i=0;i<n;i++)
{scanf("%f", &ch2[i]);}
for(i=0;i<n;i++)
fprintf(f2, "%8.3f", ch2[i]);
fclose(f2);
FILE *f3;
f3=fopen("g:\\prog13\\f3.txt", "w");
printf("\nVvedite chisla\n");
for(i=0;i<n;i++)
{scanf("%f", &ch3[i]);}
for(i=0;i<n;i++)
fprintf(f3, "%8.3f", ch3[i]);
fclose(f3);
FILE *f4;
f4=fopen("g:\\prog13\\f4.txt", "w");
printf("\nVvedite chisla\n");
for(i=0;i<n;i++)
{scanf("%f", &ch4[i]);}
for(i=0;i<n;i++)
fprintf(f4, "%8.3f", ch4[i]);
fclose(f4);
FILE *f5;
f5=fopen("g:\\prog13\\f5.txt", "w");
printf("\nVvedite chisla\n");
for(i=0;i<n;i++)
{scanf("%f", &ch5[i]);}
for(i=0;i<n;i++)
fprintf(f5, "%8.3f", ch5[i]);
fclose(f5);
FILE *h;
h=fopen("g:\\prog13\\h.txt", "w");
f1=fopen("g:\\prog13\\h.txt", "r");
.
.
.
.
.
.
for(i=0;i<n;i++){
while (fread(&ch1[i], sizeof(float), 1, f1)!=0)
{
fwrite(&ch1[i], sizeof(float), 1, h);
}
}
fclose(f1);
fclose(h);
}

Решение задачи: «Организовать обмен компонентов между файлами в соответствии со схемой»

textual
Листинг программы
FILE *f; char name[40]; float ch;
for(j=1; j<=5; j++) {
  sprintf(name, "d:\\prog13\\f%d.txt", j);
  f=fopen(name, "w");
  printf("Vvedite chisla\n");
  for(i=0;i<n;i++) {
    scanf("%f", &ch);
    fprintf(f, "%8.3f", ch);
  }
fclose(f);
}

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

  1. Создается переменная типа FILE* и ей присваивается значение, открывающее файл.
  2. Создается массив из 40 символов для хранения имени файла.
  3. Создается переменная типа float для хранения числа с плавающей точкой.
  4. Запускается цикл от 1 до 5.
  5. В каждой итерации цикла формируется строка, представляющая имя файла, путем конкатенации строк и вставки числа в строку.
  6. В каждой итерации цикла открывается файл с помощью функции fopen, которой передаются имя файла и режим открытия w.
  7. Выводится приглашение для ввода чисел.
  8. Запускается внутренний цикл от 0 до n.
  9. В каждой итерации внутреннего цикла считывается число с плавающей точкой с помощью функции scanf.
  10. В каждой итерации внутреннего цикла число записывается в файл с помощью функции fprintf, которой передаются файл, число и формат вывода.
  11. После завершения внутреннего цикла файл закрывается с помощью функции fclose.
  12. После завершения внешнего цикла файлы закрываются, но порядок их закрытия не указан.

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

12   голосов , оценка 4.167 из 5
Похожие ответы