| |
|
|
- Seite 1 - |
|
RudiB. | Hallo,
habe ein kleines Problem das ich nicht lösen kann, oder nicht verstehe. Mein Interpreter stürzt mir bei folgendem Quellcode ab / hängt sich auf.....aber warum denn nur. Was mache ich da falsch ?? Hat jemand eine Idee und kann mir helfen ?
Herunterladen |
|
|
| |
|
|
|
« Dieser Beitrag wurde als Lösung gekennzeichnet. » |
|
RGH | Ja, und es wurde von mir tatsächlich seinerzeit so eigebaut:
Die Arrays sind null-basierend und die Angabe beim Dimensionieren gibt das jeweils letzte Element an. Der Begriff Größe an einigen Stellen der Hilfe ist hier tatsächlich irreführend.
Hintergrund der Geschichte: Seinerzeit (vor etwa 18 Jahren mit Profan² 6) wurde Profan² noch gerne genutzt, um BASIC-Programme nach Windows zu portieren. In den verschiedenen BASIC-Dialekten gab es die Arrays mal Null-basierend und mal mit 1 beginnend. Mit meiner Lösung konnten beide Varianten einfach übernommen werden. Wer einen nicht null-basierenden Quellcode nutzte, um etwa ein Schachbrett zu programmieren kam mit Declare Feld%[8,8] aus, auch wenn da die Felder mit 0 als Index unbenutzt blieben. Wer von einem null-basierendem BASIC kam, hatte auch mit Declare Feld%[7,7] keine Probleme.
Außerdem mag auch die Pascal-Schreibweise, die bei Arrayas immer das (erste und) letzte Element und nicht die Größe angibt, meine damalige entscheidung beeinflusst haben.
Richtig ist, dass die Hilfe manchmal etwas irreführend ist, wenn ich von Größe schreibe, denn die eigentliche Größe ist durch das 0-Element ja in jeder Dimension eins mehr.
Ändern kann ich daran nach 18 Jahren wohl nichts mehr (außer am Hilfe-Text natürlich) ohne zu Kompatibilitätsproblemen mit bestehenden Quellcodes zu kommen. (Denkbar wäre höchstens ein Schalter, um die Arrays aus Programmierersicht 1-basierend zu machen, damit bei Feld%[8,8] dann tatsächlich ein Array der Größe 64 beginnend bei Feld%[1,1] erzeugt wird.)
Gruß Roland
PS: Ende dieses Jahres entwickle ich schon 25 Jahre an Profan. Ich werde alt! ;) |
|
|
| XProfan X3Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 01.02.2016 ▲ |
|
|
|
|
|
RudiB. | Sorry...Whileloop 3 und Repeat 2 Durchläufe... KompilierenMarkierenSeparierenSet("ErrorLevel", 2)
CLS
Declare Liste$[2,2],Abgleich$,zähler%
Liste$[0,0]="2"
Liste$[0,1]="Test 1"
Liste$[0,2]="3.30"
Liste$[1,0]="5"
Liste$[1,1]="Test 2"
Liste$[1,2]="4.50"
Liste$[2,0]="3"
Liste$[2,1]="Test 1"
Liste$[2,2]="1.20"
Whileloop 3
Abgleich$=Liste$[&loop-1,1]
print &loop-1
zähler%=1
Repeat
If Liste$[zähler%,1]<>""
If Liste$[zähler%,1]=Abgleich$
Print "Treffer"
'traceon
Liste$[&loop-1,0]=str$(Val(Liste$[&loop-1,0])+Val(Liste$[zähler%,0]))
Liste$[&loop-1,2]=str$(Val(Liste$[&loop-1,2])+Val(Liste$[zähler%,2]))
Liste$[zähler%,0]="":Liste$[zähler%,1]="":Liste$[zähler%,2]=""
'traceoff
EndIf
Endif
Inc zähler%
Until zähler% >=2
Endwhile
whileloop 3
Print &loop-1,Liste$[&loop-1,0],Liste$[&loop-1,0],Liste$[&loop-1,0]
EndWhile
waitinput
|
|
|
| Xprofan X4 Rudolf Beske / München
Hardware: NB Intel I9 - 16GByte RAM | 28.12.2015 ▲ |
|
|
|
|
RudiB. | hier noch die Fehlermeldung....
|
|
|
| |
|
|
|
Jörg Sellmeyer | [OFFTOPIC]Wenn du deinen Code in Code-Tags packst, ist er leichter lesbar.[/OFFTOPIC]
Bei mir läuft das Programm ohne zu murren durch. |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 28.12.2015 ▲ |
|
|
|
|
RudiB. | Habs gerade mit XProfan 11.2 getestet....da gehts auch..jedoch bei 9 + 10 Absturz....versteh ich nicht.....aber trotzdem Danke fürs anschauen....Guten Rutsch ins Neue Jahr...an alle... |
|
|
| |
|
|
|
| @rudi: Declare Liste$[2,2] Val(Liste$[&loop-1,2])
Zweite Dimension hat Indexe 0;1, aber nicht 2. |
|
|
| |
|
|
|
RudiB. | doch, doch....hast Du wohl missverstanden.
Declare Liste$[2,2] // das sind 9 Elemente List$[0,0],List$[0,1],List$[0,2],List$[1,0]..........List$[2,1],List$[2,2] |
|
|
| |
|
|
|
| liste$[2,2] hat 2x2=4 Einträge:
Hilfe
Bei statischen Arrays folgt hinter dem Postfix in eckigen Klammern die Angabe der Größe.
Indexes= 0,0 1,0 0,1 1,1
Schau: KompilierenMarkierenSeparieren Index beginnt bei 0. |
|
|
| |
|
|
|
RudiB. |
?? schau |
|
|
| |
|
|
|
| Fehler in SizeOf bei Deinem Beispiel, muss 4 bei raus-kommen.
Muss Roland fixen, habs bei Bugs einsortiert: [...] |
|
|
| |
|
|
|
RudiB. |
dann müsste XProfan aber schon in Zeile 8 maulen..... tut es aber erst wenn ich wie hier Zeile 15 einfüge.== das Element gibt es nicht. !!
Und am Ende meines listings werden die werte ja auch wieder korrekt ausgelesen. (Whileloop) |
|
|
| |
|
|
|
| Fehlende Fehlermeldungen und falsches SizeOf-Ergebnis besser nicht als Referenz verwenden.
declare a$[2,2] definiert 4 Felder, nicht 9. (ist in ziemlich allen Programmiersprachen so der Fall)
Wenn Du 9 Felder möchtest dann [3,3].
So steht es auch in der XProfan-Hilfe. |
|
|
| |
|
|