Форум программистов, компьютерный форум CyberForum.ru

Построчное чтение и обработка данных из файла. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 47, средняя оценка - 4.85
Haze23
0 / 0 / 0
Регистрация: 13.08.2010
Сообщений: 4
13.08.2010, 21:53     Построчное чтение и обработка данных из файла. #1
Здравствуйте, я новичок в программировании и мне нужно решить следующую задачу, для решения которой требуется читать данные из файла построчно.

Задача из учебника Скиена "Олимпиадные задачи по программированию".

Название 3n+1.

Вот её описание:
"Рассмотрим следующий алгоритм генерации последовательности чисел. Начнем с целого числа n. Если n четно, то поделим на 2. Если n нечетно, то умножим на 3 и добавим 1. Будем повторять этот процесс с новыми полученным n, пока n не станет равным 1. Например, для n = 22 будет сгенерирована след. посл. чисел:
22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
Для данного n длиной цикла n будем называть число сгенерированных чисел до и включая 1. В приемере, приведенном выше, длина цикла 22 равна 16. Для двух заданных чисел i и j вы должны определить максимальную длину цикла для всех чисел между i и j, включая обе конечные точки.

Входные данные:
Входные данные будут состоять из серии пар целых чисел i и j, одна пара чисел в строке. Все целые числа будут меньше 1000000 и больше 0.

Выходные данные:
Для каждой пары чисел i и j выведите i, j в том порядке, в каком они были введены, и после этого выведите максимальную длину цикла для всех целых чисел между i и j, включая сами i и j. Эти три числа должны быть разделены одним пробелом, все три числа в одной строке, и для каждой строки входных данных должна быть одна строка выходных данных."

Пример входных данных:
1 10
100 200
201 210
900 1000

Пример выходных данных:
1 10 20
100 200 125
201 210 89
900 1000 174

Вот, что мне удалось написать.

C++
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
#include <iostream>
#include <conio.h>
 
using namespace std;
 
int w;
void funcN(int i,int j)
{
    cout<<i<<' '<<j<<' ';
    int l;
    int n;
    int d;
    int t = 0;
        for(l=i;l<=j;l++)
    {
        n=l;
        d=1;
        while(n!=1)
        {
            if(n%2==0)
            {
                n=n/2;
            }
            else
            {
                n=(3*n) + 1;
            }
            d++;
        }
        if(d > t)
        {
            t=d;
            w=t;
        }
    }
    cout<<t<<' ';
};
 
int main()
{
    int i,j;
    FILE *fin, *fout;
 
    fin=fopen("input.txt","r");
    if(fin == NULL || (fout = fopen("output.txt", "w")) == NULL) {
        printf("Error.\n");
        return 1;
    }
    
    fscanf(fin, "%i %i",&i, &j);
    funcN(i,j);
    fprintf(fout, "%i %i %i",i, j, w);
    
    fclose(fin);
    fclose(fout);
 
    _getch();
 
    return 1;
}
Работает программа правильно, но считывает только первую строку из файла. Как сделать так, чтобы она построчно считывала и обрабатывала строки из файла "input.txt", а затем записывала их в output.txt?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2010, 21:53     Построчное чтение и обработка данных из файла.
Посмотрите здесь:

Построчное чтение из файла C++
построчное чтение из файла C++
C++ Построчное чтение из файла!
C++ построчное чтение из файла
Построчное чтение файла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
13.08.2010, 22:10     Построчное чтение и обработка данных из файла. #2
Haze23, Перед этим.

C++
1
2
3
        fscanf(fin, "%i %i",&i, &j);
        funcN(i,j);
        fprintf(fout, "%i %i %i",i, j, w);
Ставите
C++
1
2
3
4
5
6
while(!feof(fin))
{
//После fprintf 
//А еще для удобства после fprintf, но до конца цикла можно написать
   fprintf(fout, "\n");
}
Haze23
0 / 0 / 0
Регистрация: 13.08.2010
Сообщений: 4
13.08.2010, 22:29  [ТС]     Построчное чтение и обработка данных из файла. #3
Спасибо большое, всё заработало.

Не могли бы вы объяснить, каким образом работает функция feof, если вас не затруднит?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
13.08.2010, 22:32     Построчное чтение и обработка данных из файла. #4
Haze23, Читает файл пока не встречен конец файла. EOF вроде как равен -1.
Haze23
0 / 0 / 0
Регистрация: 13.08.2010
Сообщений: 4
13.08.2010, 22:37  [ТС]     Построчное чтение и обработка данных из файла. #5
Lavroff, т.е. сначала программа считывает первые два символа, затем следующие два и так до конца файла? Просто не понятно, как программа "запоминает" сколько чисел уже прочтено.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
13.08.2010, 22:43     Построчное чтение и обработка данных из файла. #6
Haze23, Она не запоминает. Файл читается посимвольно. while(!feof(f)), затем fscanf мы прочли первые 2 символа, курсор файла двигается вместе с прочтением символов. След итерация, прочли два, курсор сдвинулся еще на два. И т.д. Вроде бы так)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2010, 22:47     Построчное чтение и обработка данных из файла.
Еще ссылки по теме:

Построчное чтение файла в C++ Builder 6 C++
C++ Построчное чтение из файла
C++ Построчное чтение из файла в структуру

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Haze23
0 / 0 / 0
Регистрация: 13.08.2010
Сообщений: 4
13.08.2010, 22:47  [ТС]     Построчное чтение и обработка данных из файла. #7
Lavroff, спасибо за объяснение, разобрался. Тему можно закрывать.
Yandex
Объявления
13.08.2010, 22:47     Построчное чтение и обработка данных из файла.
Ответ Создать тему
Опции темы

Текущее время: 11:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru