Переписать компоненты файла f в файл g так, чтобы в файле g числа шли в заданном порядке - C (СИ) (74538)

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

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

Дан файл F, содержащий целые числа. Файл F содержит столько же отрицательных чисел, сколько положительных. Используя вспомогательный файл H, переписать компоненты файла F в файл G так, чтобы в файле G числа шли в следующем порядке: два положительных, два отрицательных, два положительных, два отрицательных(предполагается, что число компонент в файле делится на 4). Сомневаюсь в правильности своей программы.Помогите пожалуйста.Выкладываю свои наработки.
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. FILE* Open(const char* name, const char* args) {
  4. FILE* f = (name == NULL) ? tmpfile() : fopen(name, args);
  5. if (f == NULL) {
  6. perror(name);
  7. exit(EXIT_FAILURE);
  8. }
  9. return f;
  10. }
  11. int main() {
  12. const char C1File[] = "1.txt";
  13. const char C2File[] = "2.txt";
  14. const char CMiddleFile[] = "middle.txt";
  15. FILE* f = Open(C1File, "r");
  16. FILE* g = Open(C2File, "w");
  17. FILE* h = Open(CMiddleFile, "w");
  18. int i=0,e=2,k;
  19. while(!feof(f))
  20. {
  21. fscanf_s(f, "%d ", &k);
  22. {
  23. if((k>0) && (i<2) && (e=2))
  24. fprintf(g,"%d ", k);
  25. i++;
  26. else if(k<0)
  27. fprintf(h, "%d ", k);
  28. exit(1);
  29. }
  30. }
  31. while(!feof(h))
  32. {
  33. fscanf(h,"%d", &k);
  34. {
  35. if((k<0) && (i<2) && (e=2))
  36. fprintf(g, "%d", k);
  37. i++;
  38. exit(2);
  39. }
  40. }
  41. exit(3);
  42. fclose(g);
  43. fclose(f);
  44. fclose(h);
  45. return 0;
  46. }

Решение задачи: «Переписать компоненты файла f в файл g так, чтобы в файле g числа шли в заданном порядке»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. FILE* Open(const char* name, const char* args) {
  5.     FILE* f = (name == NULL) ? tmpfile() : fopen(name, args);
  6.  
  7.     if (f == NULL) {
  8.         perror(name);
  9.         exit(EXIT_FAILURE);
  10.     }
  11.  
  12.     return f;
  13. }
  14.  
  15. int main() {
  16.     const char CSourceFile[] = "source.txt";
  17.     const char CResultFile[] = "result.txt";
  18.     FILE* fsrc  = Open(CSourceFile, "r");
  19.     FILE* fdest = Open(CResultFile, "w");
  20.     FILE* ftmp1 = Open(NULL, NULL);
  21.     FILE* ftmp2 = Open(NULL, NULL);
  22.     FILE* ftmp;
  23.  
  24.     int value, cnt;
  25.  
  26.     while ((fscanf(fsrc, "%d", &value)) == 1) {
  27.         ftmp = (value < 0) ? ftmp2 : ftmp1;
  28.         fprintf(ftmp, "%d ", value);
  29.     }
  30.  
  31.     rewind(ftmp1);
  32.     rewind(ftmp2);
  33.     ftmp = ftmp2;
  34.  
  35.     while (!feof(ftmp1) || !feof(ftmp2)) {
  36.         ftmp = (ftmp == ftmp1) ? ftmp2 : ftmp1;
  37.         cnt = 2;
  38.         while (cnt-- && (fscanf(ftmp, "%d", &value) == 1)) {
  39.             fprintf(fdest, "%d ", value);
  40.         }
  41.     }
  42.  
  43.     fclose(ftmp2);
  44.     fclose(ftmp1);
  45.     fclose(fdest);
  46.     fclose(fsrc);
  47.  
  48.     return EXIT_SUCCESS;
  49. }

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


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

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

14   голосов , оценка 4.143 из 5

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

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

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