BASIC

Fra DDHFwiki
Spring til navigation Spring til søgning

BASIC er en familie af interaktive programmeringssprog oprindeligt udviklet i 1964 på Dartmouth College til brug i matematikundervisning. Akronymet står for Beginners' All-purpose Symbolic Instruction Code. BASIC blev meget populært på datidens minidatamater og i begyndelsen af 1980erne blev Microsofts udgave udbredt på millioner af hjemmecomputere.

Grunden til BASICs popularitet ligger i at alle forudgående sprog, Fortran, COBOL, Algol m.m. var implementerede til at køre i batch. Dvs. programmet blev skrevet på hulkort eller hulstrimmel, og eksekveret på et senere tidpunkt når der var tid på maskinen.

BASIC kom samtidigt med systemer med tidsdelt drift. Ideen var at dele et stort edb-anlægs ressourcer mellem en række samtidigt tilsluttede brugere, der havde hver deres terminal. Derved kunne de studerende både redigere og køre deres programmer med det samme - altså interaktivt. Sproget tog form efter den idé. Hver kodelinje har et linjenummer. Det gør det muligt at implementere en simpel linje-orienteret tekstbehandler, hvor man ændrer programmet ved at skrive nummeret på den linje man vil ændre og erstatningen.

Eksempler

Dette simple eksempel beregner længden på diagonalen i en retvinklet trekant med Pythagoras sætning.

10 PRINT "*** Beregning af vinkeldiagonal ***"
20 INPUT "Indtast A,B ";A,B
30 IF A > 0 AND B > 0 GOTO 60
40 PRINT "Begge tal skal være positive"
50 GOTO 20
60 C = SQR(A^2 + B^2)
70 PRINT "Længden på diagonalen er:";C
80 END

Dette eksempel udskriver resultatet af en årlig inflation på henholdsvis 7, 8 og 10% over 10 år.

10 W1 = 1.0 : W2 = 1.0 : W3 = 1.0
20 FOR F = 1 TO 10
30 W1 = W1 * 1.07 : W2 = W2 * 1.08 : W3 = W3 * 1.10
40 PRINT F,W1,W2,W3
50 NEXT F

Udskrift:

 1             1.07          1.08          1.1 
 2             1.1449001     1.1664001     1.21 
 3             1.2250432     1.2597121     1.3310001 
 4             1.3107963     1.3604891     1.4641001 
 5             1.402552      1.4693283     1.6105101 
 6             1.5007308     1.5868746     1.7715611 
 7             1.605782      1.7138246     1.9487174 
 8             1.7181869     1.8509307     2.143589 
 9             1.83846       1.9990052     2.357948 
 10            1.9671522     2.1589258     2.5937428 

Et ustruktureret programmeringssprog

BASIC har fået megen kritik for at give kommende programmører dårlige vaner. Det har endda været sagt at en studerende, der har startet med at lære BASIC, ikke kan reddes. Det primære eksempel på dette er IF-sætningen. I Dartmouth BASIC kaldes det en betinget GO TO. Det eneste lovlige udtryk efter betingelsen er et hop til et linjenummer. Der er ingen ELSE heller.

Den følgende pseudokode illustrerer en IF-sætning, der kan strække sig over flere linjer og har en alternativ gren. Når én af grenene er udført, fortsætter eksekveringen efter ENDIF:

IF A >= 0 AND A < 10 THEN
  LET B = 4
  LET C = 5
ELSE
  LET B = 2
  LET C = 3
ENDIF
LET D = 6

Dartmouth BASIC har som sagt hverken ELSE eller ENDIF. Det er nødvendigt at invertere betingelsen og bruge GO TO for at udføre det samme. (Pilegrafikken er ikke en del af programmet)

100 IF A < 0 OR A >= 10 THEN 200 --+
110 LET B = 4                      |
120 LET C = 5                      |
130 GO TO 300 ---+                 |
200 LET B = 2 <--|-----------------+
210 LET C = 3    |
300 LET D = 6 <--+

Man kan forestille sig at hvis der er et par IF-sætninger inden i hinanden, så kan man hurtigt miste overblikket. Læg dertil at BASIC er beregnet til begyndere, som ikke endnu har selvdisciplin til at holde koden struktureret.

I Microsofts Extended BASIC havde de dog introduceret ELSE kommandoen, men hele sætningen skulle skrives på én linje:

100 IF A >= 0 AND A < 10 THEN LET B = 4 : LET C = 5 ELSE LET B = 2 : LET C = 3
300 LET D = 6

Børge R. Christensen fra Tønder Seminarium blev så frustreret over at han ikke kunne gennemskue sine studerendes BASIC opgaver at han designede COMAL som en overbygning på BASIC med ideer om struktureret programmering fra Pascal.

Se hvad DDHF har om BASIC i Bitarkivet.