vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Allgemeine Diskussionen
Re: Denksportaufgabe 
Autor: Kuno60
Datum: 26.08.14 22:50

Hallo,

das ist doch eine interessante Aufgabe.
Durch den Rabattsprung von 10% auf 20% ergeben sich mehrere Möglichkeiten.

Ich hab da mal was gebastelt
  Const BuchPreis As Double = 8.0
  ReadOnly Rabatts() As Integer = {0, 0, 5, 10, 20, 25}
 
  Sub Test()
    Dim Bücher = {2, 2, 2, 1, 1}
    'Dim Bücher = {7, 4, 6, 4, 3}
    Dim NormalPreis = Bücher.Sum * BuchPreis
    Dim KaufPreis = BestPreis(Bücher)
    Dim Rabatt = 1.0 - KaufPreis / NormalPreis
    Dim sb As New System.Text.StringBuilder
    Dim nl = Environment.NewLine
    sb.AppendFormat("Die {1} Bücher kosten zum Normalpreis {2:c}.{0}", nl, _
      Bücher.Sum, NormalPreis)
    sb.AppendFormat("Günstigster Kaufpreis mit Rabatt: {1:c}{0}", nl, KaufPreis)
    sb.AppendFormat("Ersparnis: {1:c}  Rabatt: {2:p}{0}", nl, NormalPreis - _
      KaufPreis, Rabatt)
    Me.TextBox1.Text = sb.ToString
  End Sub
 
  ''' <summary>
  ''' Berechnet den besten Preis.
  ''' </summary>
  ''' <param name="kauf">Die zu kaufenden Bücher.</param>
  ''' <returns></returns>
  ''' <remarks></remarks>
  Private Function BestPreis(kauf() As Integer) As Double
    If kauf.Length <> 5 Then
      Throw New ArgumentException("Das Array hat die falsche Länge!", "kauf")
    End If
    '------------------------------------------
    Dim preisliste As New List(Of Double)
    Dim p As Double
    '------------------------------------------
    ' 1. Preistest beginnend mit 5 Buchtiteln
    Dim ka = (From x In kauf Where x > 0 Order By x Descending).ToArray
    While ka.Any(Function(x) x > 0)
      While ka.All(Function(x) x > 0)
        p += Preis(ka.Length)
        For i = 0 To ka.Length - 1
          ka(i) -= 1
        Next
      End While
      ka = (From x In ka Where x > 0 Order By x Descending).ToArray
    End While
    preisliste.Add(p)
    '------------------------------------------
    ' 2. Preistest beginnend mit 4 Buchtiteln
    Dim kav = (From x In kauf Where x > 0 Order By x Descending).ToArray
    If kav.Length = 5 Then
      Dim erst = True
      p = 0
      ka = kav.Take(kav.Length - 1).ToArray
      While ka.Any(Function(x) x > 0)
        While ka.All(Function(x) x > 0)
          p += Preis(ka.Length)
          For i = 0 To ka.Length - 1
            ka(i) -= 1
          Next
        End While
        If erst Then
          erst = False
          ka = ka.Concat({kav.Last}).ToArray '5. Buchtitel hinzufügen
        End If
        ka = (From x In ka Where x > 0 Order By x Descending).ToArray
      End While
      preisliste.Add(p)
    End If
    Return preisliste.Min
  End Function
 
  ''' <summary>
  ''' Berechnet den Preis mit Rabatt.
  ''' </summary>
  ''' <param name="anz">Anzahl der Bücher.</param>
  ''' <returns></returns>
  ''' <remarks></remarks>
  Private Function Preis(anz As Integer) As Double
    Dim ges = anz * BuchPreis
    Dim rab = ges * Rabatts(anz) / 100
    Return ges - rab
  End Function
Der Test mit {2, 2, 2, 1, 1} liefert diese Ausgabe:

Die 8 Bücher kosten zum Normalpreis 64,00 €.
Günstigster Kaufpreis mit Rabatt: 51,20 €
Ersparnis: 12,80 € Rabatt: 20,00%

Der Test mit {7, 4, 6, 4, 3} liefert diese Ausgabe:

Die 24 Bücher kosten zum Normalpreis 192,00 €.
Günstigster Kaufpreis mit Rabatt: 154,00 €
Ersparnis: 38,00 € Rabatt: 19,79%

Ich kann nicht 100%-ig garantieren, dass es immer den besten Preis findet, aber alle Tests waren bisher Korrekt.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Denksportaufgabe2.415teach-pro-as26.08.14 13:33
Re: Denksportaufgabe1.331Kuno6026.08.14 22:50
Re: Denksportaufgabe1.163teach-pro-as27.08.14 07:58

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel