Zu DATA als Schlüsselwort vielleicht noch: Also BASIC erfunden wurde, war das in einigen Rechnerumgebungen die einzige Art variable Daten in das Programm zu bekommen, weil die Leute nicht selbst vor dem Rechner gesessen haben, sondern das Programm auf Lochkarten oder -streifen gestanzt haben, und das dann beim Rechnerbetrieb abgegeben haben, damit die das dann irgendwann in den Rechner der Uni, des Forschungsinstituts, oder der Firma fütterten. Und den nächsten Tag konnten sie sich dann das Ergebnis ausgedruckt oder als Lochstreifen abholen. Da hätte man dann zur Entwicklung beispielsweise zwei Lochstreifen abgegeben — das Programm und die Beispieldaten wo man das Ergebnis kennt:
Code: Alles auswählen
10 TI$="000000":READ N:DIM T(N,N)
20 FOR I=1 TO N:FOR J=1 TO I:READ T(I,J):NEXT:NEXT
30 FOR I=N TO 2 STEP -1:FOR J=1 TO I-1
40 K=J:IF T(I,J)<T(I,J+1) THEN K=K+1
50 T(I-1,J)=T(I-1,J)+T(I,K):NEXT:NEXT
60 PRINT T(1,1),TI/60
und
Code: Alles auswählen
790 DATA 4:REM # OF ROWS TO FOLLOW
800 DATA 3
810 DATA 7,4
820 DATA 2,4,6
830 DATA 8,5,9,3
Um dann hoffentlich am nächsten Tag die 23 als Ergebnis bekommen. Oder eine andere Zahl → Fehlersuche. Oder einen Syntaxfehler oder einen Laufzeitfehler → Fehlersuche. Programm ändern, Lochstreifen stanzen, und das Ganze von vorne. Ein edit/run/debug-Cycle der in Tagen gemessen wird, und an dem mehrere Personen beteiligt sind.
Und wenn es dann gelaufen ist, den Lochstreifen mit den Testdaten durch den Lochstreifen mit den tatsächlichen Eingabedaten ersetzen:
Code: Alles auswählen
840 DATA 15:REM # OF ROWS TO FOLLOW
850 DATA 75
860 DATA 95,64
870 DATA 17,47,82
880 DATA 18,35,87,10
890 DATA 20,4,82,47,65
900 DATA 19,1,23,75,3,34
910 DATA 88,2,77,73,7,63,67
920 DATA 99,65,4,28,6,16,70,92
930 DATA 41,41,26,56,83,40,80,70,33
940 DATA 41,48,72,33,47,32,37,16,94,29
950 DATA 53,71,44,65,25,43,91,52,97,51,14
960 DATA 70,11,33,28,77,73,17,78,39,68,17,57
970 DATA 91,71,52,38,17,14,91,43,58,50,27,29,48
980 DATA 63,66,4,68,89,53,67,30,73,16,69,87,40,31
990 DATA 4,62,98,27,23,9,70,98,73,93,38,53,60,4,23
Und im Grunde könnte man den Lochsteifen mit dem Programm dann für
Project Euler #67 — Maximum Path Sum Ⅱ wiederverwenden und einfach einen weiteren Lochstreifen mit den Daten dafür (”Pyramide” mit 100 Zeilen) mitgeben.
Was bei den Zeilennummern auch praktisch ist, ist das der Rechner die beim Einlesen richtig in den Programmspeicher einsortiert. Ein BASIC-Programm auf Lochkarten die heruntergefallen und durcheinander gekommen sind, kann man einfach so ungeordnet einlesen, sofern jede Zeilennummer nur einmal vorkommt.
Warum sollten Zeilennummern mehrfach vorkommen? Weil eine Zeile die es schon gab durch die neue Zeile ersetzt wird, und man so Änderungen und Ergänzungen zu einem Programm auf einem zusätzlichen Lochstreifen kodieren kann, statt das gesamte Programm mit den Änderungen und Ergänzungen noch mal zu stanzen. Das Programm oben könnte man Beispiel durch das hier ergänzen:
Code: Alles auswählen
10 TI$="000000":READ N:DIM T(N,N),O(N,N)
20 FOR I=1 TO N:FOR J=1 TO I:READ K:T(I,J)=K:O(I,J)=K:NEXT:NEXT
500 INPUT"PRINT RESULT (Y/N)";C$:IF C$<>"Y" THEN END
510 DIM P(N):E$=CHR$(27):OPEN 1,4
520 PRINT#1,CHR$(14);"PROJECT EULER #18";CHR$(20);" - MAXIMUM PATH SUM I"
530 PRINT#1
540 FOR I=1 TO N:IF I=1 THEN P=1:GOTO 560
550 IF T(I,P)<T(I,P+1) THEN P=P+1
560 P(I)=O(I,P):FOR J=1 TO (N-I+1)*2:PRINT#1," ";:NEXT
570 FOR J=1 TO I:K=O(I,J)
580 IF K<10 THEN PRINT#1," ";
590 IF J=P THEN PRINT#1,E$;CHR$(69);
600 PRINT#1,K;
610 IF J=P THEN PRINT#1,E$;CHR$(70);
620 NEXT:PRINT#1:NEXT:PRINT#1:C$="+"
630 FOR I=1 TO N:PRINT#1,P(I);:IF I=N THEN C$="="
640 PRINT#1,C$;:NEXT:PRINT#1,T(1,1):CLOSE 1
Das ersetzt die ersten beiden Zeilen und fügt Code zum Drucken des Ergebnisses ein. In den ersten beiden Zeilen ist das Array ``O`` wie „Original“ dazu gekommen, weil ``T`` ja beim berechnen verändert wird. Der neue Code druckt dann auf Nachfrage die Pyramide, wobei die Zahlen vom Pfad fett gedruckt sind, und die Rechnung + Ergebnis aus.
Für die beiden Datensätze, Beispiel und eigentliche Aufgabe:

Das Endergebnis habe ich mal geschwärzt.
