[Неактуальная тема] Написать программу, которая выполняет следующи

Тема в разделе "C/C++/C#", создана пользователем INFINITIFXXX, 21 сен 2011.

  1. INFINITIFXXX

    INFINITIFXXX Гость

    4.20 Дана запись с именем ORDER, содержащая следующие поля:
    • Расчетный счет плательщика;
    • Расчетный счет получателя;
    • Перечисляемая сумма в руб.

    Написать программу, которая выполняет следующие действия:
    • Ввод с клавиатуры данных из 8 элементов типа ORDER, и занесение их в файл данных;
    • Чтение данных из файла и вывод их на экран;
    • вывод на экран информации о сумме, снятой с расчетного счета плательщика, введенного с клавиатуры (если таких нет – вывести об этом сообщение).
    • Список должен быть упорядочен по расчетным счетам плательщиков.
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    сами пробовали решить?
     
  3. INFINITIFXXX

    INFINITIFXXX Гость

    да. Вот есть код для структуры. Надо переделать его для записи...

    Код (C++):
    #include <cstdlib>
    #include <ctime>
    #include <iostream>
    #include <iomanip>
    #include <algorithm>
    #include <string>

    struct Order {
    std::string debet;
    std::string credit;
    float sum;
    };

    std::ostream &operator<<(std::ostream &stream, const Order &order) {
    std::cout << "From: " << order.debet << std::endl
    << "To: " << order.credit << std::endl
    << "Sum: " << std::setprecision(2) << std::fixed << order.sum
    << " rub." << std::endl;
    return stream;
    }

    Order RandomOrder() {
    Order result;
    for (int i = 0; i < 20; ++i) {
    result.debet += rand() % 10 + '0';
    result.credit += rand() % 10 + '0';
    }
    result.sum = (rand() % 100000) / 100.0;
    return result;
    }

    bool OrderByDebet(const Order &a, const Order &b) {
    return (a.debet < b.debet);
    }

    Order *FindFirstByDebet(Order *begin, Order *end,
    const std::string &debet) {
    for (Order *result = begin; result != end; ++result)
    if (result->debet == debet)
    return result;
    return NULL;
    }

    float AccumulateSumByDebet(Order *begin, Order *end,
    const std::string &debet) {
    float result = 0;
    for (Order *current = begin; current != end; ++current)
    if (current->debet == debet)
    result += current->sum;
    return result;
    }

    int main(int argc, char *argv[]) {
    srand(time(NULL));
    Order orders[8];
    for (int i = 0; i < 8; ++i)
    orders[i] = RandomOrder();
    std::sort(orders, orders+8, OrderByDebet);
    for (int i = 0; i < 8; ++i)
    std::cout << "#" << i << " " << orders[i] << std::endl;

    std::string debet = orders[rand() % 8].debet;
    // вместо предыдущей строки ввод:
    // std::string debet;
    // std::cout << "Enter debetor: ";
    // std::cin >> debet;

    std::cout << "Search for debet: " << debet << std::endl;

    Order *order = FindFirstByDebet(orders, orders+8, debet);
    if (order != NULL) {
    float result = AccumulateSumByDebet(orders, orders+8, debet);
    std::cout << "Debetor " << debet
    << " spent " << result << " rub." << std::endl;
    } else {
    std::cout << "No such debetor." << std::endl;
    }

    return 0;
    }
     
  4. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    дак вы скажите что конкретно неработает. А-то мне лень запускать ваш код и искать в чем он не соответствует заданию )
     
  5. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    INFINITIFXXX, поясните пожалуйста в деталях, что означает следующая запись:
    Код (C++):
    result.debet += rand() % 10 + '0';
    Это же Вы писали, если я все правильно понимаю...
     
  6. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    lazybiz
    Вам надо чтобы именно INFINITIFXXX пояснил(а)?
    а-то ИМХО вполне нормальный фрагмент, не
    Код (Text):
    result.debet += rand() % 10 + 48;
    и-то хорошо
     
  7. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    r04, просто у меня закрались подозрения что автор темы не является автором данного кода.
     
  8. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    lazybiz
    Ну тогда можно было более интересные фрагменты поискать, мне вот этот больше нравится:
    Код (Text):
    std::string debet = orders[rand() % 8].debet;
    :)
     

Поделиться этой страницей