Foro | | | | - Página 1 - |
| ![Andreas Koch: 30.08.2012](.././../../i/a/3162.gif) Andreas Koch | ¡Hola zusammen,
hier ha se en me una kleines Problema en Übergabe uno Arrays a una nProc ergeben.
Und zwar kommt cada vez el angehängte Fehlermeldung (Application Crash), después de el erste Ergebnis ausgedruckt wurde. Kann me alguien erklären, Yo como falso mache? KompilierenMarcaSeparación |
| | | | |
| | | | | - Página 1 - |
| ![Nico Madysa: 30.08.2012](.././../../i/a/13527651904b3fcf583c5c0.png) Nico Madysa | So weit Yo weiß, puede Arrays no a NProcs transferencia voluntad. Nur Bereiche#, Cuerdas$, Longs& y Floats! son erlaubt. |
| | | | |
| | ![iF: 30.08.2012](.././../../i/a/1.gif) | Bitte siehe Datentypen: [...] ![](/intl/i/lnk.gif)
Nativ voluntad (como de Nico ya erwähnt) Cuerdas, Floats & Longs unterstützt.
Si usted una Wertekette como Arrays transferencia möchtest entonces hole Usted simplemente
una Speicher z.B. por globalAlloc: KompilierenMarcaSeparaciónvar meinSpeicher&=globalAlloc(gPTR,20)// 20 Byte Speicher reservieren und Handle in meinSpeicher& merken > y lege hay hinein Su Werte: KompilierenMarcaSeparaciónlong meinSpeicher&,0=10,20,30,40,50 > Ein Largo benötigt en el Speicher 4 Byte y una Float 8 -
5 Floats en el Speicher legen also así: KompilierenMarcaSeparación |
| |
| | ![Andreas Koch: 30.08.2012](.././../../i/a/3162.gif) Andreas Koch | Gracias para el Antwort.
Dann Yo iFs Contribución hier wohl algo falso interpretiert.
[...] ![](/intl/i/lnk.gif) |
| | | | |
| | ![iF: 30.08.2012](.././../../i/a/1.gif) | Welchen Contribución genau? |
| | | | |
| | ![Nico Madysa: 30.08.2012](.././../../i/a/13527651904b3fcf583c5c0.png) Nico Madysa | Vermutlich el hier: [...] porque lo en él así klingt, como debería uno sólo el Schlüsselwort "proc" por "nproc" sustituir y alles wäre knorke. |
| | | | |
| | ![Andreas Koch: 30.08.2012](.././../../i/a/3162.gif) Andreas Koch | Offen gestanden, había du sólo en keinem deiner Beiträge geschrieben, dass el con Arrays nada va. Tuve el así interpretiert, dass lo auch con Arrays funktioniert (y mich ya gefreut...). Eigentlich hätte Yo de el letzten Contribución entnehmen puede, me war a dahin sólo todavía nie aufgefallen, dass uno a APIs no Arrays übergibt. Aber vermutlich wolltest du me como genau el mitteilen, qué ahora a diesem Thema hier geführt ha. Sorry para el Umstände. Bin manchmal bisschen schwer de Begriff. |
| | | | |
| | ![iF: 30.08.2012](.././../../i/a/1.gif) | Verstehe. Das hier una vez durchlesen: [...] -
es quasi una bastante bastante einfaches Profano aber eben como Unterstützung a XProfan
con allen positiven Características uno nativen Profans.
Offen gestanden, había du sólo en keinem deiner Beiträge geschrieben, dass el con Arrays nada va.
Sí, simplemente porque el "soooo" en efecto no bastante stimmt, porque auch si la Array-
Schreibweise no verwendet se, así son Arrays sí Datenketten y esta wiederum
son ligeramente por Speicher anzufertigen y wiederum auch ligeramente con nProcs
verwertbar. Tuve intenta dafür 1-2 Beispiele a geben. Si usted no weiterkommst
entonces simplemente fix informe porque entonces remendar wir el zusammen. |
| | | | |
| | ![funkheld: 30.08.2012](.././../../i/a/noavatar.gif) funkheld | Fehlermeldung: meineFloats undeklariert....
Gruss |
| | | | |
| | ![iF: 30.08.2012](.././../../i/a/1.gif) | determinado porque Yo una Undzeichen vergessen habe:
getFloat(meineFloats&,8*3)
como geschrieben simplemente en el Editor hier getippt |
| | | | |
| | ![Andreas Koch: 31.08.2012](.././../../i/a/3162.gif) Andreas Koch | Sorry Personas, Yo bin ya otra vez steckengeblieben. Jetzt Yo el Arrays![] en Bereiche# umgewandelt y el transferencia, así weit tan bueno. Er scheint auch con Procs correcto a rechnen. Aber en nProcs beschwert él se en el Procedimiento DreiecksmatrixTest sólo, dass FHG% y Anzahl_Lastfaelle% no deklariert seien (obwohl el doch con transferencia voluntad). Wenn Yo el deklariere, bekomme Yo anschließend una seltsame Fehlermeldung, siehe Anhang. KompilierenMarcaSeparaciónWindow 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
Disponer L#, V#, A#
Habt una wenig Geduld con me, Yo arbeite no tan largo con Profano....![](.././../../i/s/qq8.gif) |
![](/intl/i/dw.gif) | | | | |
| | ![iF: 31.08.2012](.././../../i/a/1.gif) | Keine Sorge, como es en cada Fall genügend Geduld disponible.
Usted verwendest en el nProcs Integer ( % ) -
en nProcs hay Longs ( & ), Floats ( ! ) y Cuerdas ( $ ) -
nutze also en lugar de el Integer ( % ) el Longs ( & ).
El nProcs son en manchen Dingen algo pingeliger -
así necesario Float-Konstanten siempre con Dezimaltrenner/ Punkt
ausgeschrieben voluntad.
Z.B. 1.0 en lugar de 1 oder 0.0 en lugar de 0.
Usted schreibst: if Faktor!<>0 en lugar de if Faktor!<>0.0
Darum meckert XPSE el Largo se da ( el 0 ) aber Float esperado se
en el Función dreiecksmatrixtest.
Usted schreibst en el nProc SMAT: Parámetros Zona#, debería aber bereich&
heissen.
Tip: Statt Float Zona#,(Spalte&*Size%+Zeile&)*8=Wert! qué aber Float Zona&,(Spalte&*Size%+Zeile&)*8=Wert! heissen debería en nProcs más bien setFloat(Bereich&,(Spalte&*Size%+Zeile&)*8,Valor!) escribir.
Auch en el otro Procs el Bereichsvariablen en lugar de con # con & escribir. |
| | | | |
| | | | - Página 2 - |
| | ![Andreas Koch: 31.08.2012](.././../../i/a/3162.gif) Andreas Koch | Gracias para el Ayuda y el Lehrstunde, Yo glaube, como hätte Yo mich dusselig gesucht. Jetzt se ejecuta lo einwandfrei por y yo habe qué gelernt.![](.././../../i/s/03.gif) Ob lo correcto rechnet, muss Todavía prüfen. An y para se debería lo aber una lineares Gleichungssystem lösen puede (sofern en el Hauptdiagonalen no Nullen auftauchen). KompilierenMarcaSeparaciónWindow 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!
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.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!
Setfloat(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
Disponer L#, V#, A#
Apéndice: Der Quellcode es inzwischen geprüft y él scheint korrekt a rechnen. Er es en el Tat muy viel más rápido como vorher. Yo habe no genaue Messung gemacht, aber Faktor 2000 es realistisch. |
| | | | |
|
RespuestaThemeninformationenDieses Thema ha 4 subscriber: |