login  Naam:   Wachtwoord: 
Registreer je!
 Forum

BinarySearchValue (Opgelost)

Offline Jimbo - 27/10/2009 19:28 (laatste wijziging 27/10/2009 19:41)
Avatar van JimboLid Ik heb een vraag betreffende een waarde te koppelen aan een index.
Hieronder staat de code maar mag niet veranderd worden.

Om de berekening te stellen zou ik een "do loop" gebruiken en een "if then else".

Ik zie alleen niet in hoe ik de index moet laten zoeken(optellen).

Er mag alleen tussen de blok zelf toegevoegt worden.
Kan iemand hierbij helpen?

  1. 'Vul onderstaande code aan met een binary search, aan de code die je meekrijgt mag je NIETS veranderen :
  2.  
  3. 'Module GequoteerdeOefening03
  4. ' Sub Main()
  5. ' ' Configure source collection :
  6. ' ' 0 1 2 3 4 5 6 7 8 9
  7. ' Dim zipcodes() As String = {"1000", "Brussel", "2000", "Antwerpen", "3000", "Leuven", "8000", "Brugge", "9000", "Gent"}
  8. ' Dim zipcodesCount As Integer = 5
  9. ' '
  10. ' ' Assemble test searchvalues collection :
  11. ' Dim searchValues() As String = {"0500", "1000", "2000", "3000", "4000", "8000", "9000", "9500"}
  12. ' ' Search for every testvalue :
  13. ' For searchValueIndex = 0 To 7
  14. ' ' Set the searchvalue :
  15. ' Dim searchValue As String = searchValues(searchValueIndex)
  16. ' '
  17. ' ' Perform a binary search for searchvalue in zipcodes(), set variable found to true if searchvalue is found,
  18. ' ' when searchvalue is found make sure variable index is set to position of searchvalue in zipcodes() :
  19. ' Dim index As Integer
  20. ' Dim found As Boolean = False
  21.  
  22.  
  23.  
  24. ' ...
  25.  
  26.  
  27.  
  28. ' '
  29. ' ' Output :
  30. ' If found Then
  31. ' Console.WriteLine(searchValue & " is zipcode of " & zipcodes(index + 1))
  32. ' Else
  33. ' Console.WriteLine(searchValue & " not found")
  34. ' End If
  35. ' Next
  36. ' '
  37. ' Console.ReadLine()
  38. ' End Sub
  39. ' End Module
  40.  
  41. 'Programmaverloop :
  42.  
  43. '0500 not found
  44. '1000 is zipcode of Brussel
  45. '2000 is zipcode of Antwerpen
  46. '3000 is zipcode of Leuven
  47. '4000 not found
  48. '8000 is zipcode of Brugge
  49. '9000 is zipcode of Gent
  50. '9500 not found
  51.  
  52. 'Opmerking :
  53.  
  54. 'Ook Strings kan je met de operatoren <, >, <=, >=, = en <> vergelijken, zo zal de Boolean expressie "abc" < "def" evalueren naar True.

Koen schreef:
Code tags ;)

2 antwoorden

Gesponsorde links
Offline Mario - 28/10/2009 15:14 (laatste wijziging 28/10/2009 15:46)
Avatar van Mario Crew algemeen Dit is de code waarmee het de uitkomst geeft zoals gevraagd.

  1. index = 0
  2. Do
  3. If searchValue = zipcodes(index * 2) Then
  4. found = True : index = index * 2
  5. Else
  6. index += 1
  7. End If
  8. Loop Until index = zipcodesCount Or found


Alleen, in de opgave staat dat je met een binarysearch moet werken. zo dus

  1. index = Array.BinarySearch(zipcodes, searchValue)
  2. If index > -1 Then found = True


Maar een bin search werkt alleen met een gesorteerde array en niet zoals die er nu staat. Een do loop is dan eveneens niet nodig.

Confused  
Offline Jimbo - 29/10/2009 18:13
Avatar van Jimbo Lid De Do loop heeft het nochtans opgelost.
In mijn binarysearch had ik geen -1
gaf verkeerde resultaten.
Merci!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.174s