В каждой паре чисел первое, второе, затем третье, четвертое и т.д. переставить элементы по возрастанию - C (СИ) (74777)

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

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

Помогите, программа вроде бы написана правильно, но не работает. исправьте пожалуйста.
//Задан текстовый файл, содержащий последовательность вещественных чисел. 
//В каждой паре чисел первое, второе, затем третье, четвертое и т.д. переставить   элементы по возрастанию. 
//Результирующую последовательность записать в новый текстовый файл. 
#include<stdio.h>
#include<math.h>
#include<conio.h> /*Модуль функций расширения ввода-вывода(в Паскале аналогичный модуль CRT)*/
#include<windows.h>
 
void wait_press_key(char *msg);
void print_array(double *x,int n,char *msg);
void print_array2(double *y,int n,char *msg);
FILE *fout,*f1,*f2,*f3;
int main()
{
    int sym,i,buf,p,n; char *f_name1="TextFile.txt",*f_name2="BinFile.bin";
    int size_f_t,size_f_b;
    double x[10],y[10];
    //Подключение кирилицы в консольном окне
    SetConsoleOutputCP(1251);//Использует для вывода кодовую таблицу 1251
    SetConsoleCP(1251);      //Использует для ввода кодовую таблицу 1251
    //Вводим элементы массива х с консоли в режиме "до конца файла"
    p=1;n=0;
    while(p!=0 && p!=EOF && n<10)
        {p=scanf_s("%lf",&x[n]);
         if(p==1)n++;
        } 
    print_array(x,n,"Исходный массив x");
    wait_press_key("\nДля продолжения нажмите клавишу\n");
    //Создаем текстовый файл и открываем в режиме записи
    if((f1=fopen(f_name1,"wt"))==NULL)
        {
         printf("\nФаил %s не создан\n",f_name1);
         wait_press_key("\nДля завершения программы нажмите любую клавишу\n");
         exit(0);
        }
    //Создаем бинарный файл и открываем в режиме записи
    if((f2=fopen(f_name2,"wb"))==NULL)
        {
         printf("\nФаил %s не создан\n",f_name2);
         wait_press_key("\nДля завершения программы нажмите любую клавишу\n");
         exit(0);
        }
    //function
    for(i=0;i<n;i++)
        if(x[i]>x[i+1])
            buf=x[i];
            x[i]=x[i+1];
            x[i+1]=buf;

    //Сохраняем массив х в тестовом файле
    for(i=0; i<n;i++)
        fprintf(f1,"%8.2lf",x[i]); 
    size_f_t=ftell(f1);
    //Сохраняем массив х в бинарном файле
    fwrite(x,sizeof(double),n,f2);
    size_f_b=ftell(f2);
    printf("\nsize_f_t=%d size_f_b=%d\n",size_f_t,size_f_b);
    wait_press_key("\nДля продолжения нажмите клавишу\n");
 
    //Читаем text  файл в массив y
    rewind(f1);
    fread(y,sizeof(double),n,f1);
    print_array2(y,n,"Значения массива у, считанные иz text файла\n");
 
//Читаем бинарный файл в массив y
    rewind(f2);
    fread(y,sizeof(double),n,f2);
    print_array2(y,n,"Значения массива у, считанные иz бинарного файла\n");
    fclose(f1);
    fclose(f2);
    wait_press_key("\n  Выход");
    return 0;
}
//--------------------
void wait_press_key(char *msg)
{
    printf(msg);
    getch();
}
void print_array2(double *y,int n,char *msg)
{   int i;
    printf("\n%s размером %d\n",msg,n);
    for(i=0; i<n;i++)
        printf("%8.2lf",y[i]); 
}
void print_array(double *x,int n,char *msg)
{   int i;
    printf("\n%s размером %d\n",msg,n);
    for(i=0; i<n;i++)
        printf("%8.2lf",x[i]); 
}

Решение задачи: «В каждой паре чисел первое, второе, затем третье, четвертое и т.д. переставить элементы по возрастанию»

textual
Листинг программы
//Алгоритм с текстовым файлом
#include<stdio.h>
#include<conio.h> 
 
int main()
{
    FILE *fr;
    FILE *fw;
    int p;
    double x1,x2;
    if((fr=fopen("E:\\Programms\\ input.txt","rt"))==NULL)
    {
        printf("Error with opening input.dat file\n");
    }
    else
    {
        if((fw=fopen("E:\\Programms\\ output.txt","wt"))==NULL)
        {
            printf("Error with creating output.txt file\n");
        }
        else
        {
            do
            {
                p=fscanf(fr,"%lf%lf",&x1,&x2);
                if(p==2)
                {
                    if(x1>x2)   fprintf(fw,"%lf %lf ",x2,x1);
                    else        fprintf(fw,"%lf %lf ",x1,x2);
                }
            }while(p==2);
        }
    }
    fclose(fr);
    fclose(fw);
    printf("Look into file output.dat\nFor exit press any key\n");
    _getch();
    return 0;
}

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

Алгоритм работы программы:

  1. Открыть входной файл для чтения (input.txt).
  2. Если файл не удалось открыть, вывести сообщение об ошибке и завершить работу программы.
  3. Открыть выходной файл для записи (output.txt).
  4. Если файл не удалось открыть, вывести сообщение об ошибке и завершить работу программы.
  5. Читать пары чисел из входного файла, пока успешно считывается две строки (два числа).
  6. Если успешно считали две строки, то: a. Если первое число больше второго, записать второе число и первое число в выходной файл через пробел. b. Иначе записать первое число и второе число в выходной файл через пробел.
  7. Закрыть входной и выходной файлы.
  8. Вывести сообщение «Look into file output.dat» и предложить пользователю нажать любую клавишу для выхода.
  9. Вернуть 0, чтобы указать, что программа успешно завершилась.

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


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

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

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