MultiIndexOf

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Unsere Datenschutzerklärung wurde aktualisiert. Mit der Nutzung unseres Forums akzeptierst Du unsere Datenschutzerklärung. Du bestätigst zudem, dass Du mindestens 16 Jahre alt bist.

    • Findet auch mehrere Vorkommen des Suchwertes in Arrays.

      Die Besonderheit: Sucht in Arrays des Typs Integer, Longint, Quadint, Float, Single, String und Widestring.
      Es kann ein dynamisches Array sein oder ein festes Array bis zu 3 Dimensionen.

      Der Suchwert muss mit dem Arraytyp übereinstimmen.
      Der 3. Parameter ist entweder -1 für alle Vorkommen, oder die gewünschte maximale Anzahl.

      Die Dimensionen (wenn vorhanden) werden mit Kommata getrennt. Die Fundstellen werden durch Semikola getrennt.

      Quellcode

      1. Declare int wuerfel[25,25], string s
      2. $I c:\XProfan\Projekte\Include\MultiIndexOf.inc
      3. cls
      4. wuerfel[3,8] = 17
      5. wuerfel[12,12] = 17
      6. wuerfel[17, 3] = 17
      7. wuerfel[24,25] = 17
      8. Print "wuerfel[3,8] = 17"
      9. Print "wuerfel[12,12] = 17"
      10. Print "wuerfel[17, 3] = 17"
      11. Print "wuerfel[24,25] = 17"
      12. Print " "
      13. s = MultiIndexOf( wuerfel[], 17,-1 ) : print s $ " -- Len: " $ Len(s,";")
      14. Print " "
      15. s = MultiIndexOf( wuerfel[], 17, 1 ) : print s $ " -- Len: " $ Len(s,";")
      16. Print " "
      17. s = MultiIndexOf( wuerfel[], 17, 2 ) : print s $ " -- Len: " $ Len(s,";")
      18. Print " "
      19. s = MultiIndexOf( wuerfel[], 17, 3 ) : print s $ " -- Len: " $ Len(s,";")
      20. Print "\nLastIndexOf:"
      21. s = MultiIndexOf( wuerfel[], 17,-1 ) : print SubStr$(s, Len(s,";"), ";") $ " -- Idx: " $ Len(s,";")
      22. waitend
      Alles anzeigen


      Quellcode: MultiIndexOf.inc

      1. ' Autor: Michael Wodrich
      2. ' XProfan X3.1
      3. Proc MultiIndexOf // liefert alle Indizes mit Semikolon getrennt in Textform (Dimensionen mit Komma getrennt)
      4. Declare string PT, int PC : PT = PType$(1) : PC = %PCount
      5. Var int MaxFunde = 0
      6. Select Left$(PT,2)
      7. CaseOf "%[" // Integer (Int)
      8. Parameters int arr[], Wert, MaxFundeI
      9. MaxFunde = MaxFundeI
      10. CaseOf "&[" // Longint (Long)
      11. Case PC = 2 : Parameters long arr[], Wert
      12. Case PC = 3 : Parameters long arr[], Wert, int MaxFundeL
      13. Case PC = 3 : MaxFunde = MaxFundeL
      14. CaseOf "Q[" // Quadint (Quad)
      15. Parameters quad arr[], Wert, int MaxFundeQ
      16. MaxFunde = MaxFundeQ
      17. CaseOf "![" // Float (Double)
      18. Parameters float arr[], Wert, int MaxFundeF
      19. MaxFunde = MaxFundeF
      20. CaseOf "S[" // Single
      21. Parameters single arr[], Wert, int MaxFundeS
      22. MaxFunde = MaxFundeS
      23. CaseOf "$[" // String
      24. Parameters string arr[], Wert, int MaxFundeStr
      25. MaxFunde = MaxFundeStr
      26. CaseOf "W[", "µ[" // Widestring (Wide)
      27. Parameters wide arr[], Wert, int MaxFundeW
      28. MaxFunde = MaxFundeW
      29. Otherwise
      30. Parameters long arr[], Wert, int MaxFundeL
      31. MaxFunde = MaxFundeL
      32. EndSelect
      33. Declare int i, j, k, dimen, max_1, max_2, max_3
      34. var int start_1 = 0
      35. var int start_2 = 0
      36. var int start_3 = 0
      37. var int found = 0
      38. var int Funde = 0
      39. var string Erg = "-1"
      40. If InStr("[",PT) > 0 // nur Array erlaubt
      41. If InStr("[]",PT) > 0 // dynamisches Array
      42. max_1 = SizeOf(arr[]) - 1
      43. For i, start_1, max_1
      44. If arr[i] = Wert
      45. If MaxFunde <> 0
      46. Inc Funde
      47. If Erg = "-1" : Erg = Str$(i) : Else : Erg = Erg $ "; " $ Str$(i) : EndIf
      48. If MaxFunde <> -1 : If Funde >= MaxFunde : found = 1 : BREAK : EndIf : EndIf
      49. Else
      50. Erg = Str$(i) : found = 1 : BREAK
      51. EndIf
      52. EndIf
      53. EndFor
      54. Else // dimensioniertes Array arr[n {,n {,n}}]
      55. Dimen = Len(PT) - Len(Translate$(PT, ",", "")) + 1
      56. PT = Del$(PT,1,2)
      57. PT = Del$(PT,Len(PT),1)
      58. max_1 = val(SubStr$(PT, 1, ","))
      59. max_2 = val(SubStr$(PT, 2, ","))
      60. max_3 = val(SubStr$(PT, 3, ","))
      61. Select Dimen
      62. CaseOf 1 // arr[n]
      63. For i, start_1, max_1
      64. If arr[i] = Wert
      65. If MaxFunde <> 0
      66. Inc Funde
      67. If Erg = "-1" : Erg = Str$(i) : Else : Erg = Erg $ "; " $ Str$(i) : EndIf
      68. If MaxFunde <> -1 : If Funde >= MaxFunde : found = 1 : BREAK : EndIf : EndIf
      69. Else
      70. Erg = Str$(i) : found = 1 : BREAK
      71. EndIf
      72. EndIf
      73. EndFor
      74. CaseOf 2 // arr[n,n]
      75. For i, start_1, max_1
      76. For j, start_2, max_2
      77. If arr[i,j] = Wert
      78. If MaxFunde <> 0
      79. Inc Funde
      80. If Erg = "-1" : Erg = Str$(i) + "," + Str$(j) : Else : Erg = Erg $ "; " $ Str$(i) + "," + Str$(j) : EndIf
      81. If MaxFunde <> -1 : If Funde >= MaxFunde : found = 1 : BREAK : EndIf : EndIf
      82. Else
      83. Erg = Str$(i) + "," + Str$(j) : found = 1 : BREAK
      84. EndIf
      85. EndIf
      86. EndFor
      87. Case found : BREAK
      88. EndFor
      89. CaseOf 3 // arr[n,n,n]
      90. For i, start_1, max_1
      91. For j, start_2, max_2
      92. For k, start_3, max_3
      93. If arr[i,j,k] = Wert
      94. If MaxFunde <> 0
      95. Inc Funde
      96. If Erg = "-1" : Erg = Str$(i) + "," + Str$(j) + "," + Str$(k) : Else : Erg = Erg $ "; " $ Str$(i) + "," + Str$(j) + "," + Str$(k) : EndIf
      97. If MaxFunde <> -1 : If Funde >= MaxFunde : found = 1 : BREAK : EndIf : EndIf
      98. Else
      99. Erg = Str$(i) + "," + Str$(j) + "," + Str$(k) : found = 1 : BREAK
      100. EndIf
      101. EndIf
      102. EndFor
      103. Case found : BREAK
      104. EndFor
      105. Case found : BREAK
      106. EndFor
      107. EndSelect
      108. EndIf
      109. EndIf
      110. Return Erg
      111. EndProc
      Alles anzeigen
      Programmieren, das spannendste Detektivspiel der Welt.