Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Klurig mattefunktion

Postades av 2007-11-26 17:26:02 - Daniel Melin, i forum visual basic - allmänt, Tråden har 2 Kommentarer och lästs av 1034 personer

Behöver hjälp med en programmeringsbit..

5st tal från 1 t.om 9 ska slumpas fram samt ett tal mellan 10 och 100 (1-9 samt 11-99 alltså)

Jag skulle vilja ha en funktion som räknar ut vilken kombination av de 5 talen tillsammans med de 4 räknesätten som kommer närmast det 2siffriga talet..

exempel med 3 tal: 8, 3 och 5 och sen 22.. 3 * 5 + 8 ger 23, vilket borde vara så nära 22 vi kan komma


Svara

Sv: Klurig mattefunktion

Postades av 2007-11-26 20:14:55 - Niklas Jansson

Så himla klurig är den väl inte, om man inte försöker vara smart och göra vissa optimeringar.
Hur är det med att byta ordning på talen, att använda parenteser, osv.?
Om vi säger att vi kör med en fix ordning, och skippar korrekt operatorordning så får vi
Typ (i något pseudospråk):

CalcNext(Number SoFar, Numbers Left)
If no numbers left
return SoFar
else
For Each Operator In [+, -, *, /]
ThisTry = CalcNext(SoFar [operator] Left.First, Left.Rest)
if ThisTry is better than BestTry: BestTry = ThisTry
Next
return BestTry
end if

Precedensregler bör man kunna ordna genom att antingen införa parenteser eller möjlighet att ändra ordning.


Svara

Sv: Klurig mattefunktion

Postades av 2007-11-27 09:33:12 - Tomas Granlund

En (mycket naiv) variant, ändrar ordning och använder parenteser

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim slumpadeTal As New System.Collections.Generic.List(Of faktor)
        Dim målet As Double = CInt(Rnd() * 88) + 11

        For i As Integer = 1 To 5
            slumpadeTal.Add(New faktor(CInt(Rnd() * 8) + 1))
        Next

        Dim detbästa As faktor = New faktor(0)
        Dim resarr As System.Collections.Generic.List(Of faktor) = HittaAllaMöjligaVärden(slumpadeTal)
        For Each res As faktor In resarr
            If Math.Abs(res.värde - målet) < Math.Abs(detbästa.värde - målet) Then detbästa = res
        Next
        Console.WriteLine(detbästa.namn & "=" & detbästa.värde & " (målet är " & målet & ")")
    End Sub

    Private Function HittaAllaMöjligaVärden(ByVal enLista As System.Collections.Generic.List(Of faktor)) As System.Collections.Generic.List(Of faktor)
        Dim resultat As New System.Collections.Generic.List(Of faktor)
        If enLista.Count = 1 Then
            ' har listan bara ett värde så kan vi inte gärna göra mycket mer än returnera det
            resultat.Add(enLista(0))
        Else
            For Each enFaktor As faktor In enLista
                Dim temp As New System.Collections.Generic.List(Of faktor)

                ' kopiera listan eftersom vi destruerar den (lol)
                For Each enAnnanFaktor As faktor In enLista
                    temp.Add(enAnnanFaktor)
                Next

                ' plocka bort det värde vi är på
                temp.Remove(enFaktor)

                ' pröva alla möjliga operationer på resten av listan och värdet vi är på
                For Each res As faktor In HittaAllaMöjligaVärden(temp)
                    resultat.Add(New faktor(res.värde + enFaktor.värde, res.namn & "+" & enFaktor.värde))
                    resultat.Add(New faktor(res.värde - enFaktor.värde, res.namn & "-" & enFaktor.värde))
                    resultat.Add(New faktor(res.värde * enFaktor.värde, "(" & res.namn & ")*" & enFaktor.värde))
                    If enFaktor.värde <> 0 Then
                        resultat.Add(New faktor(res.värde / enFaktor.värde, "(" & res.namn & ")/" & enFaktor.värde))
                    End If
                    If res.värde <> 0 Then
                        resultat.Add(New faktor(enFaktor.värde / res.värde, enFaktor.värde & "/(" & res.namn & ")"))
                    End If
                    resultat.Add(New faktor(enFaktor.värde - res.värde, enFaktor.värde & "-(" & res.namn & ")"))
                Next
            Next
        End If
        Return resultat
    End Function

    Private Class faktor
        Public namn As String
        Public värde As Double
        Public Sub New(ByVal värde As Double)
            Me.namn = CStr(värde)
            Me.värde = värde
        End Sub
        Public Sub New(ByVal värde As Double, ByVal namn As String)
            Me.namn = namn
            Me.värde = värde
        End Sub
    End Class


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 725
27 958
271 751
446
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies