Übergabe mehrdimensionaler Arrays an SUBs

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

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Übergabe mehrdimensionaler Arrays an SUBs

      Hallo Leute,

      die mehrdimensionalen Arrays gibt es ja glaube ich in Bascom noch nicht so lange. Nun versuche ich ein solches an eine SUB zu übergeben aber das scheint nicht so wirklich zu funktionieren. Bei eindimensionalen Arrys ist das kein Problem. Hier mal ein Beispiel

      Quellcode

      1. $regfile = "m2560def.dat"
      2. $crystal = 16000000
      3. $hwstack = 255
      4. $swstack = 63
      5. $framesize = 127
      6. $baud = 115200
      7. $sim
      8. Dim I As Byte
      9. Dim J As Byte
      10. Dim Matrix1(3 , 3) As Single
      11. Matrix1(1 , 1) = 1
      12. Matrix1(1 , 2) = 2
      13. Matrix1(1 , 3) = 3
      14. Matrix1(2 , 1) = 4
      15. Matrix1(2 , 2) = 5
      16. Matrix1(2 , 3) = 6
      17. Matrix1(3 , 1) = 7
      18. Matrix1(3 , 2) = 8
      19. Matrix1(3 , 3) = 9
      20. For I = 1 To 3
      21. For J = 1 To 3
      22. Print Matrix1(i , J) ; " " ;
      23. Next
      24. Print ""
      25. Next
      26. Declare Sub Matrix_print(mat() As Single)
      27. Call Matrix_print(matrix1())
      28. Dim Vector1(3) As Single
      29. Vector1(1) = 15
      30. Vector1(2) = 26
      31. Vector1(3) = 37
      32. Declare Sub Vector_print(vec() As Single)
      33. Call Vector_print(vector1())
      34. Do
      35. Loop
      36. End
      37. Sub Matrix_print(mat() As Single)
      38. 'die Ausgabe funktioniert nicht
      39. For I = 1 To 3
      40. For J = 1 To 3
      41. Print Mat(i , J) ; " " ;
      42. Next
      43. Print ""
      44. Next
      45. End Sub
      46. Sub Vector_print(vec())
      47. For I = 1 To 3
      48. Print Vec(i) ; " " ;
      49. Next
      50. Print ""
      51. End Sub
      Alles anzeigen
      Sieht da jemand einen Fehler?

      Besten Dank und schöne Grüße
      Rakohr
    • Bei dem declare der sub erkennt man ja nicht die Dimension der Matrix. Es fehlt einfach die Syntax dazu. Oder du versuchst es mal so wie beim dim, die Anzahl der Werte pro dimension bei declare mit anzugeben. Ich denke das müsste man immer angeben, woher soll der kompiler wissen, wieviel Platz er im stack für diese localen Variablen reservieren soll?
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Hallo tschoeatsch,

      danke für deinen Hinweis.

      tschoeatsch schrieb:

      woher soll der kompiler wissen, wieviel Platz er im stack für diese localen Variablen reservieren soll?
      Woher weiß er das denn bei einem eindimensionalen Vector. Da klappt es ja auch ohne jegliche Dimensionsangabe.
      Glaub mir ich habe schon alles mögliche durchprobiert, nichts hat funktioniert Wenn ich beim Declare die Dimension angeben. Dann meckert der Kompiler in der Schleife der Sub. Es ist hier nur noch das Element mat(3,3) gültig, wobei beim print auch nur eine 0 ausgegeben wird und nicht wie erwatet eine 9.

      Hier mal der geänderte Code

      Quellcode

      1. $regfile = "m2560def.dat"
      2. $crystal = 16000000
      3. $hwstack = 255
      4. $swstack = 63
      5. $framesize = 127
      6. $baud = 115200
      7. $sim
      8. Dim I As Byte
      9. Dim J As Byte
      10. Dim Matrix1(3 , 3) As Single
      11. Matrix1(1 , 1) = 1
      12. Matrix1(1 , 2) = 2
      13. Matrix1(1 , 3) = 3
      14. Matrix1(2 , 1) = 4
      15. Matrix1(2 , 2) = 5
      16. Matrix1(2 , 3) = 6
      17. Matrix1(3 , 1) = 7
      18. Matrix1(3 , 2) = 8
      19. Matrix1(3 , 3) = 9
      20. For I = 1 To 3
      21. For J = 1 To 3
      22. Print Matrix1(i , J) ; " " ;
      23. Next
      24. Print ""
      25. Next
      26. Declare Sub Matrix_print(mat(3 , 3) As Single)
      27. Call Matrix_print(matrix1())
      28. Dim Vector1(3) As Single
      29. Vector1(1) = 15
      30. Vector1(2) = 26
      31. Vector1(3) = 37
      32. Declare Sub Vector_print(vec() As Single)
      33. Call Vector_print(vector1())
      34. Do
      35. Loop
      36. End
      37. Sub Matrix_print(mat(3 , 3) As Single)
      38. 'die Ausgabe funktioniert nicht
      39. For I = 1 To 3
      40. For J = 1 To 3
      41. Print Mat(i , J) ; " " ;
      42. Next
      43. Print ""
      44. Next
      45. End Sub
      46. Sub Vector_print(vec())
      47. For I = 1 To 3
      48. Print Vec(i) ; " " ;
      49. Next
      50. Print ""
      51. End Sub
      Alles anzeigen
    • In der Bascom Hilfe steht, das Arrays nur per byref übergen werden können und auch das declare mit leeren Klammern geht dort hervor (ohne Dimension), ist dort natürlich alles auf eindimensionale Arrays bezogen nicht auf Matritzen.

      Mehr oder weniger war es meinerseits erst mal nur ein Versuch, befasse mich gerade mit Martixberechnungen, Sensorfusing usw...
    • ja die AN#´s kenne ich. Eben die beruhen noch auf eindimensionale Arrays.
      Wenn es denn aber jetzt schon die Möglichkeit gibt Matritzen zu verwenden, wollte ich diese auch nutzen und neue Wege beschreiten ;)

      Die Matrixalgebra läuft bei mir schon. Da ist es bei den Indizes wesentlich einfacher den Überblick zu behalten asl bei der eindimensionalen Lösung. Wenn denn da nicht die Übergabe wäre...