Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Zamiana nominału...
Goły




Typ: neutral
Postów: 8
Zarejestrowany: Dec 2003
Zamiana nominału...

Jak napisać program który predstawi wszystke mozliwosci zamiany jednego nominału na banknoty i bilon. naprzykład podaje 85 zł
i program podaje wszystkie mozliwe kombinacje...
85=10+10+20+5+5+20+10+2+2+1
85=10+10+10+10+10+10+10+10+5
85=50+20+10+1+1+1+1+1
i  tak  dalej.........
Dzięki

02-01-2004 21:13
Pokaż profil Goły  Wyślij email do Goły        478762
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003
ja to widzę tak

Słuchaj, myślę, że to nie jest takie proste.
Po pierwsze liczba możliwych kombinacji jest ..., a może i większa dopóki nie będziesz znał ilości poszczególnych banknotów i nominałów.
Na przykład:
W swoim bankomacie masz:
5 razy 10 zł
3 razy 50 zł
2 razy 5 zł

Teraz liczba możliwych kombinacji zmniejsza się, bo wiesz, że poczynając od najwiekszego nominału, wykorzystasz:
1 raz 50 zł,
3 razy 10 zł i
1 raz 5 zł.

Problem jest ciekawy i warty rozwiązania, ale trzeba znać jego zastosowanie. Czy chodzi Ci o wymyślenie idealnego algorytmu, czy też chcesz zrobić coś w rodzaju bankomatu, bo to całkowicie zmienia sposób myślenia - znalezienia rozwiązania?


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

02-01-2004 23:09
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
Goły




Typ: neutral
Postów: 8
Zarejestrowany: Dec 2003
Nowa myśl.

Moze zrobic to na zasadzie losowania banknotow i bilonu tak ze suma ich daje odpowiednio za kazdym raze taki sam nominal bez powtorzen, tylko czy jest to mozliwe?

03-01-2004 01:19
Pokaż profil Goły  Wyślij email do Goły        478762
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003
rozwiązanie...

Nie wiem od czego zacząć, więc zacznę od początku.
Nie mogłem jakoś sobie uświadomić jak to zrobić, więc zacząłem kombinować jak to się dzieje w bankomacie:
Przecież każdy bankomat ma określoną ilość gotówki!
Więc poczyniłem pewne założenia:
1) Mam jakąś ilość nominałów w swoim bankomacie (Ty, oczywiście możesz je losować)
2) Wszystkie moje nominały są poukładane w porządku rosnącym, bo łatwiej jest dokonywać wypłaty zaczynając od największego nominału. Gdybym to robił odwrotnie (od najmniejszego) to nazbierałbym drobniaków i nagle pojawia się 20 zł, a klient chciał wypłacić 35 z takich nominałów: 1, 1, 5, 10, 20, 50. Wypłaciłby? Oczywiście, że nie, bo uzbierałbym mu (jako bankomat) dokładnie 17 zł i dalej co... NIC! .... zimna!

ROZWIĄZANIE
Najpierw muszę ustalić ile mam kasy w bankomacie (NIE SUMA kwot z  nominałów, a ilość nominałów).
Ta wartość to ilość pętli, które powinien wykonać program, by sprawdzić wszystkie możliwe kombinacje.

By wypłacić 35 zł z w/w nominałów:
Liczba pętli = licbie nominałów; tj.: 6
PĘTLA 1
Za pierwszym razem sprawdzam wszystkie nominały w bankomacie:
1, 1, 5, 10, 20, 50
ale robię to w porządku od największego nominału do najmniejszego, więc
50 - odrzucam do worka, by sprawdzić kolejnym razem
20 - odliczam do wypłaty (mniej niż 35)
10 - odliczam do wypłaty (mniej niż 35)
5 - odliczam do wypłaty (równo 35)
1 - odrzucam do worka, by sprawdzić kolejnym razem
1 - odrzucam do worka, by sprawdzić kolejnym razem

Po pierwszej wypłacie pozostało w bankomacie:
50, 1, 1

PĘTLA 2, 3,...6
50 - odrzucam do worka, by sprawdzić kolejnym razem
1 - odrzucam do worka, by sprawdzić kolejnym razem
1 - odrzucam do worka, by sprawdzić kolejnym razem

Wyczerpałem wszystkie możliwości - MOŻLIWA JEST TYLKO JEDNA WYPŁATA 35 zł z podanych nominałów!

Utworzyłem plik w Excel'u z przykładowym kodem...
Jeśli chcesz wyślę Ci go na mail'a!
POZOSTAŁYM mówię, że umieszczę go na własnej stronce do ściągnięcia, a tu dodam link!

[Post edytowany dnia 04-01-2004 00:19 przez losmac]


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

04-01-2004 00:16
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
Goły




Typ: neutral
Postów: 8
Zarejestrowany: Dec 2003
Dzięki...

Jak mozesz to prosze prześlij mnie to na mail'a. Mam jeszcze problem jak zrobić dokońca tą petle, znaczy jak odliczac pasujace nominały z gromadki a następnie żeby te odliczone po koleji w pętlach nominały wyswietlić?

04-01-2004 02:32
Pokaż profil Goły  Wyślij email do Goły        478762
deywid



Typ: neutral
Postów: 66
Zarejestrowany: Jan 2004

nie wiem nawet czy to sie komuś przyda .ale temat mnie zaciekawił,zrobiłem coś takiego ze z tym banknotów(bilonu)co podałes(100,50,20,10,5,2,1) jest przedstawiana suma z banknotów(bilonu) o największej wartość danej kwoty
np. 124 zł czyli 1 x 100 ,1x 20 ,2 x2
ale mowie zrobilem to tylko z wlasnej ciekawosci..
============================
Private Sub Command1_Click()

Dim zmienna(1 To 7) As Integer
zmienna(1) = 100
zmienna(2) = 50
zmienna(3) = 20
zmienna(4) = 10
zmienna(5) = 5
zmienna(6) = 2
zmienna(7) = 1
Dim ilezmienna(1 To 7) As Integer
liczba = Text1.Text
For i = 1 To 7
ilezmienna(i) = liczba \ zmienna(i)
liczba = liczba - ilezmienna(i) * zmienna(i)
Next i
Label1.Caption = Text1.Text & vbCrLf & "Ilość : banknot(moneta)"
For ia = 1 To 7

Label1.Caption = Label1.Caption & vbCrLf & "      " & ilezmienna(ia) & ": " & zmienna(ia)

Next ia
End Sub
==========================
pozdro

25-01-2004 18:48
Pokaż profil deywid  Wyślij email do deywid        5625009
Sen




Typ: neutral
Postów: 20
Zarejestrowany: Jan 2004

jestem ciekawy na co ci rozmienianie kasy na drobne ale co tam, masz tu gotowy programik:
Dim liczba As Long
Dim ile200, ile100, ile50, ile20, ile10, ile5, ile2, ile1 As Long
Dim l200, l100, l50, l20, l10, l5, l2, l1 As Long
Dim a1, a2, a3, a4, a5, a6, a7 As Long
Dim linia As String
Private Sub Command1_Click()
    Text2 = ""
    liczba = Val(Text1)
    ile200 = Int(liczba / 200)
    l200 = liczba
    For a1 = 0 To ile200
        l100 = l200 - a1 * 200
        ile100 = Int(l100 / 100)
        For a2 = 0 To ile100
            l50 = l100 - a2 * 100
            ile50 = Int(l50 / 50)
            For a3 = 0 To ile50
                l20 = l50 - a3 * 50
                ile20 = Int(l20 / 20)
                For a4 = 0 To ile20
                    l10 = l20 - a4 * 20
                    ile10 = Int(l10 / 10)
                    For a5 = 0 To ile10
                        l5 = l10 - a5 * 10
                        ile5 = Int(l5 / 5)
                        For a6 = 0 To ile5
                            l2 = l5 - a6 * 5
                            ile2 = Int(l2 / 2)
                            For a7 = 0 To ile2
                                l1 = l2 - a7 * 2
                                Text2 = Text2 + Str(a1) + "x200 " + Str(a2) + "x100 " + Str(a3) + "x50 " + Str(a4) + "x20 " + Str(a5) + "x10 " + Str(a6) + "x5 " + Str(a7) + "x2 " + Str(l1) + "x1 " + Chr(13) + Chr(10)
                            Next
                        Next
                    Next
                Next
            Next
        Next
    Next
End Sub

Private Sub Form_Load()
    Text1 = ""
End Sub

potrzebne sa 2 textboxy i commandbutton, drugi textbox ze scrollbarem, bo lista bedzie długa jezeli wpiszesz cokolwiek wiekszego od 20
A tak pozatym to nie wpisuj liczb wiekszych od 100 bo to jest zabójstwo dla windy, chyba ze masz zajebistego kompa.
Czy o to dokładnie ci chodziło?

25-01-2004 21:24
Pokaż profil Sen  Wyślij email do Sen   
Goły




Typ: neutral
Postów: 8
Zarejestrowany: Dec 2003
To jest to...

Dzięki wielkie,o to właśnie chodziło. Pozdrawiam

[Post edytowany dnia 02-02-2004 20:26 przez Goły]

02-02-2004 20:20
Pokaż profil Goły  Wyślij email do Goły        478762
Wszystkich odpowiedzi: 7 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1