dzielenie kasy[c]

0

"dzielenie kasy"

zna może ktoś algorytm dzielenia pieniędzy chodzi mi konkretnie o rozdzielanie setek złotówek i gr. czyli rozdziela sumę wybraną przez usera
przykład wpisuje 550
czyli program by mi wydrukował 200x2 100x1 50x1
najlepiej że by to było w c

0

Ja znam fajny algorytm dzielenia kasy.
Ja daje 100 zl i ty dajesz 100 zl. A potem dziele:
1 zl dla ciebie
2 zl dla mnie
1 zl dla ciebie
4 zl dla mnie
1 zl dla ciebie
8 zl dla mnie
...
;)

A tak na powaznie. Mamy nominaly:
n = 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01
A algorytm przedstawia sie tak:

  1. Wez pieniadze p
  2. Wyzeruj tablice z nominalami t
  3. i = 0 //tab. indeksowana od 0
  4. while i < n.length() && p > 0 do
    4A. if p - n[i] > 0 then
    4Aa. p -= n[i]; t[i]++
    4Ab. i++
0

przykład co prawda w Delphi, ale to nic trudnego zrozumieć
http://www.programming.enter.net.pl/delphi/arytmetyka.html

0

A tak na powaznie. Mamy nominaly:
n = 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01
A algorytm przedstawia sie tak:

  1. Wez pieniadze p
  2. Wyzeruj tablice z nominalami t
  3. i = 0 //tab. indeksowana od 0
  4. while i < n.length() && p > 0 do
    4A. if p - n[i] > 0 then
    4Aa. p -= n[i]; t[i]++
    4Ab. i++

a możesz mi to rozpisać? [browar]

0

Podany przez Milke link jest lepszy, bo korzysta z reszty z dzielenia, zamiast odejmowania w petelce (jest szybszy), wiec tak tez zapisze:

#define N 14
double FNominaly[N] = {200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01};
void dziel(double APieniadze){
    int i, n, pom, Pieniadze;
    Pieniadze = APieniadze*100;/*w groszach chcemy miec wszystko */
    for(i=0;i<N;i++){
	n = (int) (100*FNominaly[i]);/* w groszach */
	pom = Pieniadze/n;
	if(pom)
	    printf("%d x %.2lf\\n", pom, FNominaly[i]);
	Pieniadze = Pieniadze%n;
    }
}
0

Podany przez Milke link jest lepszy, bo korzysta z reszty z dzielenia, zamiast odejmowania w petelce (jest szybszy), wiec tak tez zapisze:

#define N 14
double FNominaly[N] = {200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01};
void dziel(double APieniadze){
    int i, n, pom, Pieniadze;
    Pieniadze = APieniadze*100;/*w groszach chcemy miec wszystko */
    for(i=0;i<N;i++){
	n = (int) (100*FNominaly[i]);/* w groszach */
	pom = Pieniadze/n;
	if(pom)
	    printf("%d x %.2lf\\n", pom, FNominaly[i]);
	Pieniadze = Pieniadze%n;
    }
}

void dziel(double APieniadze){ <------------------ na tej linijce złasz mi błąd przy kompilacji (parse error)

0

To ja nie wiem, dlaczego nie działa... Mój programik u mnie chodzi pięknie:

#define N 14
double FNominaly[N] = {200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01};
void dziel(double APieniadze){
    int i, n, pom, Pieniadze;
    Pieniadze = APieniadze*100;/*w groszach chcemy miec wszystko */
    for(i=0;i<N;i++){
	n = (int) (100*FNominaly[i]);/* w groszach */
	pom = Pieniadze/n;
	if(pom)
	    printf("%d x %.2lf\\n", pom, FNominaly[i]);
	Pieniadze = Pieniadze%n;
    }
}
int main(){
    dziel(540.23);
    exit(0);
}

Using built-in specs.
Configured with: FreeBSD/i386 system compiler
Thread model: posix
gcc version 3.2.2 [FreeBSD] 20030205 (release)

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