Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 241773 (3209)

| Suchen
| Zurück zur Übersicht

Autor | Thema: Profan Fehler ?
Wolfgang Voigt
| Datum:12.09.02 14:21 (wolfgang.voigt@modata.de) |
Hallo allezusammen bin auf folgenden Fehler gestossen. Im Interpretermodus funktioniert das Testprogramm, compiliert bzw gelinkt kommt der Fehler was mache ich da falsch, oder ist es ein Fehler in V7.5 ? ' Exception EAccessViolation im Modul TEST.exe bei 00048BC6 ' Zugriffsverletzung bei Adresse 00449DA6 Lesen von Adresse FFFFFFFF Decimals 2 Numwidth 9 Strwidth 9 DIM$ 3 Declare EIN![3,6] Declare l%,ll%,m%,ml% Let l%=3 Let m%=6 CLS LIST$ 1 = "T E X T 1xx" LIST$ 2 = "T E X T 2xx" LIST$ 3 = "T E X T 3xx" WHILEloop 0,l% Let ll% = &LOOP WHILEloop 0,m% Let ml% = &LOOP Let EIN![ll%,ml%] = 0.0 ENDWHILE ENDWHILE Let EIN![1,1] = 100.00 Let EIN![2,2] = 100.00 Let EIN![3,3] = 100.00 Let EIN![1,4] = 100.00 Let EIN![2,5] = 100.00 Let EIN![3,5] = 100.00 let ll%=1 whilenot @gt(ll%,l%) print @left$(@LIST$(ll%),9); ' Führt zu : Ausnahme Fehler ' print @left$("T E S T 1xx",9); ' alternative führt zu Fehler: keine Zahl s.u. let ml%=1 whilenot @gt(ml%,m%) print EIN![ll%,ml%]; ' FEHLER: Keine Zahl ! Let EIN![ll%,0] = @add(EIN![ll%,0],EIN![ll%,ml%]) Let EIN![0,ml%] = @add(EIN![0,ml%],EIN![ll%,ml%]) inc ml% ENDWHILE print EIN![ll%,0] inc ll% ENDWHILE print "Summe"; WHILEloop 1, m% Let ml% = &LOOP print EIN![0,ml%]; ENDWHILE print "" waitinput end
Roland G. Hülsmann
| Datum:12.09.02 16:28 (rgh-soft@t-online.de) |
Hallo Wolfgang, ich konnte das Problem nachvollziehen. Es könnte ein Bug in PROFAN bei Arrays vorliegen. Gefunden habe ich ihn aber noch nicht. Aber einen Workaround der Dir weiterhilft:
    <...>
    whilenot @gt(ll%,l%)
      let a$=@left$(@list$(ll%),9)
      print a$;
      let ml%=1
      whilenot @gt(ml%,m%)
        print str$(EIN![ll%,ml%]);
        Let EIN![ll%,0] = @add(EIN![ll%,0],EIN![ll%,ml%])
        Let EIN![0,ml%] = @add(EIN![0,ml%],EIN![ll%,ml%])
        inc ml%
      ENDWHILE
      print EIN![ll%,0]
      inc ll%
    ENDWHILE
    <...>
Im Deklarationsteil muß natürlich noch ein DECLARE A$ hinzugefügt werden. Der Ausnahmefehler wird umgangen, in dem der auszugebende Text zuvor der Variablen A$ zugewiesen wird und der zweite Fehler (Keine Zahl), in dem der Ausdruck zuvor mit STR$() in einen String umgewandelt wird. Und schon funktioniert es, wie es soll! Gruß Roland
Wolfgang Voigt
| Datum:13.09.02 08:49 (wolfgang.voigt@modata.de) |
Hi Roland, das Problem ist damit nicht aus der Welt. Das mit dem A$ habe ich auch schon probiert, ohne Erfolg. Das @str$(EIN!) führt zu dem selben Zugriffsfehler. Sorry, aber es ist so. Gruss Wolfgang
Wolfgang Voigt
| Datum: 13.09.02 09:26 (wolfgang.voigt@modata.de) |
HI Roland ich habe die routine etwas umgeschrieben. jetzt funktioniert es ! ich glaube garnicht, dass es mit den arrays zu tun hat, wenn ich alle print aus der schleife rausnehme, ist der fehler ja weg!? ausserdem ist der 1. print der zum fehler führte ein listenelement (DIM$) gruss wolfgang whileloop 1,l% let ll%=&LOOP let z$=@left$(@LIST$(ll%),9) whileloop 1,m% let ml%=&LOOP Let z$ = z$;@str$(EIN![ll%,ml%]) Let EIN![ll%,0] = @add(EIN![ll%,0],EIN![ll%,ml%]) Let EIN![0,ml%] = @add(EIN![0,ml%],EIN![ll%,ml%]) ENDWHILE Let z$ = z$;@str$(EIN![ll%,0]) print z$ ' print ZEILE ENDWHILE

| Zurück zur Übersicht