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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с файлами. 
V
    Опции темы
Grizli
Дата 11.5.2014, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

/*
 Багаж пассажира характеризуется количеством вещей и их общим весом.
 Дан файл Bagazh содержащий сведенья о багаже нескольких пассажиров.
 Сведения о багаже каждого пассажира представляют собой запись с двумя полями:
 одно поле целого типа(количество вещей) и одно действительного (вес в киллограммах).
 Найти багаж, средний вес одной вещи в котором отличается не более чем на 1 кг от общего
 среднего веса одной вещи.
 */

int main() {
    int a;
    float b, c = 0, d = 0, f, e;
    ifstream base("Bagazh.txt");
    if (!base.is_open()) {
        system("echo Файл не может быть открыт");
        system("pause");
        return 0;
    }
    while (!base.eof()) {
        base >> a;
        base >> b;
        c += a; // Считаем общее колличество предметов
        d += b; // Считаем общюю массу предметов
    }
    f = d / c; // Нашли средний
    cout << f << "kg" << " - Sredniy vess odnogo predmeta sredi vsex pasajirov\n";
    while (!base.eof()) {
        base >> a;
        base >> b;
        e = b / a;
        if (fabs(f - e) <= 1) {
            cout << "passajir s " << a << " i " << b << endl;
            system("pause");
            return 0;
        }
    }
    base.close();
    system("pause");
    return 0;
}


В файле Bagazh:
10 50
4 6

В консоле он мне выводит только средний вес одного предмета у всех пассажиров, но не выводит самого пассажира. Хотя по условию (fabs(f - e) <= 1) - он должен это делать.  Я не силён в работе с файлами, может можно ещё как-нибудь оптимизировать этот алгоритм.

Это сообщение отредактировал(а) Grizli - 11.5.2014, 17:49
PM MAIL   Вверх
feodorv
Дата 11.5.2014, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(Grizli @  11.5.2014,  18:47 Найти цитируемый пост)
    while (!base.eof()) {
...
    }
...
    while (!base.eof()) {
...
    }


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


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Grizli
Дата 11.5.2014, 19:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добавил    base.seekg(0); - спасибО!



Это сообщение отредактировал(а) Grizli - 11.5.2014, 19:14
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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