Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
39 / 27 / 12
Регистрация: 31.12.2013
Сообщений: 329
1

Как сделать счет чисел с конца файла

01.02.2014, 18:16. Показов 3523. Ответов 52
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Hello, world!
Возник такой вопрос, как сделать счет чисел с конца?
Имеется ввод периода.

Заранее Спасибо

Добавлено через 36 минут
Added: С конца файла
До n числа введенного при T
То есть ввожу T = 35;
И он прочитывает .txt файл и с конца выводит с 1 по 35 число
пробовал циклом, выдает чушь 5-6 чисел o_O
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.02.2014, 18:16
Ответы с готовыми решениями:

Работа с файлом, счёт строк, ошибка конца файла
Доброго времени суток! При исполнении сборки ни cmd ни far32 воспроизвести желаемый результат не...

пытаюсь сделать реализацию через считывание из файла кол-ва чисел, i,но незнаю как сделать реализацию из файла в массив и сортировки.
В файле input.txt находится неизвестное количество вещественных чисел в интервале . Выцапарать их...

Чтение чисел из файла до конца строки
Есть один файл. В первой строке написано общее количество последующих строк, во всех остальных —...

как сделать счет
редбята подскажите как можно сделать такое. к примеру я делаю программу по оплате коммунальеных...

52
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,714
01.02.2014, 18:30 2
Открыть файл в режиме дозаписи.
Для Сишного ввода это делается так
C++
1
FILE *ff=fopen("filename.txt","at");
Тогда запись будет происходить в конец файла.

А если имелось ввиду вывести 35 последних чисел,
то можно так:
1. читаем весь файл в одну и ту же переменную и считаем,
сколько их прочтется в переменную n.
2. Перематываем файл на начало.
3. Читаем вхолостую n-35 чисел.
4. Заносим в массив оставшиеся 35 чисел.
0
39 / 27 / 12
Регистрация: 31.12.2013
Сообщений: 329
01.02.2014, 18:33  [ТС] 3
внимательно читайте условие!

Добавлено через 2 минуты
Цитата Сообщение от zss Посмотреть сообщение
Открыть файл в режиме дозаписи.
Для Сишного ввода это делается так
C++
1
FILE *ff=fopen("filename.txt","at");
Тогда запись будет происходить в конец файла.

А если имелось ввиду вывести 35 последних чисел,
то можно так:
1. читаем весь файл в одну и ту же переменную и считаем,
сколько их прочтется в переменную n.
2. Перематываем файл на начало.
3. Читаем вхолостую n-35 чисел.
4. Заносим в массив оставшиеся 35 чисел.
У меня 44469 чисел
Тем более мне кажется Ваш случай - не то
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
01.02.2014, 18:36 4
Esecman,
тебе fseek нужен?
http://devoid.com.ua/functions... fseek.html
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
01.02.2014, 18:36 5
Esecman, читать в кольцевой буфер размерности T?
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,714
01.02.2014, 18:40 6
Цитата Сообщение от Esecman Посмотреть сообщение
У меня 44469 чисел
Ну, это же не 44 миллиарда.
0
39 / 27 / 12
Регистрация: 31.12.2013
Сообщений: 329
01.02.2014, 21:06  [ТС] 7
сам разобрался )
если что , отпишу

Добавлено через 2 часа 15 минут
C++
1
2
3
4
5
for(int i = 0; i <= NUM_OF_FILE_HIGH - T_1; ++i) {
    input_high >> array_high[i];
    cout << T_1 << endl;
    output << array_high[i] << endl;
    }
Имеется такой код(к примеру)
я из количества чисел - период -> он мне выдал на 300 чисел меньше(ну столько я период вводил);
А теперь как сохранить эти 300 удаленных чисел?
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
01.02.2014, 21:09 8
Логика какая-то инвертированая получается.

Чем кольцевой буфер не устроил?
0
78 / 78 / 9
Регистрация: 26.12.2011
Сообщений: 217
01.02.2014, 21:38 9
Esecman, Получение последней строки из файла
0
39 / 27 / 12
Регистрация: 31.12.2013
Сообщений: 329
02.02.2014, 19:16  [ТС] 10
мне нужно чтение чисел с конца файла)
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
02.02.2014, 19:20 11
Механизм чтения файлов не ориентирован на чтение с конца.
Если в случае с бинарными файлами еще можно извратиться и считать последние n байн, а затем уже интерпретировать их как угодно, то в случае с текстовыми прямого решения нет, поскольку каждая операция чтения продвигает текущую позицию курсора вперед. В крайнем случае читать построчно и парсить строки с конца.

Почему-то мое решение выше было тупо проигнорировано.
0
39 / 27 / 12
Регистрация: 31.12.2013
Сообщений: 329
03.02.2014, 14:11  [ТС] 12
Цитата Сообщение от 0x10 Посмотреть сообщение
Логика какая-то инвертированая получается.

Чем кольцевой буфер не устроил?
А на примере можно?
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
03.02.2014, 18:44 13
Цитата Сообщение от Esecman Посмотреть сообщение
А на примере можно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <boost/circular_buffer.hpp>
 
int main()
{
    boost::circular_buffer<int> cb(3);
 
    // Предположим, что здесь происходит чтение значений из файла
    for (int i = 0; i < 100; ++i)
    {
        cb.push_back(i);
    }
 
    // последние 3 значения в обратном порядке: 99, 98, 97.
    for (boost::circular_buffer<int>::reverse_iterator it = cb.rbegin();
            it != cb.rend(); ++it)
    {
        std::cout << *it << " ";
    }
    std::cout << std::endl;
}
0
39 / 27 / 12
Регистрация: 31.12.2013
Сообщений: 329
03.02.2014, 19:22  [ТС] 14
Возможно, Вы используете C++ Builder
Таким не пользуюсь, пример можно типа VS C++ или DEV-C++
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
03.02.2014, 19:26 15
Цитата Сообщение от Esecman Посмотреть сообщение
Возможно, Вы используете C++ Builder
Не дай б-г.

Цитата Сообщение от Esecman Посмотреть сообщение
можно типа VS C++ или DEV-C++
Буст можно использовать и там, и там.
В крайнем случае, кольцевой буфер можно реализовать самому - он простой. Не так давно я на чистых сях набрасывал, переписать в плюсовом стиле не должно составить труда (Реализация семафоров)
0
39 / 27 / 12
Регистрация: 31.12.2013
Сообщений: 329
03.02.2014, 19:28  [ТС] 16
Такой вопрос, а может можно при помощи getline и while как-то решить вопрос?
или хотя бы fscanf'ом
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
03.02.2014, 19:30 17
Короче, то, что надо было спросить с самого начала: какая задача решается?
Если возникла потребность городить костыли для таких неестественных действий, высока вероятность, что изначально выбран неоптимальный способ решения.
0
39 / 27 / 12
Регистрация: 31.12.2013
Сообщений: 329
03.02.2014, 20:10  [ТС] 18
Цитата Сообщение от 0x10 Посмотреть сообщение
Короче, то, что надо было спросить с самого начала: какая задача решается?
Если возникла потребность городить костыли для таких неестественных действий, высока вероятность, что изначально выбран неоптимальный способ решения.
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
#include <stdio.h>
#include <stdlib.h>
 
#define FILE_NAME "data.txt"
 
int main(void){
    char * buf, * p;
    long len;
    FILE * f;
 
    if ( ( f = fopen(FILE_NAME, "rb") ) == NULL ){
        perror("fopen");
        system("pause");
    }
    if ( fseek(f, 0, SEEK_END) ){
        perror("fseek");
        system("pause");
    }
    if ( ( len = ftell(f)) < 1 ){
        fprintf(stderr, "File can't be readen, or empty.\n");
        system("pause");
    }
    rewind(f);
 
    if ( ( buf = (char*)malloc(len) ) == NULL ){
        perror("malloc");
        if ( fclose(f) )
            perror("fclose");
        system("pause");
    }
 
    if ( fread(buf, 1, len, f) != len ){
        perror("fread");
        if ( fclose(f) )
            perror("fclose");
        system("pause");
    }
    if ( fclose(f) )
        perror("fclose");
 
    for ( p = buf + len - 1; p >= buf; --p )
        putchar(*p);
 
    free(buf);
    
}
Нашел код на форуме, но работает не так как нужно.
У меня числа типа float
Как переделать?
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
03.02.2014, 20:14 19
Чуть выше я уже говорил, что в случае с биранрым файлом свободы чуть больше, поскольку работа выполняется над потоком байтов. С текстовым файлам такое не прокатит.

Я все еще не услышал ни исходной задачи, ни какой-либо информации о файле. Откуда он берется, кто определяет его формат и почему потребовалось читать его с конца.
0
39 / 27 / 12
Регистрация: 31.12.2013
Сообщений: 329
04.02.2014, 13:26  [ТС] 20
ios::ate — передвинуться в конец уже открытого файла;
В моем случае поможет данная функция ?
0
04.02.2014, 13:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.02.2014, 13:26
Помогаю со студенческими работами здесь

Перебор файла посимвольно, как организовать цикл, работающий до конца файла.
Нужно перебрать файл посимвольно и, учитывая спецсимволы записать содержимое файла в Memo1....

Как в игре сделать счёт голов?
Помогите пожалуйста. Как в игре сделать счёт голов? Думал сделать что когда мяч достигает координат...

А как на счет сделать раздел с кодами на VB на сайте?
Господа, Хотелось бы иметь место на этом сайте куда можно было бы примеры кодов и программок...

Как сделать счёт строк слева в DataGridView
Как сделать счёт строк слева в DataGrid? Предполагаю что где-то в свойствах, но найти не могу.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru