|
Appunti informatica |
|
Visite: 1301 | Gradito: | [ Medio appunti ] |
Leggi anche appunti:Sistemi Distribuiti: IntroduzioneSistemi Distribuiti: Introduzione I sistemi distribuiti nascono negli DeadlockDeadlock Un insieme di processi si trova in una situazione di stallo o Il modello relazionaleLa PROGETTAZIONE LOGICA RELAZIONALE consiste nella conversione del modello ER in |
Il linguaggio Pascal
1. Ambiente Turbo Pascal
Il compilatore può essere un interprete o un compilatore: il compilatore ha la funzione di segnalare gli errori.
Nel menu si possono trovare alcune opzioni:
L: per selezionare il drive di lavoro;
W: per assegnare un nome al programma;
E: per entrare in ambiente editor e digitare il programma;
R: per mandare in esecuzione il programma;
S: per salvare il programma sul disco selezionato con L;
Q: per uscire dal Turbo e ritornare al sistema operativo.
In editor si scrive il testo del programma, per poi tornare al menu, premendo i tasti ctrl e k e poi premendo d.
La versione 5.5 di Turbo pascal contione otto moduli indipendenti, con funzioni specifiche. Per utilizzare uno dei moduli, bisogna digitare una parola-chiave seguita dal nome del modulo (Es. Uses printer, permette di usare il modulo che gestisce la stampante). Il crt, contiene le funzioni di controllo del video, della tastiera e del colore.
Per tradurre un algoritmo in Pascal, è necessario sostituire le parole-chiave dell'algoritmo in quelle del Pascal:
Linguaggio di progetto |
Linguaggio Pascal |
|||
Algoritmo Variabili Inizio acquisisci comunica Fine. |
Program Var Begin readln : = writeln End. |
Ogni istruzione termina con il punto e virgola; nelle istruzioni di lettura (readln) e di scrittura (writeln) il nome della variabile è messo fra parentesi tonde.
2. Istruzioni di input-output
Le istruzioni eseguibili, comprese fra BeginEnd, sono:
assegnazione di valore ad una variabile;
acquisizione di dati dall'esterno (in gergo, input);
visulizzazione dei risultati (in gergo, output).
Nell'istruzione di assegnazione il nome della variabile (o identificatore), deve cominciare con una lettera, non può contenere spoazi vuoti, può contenere numeri; deve esserci compatibilità fra il tipo di variabile e il valore assegnato; l'assegnazione è distruttiva, perché il vecchio valore della variabile viene perduto.
L'istruzione SQR eleva al quadrato; mentre SQRT estrae la radice quadrata. A volte, quando si scrive una frazione, può essere necessario mettere delle parentesi. Ogni operazione deve essere indicata in modo esplicito. Si possono usare solo parentesi tonde.
Nell'istruzione di lettura si usa readln, che significa acquisisci un valore immesso da tastiera.
Nell'istruzione di scrittura si usa writeln, che significa scrivi sullo schermo e porta il cursore a capo. Con questa istruzione si può visualizzare il contenuto di una o più variabili separate da virgola; si può visualizzare un messaggio, purchè sia scritto fra due apici. Invece di writeln, è anche possibile usare write, ma il cursore non va a capo.
Lo schermo è in modo testo. Esso è formato da 25 righe e 80 colonne per un totale di 2000 caselle. Ogni casella è individuata con due numeri interi, il primo rappresenta la colonna, il secondo la riga. Per scrivere un messaggio da un punto ben preciso dello schermo, si usa l'istruzione gotoxy.
L' istruzione textcolor(N), per visualizzare il testo nel colore N; textcolor(N+128), per far lampeggiare la scritta, sempre nel colore N; textbackground(N), percambiare il colore del fondo schermo.
Per mezze della parola-chiave lst, con l'istruzione writeln, il modulo Printer permette di indirizzare l'output sulla stampante. Se si vuole utilizzare la stampante, bisogna dichiarare nel programma: uses crt, printer;.
I tipi di dato
I tipi di dato possono essere integer (interi), real (reali), char, boolean e string.
Nel tipo integer, l'elaboratore può solo rappresentare solo una parte dell'insieme dei numeri interi. Mentre in matematica gli interi sono infiniti, per l'elaboratore sono compresi solo i numeri tra -32768 e 32767. Ogni numero non compreso fra i suddetti estremi, vi è una situazione di overflow (traboccamento).
Funzioni e operatori sugli integer
Funzione |
Significato |
ABS(x) SQR(x) PRED(x) SUCC(x) |
valore assoluto di x quadrato di x numero che precede x numero successivo di x |
Gli operatori sono:
per la somma;
per la sottrazione;
per la moltiplicazione;
DIV dà il quoziente intero;
MOD dà il resto della divisione.
Esistono anche gli operatori, che permettono di confrontare due interi (vero o falso).
Simbolo |
Significato |
< > > < > < |
uguale diverso maggiore minore maggiore o uguale minore o uguale |
L'intervallo dei real e molto più vasto di quello degli integer: si estende da -2.9 10-39 a 1.7
Funzioni e operatori sui real
Funzione |
Significato |
SQR(x) SQRT(x) ABS(x) TRUNC(x) ROUND(x) INT(x) |
quadrato di x radice quadrata di x valore assoluto di x troncamento di x arrotondamento di x parte intera di x |
Gli operatori sono / + -. Per essi valgono le stesse priorità che si applicano in matematica. I numeri di tipo real vengono visualizzati in forma esponenziale.
Quando si scrive un programma, occorre dichiarare subito le variabili da usare, in modo che l'esecutore sappia dove collocare un dato quando gli viene fornito.
Una variabile di tipo intero può far parte di una di tipo reale; ma una di tipo reale non può far parte di una di tipo intero.
4. I tipi alfanumerici
Con char si indica una variabile di tipo carattere. Nell'assegnazione occorre mettere fra apici il valore della variabile.
Ogni carattere della tastiera viene codificato con un numero del codice ASII (Codice Standard Americano per l'Interscambio di Informazioni). Le lettere maiuscole hanno codice compreso fra 65 e 90; le minuscole fra 97 e 122; i caratteri semigrafici fra 129 e 255.
CHR(N) fornisce il carattere corriospondente al numero N; ORD('C') fornisce il numero corrispondente al carattere C.
Il tipo string permette di operare con parole e frasi (Es. var nome: string(30);). Il numero fra parentesi indica la lunghezza dei caratteri contenuti nella stringa (deve essere intero e compreso fra 1 e 255).
Nell'assegnare un valore alla variabile di tipo string, occorre mettere gli apici come per il tipo char. tra le funzioni predefinite vi è length, che fornisce la lunghezza di una stringa.
Una variabile di tipo boolean può assumere valore di true (vero) o false (falso).
Gli operatori fra variabili booleane sono operatori logici: not (negazione), and (congiunzione, et), or (disgiunzione, vel), xor (disgiunzione esclusiva, aut). La composizione di variabili booleane segue le tavole di verità della logica proposizionale.
5. La struttura alternativa
La selezione binaria consiste nelle seguenti istruzioni
Significato |
Codifica in Pascal |
|||||||
Se la condizione è vera Allora istruzione 1 Altrimenti istruzione 2 |
If condizione vera Then istruzione 1 Else istruzione 2 |
Le tre parole-chiave SeAlloraAltrimenti si traducono con IfThenElse.
La selezione con blocco, sia dopo Then che dopo Else, invece che una istruzione può essere eseguito un blocco di istruzioni. L'intera operazione è delimitata fra Begin ed End.
La selezione semplice consiste nelle seguenti istruzioni Se (If) condizione vera, Allora (Then) istruzione.
Nella selezione con condizione composta, l'operatore logico and indica che le condizioni devono essere verificate entrambe. Se uno dei due valori è negativo (o nullo), il blocco non viene eseguito.
Le due condizioni devono essere scritte fra parentesi tonde. Il motivo consiste nella priorità delle operazioni. Infatti il compilatore esegue prima le operazioni di tipo logico, poi quelle di tipo aritmetico.
L'istruzione di selezione diventa molto utile quando bisogna calcolare il valore di una frazione, perchè occorre controllare che il denominatore sia diverso da zero.
6. La selezione multipla
Per la selezione multipla, invece di usare più volte SeAllora (IfThen), si usa Caseofend. Questa opzione significa "nel caso in cui la variabile ha valore di ". L'istruzione è cgiusa da end. In questa istruzione è possibile introdurre Else.
Nella selezione multipla con blocco, occorre delimitare il blocco con le parole-chiave beginend, perché si tratta di eseguire più istruzioni in corrispondenza di ogni scelta.
Per inserire messaggi esplicativi in qualunque punto del programma, devono essere fra parentesi tonde e asterischi (* *).
A volte, in una formula contenente più variabili, bisogna ricavarne una in funzione delle altre. Di fronte a problemi dello stesso genere, si usa la parola-chiave const, per definire una costante (Es. R = 8.31;).
7. Debugging: esecuzione passo-passo
Il debugging (caccia all'errore), rende possibile la visione dell'esecuzione di un programma riga per riga. Durante questa operazione è possibile osservare, sulla finestra watch, il valore delle variabili. Per applicarlo si preme il tasto f7, per ogni istruzione (da Beging i poi), finchè non si arriva ad End. Per terminare l'operazione prima che finisca tutto il programma, si preme il tasto ctrl, accompagnato da f2.
Per inserire una o più variabili nella finestra Watch (osservazione), per controllare i loro valori durante l'esecuzione, si usa ctrl ,accompagnato da f7. Una volta comparsa la finestra, si deve digitare il nome di una variabile, e poi premere invio. Si possono osservare più variabili; accanto all'ultime compare il simbolo . Continuando a premere f7, il valore delle variabili cambia, perché ad esse viene assegnato un valore casuale, che cambia con lo spostamento del cursore sulle righe successive. Per svuotare l'intera finestra Watch si usa l'opzione Remove all watches del sottomenu di Break/Watch. Si può togliere solo l'ultima variabile immessa con Delete Watch. Con f5 si può far comparire o scomparire la finestra Watch.
8. Le procedure
Con il Pascal è possibile usare il metodo top-down, ovvero dividere un problema in sottoproblemi risolvibili con procedure (o funzioni).
In Turbo Pascal sono presenti procedure predefinite (cioè costruite da chi ha scritto il compilatore):
Clrscr, che pulisce schermo ed esecuzioni;
Gotoxy, che porta il cursore in un punto ben definito dello schermo. Questa procedura ha bisogno di due parametri per essere eseguita (Es Gotoxy(9,4););
Writeln, può essere usata con o senza parametri (Es. writeln, writeln(somma), writeln(somma, media).
Le procedure definite sono quelle inserite dall'utente, che devono essere dichiarate subito dopo le variabili, e viene eseguita quando viene richiamata nel blocco esecutivo del programma (programma principale). La struttura di procedura e di programma è identica. L'intestazione comincia con la parola-chiave Procedure seguita dal nome della procedura. Poi vi è la dichiarazione di eventuali variabili e il blocco esecutivo fra begingend. Una procedura termina con end;, mentre il programma con End.. Appena l'esecutore incontra una procedura nel programma principale sospende l'esecuzione del programma, cerca la procedura nella parte dichiarativa, esegue la procedura e ritorna all'istruzione successiva. Ogni procedura ha un nome all0interno del programma principale, e può essere chiamata più volte.
9. Il ciclo Repeat Until
Il ciclo repeatuntil (Ripetifinchè), consiste nel ripetere le istruzioni quando sono false; se vere passa all'istruzione successiva. La condizione deve essere una proposizione logica, che può solo assumere il valore di vero o falso. Se l'esecutore non comprende la condizione, manda un messaggio di errore.
La procedura RepeatUntil, permette di controllare l'imput e i dati immessi da tastiera. Si esce dal ciclo solo quando sono verificate contemporaneamente le condizioni.
Inizializzando una variabile si assegna un valore iniziale alla variabile, altrimenti il programma ne assegna un valore casuale.
Spesso, nell'uso dei cicli, si corre il pericolo di un ciclo infinito, perchè la condizione di terminazione non risulta mai vera.
È possibile usare un contatore (con passo intero o decimale) all'interno del ciclo.
Usando un ciclo si possono calcolare somme di valori numerici.
10. Il ciclo ForToDo
Nei problemi iterativi possono essere di tipo enumerativo (si conosce il numero di ripetizioni) e non enumerativo (non si conosce il numero di ripetizioni).
Il ciclo enumerativo si esprime con le parole-chiave ForToDo (Perfino aesegui). Questo blocco di istruzioni deve essere racchiuso tra begin.end.
L'istruzione del ciclo è la seguente:
For contatore:= valore_iniziale To valore_finale Do
Contatore, valore_iniziale e valore_finale devono essere dello stesso tipo (integer o char).
Se valore_iniziale > valore_finale il ciclo non è eseguibile.
Valore_iniziale e valore_finale, se hanno un intero come risultato, possono essere delle espressioni (Es. For k:= h + m To 3 * h Do ).
Nel ciclo si possono usare delle procedure.
Un ciclo, se vuoto, può provocare ritardi nell'esecuzione (Es. For k:= 1 To 500 Do;).
Al momento dell'esecuzione, vi è lo scrolling (ovvero lo scorrimento veloce delle schermate). Lo schermo contiene 25 righe e 255 caratteri: quindi si susseguono più di dieci schermate. Occorre quindi mettere un controllo sulla variabile, che faccia fermare lo schermo quando essa risulta multiplo di 24 e quindi uguale a 0.
Con write() scrive i valori di ogni riga allineati e separati da uno spazio di quattro caratteri. Il primo writeln manda il cursore a nuova riga; il secondo lascia una riga vuota, per una maggiore leggibilità della tavola.
Il contatore di un ciclo For può anche essere diminuito di 1, cambiando To in Downto (Es. For k:= 20 Downto 1 Do writeln(k);).
11. Giochiamo con i numeri casuali
La funzione random genera un numero casuale tra 0 1 (1 escluso), e lo assegna ad una variabile (di tipo real) scrivendo: x:=random
Per generare un numero intero fra 0 ed N (N escluso), si fa l'assegnazione x:= random(N+1) (x di tipo integer).
Prima della funzione random occorre scrivere l'istruzione randomize, che permette di generare diversi numeri casuali a ogni esecuzione.
12. Il ciclo WhileDo
Il ciclo WhileDo (Fintantochéesegui) va delimitato tra beginend; si esprime: While condizione vera Do istruzione. La variabile che controlla il ciclo viene inizializzata fuori dal ciclo (Es. N=1). Dentro al ciclo è incrementata di una unità. Il ciclo si ripete finchè la condizione risulta vera; se falsa, termina. In struttura WhileDo la condizione si esprime all'inizio del ciclo, subendo il rischio di non essere eseguito nemmeno una volta. Anche qui, vi è il rischio del ciclo infinito.
Per calcolare il massimo comune divisore si usa l'algoritmo di Euclide. Per calcolare il minimo comune multiplo bisogna dividere il prodotto dei due numeri per il loro massimo comune divisore.
Appunti su: struttura selezione multipla come si esprime in pascal, http:wwwappuntimaniascrigroupcominformaticacomputeril-linguaggio-pascal75php, |
|