Gå til innhold

[Løst]Finne største/minste tall


Anbefalte innlegg

Jeg prøver meg igjen :whistle:

 

I en listbox har jeg noen tall som er skrevet ut fra en matrise (kalles kanskje array - tabell?)

Når jeg skal finne største/minste tall tenkte jeg at det er lurt å sortere tallene. Da vil man jo se raskt hvilket tall som er minst (øverst) og størst (nederst).

 

Utfordringen var ikke så enkelt. Man skal bruke løkker for å hente ut det minste og det største tallet fra matrisen. Da står jeg fast.......

Lenke til kommentar
Videoannonse
Annonse

Bubblesort er så enkel at du kan tenke deg til hvordan den fungerer.

 

Dim iList() As Long
Public Sub SortList(ByRef lst() As Long)
 Dim X As Long
 Dim Incident As Boolean
 Dim start As Long
 Dim endlist AS Long
 Dim tmp As Long 
 start = LBound(lst)
 endlist = UBound(lst)
 Do
   Incident = False
   For X = start To endlist - 1
     ' Sort ascending
     ' Swap if value1 is greater than value2
     If lst(X) > lst(X + 1) Then
       tmp = lst(X + 1)
       lst(X + 1) = lst(X)
       lst(X) = tmp
       Incident = True
     End If
   Next X
 Loop While Incident
End Sub

Lenke til kommentar

Hei

Ja, jeg nevnte sortering og har brukt array.sort........Noe som fungerte greit.

Utfordringer var imidlertid å lage et prog som ikke brukte sortering. Det iobas nevner over høres interessant ut. Hvordan lager man koden for dette hvis tall(2) er størst (av totalt 5 tall).

 

Må ha inn med teskje

Lenke til kommentar

Hvis alt man skal er å finne høyest/lavest tall i en liste...

er det vel simplere .. å hoppe bukk over hele sorterings-idéen vil jeg tro.

 

Eks.

 

 Dim lng_Data(5) As Long
 
 lng_Data(0) = 12
 lng_Data(1) = -2
 lng_Data(2) = 4
 lng_Data(3) = 80
 
  Dim lngLow
  Dim lngHigh
  lngHigh = -2147483648#
  lngLow = 2147483647
  
  For Each lngValue In lng_Data
      If lngValue > lngHigh Then lngHigh = lngValue
      If lngValue < lngLow Then lngLow = lngValue
  Next

 

 

Edit: korrigert navnsetting i kode

Endret av b-urn
Lenke til kommentar

Hei

Dette fungerte jo glimrende.

Lurer på to ting:

Hvis det ikke ligger noen neg.tall vil laveste tall bli 0 (selv om tallet er ex.2)

 

Hva betyr

intHigh = -21......#

intLow = 21........

 

(Må nevna at jeg bruker vb.net og når det står # bak hightallene blir tallet -21...48.0#)

Lenke til kommentar

Vel i VB.net kan du skrive det slik:

 

        Dim int_Data(4) As Integer

 

        int_Data(0) = 12

        int_Data(1) = -2

        int_Data(2) = 4

        int_Data(3) = 80

 

        Dim intLow = Integer.MaxValue

        Dim intHigh = Integer.MinValue

 

        Dim intValue As Integer

        For Each intValue In int_Data

            If intValue > intHigh Then intHigh = intValue

            If intValue < intLow Then intLow = intValue

        Next

 

Blir kanskje litt klarere da?

 

Ikke? Variabelen intLow initieres med den høyeste verdien den kan inneholde.

 

Det gjøres for å sikre at variabelen blir oppdatert med (minst et av) tallene i listen. Alle tall i listen må være mindre enn (eller lik) den høyeste verdien variabelen kan inneholde. (Tilsvarende for intHigh)

 

Eks:

Anta at intLow settes til 0 til å begynne med.

Anta at man har en liste med verdiene: 1,2,3,4 og 5

 

Sammenlikningen

If intValue < intLow Then intLow = intValue

vil da aldri slå til. Verdien av intLow forblir 0, selv om laveste verdi skal være 1.

 

 

 

OT: IMO hadde det vært en fordel om det ble opprettet forskjellige kategorier for VB.net og VB6. Alternativt at det innarbeides rutine for å angi slik info i første post/emnefelt. Mja vet det finnes en .NET kategori... men VB-spørsmål har (naturligvis?) en tendens til å havne i Visual Basic kategorien, enten det er snakk om 6.0 eller .NET

 

 

 

Edit: Korrigert forklaring en smule (for ordens skyld)

Endret av b-urn
Lenke til kommentar
OT: IMO hadde det vært en fordel om det ble opprettet forskjellige kategorier for VB.net og VB6. Alternativt at det innarbeides rutine for å angi slik info i første post/emnefelt. Mja vet det finnes en .NET kategori... men VB-spørsmål har (naturligvis?) en tendens til å havne i Visual Basic kategorien, enten det er snakk om 6.0 eller .NET

Er fullstendig enig med deg. Spørsmål angående VB legges alltid i denne kategorien, selv om VB.NET muligens burde blitt lagt i denne. Derfor burde noen ta intiativet og skrive en sticky om det å informere om versjon og hva du ønsker. Jeg tror det ville spart alle parter for unødige misforståelser.

Lenke til kommentar
Spørsmål angående VB legges alltid i denne kategorien, selv om VB.NET muligens burde blitt lagt i denne. Derfor burde noen ta intiativet og skrive en sticky om det å informere om versjon og hva du ønsker. Jeg tror det ville spart alle parter for unødige misforståelser.

Enig jeg og. La oss rope på en moderator! :!:

Lenke til kommentar
Jeg er også helt enige med dere. Så selv om jeg begynte å like meg her skal jeg heretter poste i .NET programmering.

Synes egentlig du burde fortsett å poste i VB-kategorien jeg.

 

Dt er liksom så mye plunder å rote gjennom 100-vis av ASP.NET spørsmål i .NET kategorien.... når det er VB man er interessert i å lese om/svare på.

 

Da er det bedre å bare merke Emne (eks. "Finne største/minste tall (VB.NET)" )

eller bare angi det i første post.

Lenke til kommentar

har ikke lest hele traaden, men her er to helt greie funksjoner som returnerer den hoyste og laveste verdien i en ListBox.

 

private function GetMin(MyListBox as ListBox) as long
   dim i as long
   dim minval as long
   minval = MyListBox.listindex(0)
   for i = 0 to MyListBox.ListCount step 1
       if clng(MyListbox.listindex(i)) < minval then minval = clng(MyListbox.listindex(i))
   next i
   GetMin = minval
end function

private function GetMax(MyListBox as ListBox) as long
   dim i as long
   dim maxval as long 
   maxval = MyListBox.listindex(0)
   for i = 0 to MyListBox.ListCount step 1
       if clng(MyListbox.listindex(i)) > maxval then maxval = clng(MyListbox.listindex(i))
   next i
   GetMax = maxval
end function

 

OBS, har ikke vb paa maskinen jeg sitter paa naa, og er usikker paa om det er .index som er navnet paa funksjonen til Listboksen. Uansett, det er ihvertfall den funksjonen som returnerer verdien til en gitt index i en listboks.

 

EDIT : endret til ListIndex, takk GeirGrusom

Endret av dga01
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...