Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с файлами и структурными переменными, Две небольших задачки 
:(
    Опции темы
Josh
Дата 6.5.2006, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 6.5.2006

Репутация: нет
Всего: нет



Очень прошу помогите написать задачку на чистом Cи:

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

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

Это сообщение отредактировал(а) Josh - 6.5.2006, 16:53
PM MAIL   Вверх
Josh
Дата 6.5.2006, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 6.5.2006

Репутация: нет
Всего: нет



Виноват правила не внимательно читал  smile 
Одна топик - одна задача. Исправил. 

Это сообщение отредактировал(а) Josh - 6.5.2006, 16:54
PM MAIL   Вверх
Rockie
Дата 7.5.2006, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



Код
#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 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Josh
Дата 7.5.2006, 03:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 6.5.2006

Репутация: нет
Всего: нет



А можно записывать числа в файл из программы? 
PM MAIL   Вверх
gepard
Дата 7.5.2006, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2477
Регистрация: 29.2.2004

Репутация: 2
Всего: 40



Да, можно:
Код

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


--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
Josh
Дата 7.5.2006, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 6.5.2006

Репутация: нет
Всего: нет



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

#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;
}
 
PM MAIL   Вверх
gepard
Дата 7.5.2006, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2477
Регистрация: 29.2.2004

Репутация: 2
Всего: 40



Цитата

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

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

Это сообщение отредактировал(а) gepard - 7.5.2006, 13:43


--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
Rockie
Дата 7.5.2006, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



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

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) и поставь обратно пробелы между строчками =) 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Josh
Дата 7.5.2006, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 6.5.2006

Репутация: нет
Всего: нет



Rockie БЛАГОДАРСТВУЮ!!! 
PM MAIL   Вверх
Josh
Дата 10.5.2006, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 6.5.2006

Репутация: нет
Всего: нет



 Одну вещь упустил. Подскажите пожалуйста, как задавать имя файла параметром при запуске программы. Т.е к примеру "C:\prog.exe myfile". 
PM MAIL   Вверх
Josh
Дата 10.5.2006, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 6.5.2006

Репутация: нет
Всего: нет



Это вообще реализуемо ??? 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0510 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.