niepoprawnie dzialajacy program w c

s3ba
Użytkownik
Użytkownik
Posty: 63
Rejestracja: 18 sty 2009, o 21:53
Płeć: Mężczyzna
Podziękował: 37 razy
Pomógł: 5 razy

niepoprawnie dzialajacy program w c

Post autor: s3ba »

Mam do napisania taki program:
Program wczytuje liczbę rzeczywistą - kwotę pieniędzy (część całkowita to złote, ułamkowa - grosze), następnie określa ile trzeba użyć będących w obrocie nominałów pieniężnych (banknotów i monet) aby wypłacić tę kwotę.

Program ktory napisalem, poprawnie oblicza czesc calkowita podanej liczby, problem pojawia sie przy czesci ulamkowej(zaokragla ilosc nominalow w dol).

Np. podana kwota: 0.70, program pokazuje ze trzeba uzyc: 1x0.50zl; 0x0.20zl(blad); 1x0.10zl; 1x0.05zl; 2x0.02zl; 0x0.01zl, co daje nam w sumie 0.69zl(blad).
Dla wpisanej kwoty: 0.20, program dziala poprawnie;
Czy ktos moglby mi wskazac blad lub uswiadomic mnie ze ten program jest caly niepoprawny?

Program:

Kod: Zaznacz cały

#include<stdio.h>
#include<conio.h>
int main()
{
   int b,c,d,e,f,g,h,i,j,k,l,m,n,o;
   double a,p,q,r,s,t,u,v,w,x,y,z,xx,xy;
   
   printf("Podaj kwote:"); scanf("%lf",&a);
   b=a/200;
   p=a-b*200;
   c=p/100;
   q=p-c*100;
   d=q/50;
   r=q-d*50;
   e=r/20;
   s=r-e*20;
   f=s/10;
   t=s-f*10;
   g=t/5;
   u=t-g*5;
   h=u/2;
   v=u-h*2;
   i=v/1;
   w=v-i*1;
   j=w/0.5;
   x=w-j*0.5;
   k=x/0.2;
   y=x-k*0.2;
   l=y/0.1;
   z=y-l*0.1;
   m=z/0.05;
   xx=z-m*0.05;
   n=xx/0.02;
   xy=xx-n*0.02;
   o=xy/0.01;
   
      printf("Liczba nominalow:
");
   printf("200zl: %d
",b);   
   printf("100zl: %d
",c);   
   printf("50zl: %d
",d);   
   printf("20zl: %d
",e);   
   printf("10zl: %d
",f);   
   printf("5zl: %d
",g);   
   printf("2zl: %d
",h);   
   printf("1zl: %d
",i);   
   printf("50gr: %d
",j);   
   printf("20gr: %d
",k);   
   printf("10gr: %d
",l);   
   printf("5gr: %d
",m);   
   printf("2gr: %d
",n);   
   printf("1gr: %d
",o);
   
   system("pause");
}
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

niepoprawnie dzialajacy program w c

Post autor: spajder »

Niestety żadnej liczby, dla której ułamek zwykły (nieskracalny) ma w mianowniku coś innego niż 2 nie da się dokładnie w float czy double zapisać, np. \(\displaystyle{ 0,7=\frac{7}{10}=\frac{7}{2\cdot 5}p}\) - tu jest na przykład 5.
Proponuję Ci liczenie używając liczb całkowitych (złotówkę potraktuj jak 100 groszy). Będzie dokładniej, szybciej i jeszcze resztę z dzielenia będzie mógł obliczyć szybko
matshadow
Użytkownik
Użytkownik
Posty: 941
Rejestracja: 17 gru 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Kingdom Hearts
Podziękował: 6 razy
Pomógł: 222 razy

niepoprawnie dzialajacy program w c

Post autor: matshadow »

jedyny problem to to, że czasami nie wydaje 2 gr, tylko 2 razy po 1 gr

Kod: Zaznacz cały

#include<stdio.h>
#include<iostream>
#include<conio.h>
int main()
{
   double a,p,q,r,s,t,u,v,w,x,y,z,xx,xy,b,c,d,e,f,g,h,i,j,k,l,m,n,o;
   
   printf("Podaj kwote:"); scanf("%lf",&a);
   printf("Liczba nominalow:
");
   b=a/200;
   p=a-int(b)*200;
   c=p/100;
   q=p-int(c)*100;
   d=q/50;
   r=q-int(d)*50;
   e=r/20;
   s=r-int(e)*20;
   f=s/10;
   t=s-int(f)*10;
   g=t/5;
   u=t-int(g)*5;
   h=u/2;
   v=u-int(h)*2;
   i=v/1;
   w=v-int(i)*1;
   j=w/0.5;
   x=w-int(j)*0.5;
   k=x/0.2;
   y=x-int(k)*0.2;
   l=y/0.1;
   z=y-int(l)*0.1;
   m=z/0.05;
   xx=z-int(m)*0.05;
   n=xx/0.02;
   xy=xx-int(n)*0.02;
   o=xy/0.01;
   printf("200zl: %d
",int(b));   
   printf("100zl: %d
",int(c));   
   printf("50zl: %d
",int(d));   
   printf("20zl: %d
",int(e));   
   printf("10zl: %d
",int(f));   
   printf("5zl: %d
",int(g));   
   printf("2zl: %d
",int(h));   
   printf("1zl: %d
",int(i));   
   printf("50gr: %d
",int(j));   
   printf("20gr: %d
",int(k));   
   printf("10gr: %d
",int(l));   
   printf("5gr: %d
",int(m));   
   printf("2gr: %d
",int(n));   
   printf("1gr: %.0lf
",xy/0.01);
   
   system("pause");
}
Xitami

niepoprawnie dzialajacy program w c

Post autor: Xitami »

Kod: Zaznacz cały

#include <stdio.h>
#include <math.h>

int n[14]={1,2,5,10,20,50,100,200,500,1000,2000,5000,10000, 20000};

int main(){
	int z, i; float f;
	scanf("%f",&f); z=(int)floor(f*100+0.5);
	printf("%6.2f PLN = %d gr.
",f, z);
	for(i=13; i>=0; i--) {
		if(z>=n[i])
			printf("%2d * %6.2f
", z/n[i], n[i]/100.0);
		z=z%n[i];
	}
	printf("
koniec");while (1);
}
ODPOWIEDZ