CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Dzielenie z resztą w Borland C++

Dzielenie z resztą w Borland C++

dział ogólny

Dzielenie z resztą w Borland C++

Nowy postprzez pixelyo » środa, 4 stycznia 2012, 23:54

Witam

Mam taki mały programik który stymuluje rozmienianie pieniędzy. Problem mam z tym żeby dzielił z resztą.
Sprawa wygląda tak, że przykładowo dajemy do rozmienienia 255zł i 55gr więc 1- 200zł, 1- 50zł, 1- 5zł, 1-50gr i 1-5 gr. Jak dziele to zawsze mam 1-200zł i np. 5 x po 50 i tak dalej. ileś tam razy po 5zł.

KOD cpp:     UKRYJ  
String a;
a = Edit1->Text;
Edit2->Text = a;

Label3->Caption= a/200;
Label12->Caption= a/100;
Label14->Caption= a/20;
Label13->Caption= a/50;
Label15->Caption= a/10;
Label16->Caption= a/5;
Label17->Caption= a/2;
Label18->Caption= a/1;
 


Jak zrobić tak aby do następnego nominału była inna wartość. Wiem że dzieli się przez znak % ale nie wiem jak to wykorzystać.

Pozdrawiam.
Avatar użytkownika
pixelyo
Bladawiec
Bladawiec
 
Posty: 4
Dołączył(a): środa, 4 stycznia 2012, 23:48
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Win 7 64bit
Kompilator: C++ Builder 6
Gadu Gadu: 0
    Windows 7Chrome

Re: Dzielenie z resztą w Borland C++

Nowy postprzez polymorphism » czwartek, 5 stycznia 2012, 11:05

Można tak:
KOD cpp:     UKRYJ  
Label3->Caption = a / 200;
a %= 200;
Label12->Caption = a / 100;
...

ale wydaje mi się, że sensowniej jest użyć funkcji div:
KOD cpp:     UKRYJ  
div_t v = div (a, 200);
Label3->Caption = v.quot;
v = div (v.rem, 100);
Label12->Caption = v.quot;
v = div (v.rem, 50);
Label13->Caption = v.quot;
...
 


KOD cpp:     UKRYJ  
Label18->Caption= a/1;

Z tym dzieleniem to pojechałeś ;)
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Dzielenie z resztą w Borland C++

Nowy postprzez Cyfrowy Baron » czwartek, 5 stycznia 2012, 16:21

Uwaga odnośnie kodu pixelyo. Zmienna a jest typu String, czyli jest łańcuchem znaków, ty jednak dzielisz łańcuch znaków przez liczbę, TO NIEDOPUSZCZALNE. Zmienna a musi być liczbą więc używaj zmiennych odpowiedniego typu. Tutaj sugerowałbym typ float lub double, czyli typ przechowujący liczby zmiennopozycyjne. Twój kod powinien wyglądać tak:

KOD cpp:     UKRYJ  
float a;
a = StrToFloat( Edit1->Text );
Edit2->Text = FloatToStr( a );

Label3->Caption=  FloatToStr( a/200.0 );
Label12->Caption= FloatToStr( a/100 );
Label14->Caption= FloatToStr( a/20 );
Label13->Caption= FloatToStr( a/50 );
Label15->Caption= FloatToStr( a/10 );
Label16->Caption= FloatToStr( a/5 );
Label17->Caption= FloatToStr( a/2 );
Label18->Caption= FloatToStr( a/1 );


Zapoznaj się z działem: ► patrz serwis: Cyfrowy Baron dział: porady -> zmienne.



Odnośnie kodu polymorphism funkcja div pochodzi z biblioteki stdlib.h, więc tą bibliotekę należy włączyć w sekcji include.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Dzielenie z resztą w Borland C++

Nowy postprzez pixelyo » czwartek, 5 stycznia 2012, 18:18

KOD cpp:     UKRYJ  
Label18->Caption= a/1;

Z tym dzieleniem to pojechałeś ;)


NIe zwróciłem uwagi na to ;)


Więc tak: wszystko już działa dzięki Cyfbar i polymorphism. Tylko jest jeden problem, rzy rozmienieaniu groszy:

v = div (v.rem, 0.50);
Label25->Caption = v.quot;


debuguje mi program. Coś jest z liczbą po przecinku lub typ zmiennej jest zły (raczej to). Nie wiem w jakis sposób to rozwiązać.
Avatar użytkownika
pixelyo
Bladawiec
Bladawiec
 
Posty: 4
Dołączył(a): środa, 4 stycznia 2012, 23:48
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Win 7 64bit
Kompilator: C++ Builder 6
Gadu Gadu: 0
    Windows 7Chrome

Re: Dzielenie z resztą w Borland C++

Nowy postprzez polymorphism » czwartek, 5 stycznia 2012, 19:26

div operuje na typach całkowitych, zatem to nie przejdzie. Jeśli chcesz operować na typie zmiennoprzecinkowym, musisz obliczenia robić na piechotę - oddzielnie dzielić, zaokrąglając wynik w dół, i oddzielnie liczyć resztę z dzielenia funkcją fmod. Możesz liczyć tak jak pokazałem, ale jednostką musi być nie złotówka a grosz, czyli:
KOD cpp:     UKRYJ  
int a = StrToFloat( Edit1->Text ) * 100.f; // 'a' zawiera wartość w groszach.

div_t v = div (a, 200 * 100);
Label3->Caption = v.quot;
v = div (v.rem, 100 * 100);
Label12->Caption = v.quot;
v = div (v.rem, 50 * 100);
Label13->Caption = v.quot;
...
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Dzielenie z resztą w Borland C++

Nowy postprzez pixelyo » czwartek, 5 stycznia 2012, 20:15

Ok, dzięki wielkie, wszystko działa. Zrobiłęm to przez mnożenie przez 100.
Do pobrania tutaj:
http://zspprzodkowo.pl/karol/nominalyproj.zip
Avatar użytkownika
pixelyo
Bladawiec
Bladawiec
 
Posty: 4
Dołączył(a): środa, 4 stycznia 2012, 23:48
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Win 7 64bit
Kompilator: C++ Builder 6
Gadu Gadu: 0
    Windows 7Chrome


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 4 gości