Deutsch
Forum

Array und nProc

 

Andreas
Koch
Hallo zusammen,

hier hat sich bei mir ein kleines Problem bei der Übergabe eines Arrays an eine nProc ergeben.

Und zwar kommt jedes Mal die angehängte Fehlermeldung (Application Crash), nachdem das erste Ergebnis ausgedruckt wurde. Kann mir jemand erklären, was ich da falsch mache?
KompilierenMarkierenSeparieren
CLS
Declare HuckleberryFinn![], Tom!, Sawyer!
HuckleberryFinn![1]=1
HuckleberryFinn![2]=3
Tom!=1
Sawyer!=3

nproc Test1

    Parameters HuckleberryFinn![]
    Declare Ergebnis!
    Ergebnis!=HuckleberryFinn![1]+HuckleberryFinn![2]
    Return Ergebnis!

EndProc

nproc Test2

    Parameters a!,b!
    Declare Ergebnis!
    Ergebnis!=a!+b!
    Return Ergebnis!

EndProc

Print Test2(Sawyer!,Tom!)
Print Test1(HuckleberryFinn![])
Waitinput

243 kB
Hochgeladen:30.08.2012
Ladeanzahl46
Herunterladen
 
30.08.2012  
 




Nico
Madysa
So weit ich weiß, können Arrays nicht an NProcs übergeben werden. Nur Bereiche#, Strings$, Longs& und Floats! sind erlaubt.
 
30.08.2012  
 



Bitte siehe Datentypen: [...] 

Nativ werden (wie von Nico bereits erwähnt) Strings, Floats & Longs unterstützt.

Wenn Du eine Wertekette wie Arrays übergeben möchtest dann hole Dir einfach

einen Speicher z.B. per globalAlloc:
KompilierenMarkierenSeparieren
var meinSpeicher&=globalAlloc(gPTR,20)// 20 Byte Speicher reservieren und Handle in meinSpeicher& merken

und lege dort hinein Deine Werte:
KompilierenMarkierenSeparieren
long meinSpeicher&,0=10,20,30,40,50

Ein Long benötigt im Speicher 4 Byte und ein Float 8 -

5 Floats in den Speicher legen also so:
KompilierenMarkierenSeparieren
//speicher holen
var meineFloats&=globalAlloc(gPTR,5*8)
//floatwerte in den Speicher legen
float meineFloats&,0=1.1,2.2,3.3,4.4,5.5
//speicher an nProc übergeben
print myNProc(meineFloats&)
//speicher freigeben
globalFree(meineFloats&)
waitinput
end

nProc myNProc

    parameters meineFloats&
    //irgendwas mit floats machen... geben wir einfach z.B. den 4. Floatwert zurück
    return getFloat(meineFloats,8*3)

endProc


Achtung: ungetestet nur in den Editor hier reingeschrieben da grad kein XProfan zur Hand.
 
30.08.2012  
 




Andreas
Koch
Danke für die Antwort.

Dann habe ich iFs Beitrag hier wohl etwas falsch interpretiert.

[...] 
 
30.08.2012  
 



Welchen Beitrag genau?
 
30.08.2012  
 




Nico
Madysa
Vermutlich den hier: [...]  weil es darin so klingt, als müsste man nur das Schlüsselwort "proc" durch "nproc" ersetzen und alles wäre knorke.
 
30.08.2012  
 




Andreas
Koch
Offen gestanden, hattest du nur in keinem deiner Beiträge geschrieben, dass das mit Arrays gar nicht geht. Ich hatte das so interpretiert, dass es auch mit Arrays funktioniert (und mich schon gefreut...). Eigentlich hätte ich es aus dem letzten Beitrag entnehmen können, mir war bis dahin nur noch nie aufgefallen, dass man an APIs keine Arrays übergibt. Aber vermutlich wolltest du mir da genau das mitteilen, was jetzt zu diesem Thema hier geführt hat.
Sorry für die Umstände. Bin manchmal bisschen schwer von Begriff.
 
30.08.2012  
 



Verstehe. Das hier einmal durchlesen: [...]  -

es ist quasi ein ganz ganz einfaches Profan aber eben als Unterstützung zu XProfan

mit allen positiven Eigenschaften eines nativen Profans.


Offen gestanden, hattest du nur in keinem deiner Beiträge geschrieben, dass das mit Arrays gar nicht geht.


Ja, einfach weil das "soooo" ja auch nicht ganz stimmt, denn auch wenn die Array-

Schreibweise nicht verwendet wird, so sind Arrays ja Datenketten und diese wiederum

sind leicht per Speicher anzufertigen und wiederum auch leicht mit nProcs

verwertbar. Ich hatte versucht dafür 1-2 Beispiele zu geben. Wenn Du nicht weiterkommst

dann einfach fix melden denn dann basteln wir das zusammen.
 
30.08.2012  
 




funkheld
Fehlermeldung:
meineFloats undeklariert....

Gruss
 
30.08.2012  
 



bestimmt weil ich ein Undzeichen vergessen habe:

getFloat(meineFloats&,8*3)

wie geschrieben einfach in den Editor hier getippt
 
30.08.2012  
 




Andreas
Koch
Sorry Leute, ich bin schon wieder steckengeblieben.
Jetzt habe ich die Arrays![] in Bereiche# umgewandelt und die übergeben, so weit so gut. Er scheint auch mit Procs richtig zu rechnen.
Aber bei nProcs beschwert er sich in der Prozedur DreiecksmatrixTest erst, dass FHG% und Anzahl_Lastfaelle% nicht deklariert seien (obwohl die doch mit übergeben werden). Wenn ich die deklariere, bekomme ich anschließend eine seltsame Fehlermeldung, siehe Anhang.
KompilierenMarkierenSeparieren
Window 800,800
var Size%=6
Declare A#, Zeile&, Spalte&, Diagonale&, Faktor!, aux!,L#,Lastfall%,V#
DIM A#,Size%*Size%*8
DIM L#,Size%*8
DIM V#,Size%*8
Lastfall%=0
'Erzeugung zweier Zufallsmatrizen

WhileLoop 0,Size%-1

    Spalte&=&loop

    WhileLoop 0,Size%-1

        Zeile&=&loop
        SMAT(A#,Size%,Spalte&,Zeile&,1+Rnd())

        If Spalte&<1

            SMAT(L#,Size%,Spalte&,Zeile&,1+Rnd())

        EndIf

    EndWhile

EndWhile

'Umformung, Erzeugung einer Dreiecksmatrix

nproc DreiecksmatrixTest

    Parameters A#, L#, FHG%, Anzahl_Lastfaelle%
    Declare Diagonale&,Zeile&,Lastfall&,Faktor!,Spalte&, aux!, FHG%, Anzahl_Lastfaelle%

    WhileLoop 0,(FHG%-1),1

        Diagonale&=&loop

        WhileLoop Diagonale&+1,FHG%-1,1

            Zeile&=&loop
            '      WaitInput
            Faktor!=LMAT(A#,FHG%,Diagonale&,Zeile&)/LMAT(A#,FHG%,Diagonale&,Diagonale&)

            if Faktor!<>0

                WhileLoop 0,Anzahl_Lastfaelle%-1

                    Lastfall&=&loop
                    aux!=LMAT(L#,FHG%,Lastfall&,Zeile&)-Faktor!*LMAT(L#,FHG%,Lastfall&,Diagonale&)
                    SMAT(L#,FHG%,Lastfall&,Zeile&,aux!)

                EndWhile

                WhileLoop 0,FHG%-1,1

                    Spalte&=&loop
                    aux!=LMAT(A#,FHG%,Spalte&,Zeile&)-Faktor!*LMAT(A#,FHG%,Spalte&,Diagonale&)
                    SMAT(A#,FHG%,Spalte&,Zeile&,aux!)

                EndWhile

            EndIf

        EndWhile

    EndWhile

EndProc

nProc LMAT

    Parameters Bereich#, Size%, Spalte& , Zeile&
    Declare Result!
    Result!=Float(Bereich#, (Spalte&*Size%+Zeile&)*8)
    '  Print "Spalte&",Spalte&,"Zeile&",Zeile&, ": ", Result!
    Return Result!

EndProc

nProc SMAT

    Parameters Bereich#, Size%, Spalte&, Zeile&,Wert!
    ' Locate 1,1
    ' Print "Spalte&",Spalte&,"Zeile&",Zeile&,": ",Wert!
    Float Bereich#,(Spalte&*Size%+Zeile&)*8=Wert!

EndProc

'Rücksubstitution

nProc SolverTest

    Parameters Lastfall&, A#,L#, V#, FHG%
    Declare aux!, Zeile&, Spalte&, Diagonale&

    WhileLoop FHG%,1,-1

        Diagonale&=&loop-1
        aux!=0

        WhileLoop Diagonale&+1,FHG%-1,1

            Spalte&=&loop
            aux!=aux!+LMAT(A#,FHG%,Spalte&,Diagonale&)*LMAT(V#,FHG%,Lastfall&,Spalte&)

        EndWhile

        aux!=(LMAT(L#,FHG%,Lastfall&,Diagonale&)-aux!)/LMAT(A#,FHG%,Diagonale&,Diagonale&)
        SMAT(V#,FHG%,Lastfall&,Diagonale&,aux!)

    EndWhile

EndProc

DreiecksmatrixTest(A#, L#, Size%, 0)
SolverTest(0,A#,L#, V#, Size%)

WhileLoop 0,Size%-1

    Print LMAT(V#, Size%,0, &loop)

EndWhile

WaitInput
Dispose L#, V#, A#

Habt ein wenig Geduld mit mir, ich arbeite noch nicht so lange mit Profan....

167 kB
Hochgeladen:31.08.2012
Ladeanzahl49
Herunterladen
 
31.08.2012  
 



Keine Sorge, da ist auf jeden Fall genügend Geduld vorhanden.

Du verwendest in den nProcs Integer ( % ) -

in nProcs gibt es Longs ( & ), Floats ( ! ) und Strings ( $ ) -

nutze also statt der Integer ( % ) die Longs ( & ).

Die nProcs sind in manchen Dingen etwas pingeliger -

so müssen Float-Konstanten immer mit Dezimaltrenner/ Punkt

ausgeschrieben werden.

Z.B. 1.0 statt 1 oder 0.0 statt 0.

Du schreibst: if Faktor!<>0 statt if Faktor!<>0.0

Darum meckert XPSE das Long gegeben ist ( die 0 ) aber Float erwartet wird

in der Funktion dreiecksmatrixtest.

Du schreibst in der nProc SMAT: Parameters Bereich#, müsste aber bereich&

heissen.

Tip: Statt Float Bereich#,(Spalte&*Size%+Zeile&)*8=Wert! was aber
Float Bereich&,(Spalte&*Size%+Zeile&)*8=Wert! heissen müsste in nProcs lieber
setFloat(Bereich&,(Spalte&*Size%+Zeile&)*8,Wert!) schreiben.

Auch in den anderen Procs die Bereichsvariablen statt mit # mit & schreiben.
 
31.08.2012  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

5.351 Betrachtungen

Unbenanntvor 0 min.
rafl26.12.2020
Georg Teles13.02.2016
Andreas Koch08.09.2015
Peter Max Müller10.10.2014
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie