Neue Antwort erstellen

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.

Die letzte Antwort auf dieses Thema liegt mehr als 365 Tage zurück. Das Thema ist womöglich bereits veraltet. Bitte erstellen Sie ggf. ein neues Thema.

Informationen
Frage Bitte beantworten Sie die untenstehende Frage bzw. lösen Sie die untenstehende Aufgabe.
Nachricht
Internet-Adressen werden automatisch erkannt und umgewandelt.
Smiley-Code wird in Ihrer Nachricht automatisch als Smiley-Grafik dargestellt.
Sie können BBCodes zur Formatierung Ihrer Nachricht nutzen.

Vorheriger Beitrag

  • 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