Pascal (limbaj de programare)

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
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

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ți integer (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 de char : singura diferență este că un tip de byte are ca afișaj implicit cel al unui număr, în timp ce char 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ă numerele real 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

Pictogramă lupă mgx2.svg Același subiect în detaliu: Array .

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ște array [0.. n ] of char declarație array [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

Pictogramă lupă mgx2.svg Același subiect în detaliu: Înregistrare (tip de date) .

Î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ă

Bibliografie

Elemente conexe

Alte proiecte

linkuri externe

Controlul autorității LCCN (EN) sh85098423 · BNF (FR) cb11941547z (data)