Sei sulla pagina 1di 9

Introduzione

Un compilatore un programma usato per trasformare codice sorgente (linguaggio di programmazione) in codice macchine, il compilatore pi indicato ed evoluto, con la massima compatibilit con altri compilatori FreePascal.

La struttura principale di un programma pascal


Il pascal un linguaggio di programmazione nato a fini didattici con cui non si possono fare grandi cose, ma comunque non nemmeno un di quegli stupidi linguaggi di script. Un programma inizia sempre con Program [NomeProgramma]; Uses Crt; Var [Variabili]:[tipo variabili]; Begin (*.......*) end. Program serve per indicare al compilatore che il prodotto di output sar un eseguibile .exe e quello che c' tra [ e ] il nome del programma. Uses Crt indica al compilatore che librerie utilizzare per la compilazione del programma. Var serve per indicare le variabili, cio qualcosa che, per vari motivi varia, pu essere una situazione, un file o un comando o qualsiasi altra cosa, dopo le variabili vanno messi i : e il tipo di variabile, questo serve per dichiarare di che tipo sono le variabili, i tipi sono: boolean = Pu assumere due valori true (vero) o false (falso) word = Occupa qualsiasi valore tra 0 e 65535 e occupa 2 bytes string = Occupa un numero variabile di bytes (minimo 10) che varia a seconda del valore assunto dalla variabile, pu contenere sequenze intere di caratteri (frasi tradotto per gli esseri umani) Shortint = Occupa 2 bytes e pu assumere valori da -128 a 127 Integer = Occupa 2 bytes e pu assumere valori da -32768 a 32767 Longint = Occupa 4 bytes e pu assumere valori da -2147483648 a 2147483647 Real = Occupa 6 bytes e pu assumere valori da -2,9e+39 a 1,7e+38 (11-12 cifre decimali) Char = Occupa 1 byte e pu assumere il valore di un carattere Text = Serve per modificare i file (assume valori solo tramite la procedura assign) Byte = Occupa 1 byte e pu assumere valori da 0 a 255 Il programma racchiuso tra un begin e end. E quando viene digitato end. Il programma finito enche se poi ci sono 30.000 righe di codice, il programma finito. Dopo il being non vanno i duepunti che vanno messi dopo ogni riga, eccetto qualche eccezione (if, then, else, begin, while, do ecc.), e, tutto quello che scritto tra (* e *) viene completamente ignorato dal compilatore, e ha l' unico scopo di ricordare al programmatore qualche cosa, il programma va scritto tutto allineato alla i di begin.

Procedure e funzioni
write('Prova') serve per scrivere sullo schermo qualc' osa e aspettare che l' utente digiti qualc' osa da tastiera e leggerlo, esempio: program Boh; uses Crt; Var inputTast:string; begin

write(' Scrivi qualunque cosa'); readln(inputTast); writeln(' Input dato = ',inputTast,' ') repeat until keypressed; end. readln serve per memorizzare l' input dato nella variabile specificata tra ( e ) writeln si usa come write, solo che serve per scrivere qualc' osa su scermo senza che l' utente digiti nulla repeat until keypressed serve per ripetere un ciclo di istruzioni vuoto perch quel ciclo di istruzioni vuoto da il valore false, quando viene premuto qualc' osa il ciclo di istruzioni non pi vuoto, quindi restituir true, e quindi il programma pu proseguire. Clrscr serve per ripulire la casella di esecuzione del programma da qualsiasi carattere, come, per esempio quelli dati tramite la procedura write o writeln. Se vogliamo che una variabile corrisponda, per esempio alla somma di due variabili o di una variabile e un numero fisso o tre o pi variabili e cos via useremo variabile1:=variabile2+variabile3 o +2 ATTENZIONE = + e rimangono cos come sono, ma per scrivere : si usa / e per scrivere x si usa *.

if, then e else


Come ogni linguaggio di programmazione, anche nel pascal c' la possibilit di dire se la situazione questa fai questa, e se la situazione questa fai questo, ma un esempio, in questo caso serve pi di tante parole: program EsempioIfThenElse; Uses Crt; Var numero1,numero2,risultato,sure:string sure:char begin write('Inserire un numero:'); readln(numero1); write('Inserire un secondo numero:'); readln(numero2); write(' sei sicuro di voler eseguire ',numero1,'+',numero2,' y/n'); readln(sure); if sure='y' then risultato:=numero1+numero2; writeln('',numero1,'+',numero2,'=',risultato,''); if sure=n writeln('Operazione annullata manualmente'); repeat until keypressed; if (sure<>y) and (sure<>n) then writeln('Carattere inserito non valido, caratteri validi y=yes n=no') repeat until keypressed; end. if va usato unsieme a then e la sintassi questa: if veriabile = .. then <> <= => >= =< per l' else il discorso diverso, va usata dopo if e indica che se nessuna delle condizioni di if applicabile

allora si fa questo, vuole il suo begin e il suo end; per esempio prima in un pezzo ho scritto: if (sure<>'y') and (sure<>'n') then, l' ho fatto per far vedere che si pu fare anche cos, ma se le condizioni sono pi di 100000000000, alquanto scomodo scrivere cos e quindi l' else ci viene in auito cos: else begin writeln('Carattere inserito non valido, caratteri validi y=yes n=no') repeat until keypressed; end; if significa se, then allora e else altrimenti, dopo if va messo il nome di una variabile e il valore che la variabile deve avere per fare s che la situazione sia reale deva essere messo tra ' e ' o si intende che tutte e due sono variabili. Per fare s che nelle istruzioni write e writeln sia mostrato il valore assunto dalle variabili si usa questa sintassi: writeln('Il valore assunto dalla variabile Var ',Var,'.');.

Case, Of e Else
Il costrutto caseof prende in esame una variabile e, per ogni valore specificato esegue unistruzione diversa. Supporta l' else e vuole l' end alla fine. La variabile non deve essere di tipo string, ed possibile l' inserimento di un or: Program EsempioCaseOf; Uses Crt; Var n:byte; c:word; begin clrscr; write('Inserisci un numero: '); readln(n); case n of 1: writeln('E stato premuto il pulsante 1'); 2: begin sound(440); delay(1000); nosound; end; 3 or 4 or 5: write('Il numero premuto fra 3 e 5'); else begin c:=sqr(n); writeln('',c,' il quadrato di ',n,''); end; end; readln; end. Inoltre else si usa come se al posto di case of ci fosse if then, or significa o e qi non ci sono bisogno di spiegazioni, n la variabile e 1,2,3,4,5 sono i valori che devono assumere la variabile. La procedura delay(x) genera una attesa di x millisecondi. Case of si usa per evitare di scrivere tanti if, per esempio se una variabile deve assumere 10 o 20 valori, ma ne pu assumere 1000000000000000........ sarebbe scomodissimo scrivere 10 o 20 if then, cos si usa case of e else.

Repeat Until

Repeat until serve per ripetere delle date istruzioni fino a una data situazione, le istruzioni sono racchiuse tra: repeat e until e dopo until va la condizione, esempio: Program EsempioREpeatUntil; Uses Crt; Var input,res:string begin write('Inserire un numero:'); readln(input); repeat; res:=input+2; until res<=12000 writeln('La variabile res ha il valore di: ',res,'') repeat until keypressed; end. Il programma dovrebbe essere di immediata comprensione, ma lo spiego comunque, chiede all' utete di inserire un numero, aggiunge sempre 2 a quel numero e, quando quel numero meggiore o uguale di 12000 allora mostra all' utente il che valore ha assunto il risultato (variabile res), da notare che il repeat until keypressed tutto un discorso a parte che ho gi spiegato.

While Do
While do si usa come if then, solo che se while significa mentre, ossia finch quella condizione vera si continua a riperere le istruzioni date con while, quando quella condizione non pi vera, il programma potr proseguire.

Le variabili di tipo record


Le variabili di tipo record sono delle variabili formate da pi variabili, ma non vengono usate con type e dopo type v l' end esempio, se vogliamo che la variabile persona sia formata dalle variabili Nome, Cognome, Et e Sesso useremo: type persona=record Nome:string; Cognome:string; Et:word; Sesso:char; end; e le variabili Nome, Cognome, Et e Sesso vengono usate normalmente e come se fossero inzializzate da var e non da type.

La procedura goto e le label


La procedura goto v usata assieme a if, ma, mentre in if, viene eseguita solo l' istruzione corrispondente alla situazione attuale, con goto viene eseguita, non solo l' istruzione corrispondente alla nostra situazione, ma anche quelle successive alla situazione da eseguire, esempio:

Program goto; uses Crt; var numero1,numero2:string label caso1,caso2; begin write('Inserisci un numero:'); readln(numero1); if numero1<>1 then goto caso1; else goto caso2; caso1: writeln('Il numero inserito non 1'); repeat until keypressed; end; caso2: writeln('Il numero inserito 1'); repeat until keypressed; end; end. Questa una cosa un po' complicata che, o si capisce al volo o non la si capisce, ma anche se non la capite, potete usare altri metdi per fare LA STESSA IDENTICA COSA!

I numeri a caso a la procedure random e randomize


Per la generazione di numeri casuali si usa questo codice: var x,ir:integer; rr:real; begin clrscr; writeln('Inserisci un numero intero: '); readln(x); randomize; ir:=random(x+1); rr:=random; end. Un' ottimo esercizio per capire meglio questo codice cambiare le variabili e fare in modo che tra quello che ho scritto io e quello che avete scritto voi facciano la stessa cosa, e che una volta compilato siano completamente identici.

Operazioni sui file


A me piace molto eseguire operazioni sui file, quindi questo capitolo sar molto lungo e ben approfondito, se siete stanchi o non ce la fate pi non continuate a leggere, non imparereste nulla, e fareste molta confusione. La directory, o path, il percorso in cui un determinato file si trova e si pu assimilare ad una cartella. Ad

esempio, in C:\WINDOWS\System32\atl71.dll, la directory C:\WINDOWS\System32, per nel pascal vige una piccola regola che dice che se il nome di una directory pi lungo di 8 caratteri si scriveranno gli 8 caratteri e, dopo di essi si metter questo simbolo: ~1, vale anche per i file, solo che la estensione esclusa, esempio: Nome file vero: C:/123456789101112/file123456789.txt Nome file secondo il pascal: C:/12345678~1/file1234~1.txt cos il discorso comprensibile, da ira in poi dar per scontato che questa cosa la sappiate e continuer a spiegare le funzioni pi semplici da applicare a una directory: Per eliminare una directory si usa la procedura RmDir(s:string), con s che indica il nome della cartella da distruggere. Per cambiare la directory corrente si usa la procedura ChDir(s:string), con s che indica il percorso della cartella in cui spostare il path corrente. Per sapere qual la directory corrente si usa la procedura GetDir(b:byte;s:string), dove b indica il drive di cui analizzare la directory. Per creare una directory si usa la procedura MkDir(s:string), con s che indica il nome della cartella da creare. Ora vi dir il sorgente per cercare un file. Program cercafile; Uses Crt,WinDos; Var nome,dir:string; trovato:Boolean; DirInfo:TSearchRec; begin clrscr; trovato:=false; write('Nome del file da cercare:'); read(nome); write('Directory in cui cercare !nome corto!:'); read(dir); ChDir(dir); FindFirst(*.*,FaArchive,DirInfo) while DosError=0 do begin if Pos(nome,DirInfo.Name)>0 then begin trovato:=true; break; end; FindNext(DirInfo); end; if trovato=true then write('Il file stato trovato!'); else begin write('Il file non stato trovato!'); readln; end; end. Ora spiegher come si usano le veriabili di tipo text, cosa c' entra assign con text e cosa significa eof, ma per fare tutto questo mi serve un esempio piuttosto complicato da analizzare molto bene. Program CopyFile; Uses Crt; Var filex,filey:text; nomex,nomey,parola:string;

begin clrscr; TextColor(4); write('Inserire il nome del file da copiare ! Regole pascal ! '); readln(nomex); writeln('Inserire il nome del file copia ! Regole pascal ! '); readln(nomey); Assign(filex,nomex); Assign(filey,nomey); writeln('Controllare che tutto sia scritto bene e premere un tasto per continuare'); repeat until keypressed; Reset(filex); Rewrite(filey); repeat; readln(filex,parola); writeln(filey,parola); until eof(filex); Close(filex); Close(filey); sound(440); writeln('Copia completata con successo, premere un tasto per continuare'); repeat until keypressed; TextColor(7); writeln('By Denis442'); repeat until keypressed; end. Inizio spiegando la procedura assign, il nume del file e la sua directory sono assunti da una variabile di tipo string chiamato nomex, ma cos non assume il valore di un file, bens solo un sacco di caratteri, per fare s che un file sia rappresentato da una variabile di tipo text useremo assign in questo modo: assign([variabileText],[variabileString]);, sarebbe un errore gravissimo non usare assign e dare subito valore a text senza l' aiuto di nessuna variabile, vi domanderete cosa c' entra la variabile parola e che significa eof, bene, eof l' abbreviazione di end of file (fine del file) in questo caso ho usato repeat.....until perch dopo aver preso e aperto due file in vista di operazioni di lettura e/o scrittura con la procedura reset([variabileText]); e aver creato un nuovo file, o se esisteva gi svotato con la procedura rewrite([variabileText]); memorizza una riga nella variabile parola che verr poi copiata nel file che ha subito il rewrite, viene sfruttata, come ho gi detto prima la funzione repeat...until e, dopo until va messo eof, cos copier riga per riga ci che scritto nel primo file, e mette riga per riga ci che nella variabile parola nel file copia fino alla fine del file originale, o si otterr un errore: until eof([file da copiare]). Altre cose da notare sono che dopo aver aperto un file con reset va anche chiuso con close. Per dare colore al testo o allo sfondo si usa TextColor(numero); o TextBackground(numero);, dove ogni numero corrisponde a un colore, i colori sono: 0=nero 1=blu scuro 2=verde scuro 3=verde acqua scuro 4=rosso scuro 5=fucsia scuro 6=ocra 7=grigio chiaro 8=grigio scuro 9=blu 10=verde 11=azzurro 12=rosso 13=fucsia

14=giallo 15=bianco

La modalit grafica
Nel pascal la modalit grafica da scarsi risultati, anche se esiste e usarla non poi cos difficile, per inizializzare la modalit grafica si fa cos: uses Crt,Graph; var gd,gm:integer; gd:=detect; (*Rileva la scheda video*) InitGraph(gd,gm,); (*Inizializza la modalit grafica*) if graphresult<>grOK then (*Se si sono verificati errori...*) halt; (*...termina immediatamente il programma*) (*.......*) CloseGraph; CloseGraph si usa per chiudere la modalit grafica, i comandi principali per la modalit grafica sono questi: Arc(x,y,a1,a2:word) Disegna una arco che rappresenta la parte di circonferenza con centro in (x;y) compresa tra gli angoli a1 e a2 Circle(x,y,d:word) Disegna un cerchio di diametro d alle coordinate x;y GetColor Restituisce il colore con cui si sta disegnando GetMaxX Restituisce il massimo numero delle ascisse GetMaxY Restituisce il massimo numero delle ordinate Getpixel(x,y:word) Restituisce il colore del pixel alle coordinate x e y GraphResult Restituisce il numero di un errore se linizializzazione della modalit grafica fallita initGraph(gd,gm:integer;path:string) Gd e gm sono parametric che indicano le caratteristiche della scheda video; in base a quelle viene inizializzata la modalit grafica. In path viene specificato il percorso del file bgi che serve al funzionamento della modalit grafica Line(x, y, x1, y1:word) Traccia una linea da x,y a x1,y1 MoveTo(x, y:word) Muove il cursore al punto di coordinate x e y OutText (s:string) Scrive una e una sola stringa s a schermo OutTextXY(x,y:word;s:string) Muove il cursore a (x; y) e scrive s

PutPixel(x, y, c:word) Illumina un pixel a (x; y) del colore c (range: 1..15) rectangle(x, y, x1, y1:word) Disegna un rettangolo date le coordinate SetColor(c:byte) Definisce il colore per disegnare in c.

Potrebbero piacerti anche