Arrays Übergabe und als Funktionsparameter

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Flush

Betreff: Arrays Übergabe und als Funktionsparameter

BeitragFr, Dez 09, 2016 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute,

ich beschäftige mich seit einiger Zeit mit Funktionen und Arrays. Das HAndling jedes einzelnen ist kein Problem, wenn es aber darum geht Arrays an Funktionen zu übergeben und Arrays dann als Funktionsparameter zu nutzen habe ich so meine Probleme.
In der Tutorialsektion gibt es sehr viele Artike zu Types aber bei Arrays sieht es dürftig aus. Arrays sind in B3D zwar standardmäßig gglobal aber in bestimmten Fällen spart bdas Übergeben eines Arrays an eine Funktion einfach Zeit.

In meinem Fall möchte ich 3 verschiedene Arreis mit den Werten der ersten 180 Grad vom Sinus füllen und diese mit den Faktoren 250, 25 und 10 multiplizieren.

Ich bekomme aber ständig einen: Error:Illegal Type Conversion! Sad

Könnt Ihr mir da weiterhelfen? Question

Hier mal mein Quellcode:


Code: [AUSKLAPPEN]


Dim arr_Sin_1(180)
Dim arr_Sin_2(180)
Dim arr_Sin_3(180)

calcSine(250 , arr_Sin_3(180))
calcSine(25   , arr_Sin_3(180))
calcSine(10   , arr_Sin_3(180))

Function calcSine(factor, arr[180])

   Dim dummyArr(180)
   dummyArr(180) = arr(180)
   For j = 0 To 180
      sinus = Sin(j)*factor
      dummyArr(j) = sinus
   Next
      
   Return 0
End Function



Vielen Dank für eure Mühe vorab,
Flush

Flush

BeitragFr, Dez 09, 2016 20:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist meine Frage zu blöd Embarassed oder zu kompliziert Sad ?

Vielen Dank für eure Mühe vorab,
Flush

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragFr, Dez 09, 2016 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt nur Blitzarray`s die übergeben werden können
Diese werden nicht mit Dim erstellt sondern mit
local oder Global.
und werden mit eckigen Klammern geschrieben

etwa so...
Code: [AUSKLAPPEN]
; Blitzarray definieren
Local arr_Sin_1[180]
Local arr_Sin_2[180]
Local arr_Sin_3[180]

calcSine(250  , arr_Sin_1)
calcSine(25   , arr_Sin_2)
calcSine(10   , arr_Sin_3)

Function calcSine(factor, arr[180])

   For j = 0 To 180
      sinus = Sin(j)*factor
      Arr[j] = sinus
   Next
     
   Return 0
End Function
[BB2D | BB3D | BB+]

Holzchopf

Meisterpacker

BeitragFr, Dez 09, 2016 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Du mischst Arrays (die mit dem Dim) mit BlitzArrays (die mit den eckigen Klammern). Wenn du nur BlitzArrays benutzt, klappt's mit der Übergabe als Funktionsparameter:

BlitzBasic: [AUSKLAPPEN]
; BlitzArrays werden mit Local oder Global und eckigen Klammern definiert
Local arr_Sin_1[180]
Local arr_Sin_2[180]
Local arr_Sin_3[180]

; Beim Übergeben eines Arrays an eine Funktion wird nur dessen Name angegeben
calcSine(250 , arr_Sin_1)
calcSine(25 , arr_Sin_2)
calcSine(10 , arr_Sin_3)

; Die Funktion muss wissen, dass ein BlitzArray übergeben werden soll, dafür
; muss der Parameter als BlitzArray in der richtigen Grösse definiert sein
Function calcSine(factor, arr[180])

For j = 0 To 180
sinus = Sin(j)*factor
arr[j] = sinus
Next

Return 0
End Function


mfG
Holzchopf

edit
Ey, Ralli war schneller
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
  • Zuletzt bearbeitet von Holzchopf am Fr, Dez 09, 2016 21:10, insgesamt einmal bearbeitet

BladeRunner

Moderator

BeitragFr, Dez 09, 2016 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Blitzarrays sind die Lösung für dein Problem.
Rallimen hat das wesentliche schon erläutert.
Zitat:

Ist meine Frage zu blöd oder zu kompliziert ?

Vielen Dank für eure Mühe vorab,
Flush


Weder noch, aber nach knapp einer halben Stunde schon zu pushen ob man eine Antwort erhält ist eventuell ein wenig ... schnell geschossen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Flush

BeitragFr, Dez 09, 2016 21:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Viiiiiiiiiiiiiiieeeeeelen Dank Leute Very Happy ,

Ihr seid echt die besten Cool Exclamation
Ich hab schon ne Ewigkeit versucht damit klar zu kommen und jetzt funktionierts Idea .

Schade dass multidimensionale also Dim Arraysn nich übergeben werden können aber es gibt ja noch BlitzMax.

@BladeRunner
Ja ne halbe Stunde war wenig aber ich schon am Rande eines Nervenzusammenbruchs Smile

Danke für Eure Hilfe,
Flush

Hubsi

BeitragSa, Dez 10, 2016 1:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Schade dass multidimensionale also Dim Arraysn nich übergeben werden können


Dim-Arrays sind ohnehin global, mir will der Sinn eines übergebens nicht einleuchten?
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

BladeRunner

Moderator

BeitragSa, Dez 10, 2016 6:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Beispiel hat er ja mitgeliefert - bearbeiten beliebiger Arrays mit einer Funktion, was mit einem globalen Dim-Array nicht funktioniert. Die Blitzarrays helfen da, lassen aber in der Tat die Multidimensionalität vermissen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group