File22. Дан файл вещественных чисел. Создать файл целых чисел, содержащий номера всех локальных экстремумов исходного файла в порядке убывания (определение локального экстремума дано в задании File20).
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
#include <stdio.h> int main(void) { char s[255], stemp[255]; FILE *f_in; FILE *f_out,*f_out_temp; printf("File: "); scanf ("%s", s); f_in=fopen(s,"r"); if (f_in == 0){printf("ok");} printf("File_out: "); scanf ("%s", s); sprintf(stemp, "%s~", s); printf("%s\n",stemp); f_out_temp=fopen(stemp,"w+"); float el,el1,el2; fread(&el1,sizeof(float),1,f_in); fread(&el,sizeof(float),1,f_in); el2=el1; int i=1; if (el1!=el) { fwrite(&i, sizeof(int), 1, f_out_temp); } while(!feof(f_in)){ el2=el1; el1=el; fread(&el,sizeof(float),1,f_in); ++i; if (((el<el1) && (el1>el2))||((el>el1) &&(el1<el2))) { fwrite(&i, sizeof(int), 1, f_out_temp); } } if (el2 != el1) { fwrite(&i, sizeof(int), 1, f_out_temp); } fclose(f_in); fclose(f_out_temp); f_out_temp=fopen(stemp,"r"); fseek(f_out_temp , 0 , SEEK_SET ); int len = 1; int temp; while(!feof(f_out_temp)){ fread(&temp, sizeof(int), 1, f_out_temp); ++len; } --len; f_out=fopen(s,"w+"); while (len>1){ fseek(f_out_temp , 0 , SEEK_SET ); i=1; while (!feof(f_out_temp) && (i!=len)){ fread(&temp,sizeof(int),1,f_out_temp); ++i; } fwrite(&temp, sizeof(int), 1, f_out); --len; } fclose(f_out_temp); fclose(f_out); remove(stemp); return 0; } |
Другие задачи из раздела File можно посмотреть здесь.
Комментарии: