Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > Работа с файлами и структурными переменными


Автор: Josh 6.5.2006, 15:25
Очень прошу помогите написать задачку на чистом Cи:

Дан файл f, содержащий действительные числа. Вычислить сумму наибольшего и наименьшего из чисел, записанных в файле.

Буду крайне признателен за помощь !  

Автор: Josh 6.5.2006, 16:50
Виноват правила не внимательно читал  smile 
Одна топик - одна задача. Исправил. 

Автор: Rockie 7.5.2006, 01:42
Код
#include <stdio.h>
#include <conio.h>

char file[] = "f.txt";

int CountLines(){                              // COUNT LINES IN FILE
FILE *inp_file = fopen(file,"r");
 int not_emty_line = 0, lines = 0;
   do {not_emty_line = 0;
       while(fgetc(inp_file)!='\n' && !feof(inp_file)) not_emty_line=1;
       if(not_emty_line) lines++;
      }while(!feof(inp_file));
 fclose(inp_file);
 return (lines);
}

int main(){
FILE *inp_file;     //pointer to file
float  temp = 0,
       min_number = 0,
       max_number = 0,
       sum = 0,
       lines = 0;

 if((inp_file = fopen(file,"r")) == NULL)  // if there is no file
  { perror(file);
    getch();
    return 1;
  }

 lines = CountLines();     // how much lines (numbers) in file

 fscanf(inp_file,"%f",&max_number); // read first element and
 min_number = max_number;           // it will be min and max
 fseek(inp_file, 0, SEEK_SET);      // set cursor to begin

 for(int i=0;i<lines;i++)
  { fscanf(inp_file, "%f", &temp);  // READ NUMBERS
    printf("%.2f\n",temp);          // PRINT NUMBERS
    if(temp > max_number) max_number=temp; // search max
    if(temp < min_number) min_number=temp; // search min
  }
  sum = min_number + max_number;

  printf("\n%.2f + %.2f = %.2f",max_number,min_number,sum);

fclose(inp_file);
getch();
return 0;
}


в f.txt пишешь так:
19
-6
13
67 

Автор: Josh 7.5.2006, 03:25
А можно записывать числа в файл из программы? 

Автор: gepard 7.5.2006, 08:24
Да, можно:
Код

...
float somevalue = 0.5f;
FILE* file = fopen("file.txt", "w");
fprintf(file, "%f\n", somevalue);
...
 

Автор: Josh 7.5.2006, 12:52
Сделал так, ругается, говорит файл не создан. Может я вопрос неправильно поставил... Можно ли из программы создать файл и записать внего любое количество чисел, а затем обработать???
Код

#include <stdio.h>
#include <conio.h>
char file[] = "f.txt";
int CountLines(){                              // COUNT LINES IN FILE
FILE *inp_file = fopen(file,"r");
float somevalue = 0.5f;
FILE* file = fopen("file.txt", "w");
fprintf(file, "%f\n", somevalue); 
int not_emty_line = 0, lines = 0;
   do {not_emty_line = 0;
       while(fgetc(inp_file)!='\n' && !feof(inp_file)) not_emty_line=1;
       if(not_emty_line) lines++;
      }while(!feof(inp_file));
 fclose(inp_file);
 return (lines);
}
int main(){
FILE *inp_file;     //pointer to file
float  temp = 0,
       float somevalue = 0.5f;
       min_number = 0,
       max_number = 0,
       sum = 0,
       lines = 0;
 if((inp_file = fopen(file,"r")) == NULL)  // if there is no file
  { perror(file);
    getch();
    return 1;
  }
 lines = CountLines();     // how much lines (numbers) in file
 fscanf(inp_file,"%f",&max_number); // read first element and
 min_number = max_number;           // it will be min and max
 fseek(inp_file, 0, SEEK_SET);      // set cursor to begin
 for(int i=0;i<lines;i++)
  { fscanf(inp_file, "%f", &temp);  // READ NUMBERS
    printf("%.2f\n",temp);          // PRINT NUMBERS
    if(temp > max_number) max_number=temp; // search max
    if(temp < min_number) min_number=temp; // search min
  }
  sum = min_number + max_number;
  printf("\n%.2f + %.2f = %.2f",max_number,min_number,sum);
fclose(inp_file);
getch();
return 0;
}
 

Автор: gepard 7.5.2006, 13:28
Цитата

FILE *inp_file = fopen(file,"r");
float somevalue = 0.5f;
FILE* file = fopen("file.txt", "w");

Не видел никогда, чтобы в качестве имени указывался другой указатель на FILE.
Она не открывает, потому что ты сначала пытаешься открыть файл через указатель file, а потом только указателю file присваиваешь значение открытого файла.
Вроде так. 

Автор: Rockie 7.5.2006, 14:52
убери это из функции, которая считает строчки в файле. эта функция для того, чтобы знать сколько чисел считывать. она готкрывает файл считает и благополучно закрывает. также как и запись..

1) между третьей строчкой и функцией CountLines дописываешь
Код
void WriteToFile(){
FILE* inp_file = fopen(file, "w");       // OPEN FOR WRITE
float somevalue = 0;
int n = 0;                               // number of values
printf("how many values? ");
scanf("%d",&n);
for(int i=0;i<n;i++)
  {  printf("value =  ");
     scanf("%f",&somevalue);
     fprintf(inp_file, "%f\n", somevalue);// write it to file
  }
  fclose(inp_file);
}


2) в main() ниже объявлений переменных дописываешь
   WriteToFile();
3) и поставь обратно пробелы между строчками =) 

Автор: Josh 7.5.2006, 19:04
Rockie БЛАГОДАРСТВУЮ!!! 

Автор: Josh 10.5.2006, 15:03
 Одну вещь упустил. Подскажите пожалуйста, как задавать имя файла параметром при запуске программы. Т.е к примеру "C:\prog.exe myfile". 

Автор: Josh 10.5.2006, 16:35
Это вообще реализуемо ??? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)