Forum | | | | - page 1 - |
| Andreas Koch | allô zusammen,
ici hat sich chez mir un kleines Problem chez qui Übergabe eines Arrays à une nProc ergeben.
et zwar venez chaque la fois qui angehängte Fehlermeldung (Application Crash), après que cela erste Ergebnis ausgedruckt wurde. peux mir quelqu'un expliquer, quoi je là faux fais? KompilierenMarqueSéparation |
| | | | |
| | | | | - page 1 - |
| Nico Madysa | So large je sais, peut Arrays pas à NProcs transfert volonté. seulement Bereiche#, Cordes$, Longs& et Floats! sommes erlaubt. |
| | | | |
| | | s'il te plaît siehe Datentypen: [...]
Nativ volonté (comment de Nico bereits erwähnt) Cordes, Floats & Longs soutenu.
si Vous Wertekette comment Arrays transfert vouloir ensuite hole Dir simple
une grenier z.B. per globalAlloc: KompilierenMarqueSéparationvar meinSpeicher&=globalAlloc(gPTR,20)// 20 Byte Speicher reservieren und Handle in meinSpeicher& merken > et lege là hinein Votre Werte: KompilierenMarqueSéparationlong meinSpeicher&,0=10,20,30,40,50 > un Long nécessaire im grenier 4 Byte et un Float 8 -
5 Floats dans den grenier poser alors so: KompilierenMarqueSéparation |
| |
| | Andreas Koch | merci pour qui Antwort.
ensuite habe je iFs Beitrag ici wohl quelque chose faux interpretiert.
[...] |
| | | | |
| | | Welchen Beitrag oui c'est ca? |
| | | | |
| | Nico Madysa | Vermutlich den ici: [...] weil es y so klingt, comme devrait on seulement cela Schlüsselwort "proc" par "nproc" ersetzen et alles wäre knorke. |
| | | | |
| | Andreas Koch | Offen gestanden, hattest du seulement dans aucun deiner Posts geschrieben, dass cela avec Arrays gar pas allez. je hatte cela so interpretiert, dass es aussi avec Arrays funktioniert (et mich déjà gefreut...). Eigentlich hätte je es aus dem letzten Beitrag entnehmen peut, mir était jusqu'à dahin seulement encore nie aufgefallen, dass on à APIs aucun Arrays übergibt. mais probablement wolltest du mir là oui c'est ca cela mitteilen, quoi maintenant trop diesem Thema ici geführt hat. Sorry pour qui Umstände. suis quelquefois bisschen schwer de Begriff. |
| | | | |
| | | Verstehe. cela ici einmal durchlesen: [...] -
c'est quasi un entier entier simple Profan mais plan comme Unterstützung trop XProfan
avec allen positiven Eigenschaften eines nativen Profans.
Offen gestanden, hattest du seulement dans aucun deiner Posts geschrieben, dass cela avec Arrays gar pas allez.
oui, simple weil cela "soooo" oui aussi pas entier stimmt, car aussi si le Array-
Schreibweise pas verwendet wird, so sommes Arrays oui Datenketten et cet wiederum
sommes léger per grenier anzufertigen et wiederum aussi léger avec nProcs
verwertbar. je hatte versucht pour 1-2 Beispiele trop donner. si Du pas weiterkommst
ensuite simple fix annoncer car ensuite bricoler wir cela zusammen. |
| | | | |
| | funkheld | Fehlermeldung: meineFloats undeklariert....
Gruss |
| | | | |
| | | bestimmt weil je un Undzeichen oublier qc habe:
getFloat(meineFloats&,8*3)
comment geschrieben simple dans den Editor ici getippt |
| | | | |
| | Andreas Koch | Sorry gens, je suis encore steckengeblieben. maintenant habe je qui Arrays![] dans Bereiche# umgewandelt et qui transfert, so large si bien. il scheint aussi avec Procs richtig trop le calcul. mais chez nProcs beschwert il sich dans qui Procédure DreiecksmatrixTest seulement, dass FHG% et Anzahl_Lastfaelle% pas deklariert seien (quoique qui doch avec transfert volonté). si je qui deklariere, bekomme je anschließend une seltsame Fehlermeldung, siehe Anhang. KompilierenMarqueSéparationWindow 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#
avez un peu patience avec mir, je travaille encore pas so longtemps avec Profan.... |
| | | | |
| | | aucun Sorge, voilà sur jeden le cas genügend patience vorhanden.
Du verwendest dans den nProcs Integer ( % ) -
dans nProcs gibt es Longs ( & ), Floats ( ! ) et Cordes ( $ ) -
nutze alors statt qui Integer ( % ) qui Longs ( & ).
qui nProcs sommes dans manchen Dingen quelque chose pingeliger -
so doit Float-Konstanten toujours avec Dezimaltrenner/ Punkt
ausgeschrieben volonté.
Z.B. 1.0 statt 1 ou bien 0.0 statt 0.
tu écris: si facteur!<>0 statt si facteur!<>0.0
tout autor meckert XPSE cela Long gegeben ist ( qui 0 ) mais Float erwartet wird
dans qui Funktion dreiecksmatrixtest.
tu écris dans qui nProc SMAT: Paramètres Bereich#, devrait mais bereich&
heissen.
Tip: Statt Float Bereich#,(Spalte&*Size%+Zeile&)*8=Wert! quoi mais Float Bereich&,(Spalte&*Size%+Zeile&)*8=Wert! heissen devrait dans nProcs lieber setFloat(Bereich&,(Spalte&*Size%+Zeile&)*8,Wert!) écrivons.
aussi dans den anderen Procs qui Bereichsvariablen statt avec # avec & écrivons. |
| | | | |
| | | | - page 2 - |
| | Andreas Koch | merci pour qui Aider et qui Lehrstunde, je crois, là hätte je mich dusselig gesucht. maintenant fonctionne es einwandfrei par et j'ai quoi gelernt. si es richtig rechnet, muss je encore vérifier. à et pour sich sollte cela Ding mais un lineares Gleichungssystem lösen peut (sofern sur qui Hauptdiagonalen aucun Nullen auftauchen). KompilierenMarqueSéparationWindow 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
Dispose L#, V#, A#
Nachtrag: qui Quellcode ist inzwischen geprüft et il scheint korrekt trop le calcul. il ist dans qui acte très viel plus rapide comme auparavant. j'ai aucun genaue Messung gemacht, mais facteur 2000 ist realistisch. |
| | | | |
|
répondreOptions du sujet | 5.346 Views |
Themeninformationencet Thema hat 4 participant: |