Wydawanie reszty - w czym jest problem?

0

Piszę program, który przyjmuje podaną przez nas kwotę i cenę produktu. Następnie podaje ile reszty dostaniemy i w jakich nominałach. Wszystko działa poprawnie, do momentu kiedy reszta ma zostać wydana kilka razy w tym samym nominale. W czym może tkwić problem i jak go rozwiązać?
Z góry dziękuję za pomoc

#include "pch.h"
#include <iostream>
#include <stdio.h>


using namespace std;
int main()
{
	//ile pieniedzy, ile kosztuje, wydanie reszty (jakie nominały)
	double kw, kwd, r, p;
	int i;
	double N[14] = { 200, 100, 50, 20, 10, 5, 2, 1, 0.50, 0.20, 0.10, 0.05, 0.02, 0.01 };
	i = 0;
	cout << "Podaj kwote ktora placisz:" << endl;
	cin >> kw;
	cout << "Podaj cene produktu:" << endl;
	cin >> kwd;
	r = kw - kwd;
	cout << "Pozostaje Ci" << endl;
	cout << r << endl;
	cout << " zl reszty, ktore otrzymasz w nastepujacych nominalach : " << endl;
	while (r > 0) {
		if (r >= N[i]) {
			r / N[i];
			r = r - N[i];
			cout << N[i] << endl;
		}i++;
	}
	return 0;
}
3

Musisz i++ wstawić w if

if(r<N[i])
{
    i++;
}
5

Hmm... tak może trochę bardziej abstrahując od problemu: może lepiej byłoby liczyć to jakoś w groszach, bo korzystając z double przy dzieleniu można przejechać się na precyzji. Tego bym się tutaj trochę obawiał ale może niech ktoś bardziej obeznany w C++ się wypowie.

Pisząc w C# jak widzę operacje na piniondzach we float czy double to od razu zapala mi się lampka: czemu nie decimal?.

0
kamil napisał(a):

Musisz i++ wstawić w if

if(r<N[i])
{
    i++;
}

Jak daje i++ w if kompletnie program nie działa.
Zrobiłem teraz coś takiego i powiedzmy ze program ma pokazać ze do wydania jest 40zł, to pokazuje że 20x2, ale jeżeli jest np teraz do wydania 55zł topokazuje 50x1,1

while (r > 0) {
		if (r>=N[i]) {
			p = r / N[i];
			r = r - (N[i]*p);
			cout << N[i] <<"x" << p << endl;
			
		}i++;
	
	}
3

if nie działa dlatego, że używasz typu double i masz problem z zaokrąglaniem. Zrób tak jak pisał @grzesiek51114

ale jeżeli jest np teraz do wydania 55zł topokazuje 50x1,1

Bo 55 / 50 to jet 1.1
Musisz użyć dzielenia całkowitego

0

A jakby stworzyc obiekt Money czy cos takiego?

5

Nie wiem czy jest sens komplikować kod ponad to co potrzeba.

Po prostu licz w groszach.
int N[14] = { 20000, 10000, 5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1 };
A w złotówkach tylko same wyniki wyświetlaj.

1 użytkowników online, w tym zalogowanych: 0, gości: 1