Tela (Teaching Language) Paradigma imperativo Dichiarazioni di variabili, costanti, moduli Programma strutturato in moduli innestati Scope statico Passaggio dei parametri per valore Corpo del modulo = blocco di istruzioni Ricorsione Tipi di dati (solo atomici): char, int, real, string, bool, void (solo per moduli) Commenti: # Questo è un commento 1
Tipi di Dati char c : char; c = 'a'; int i : int; i = 25; real r : real; r = 64.15 string s : string; s = "alfa"; bool ok : bool; ok = true; 2
Dichiarazioni Sezione var: var i, j, k: int; nome, cognome: string; media, tempo: real; ok, flag: bool; Sezione const (valori non modificabili, generati da espressioni nelle dichiarazioni): const MAX: int = 10; a, b: real = 10.25; linguaggio: string = "Tela"; media: real = somma / num; FACT: int = fattoriale(max); Variabili / costanti nelle espressioni di assegnamento devono essere già dichiarati Moduli nelle espressioni di assegnamento: non necessariamente già dichiarati 3
Struttura del Programma module prog(a: int, b: string): int var v1:, v2:, vm: ; const c1: =, c2: =, cp: = ; module f1(): int var ; const ; module f2(): real begin f2 end f2 begin f1 end f1 module f3(): void begin prog end prog parametri del programma: input da tastiera output su monitor Non necessaria la dichiarazione del modulo prima della sua chiamata 4
Espressioni Aritmetiche +,, *, / : operatori (overloaded) applicabili a int real Espressioni miste non permesse (coercizione vietata) Operatori di cast int : real int real : int real var i,j: int; x, y: real; x = real(i+j)*(r real(i)); j = int(x+y 1.25); 5
Espressioni Booleane ==,!=, >, >=, <, <= : applicabili a tutti i tipi and, or, not: applicabili a bool Valutazione in corto circuito var a, b, c, d: bool; d = a or (b and c); if a then d = true else if not b then d = false else d = c endif endif a or b and c Integrazione con operazioni relazionali var i, j: int; cognome: string; a, b: bool; b = (i == j+2 or a) and (cognome == "Rossi"); 6
Precedenza, Associatività, Ordine di Valutazione Operatore Tipo Associatività and, or binario sinistra ==,!=, >, >=, <, <= binario no +, binario sinistra *, / binario sinistra, not unario destra precedenza crescente Ordine di valutazione degli operandi: da sinistra a destra 7
Espressione Condizionale if expr then expr { elsif expr then expr } else expr end var a, b, c: int; a = if b>c then b+c elsif b==c+1 then b c else a+1 end; 8
Istruzione Condizionale if expr then stat-list { elsif expr then stat-list } [ else stat-list ] end var a, b, c: int; if a == b then c = a + 1; elsif a > b then a = b + c; c = a b; else b = b a; end; 9
Ciclo While while expr do stat-list end var a, b, res: int; res = 0; while a >= b do res = res + 1; a = a b; end; 10
Return return [ expr ] module media(n: int, m: int): real var somma: int; begin media somma = n + m; return real(somma / 2); end media module fattoriale(n: int): int begin fattoriale if n <= 0 then return 1; else return n * fattoriale(n 1); endif; end fattoriale oppure: module fattoriale(n: int): int begin fattoriale return if n <= 0 then 1 else n * fattoriale(n 1) end; end fattoriale Se modulo senza valore di ritorno (void), return senza argomento 11
Write write(expr-list) write("hello world!"); var n, f: int; f = fattoriale(n); write("il fattoriale di ", n, " è ", f); n, m: int; avg: real; write("la media di ", n, " e ", m, " è ", media(n, m)); 12
Read read(id-list) var n, f: int; write("inserisci il numero:"); read(n); f = fattoriale(n); write("il fattoriale di ", n, " è ", f); n, m: int; avg: real; write("inserisci i due numeri di cui calcolare la media:"); read(n, m); avg = media(n, m); write("la media di ", n, " e ", m, " è ", avg); 13