COMAL (COMmon Algorithmic Language) ha origine nel 1973 in Danimarca ad opera di Benedict Loefstedt e Borge Christensen, a partire dai sorgenti di un interprete Basic, con lo scopo di renderlo strutturato, e di dotarlo di funzioni e procedure. Ebbe un certo successo commerciale con diffusione su BBC Microcomputer, Tiki 100, Commodore 64 e IBM PC. Attualmente ne esiste una versione Open Source per gli ambienti Unix, Dos e Windows.
Ha molte somiglianze con MSDOS BASICA, a cominciare dall’ambiente interpretato ed i relativi comandi.
Accetta variabili ed array di numeri interi e floating point, e stringhe di lunghezza variabile. Rispetto a BASICA introduce comandi per la programmazione strutturata: CASE, LOOP, REPEAT ... UNTIL, WHILE espressione DO ..., funzioni, anche ricorsive, e procedure.
80 PRINT "Immettere Numero";
90 INPUT num
100 PRINT "Fattoriale di ",num," : ",Fatt(num)
150 PRINT num,"^4 :
",Pot(num,4)
200 END
600 FUNC Fatt(n) CLOSED
610 IF n = 1 THEN RETURN 1
620 RETURN n*Fatt(n-1)
660 ENDFUNC
700 FUNC Pot(n,m) CLOSED
710 IF m = 1 THEN RETURN n
720 RETURN n*Pot(n,m-1)
760 ENDFUNC |
$ enter "f.txt $ run Immettere Numero? 5 Fattoriale di 5 : 120 5^4 : 625 $ run Immettere Numero? 7 Fattoriale di 7 : 5040 7^4 : 2401 $ |
$ è il prompt dell’interprete.
Fra le altre minori divergenze dal BASIC, il simbolo di
assegnazione e l’indicazione delle sottostringhe: stringa$(inizio:fine)
$
a$:="El Condor pasa"
$
print a$(4:9)
Condor
L’esempio
che segue effettua la crittografazione di un testo col metodo della doppia
chiave (v. par. 4.3.2
).
10 // COMAL (version 0.2.6; Win32)
20
// (c) Copyright 1992-2002 Jos
Visser <josv@osp.nl>
30
// Crittografia a doppia serratura 40 PAGE // pulizia video 60 // numeri primi q: ll area
da criptare, p e p1 per criptare
70 q:=29; p:=31; p1:=37
80
PRINT "Immettere testo (ll < 30) ";
90 INPUT testo$ 100
IF Len(testo$) = 0 THEN testo$:="CONDOR INFORMATIQUE - TURIN" 105
IF Len(testo$) > q THEN
110
testo$:=testo$(1:29) 115 ELSE 120
testo$:=testo$+SPC$(q-LEN(testo$)) 125 ENDIF 130 PRINT testo$,CHR$(9),"
originale" 150 // crittazione con utilizzo di
p 170 testo$:=Cript$(testo$,p,q) 250 // crittazione con utilizzo di
p1 270 testo$:=Cript$(testo$,p1,q) 300 // eliminazione della
crittazione con p 360 testo$:=Decript$(testo$,p,q) 400 // eliminazione della
crittazione con p1 460 testo$:=Decript$(testo$,p1,q)
510 END 600
FUNC Cript$(arc$,p,q) CLOSED
610
ar$:=SPC$(LEN(arc$))
615
FOR i:=1 TO LEN(arc$) DO 620
j:=1+((i-1)*p MOD q) 630
ar$(j:j):=arc$(i:i)
640
ENDFOR i 645 PRINT ar$,CHR$(9),"
crittografato con: ",p
650 RETURN ar$ 660 ENDFUNC 700
FUNC Decript$(arc$,p,q) CLOSED
710
ar$:=SPC$(LEN(arc$))
715
FOR i:=1 TO LEN(arc$) DO 720
j:=1+((i-1)*p MOD q) 730
ar$(i:i):=arc$(j:j) 740
ENDFOR i
745
PRINT ar$,CHR$(9)," decrittografato con: ",p
750 RETURN ar$ 760 ENDFUNC
|
Immettere testo
(ll < 30) ? "" CONDOR INFORMATIQUE - TURIN
originale CIOQNUDEO R-
ITNUFROIRNM A T
crittografato con: 31 C-RNTAORI NUN
OO MDUTRIQI EF crittografato
con: 37 CRTOINN OMURQ F-NAR U O DTIIE
decrittografato con: 31 CONDOR INFORMATIQUE - TURIN
decrittografato con: 37 $ Immettere testo (ll < 30) ? Paragrafo
2.19 COMAL Paragrafo 2.19 COMAL originale PCaOrMaAgLr a f o 2 . 1 9
crittografato con: 31 P .r 9g Ca Mo L2a 1a r Of A
crittografato con: 37 P. gC oLa1 rO
r9 aM 2 a fA
decrittografato con: 31 Paragrafo 2.19 COMAL decrittografato
con: 37 $ |