Auf den Beitrag: (ID: 23477) sind "2" Antworten eingegangen (Gelesen: 282 Mal).
"Autor"

Hilfe bei vb

Nutzer: Shaft2
Status: Profiuser
Post schicken
Registriert seit: 17.04.2001
Anzahl Nachrichten: 2778

geschrieben am: 28.10.2002    um 10:04 Uhr   
helft mir mal brauch mal hilfe

Ein Land gibt Briefmarken, 5,10, 20, 50 100, 200, 500 heraus. Schreiben sie ein Programm für einen Briefmarkenautomaten, Der Biss zu einer Eingabe von 10000, Brief Marken so ausgibt das es sich immer um die minnimale anzahl .

das hab ich schon :
Option Explicit
Dim i As Integer
Dim cent5, cent10, cent20, cent50, cent100, cent200, cent500 As Integer




Private Sub cmdende_Click()
Unload Me
End Sub

Private Sub cmdNeu_Click()
For i = 1 To 7
txtAusgabe.Text = " "
Next i
txtEingabe.Text = " "
End Sub

Private Sub cmdStart_Click()
Do
End Sub

  Top
"Autor"  
Nutzer: Shaft2
Status: Profiuser
Post schicken
Registriert seit: 17.04.2001
Anzahl Nachrichten: 2778

geschrieben am: 28.10.2002    um 11:00 Uhr   
habs nun:
Option Explicit
Dim i As Integer
Dim cent5, cent10, cent20, cent50, cent100, cent200, cent500 As Integer
Dim Geld As Single




Private Sub cmdende_Click()
Unload Me
End Sub

Private Sub cmdNeu_Click()
For i = 1 To 7
txtAusgabe.Text = " "
Next i
txtEingabe.Text = " "
End Sub

Private Sub cmdStart_Click()
Geld = CSng(txtEingabe.Text)
Select Case Geld
Case Is >= 500
Do While Geld >= 500
Geld = Geld - 500
cent500 = cent500 + 1
Loop
Case Is >= 200
Do While Geld >= 200
Geld = Geld - 200
cent200 = cent200 + 1
Loop
Case Is >= 100
Do While Geld >= 100
Geld = Geld - 100
cent100 = cent100 + 1
Loop
Case Is >= 50
Do While Geld >= 50
Geld = Geld - 50
cent50 = cent50 + 1
Loop
Case Is >= 20
Do While Geld >= 20
Geld = Geld - 20
cent20 = cent20 + 1
Loop
Case Is >= 10
Do While Geld >= 10
Geld = Geld - 10
cent10 = cent10 + 1
Loop
Case Is >= 5
Do While Geld >= 5
Geld = Geld - 5
cent5 = cent5 + 1
Loop

End Select
txtAusgabe(7).Text = CStr(cent500)
txtAusgabe(6).Text = CStr(cent200)
txtAusgabe(5).Text = CStr(cent100)
txtAusgabe(4).Text = CStr(cent50)
txtAusgabe(3).Text = CStr(cent20)
txtAusgabe(2).Text = CStr(cent10)
txtAusgabe(1).Text = CStr(cent5)

End Sub



Private Sub Form_Load()
txtEingabe.SelStart = 0
txtEingabe.SelLength = Len(txtEingabe.Text)


End Sub

Private Sub txtEingabe_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 48 To 57, 44, 8
Case Else
KeyAscii = 0
End Select

End Sub
  Top
"Autor"  
Nutzer: Brünette22
Status: Profiuser
Post schicken
Registriert seit: 14.11.2001
Anzahl Nachrichten: 696

geschrieben am: 28.10.2002    um 12:37 Uhr   
(zitat)#!/usr/bin/perl

my $betrag = int($ARGV[0]);

foreach my $wert(500, 200, 100, 50, 20, 10, 5) {
my $anzahl = int($betrag / $wert);
$betrag -= $anzahl * $wert;

print "$anzahl Briefmarken zu $wert Cent, ";
}

print "und $betrag Cent Wechselgeld.";
exit;(/zitat)
...warum ist VB nur so umständlich? *grinsel*

Tipp an Shaft:
Mit einer for-Schleife würdest Du Dir viel Tippaufwand sparen. foreach ist allerdings perl - ggf. musst Du die Markenwerte erst in ein Array schreiben und dieses dann durchlaufen. Das gäbe Dir auch die Möglichkeit, ganz fix neue Markenwerte zu bestimmen, ohne den gesamten Code umschreiben zu müssen. (Euro-Umstellung lässt grüssen *fg*)
Die Anzahl der Marken durch Division bzw. Division ohne Rest (div) herauszufinden, dürfte imho auch schneller sein als Deine while-Schleifen. Da Dir in VB eigentlich div zur Verfügung stehen sollte, dürfte sich die erste Zeile der perl-Schleife durch (Pseudo-Code!) "Anzahl = Betrag div Wert" ersetzen lassen.
Ach ja... und Wechselgeld gibts nich? *mecker* ;-)

[edit: s/quote/zitat/g;]
Geändert am 28.10.2002 um 12:39 Uhr von Brünette22
  Top