Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
#1

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

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

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

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

Добавлено через 36 минут
Added: С конца файла
До n числа введенного при T
То есть ввожу T = 35;
И он прочитывает .txt файл и с конца выводит с 1 по 35 число
пробовал циклом, выдает чушь 5-6 чисел o_O
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2014, 18:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как сделать счет чисел с конца файла (C++):

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

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

Чтения структуры из файла (описать структуру с именем "ORDER": "счет плательщика"; "счет получателя"; "сумма, переводится банковской операцией") - C++
Описать структуру с именем "ORDER", содержащий следующие поля: "Счет плательщика"; "Счет получателя"; "Сумма, переводится банковской...

Как символ конца файла выглядит в двоичном представлении? - C++
Пытаюсь реализовать Хаффмана и столкнулась с такой проблемой: когда я записываю сформированный код в файл у меня в некоторых байтах...

Как убрать с конца строки знак переноса, после считывания ее из файла? - C++
Всем доброго дня. Говоря подробнее, я считываю информацию из текстового файла. Там находятся фамилии в столбик. После считывания строки, я...

std::cin, eof не всегда принимается как признак конца файла - C++
std::string text; char ch = 0; while(!std::cin.get(ch).eof()){ text.append(1, ch); } Ввожу в консоль в Windows: "^Z"...

52
0x10
2479 / 1654 / 248
Регистрация: 24.11.2012
Сообщений: 4,097
04.02.2014, 14:08 #31
Я не задал ни одного вопроса, который затрагивал бы предметную область или приватную информацию.
Если есть вопрос, как получить какие-то данные из файла, то нужно как минимум описать формат входных данных. Вывод непонятно чего - не предоставляет никакой полезной информации.
Нужен самодостаточный пример: как выглядит входной файл и что хочется получить на выходе.
0
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
04.02.2014, 14:09  [ТС] #32
C++
1
2
3
4
5
input_high.seekg (-T_1, ios::end); // пробовал и в цикле. :)
    for(int i = 0; i < T_1;++i) {
    input_high >> array_high[i];
    output << array_high[i] << endl;
    }
Вот, кусок
0
0x10
2479 / 1654 / 248
Регистрация: 24.11.2012
Сообщений: 4,097
04.02.2014, 14:19 #33
Смешение на N байтов != смещению на N чисел.
0
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
04.02.2014, 19:03  [ТС] #34
Цитата Сообщение от 0x10 Посмотреть сообщение
Смешение на N байтов != смещению на N чисел.
И что на данный момент можно сделать?
0
0x10
2479 / 1654 / 248
Регистрация: 24.11.2012
Сообщений: 4,097
04.02.2014, 19:08 #35
Цитата Сообщение от Esecman Посмотреть сообщение
И что на данный момент можно сделать?
В этой теме я уже неоднократно отписывался что можно сделать:
1. Пересмотреть подход к решению задачи, поскольку, как я уже говорил раза 4, решение выбрано неоптимальное и нелогичное.
2. Использовать заранее подготовленную структуру, о которой я уже писал. Взять можно самописную или библиотечну. Пример самописной я тоже приводил.

Могу точно сказать чего делать НЕ надо.
Не надо пытаться угадывать. Пока я вижу только подход в духе "взяли какой-то кусок кода, попробовали в одном месте - не работает, приложили к другому - о, заработало" - хотя на самом деле не заработало, а в лучшем случае совпало. С такой угадайкой не продвинетесь ни на шаг. Мб что-нибудь и напишите, только все равно будет глючить.
0
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
04.02.2014, 19:14  [ТС] #36
Цитата Сообщение от 0x10 Посмотреть сообщение
В этой теме я уже неоднократно отписывался что можно сделать:
1. Пересмотреть подход к решению задачи, поскольку, как я уже говорил раза 4, решение выбрано неоптимальное и нелогичное.
2. Использовать заранее подготовленную структуру, о которой я уже писал. Взять можно самописную или библиотечну. Пример самописной я тоже приводил.

Могу точно сказать чего делать НЕ надо.
Не надо пытаться угадывать. Пока я вижу только подход в духе "взяли какой-то кусок кода, попробовали в одном месте - не работает, приложили к другому - о, заработало" - хотя на самом деле не заработало, а в лучшем случае совпало. С такой угадайкой не продвинетесь ни на шаг. Мб что-нибудь и напишите, только все равно будет глючить.
С чтением с конца встречаюсь впервые
Знаю то, что обязательно нужно использовать ios::end ну и цикл естественно

Числа типа float;
1 строка == 1 число(1.313133)
0
0x10
2479 / 1654 / 248
Регистрация: 24.11.2012
Сообщений: 4,097
04.02.2014, 19:19 #37
С буфером решается за один проход файла.
За два прохода можно сначала почитать количество строк в файле (холостые getline), потом вернуться к началу и вхолостую пропустить энное количество строк до нужной позиции. Где-то тут, кажется, уже предлагали такое.

Преимущество превого способа - всего один проход по файлу.
Для второго не нужно использовать доп библиотеки или писать свой буфер.
0
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
04.02.2014, 19:27  [ТС] #38
Цитата Сообщение от 0x10 Посмотреть сообщение
С буфером решается за один проход файла.
За два прохода можно сначала почитать количество строк в файле (холостые getline), потом вернуться к началу и вхолостую пропустить энное количество строк до нужной позиции. Где-то тут, кажется, уже предлагали такое.

Преимущество превого способа - всего один проход по файлу.
Для второго не нужно использовать доп библиотеки или писать свой буфер.
А Вы понимаете, что мне данную строку нужно найти с конца?
Помимо getline можно воспользоваться fscanf ну или еще много чем

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
int main() {
float n = 0;
int NUM_OF_FILE = 0;
FILE* file;
file = fopen("data.txt", "r");
while(!feof(file)) {
fscanf(file, "%f", &n);
NUM_OF_FILE++;
}
return 0;
}
0
0x10
2479 / 1654 / 248
Регистрация: 24.11.2012
Сообщений: 4,097
04.02.2014, 19:31 #39
Esecman,
Пусть нужно N сток с конца.
1. Прочитать все строки вхолостую - почитать их количество - K
2. Вернуться к началу файла. Пропустить (K - N) строк.
3. Читаем в массив оставшиеся N строк, что и требовалось. Инвертировать порядок можно уже в памяти.

Добавлено через 13 секунд

Не по теме:

Самому тошно советовать такие глупости.

1
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
04.02.2014, 19:45  [ТС] #40
Спасибо, попробую

Добавлено через 8 минут
Цитата Сообщение от 0x10 Посмотреть сообщение
Esecman,
Пусть нужно N сток с конца.
1. Прочитать все строки вхолостую - почитать их количество - K
2. Вернуться к началу файла. Пропустить (K - N) строк.
3. Читаем в массив оставшиеся N строк, что и требовалось. Инвертировать порядок можно уже в памяти.

Добавлено через 13 секунд

Не по теме:

Самому тошно советовать такие глупости.

З.Ы.
Так если я так сделаю, то получится у меня вот что(не проверял):
K = 44469
N = 35
44469-35 = 44434
for(int i = 0; i < NUM_OF_FILE - T_1; ++i) {
input >> array[i];
output << array[i] << endl;
}
// И что мне это даст? Он же мне не выведет число(-а) до окончания периода

Добавлено через 3 минуты
Или какими-то средствами сайвануть в буфер эти удаленные строки с файла что ли, а потом оутпутом
Даже и не знаю с чего начинать o-O
0
0x10
2479 / 1654 / 248
Регистрация: 24.11.2012
Сообщений: 4,097
04.02.2014, 19:46 #41
Цитата Сообщение от Esecman Посмотреть сообщение
до окончания периода
Это какие? С 0 до K-N?

Добавлено через 30 секунд
По ним в любом случае надо будет пройтись - по мере чтения делайте что хотите.
0
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
04.02.2014, 19:47  [ТС] #42
Цитата Сообщение от 0x10 Посмотреть сообщение
Это какие? С 0 до K-N?

Добавлено через 30 секунд
По ним в любом случае надо будет пройтись - по мере чтения делайте что хотите.
Нет!
Ввожу период 35
Он тут же открывает .txt файл и выводит все числа до 35 строки(с конца)
Конечно, вывести 35 чисел с конца - не беда(для этого есть циклы);
Но вот как сделать, чтобы с конца ридал до T периода
0
0x10
2479 / 1654 / 248
Регистрация: 24.11.2012
Сообщений: 4,097
04.02.2014, 19:52 #43
Короче, вот входной файл:
Код
1
2
3
4
5
6
7
8
9
0
Пусть Т = 3.
Что должна программа вывести на выходе?
0
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
04.02.2014, 19:53  [ТС] #44
Цитата Сообщение от 0x10 Посмотреть сообщение
Короче, вот входной файл:
Код
1
2
3
4
5
6
7
8
9
0
Пусть Т = 3.
Что должна программа вывести на выходе?
0
9
8
0
0x10
2479 / 1654 / 248
Регистрация: 24.11.2012
Сообщений: 4,097
04.02.2014, 19:59 #45
Esecman, в таком случае любое из двух предложенных решений подходит.
То, что для вас принципиально именно чтение из файла с конца, а не обход буфера от конца к началу - следствие изначально некорректно поставленной задачи.
На этом я удаляюсь из темы.
0
04.02.2014, 19:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 19:59
Привет! Вот еще темы с ответами:

Как сделать чтобы перебор символов шел до конца строки? Если у меня например в ней есть пробелы? - C++
for (i=0;X!='\0';i++); // цикл перебора символов строки, продолжается пока не стретится пустой символ Вот этот цикл перебирает до...

Счет чисел в массиве - C++
Здравствуйте! Мой счетчик что то не работает. const int size=255; char c; int k, i, j, count; count=0; ...

автоматический счет имени файла - C++
У меня в папке лежит текстовой файл.. его название мне не известно.. Как мне автоматически определить его имя и вывести в консоль?

Чтение файла с несколькими знаками конца файла - C++
В файле несколько раз встречается ноль, и ни как не получается прочитать его полностью. Как можно решить данную проблему ?


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

Или воспользуйтесь поиском по форуму:
45
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru