Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Простейшая программа, но не могу додуматься


Автор: wilson 3.7.2011, 20:13
Народ, подскажите плиз, а то мозги чего-то уже дымятся. Вроде простейший код, а разобраться не могу.
Декорация следующая: человек покупает любое количество товара по 3р. за шт., при этом каждая 13-я вещь - бесплатно. Надо рассчитать полную стоимость по общему количеству единиц товара. Т.е. сначала спрашиваем: сколько единиц товара, затем выдаём общую стоимость. Используется операция "%" - остаток от деления.

Код

#include <iostream>
using namespace std;
int main (void)
{
int num_of_items, tot_price=0, counter=0;

//num_of_items - общее кол-во единиц товара
//tot_price - общая стоимость
//counter - количество итераций

bool flag; // просто флаг для проверки деления на 13
cout << endl << "Enter the number of items you gonna buy : ";
cin >> num_of_items;
while (counter++ < num_of_items)
    {
    flag = (num_of_items % 13 == 0);
    if (!flag) tot_price += 3;
    }
cout << endl << "The whole sum you have to pay for " << num_of_items << " items is " << tot_price << " ."<< endl;
cout << endl << flag << endl;
cout << endl << counter << endl;
return 0;
}

Вывел там в последних строках служебные переменные для контроля.
Если количество товара не кратно 13 прибавляем по 3 руб., как только кратно - пропускаем. Пробовал использовать команду "continue", но то же самое получается.
При вводе количества до 12 включительно - всё нормально, 13 - общая сумма = 0 - вообще не пойму откуда берётся. Далее - тоже неправильно - пропуска 13-й штуки не происходит. Т.е.вводим 15шт. - сумма 45, а должно быть 42. Где косяк?
Пользуюсь консольным компилятором Borland (bcc32.exe)

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

Автор: voral 3.7.2011, 22:29
Код


int  num_of_items_free =  num_of_items / 13; // число халявных
int total =  (num_of_items-num_of_items_free ) * 3;

Автор: newbieone 3.7.2011, 22:44
Код
flag = (num_of_items % 13 == 0);

Должно быть не num_of_items, который статичен, а counter, который показывает, какой именно товар обрабатывается.
Код
flag = (counter % 13 == 0);

Но вообще-то лучше, конечно, делать, как написал voral  smile 

Автор: wilson 4.7.2011, 08:02
voral , спасибо за вариант, но интересовала именно ошибка(всё-таки вариант с остатком от деления более изящный, т.к. ты делаешь то же самое, но вручную).


Цитата

Должно быть не num_of_items, который статичен, а counter, который показывает, какой именно товар обрабатывается.
Код
flag = (counter % 13 == 0);



Конечно же, спасибо newbieone. Как обычно всё на поверхности, просто переклинило уже.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)