Pascal (limbaj de programare)
Pascal limbaj de programare | |
---|---|
Autor | Niklaus Wirth |
Data de origine | 1970 |
Utilizare | generic, didactic |
Paradigme | programare structurată |
Tastare | puternic, static |
Specificații lingvistice | Manual de utilizare Pascal și Raport |
Extensii comune | .pas, .inc |
Influențată de | ALGOL |
Pascal , în informatică , este un limbaj de programare creat de Niklaus Wirth și bazat pe limbajul ALGOL ; numele este dedicat lui Blaise Pascal care a inventat Pascalina în 1645, considerat primul calculator.
Istorie
Se pare că Wirth, profesor de programare în anii 1960, a simțit lipsa unui limbaj de programare potrivit pentru predarea disciplinei sale și dotat cu structuri avansate de date. BASIC , creat în 1964 , a fost ușor de învățat, dar nu avea structuri avansate de date și nu a încurajat suficient să analizeze problema înainte de a scrie efectiv codul. Chiar și limbi precum ALGOL și Fortran nu păreau potrivite pentru scopurile sale didactice. Prin urmare, Wirth a creat limbajul Pascal de la zero, încorporând conceptul de programare structurată [1] .
Prima implementare a limbii a devenit operațională în 1970 , dar a ajuns la o difuzare echitabilă în domeniul industrial începând cu 1974 , odată cu publicarea cărții „Pascal User Manual and Report” [2] , considerată referința standard pentru limbă. TeX și o parte din primele versiuni ale sistemelor de operare Macintosh [3] și Microsoft Windows [4] au fost scrise în Pascal.
Fiind un limbaj conceput pentru studenți și utilizatori neexperimentați, compilatoarele Pascal au o atitudine de protecție față de programator (presupunând că orice neregulă din codul scris este o eroare), ceea ce deseori îi enervează puțin pe experți. De exemplu, datele și funcțiile sunt verificate de compilator folosind așa-numita tipare puternică (verificarea tipului puternic) sau o rigoare strânsă în ceea ce privește definiția și modul de utilizare a tipurilor de date, spre deosebire de limbile slab tipizate (de exemplu, JavaScript ) care, în schimb, permit programatorilor experimentați o mai mare libertate de a scrie cod cu prețul îngreunării detectării erorilor de structură și sintaxă.
Pascal este un limbaj care necesită atât utilizarea unui stil bun de programare, cât și analizarea temeinică a problemei înainte de a începe să scrie cod sursă . Având în vedere difuziunea în mediile școlare și evoluția tehnologiei și a nevoilor pieței, au fost create versiuni orientate obiect, cum ar fi Turbo Pascal și Object Pascal (utilizate în mediul de dezvoltare Delphi al lui Borland , acum deținut de Embarcadero).
Caracteristici
Principalele caracteristici ale lui Pascal sunt o sintaxă clară și rigidă cu obligația de a împărți programul în secțiuni bine definite ( uses
specifice și implementation
) și de a declara în avans toate variabilele utilizate în program. Secvența de definiție a elementelor din codul sursă este, de asemenea, codată rigid și secvențială, adică: etichete, constante, tipuri, variabile, proceduri și funcții ( label
, const
, type
, var
, procedure
, function)
. De asemenea, permite utilizarea unor tipuri de date ( record
) complexe, definibile de programator, prin specificația secțiunii de type
. De asemenea, permite utilizarea de indicatori și alocarea dinamică a memoriei (specificații new
și de dispose
), într-un mod mai controlat, de exemplu, decât limbajul tradițional C.
Pascal este clasificat ca un limbaj semi-dinamic , deoarece gestionează pointerele , permițându-vă să creați liste de variabile de dimensiuni necunoscute în momentul compilării , dar acestea pot fi doar de un tip la un moment dat, cel utilizat pentru a defini pointerul variabilă în sine. În loc de subrutine , utilizate în mod obișnuit în limbajele de programare timpurii, Pascal introduce proceduri și funcții , care extind conceptul de subrutine prin încapsularea variabilelor și datelor locale în ele. Mai mult, în formularea sa inițială, limbajului îi lipsea instrucțiunea GOTO , din punct de vedere conceptual contrară structurării corecte a programelor, adăugată ulterior, dar a cărei utilizare este totuși descurajată.
Compilatoare gratuite
- Free Pascal [5] , un compilator autorizat GPL, cu sintaxă compatibilă cu Object Pascal;
- Lazarus [6] , născut ca sub-proiect al Free Pascal , o clonă GPL avansată a lui Borland Delphi ;
- Dev-Pascal [7] , IDE pentru Windows 9X, parțial compatibil cu seria NT / 2K / XP .. și nu mai este dezvoltat, bazat pe compilatorul Free Pascal .
Exemple de programe
Salut Lume!
Următorul exemplu imprimă textul „ Hello world ” pe ecran.
program salut ;
folosește crt ; <---- nu este obligatoriu
începe
clrscr ; <---- nu este obligatoriu
writeln ( „Hello World” ) ;
readln
sfârșit .
Note Prima linie introduce programul cu cuvântul cheie program , urmat de titlul programului. Nu pot fi folosite caractere și spații speciale. A treia linie conține declarația begin , utilizată pentru a începe scrierea programului propriu-zis. A cincea linie conține instrucțiunea writeln , utilizată pentru a scrie textul („Hello World”) afișat între paranteze pe ecran, în timp ce a șasea, cu instrucțiunea readln , plasează programul în așteptarea unei intrări de la tastatură, astfel încât să nu facă scrierea dispare imediat. Când este apăsată tasta Enter, programul va continua executând instrucțiunea end , care încheie secvența. Această comandă este singura, în mediul Pascal, care este urmată de un punct în loc de punct și virgulă.
Variabile
Pascal oferă multe tipuri de variabile :
- Tipuri întregi , utilizate pentru a stoca valori numerice întregi semnate sau nesemnate în anumite intervale numerice. În Pascal sunt:
-
integer
: variabilă semnată cu 16 bițiinteger
(numere de la -32.768 la 32.767) -
word
: variabilă nesemnată de 16 biți întregi, cu valori cuprinse între 0 și 65.535. -
byte
: După cum sugerează deja numele, acest tip ocupă un octet în memorie și permite valori diferite, de la 0 la 255. Acest tip este complet compatibil cu tipul dechar
: singura diferență este că un tip debyte
are ca afișaj implicit cel al unui număr, în timp cechar
al unui caracter. -
short
: ca și precedentul, ocupă doar un octet, dar reprezintă numere semnate, astfel încât valorile pot varia de la -128 la 127. -
longint
: ocupă 4 octeți (sau 32 de biți) și vă permite să gestionați mai multe valori semnate, variind de la -2147483648 la 2147483647. -
comp
: este cel mai mare tip întreg. Ocupă 8 octeți (64 biți), prin urmare permite gestionarea mai multe valori semnate, variind de la -9.2E18 la 9.2E18.
-
- Tipuri reale :
-
real
: număr real semnat (numere de la -2.9E-39 la 1.7E38), care poate fi reprezentat în notație științifică sau exponențială. Dacă numerelereal
sunt introduse de la tastatură, acestea trebuie scrise în notație exponențială. Pentru a imprima un număr real în format zecimal, utilizați următoarea sintaxă:
-
... {Mai multe instrucțiuni}
Var R : Real ;
... {Mai multe instrucțiuni}
Writeln ( „Numărul real este” , R : 10 : 3 ) ;
... {Mai multe instrucțiuni}
În acest caz, sunt afișate un total de 10 cifre, dintre care 3 sunt zecimale.
- Tipul de
char
(char
): variabilă de caracter, reprezintă un singur caracter, în general codificat în opt biți cu format ASCII . - Tipul
string
(string
): variabilă care conține mai multe caractere, de fapt este o matrice de caractere. Pentru a accesa singurele caractere conținute într-un șir, pur și simplu utilizați parantezele pătrate[]
specificând numărul caracterului care trebuie utilizat (citire / scriere). Puteți indica lungimea maximă a șirului inserând[n]
în timpul declarației, dacă nu este specificat, lungimea va fi de 256 de caractere. - Tipul
boolean
(boolean
): variabilă binară (adevărat / fals).
Indicatori
Puteți specifica indicatori pentru variabile utilizând un nume în declarație urmat de simbolul ^
precede tipul de variabilă către care ar trebui să indice indicatorul. Pointerele funcționează ca în C / C ++ :
var
pointer : ^ int ;
număr : int ;
începe
număr : = 10 ;
indicator : = @ număr
sfârșit .
În acest fel, pointer
va indica number
. În timp ce pentru a atribui o valoare spațiului de memorie adresat de pointer
, vom folosi ^
la sfârșitul numelui, adică ca operator de dereferențiere :
pointer ^ : = 15 ;
Matrice
array
Pascal sunt o succesiune ordonată, într-o cantitate prestabilită, de elemente de același tip. Elementele pot fi compuse din orice tip de date, nativ sau programator definit folosind type
.
O caracteristică importantă a limbajului Pascal este că, atunci când este declarată o array
, este definită și valoarea inițială a indexului care trebuie utilizat pentru scanarea diferitelor elemente:
- Matrice de tip generic :
Nume var : matrice [ start .. sfârșit ] de tip ;
- Șiruri : La fel ca în multe alte limbi, șirurile sunt pur și simplu matrice de caractere. Declarația unei variabile șir este deci declarația unui tablou constând dintr-o cantitate predefinită de caractere. Următorul exemplu creează o variabilă de șir de 20 de caractere. Variabila declarată în acest fel poate fi utilizată ca o matrice, adică accesarea informațiilor caracter cu caracter sau ca întreg. Dacă utilizați o atribuire de ultimul tip, sunt afectate și elementele după lungimea șirului literal atribuit. Deci, urmând exemplul, tabloul primește numele „Paul” în primele sale cinci elemente, în timp ce în celelalte se introduce oricum un spațiu. Cu toate acestea, în cele mai recente implementări Pascal este posibil să se utilizeze tipul
String
, care înlocuieștearray [0.. n ] of char
declarațiearray [0.. n ] of char
Nume var : matrice [ 1 .. 20 ] de caracter ;
..... {Alte instrucțiuni}
nume : = 'Paolo' ; {atribuire în ansamblu}
nume [ 5 ] : = 'a' ; {numai atribuirea celui de-al cincilea caracter}
Record
În Pascal, puteți defini un tip personalizat (personalizat), structurat chiar de programator. Sintaxa se bazează pe specificația type
:
tip persoană = înregistrare
nume : șir [ 30 ] ;
varsta : int
sfârșit ;
și apoi utilizați tipul de variabilă personalizată astfel:
var cineva : persoana ;
începe
cineva . nume : = 'Hasdrubal'
cineva . vârstă : = 35
sfârșit .
Intrare și ieșire
Datele de intrare de la tastatura se face prin utilizarea readln(nome_variabile)
comanda.
Ieșirea utilizează în schimb comanda writeln(nome_variabile)
; serigrafia utilizează în continuare comanda writeln
, dar textul este între ghilimele unice "( writeln('ciao mondo');
)
Există, de asemenea, cele două funcții write()
și read()
care diferă de cele anterioare prin faptul că nu scriu un cod de returnare a transportului la sfârșitul liniei.
Un exemplu de I / O întregi:
program input_output ( intrare , ieșire ) ;
var
n1 , n2 , ris : întreg ; {Declarație de tip întreg}
începe
writeln ( 'Inserați n1' ) ; {textul dintre '' este afișat}
readln ( n1 ) ; {comanda de intrare, variabila introdusă este inserată în n1}
writeln ( „Inserați n2” ) ;
readln ( n2 ) ;
ris : = n1 + n2 ; {face suma n1 și n2 și rezultatul este inserat în ris}
writeln ( „Suma este„ egală cu ” , ris ) ; {tipăriți mesajul între '' și variabila ris}
readln {acest lucru împiedică închiderea programului fără a putea citi ultima linie, programul o va face
așteptați ca utilizatorul să scrie ceva și apoi apăsați ENTER. Acest lucru va determina închiderea programului.}
sfârșit .
I / O reală: pentru introducerea numerelor reale metoda rămâne întotdeauna aceeași ( readln
(variabilă)), în schimb pentru ieșire, pentru a vedea numere de înțeles trebuie să utilizați o sintaxă diferită în writeln
program input_output ( intrare , ieșire ) ;
var n1 , n2 , ris : real ; {Declarație de tip real}
începe
writeln ( 'Inserați n1' ) ; {se afișează textul între ''}
readln ( n1 ) ; {comanda de intrare, variabila introdusă este pusă în n1}
writeln ( 'Inserați n2' ) ;
readln ( n2 ) ;
ris : = n1 + n2 ; {face suma lui n1 și n2 și rezultatul este pus în ris}
writeln ( „Suma este„ egală cu ” , rez : 6 : 2 ) ;
{tipăriți mesajul între '' și variabila ris, cu 6 numere înainte de „,”, „,„ în sine și 2 după}
readln
sfârșit .
În serigrafie am folosit o modificare a comenzii writeln
, adăugând var: n: m unde var este numele variabilei care trebuie afișată, n este numărul total de cifre (inclusiv „,”) care trebuie afișate și m sunt cele de după virgulă. Dacă sunt afișate mai multe cifre decât cele indicate, acestea nu sunt trimise la dispozitivul de ieșire.
Caracterele I / O: introducerea și ieșirea caracterelor (numere, litere, simboluri), sunt aceleași pentru caractere și numere întregi:
program input_output ( intrare , ieșire ) ;
var ch : char ; {Declarație tip de caracter}
începe
writeln ( „Introduceți caracterul” ) ; {textul dintre '' este afișat}
readln ( ch ) ; {comanda de intrare, variabila introdusă este pusă în ch}
writeln ( 'Caracterul introdus este ' ' ' , ch ) ; {tipăriți mesajul între '' și variabila ch}
readln
sfârșit .
Șiruri I / O: variabilele șirului, așa cum am menționat deja, sunt array
de char
(vectori de caractere).
Structuri de control
Alternative
Program alternativ ;
var
n : întreg ;
începe
scrie ( 'introduceți un număr:' ) ;
readln ( n ) ;
dacă n > 0 {verificați dacă valoarea este pozitivă}
atunci
scrie ( „numărul este„ pozitiv ”. )
altceva
scrie ( „numărul este„ negativ. ” ) ;
readln
sfârșit .
Repetare
Următoarele fragmente de cod arată un exemplu de bucle de iterație în limba Pascal.
Program ciclo_for ;
var i , n , num : întreg ;
începe
scrie ( „câte numere doriți să inserați?” ) ;
readln ( n ) ;
pentru i : = 1 to n do
începe
scrie ( 'introduceți numărul:' ) ;
readln ( num ) ;
sfârșit ;
readln
sfârșit .
După ce pentru specificație, o valoare trebuie atribuită unei variabile (în acest caz i:=1
). Această variabilă va fi incrementată automat la fiecare repetare a buclei, adică a codului indicat după for
între do și end
: o dată egal cu numărul (sau variabila) după to, bucla se va termina.
Valoarea unei variabile poate fi, de asemenea, incrementată utilizând aceeași variabilă ca referință. Evident, nu trebuie să confundăm aceste expresii în Pascal și în multe alte limbi, cu convențiile ecuațiilor matematice.
Zecimal pentru bucla ... ... să facă repeta un bloc de instrucțiuni unui anumit număr de ori, prin urmare, sunt interzise valorile reale înainte și după, și la variabilele care urmează să fie utilizate întotdeauna trebuie să fi fost declarate de întreg (tip întreg ).
De asemenea, puteți executa o buclă for..to..do în ordine inversă, adică de la cel mai mare la cel mai mic număr, utilizând cuvântul cheie downto
în loc de to
. În acest caz, la fiecare repetare a ciclului variabila va fi decrementată în loc să fie mărită.
Program Exemplu2 ;
Folosește Crt , WinDos ;
Var nume1 , nume2 , șir : șir ;
fișier1 , fișier2 : text ;
începe
clrscr ;
write ( 'Introduceți numele unui fișier:' ) ;
readln (name1);
write ( 'Introduceți numele fișierului copiat:' ) ;
readln (name2);
Alocați ( fișier1 , nume1 ) ;
Alocați ( fișier2 , nume2 ) ;
Resetare ( fișier1 ) ;
Rescrieți ( fișier2 ) ;
repeta
readln ( fișier1 , șir ) ;
writeln ( fișier2 , șir ) ;
până la eof ( fișier1 ) ;
Închidere ( fișier1 ) ;
Închidere ( fișier2 ) ;
writeln ( „Copia completată!” ) ;
readln
sfârșit .
Alocare (fișier1, nume1): Această specificație atribuie numele fișierului conținut în șirul nume1 fișierului variabil 1 de tip text.
Trebuie remarcat modul în care limba tradițională Pascal folosește nume de fișiere. Un nume poate fi format din maximum 8 caractere, cu excepția extensiei. Dacă numele depășește 8 caractere, este trunchiat la 6 și se adaugă un ~ 1 (codul ASCII al tildei, ~, este 126). Prin urmare, numele testouno.txt este corect și este păstrat neschimbat. În schimb, testoquattro.txt este greșit și compilatorul va genera un mesaj de eroare ( eroarea 2: Fișierul nu a fost găsit ); textq ~ 1.txt este versiunea corectă a exemplului anterior: caracterele sunt tăiate la 6 și adăugate un ~ 1.
Resetare (fișier1); : instrucțiunea reset
(x), unde x este o variabilă inițializată cu Assign
și de tip text sau fișier, este utilizată pentru a deschide fișierul x, având în vedere operațiile de citire / scriere pe acesta.
Rescrieți (fișier2); : se aplică aceleași reguli de reset
. Rescriere (x: text sau fișier) este o procedură care creează un nou fișier x (dacă directorul nu este specificat în numele său, este creat în calea curentă). Dacă există deja un fișier numit x, îl suprascrie.
repetați ... până la eof (fișier1); : repetă o buclă de afirmații până când expresia indicată după until
este adevărată. În cazul nostru, programul continuă să citească, rând cu rând, fiecare secvență de caractere conținute în file1
și o copiază în file2
, până când variabila de resetare eof (care înseamnă End Of File; acceptă doar parametrii de tip text sau fișier) este adevărat și, prin urmare, fișierul de citit este terminat.
Închidere (fișier1); : A close
procedura se închide un fișier.
După cum am văzut, repeat
... until
utilizată pentru a repeta o afirmație sau un bloc de afirmații până când o condiție este adevărată. Nu este necesar să se includă blocul de instrucțiuni între un begin
și un end
, deoarece limitele blocului sunt deja definite prin repeat
și until
.
Programul Exemplul 3 ;
Utilizează Crt ;
Var x , y : cuvânt ;
începe
clrscr ;
scrie ( 'Introduceți două coordonate:' ) ;
readln ( x , y ) ;
în timp ce ( x <> 0 ) și ( y <> 0 ) fac
începe
citit ( x , y ) ;
gotoxi ( x , y ) ;
scrie (( , x ,;, y , )) ;
sfârșit ;
readln
sfârșit .
Acest program citește două coordonate de la tastatură, mută cursorul la coordonatele date și scrie abscisele și ordonatele între paranteze, separate printr-un punct și virgulă, în acel punct. Ciclul se repetă de fiecare dată când condiția indicată este adevărată: în acest caz când ambele x și y sunt diferite de 0.
Procedura gotoxy (x, y: cuvânt) mută cursorul la coordonatele (x; y) de pe ecran.
Chiar și cu while
este recomandabil să acordați atenție buclelor infinite și să rețineți că cu while
este necesar să includeți blocul de afirmații între început și end
;
Notă
- ^ (EN) IEEE Computer Society, The Art of Teaching Computer Science: Niklaus Wirth , of computer.org.
- ^ Kathleen, Wirth, Niklaus Jensen, Pascal User Manual and Report - ISO Pascal Standard , New York, Springer-Verlag, 1974, ISBN 978-3-540-90144-0 .
- ^ (EN) Ce limbă era „standard” pentru dezvoltarea Apple înainte de Obiectivul C? , la softwareengineering.stackexchange.com .
- ^ (RO) Originea secretă a Windows pe technologizer.com.
- ^ Free Pascal - Un compilator avansat Open Source Pascal pentru Pascal și Object Pascal
- ^ Lazarus Project :: Scrie o dată compila peste tot!
- ^ Software vărsat de sânge - Furnizarea de software gratuit comunității de internet
Bibliografie
- Flavio Waldner, Let's Learn Pascal , Jackson Publishing Group, 1981.
- Pierre Le Beux, Introducere în Pascal , Jackson Publishing Group, 1982, ISBN 88-7056-118-6 .
- Olivier Lecarme și Jean-Louis Nebut, Pascal - Ghidul programatorului , McGraw-Hill, 1985, ISBN 88-7700-602-1 .
- Daniel-Jean David și Jean-Luc Deschamps, Program în Pascal , Jackson Publishing Group, 1982, ISBN 88-7056-116-X .
- Kathleen Jensen și Niklaus Wirth, Pascal - Manual și standarde lingvistice , Jackson Publishing Group, 1981.
- Kenneth L. Bowles, Solution of Problems with Pascal , Jackson Publishing Group, 1982, ISBN 88-7056-110-0 .
Elemente conexe
Alte proiecte
- Wikibooks conține texte sau manuale despre Pascal
- Wikiversitatea conține resurse despre Pascal
- Wikimedia Commons conține imagini sau alte fișiere despre Pascal
linkuri externe
- Comunitate italiană pe Lazarus și Free Pascal , pe lazaruspascal.it .
- Cursul video al lui Pascal , pe sites.google.com .
Controlul autorității | LCCN (EN) sh85098423 · BNF (FR) cb11941547z (data) |
---|