В каждой паре чисел первое, второе, затем третье, четвертое и т.д. переставить элементы по возрастанию - 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; }
Объяснение кода листинга программы
Алгоритм работы программы:
- Открыть входной файл для чтения (input.txt).
- Если файл не удалось открыть, вывести сообщение об ошибке и завершить работу программы.
- Открыть выходной файл для записи (output.txt).
- Если файл не удалось открыть, вывести сообщение об ошибке и завершить работу программы.
- Читать пары чисел из входного файла, пока успешно считывается две строки (два числа).
- Если успешно считали две строки, то: a. Если первое число больше второго, записать второе число и первое число в выходной файл через пробел. b. Иначе записать первое число и второе число в выходной файл через пробел.
- Закрыть входной и выходной файлы.
- Вывести сообщение «Look into file output.dat» и предложить пользователю нажать любую клавишу для выхода.
- Вернуть 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д