#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
void gen(int);
void obrab(void);
void out(int);
void enter(int);
char FILENAME[257]= {0};
FILE *filein,*fileout;
int main(int argc, char *argv[])
{
int i,n=0,key=0;
double a,p;
setlocale(LC_CTYPE,"Russian");
if(argc==1){
printf("Введите имя файла для обработки\n");
scanf("%s", FILENAME);
}
if(argc==2){
strcpy(FILENAME,argv[1]);
}
if (!(filein = fopen(FILENAME, "rb"))){
printf("Файл не существует\n");
system("PAUSE");
}
else {while(fread(&a, sizeof(double), 1, filein))
n++;
fclose(filein);
}
system("PAUSE");
while(key!=52){
system("CLS");
printf("Меню:\n\t1.Создание файла\n\t2.Вывод содержимого файла\n\t3.Обработка файла\n\t4.Выход.\n");
key=getchar();
if (key==49) {
printf("Введите колличество вещественных чисел: ");
do fflush(stdin);
while (!scanf("%d",&n));
enter(n);
}
if (key==50)
out(n);
if (key==51){
if (n>11)
obrab();
else {
printf("Файл не нуждается в обработке\n");
system("PAUSE");
}
}
}
return 0;
}
void enter(int n)
{
double a;
int k=n;
if (!(filein = fopen(FILENAME, "wb"))){
printf("Ошибка создания файла\n");
system("PAUSE");
return;
}
system("CLS");
printf("Введите %d чисел: \n", n);
while(n){
do fflush(stdin);
while(!(scanf("%lf",&a)));
fwrite(&a,sizeof(double),1,filein);
n--;
}
fclose(filein);
printf("Файл из %d чисел успешно создан\n", k);
system("PAUSE");
}
void obrab(void)
{
int i, kol, c;
FILE *filein;
double m, *p;
if (!(filein=fopen(FILENAME, "r+b"))){
printf("Ошибка отрытия файлов\n");
system("PAUSE");
return;
}
fseek(filein,0, SEEK_END);
kol=ftell(filein)/sizeof(double);
rewind(filein);
if(kol>11){
// Сохраняем последний элемент
fseek(filein,-sizeof(double), SEEK_END);
fread(&m,sizeof(double),1, filein);
// Создаем динамаческий массив
fseek(filein,10*sizeof(double), SEEK_SET);
c = kol-11;
p=(double*)malloc(c*sizeof(double));
fread(p,sizeof(double),c, filein);
// Записываем элементы после 10
fseek(filein,10*sizeof(double), SEEK_SET);
fwrite(&m,sizeof(double),1, filein);
fwrite(p,sizeof(double),c, filein);
}
if (fclose(filein)==EOF){
printf("Невозможно закрыть файлы\n");
system("PAUSE");
return;
}
printf("Обработка успешно завершена\n");
system("PAUSE");
}
void out(int n)
{
FILE *file;
double a;
if (!(file=fopen(FILENAME, "rb"))){
printf("Ошибка открытия файла\n");
system("PAUSE");
return;
}
system("CLS");
printf("Содержимое файла\n");
while(fread(&a, sizeof(double), 1, file))
printf("%17.2lf\n", a);
printf("\n");
fclose(file);
system("PAUSE");
}