Jump to content
Hostul a fost schimbat. Daca vedeti serverul offline readaugati rpg.b-zone.ro sau 141.95.124.78:7777 in clientul de sa-mp ×

[PASCAL] Lectia 1 - Partile unui program


Leventhe
 Share

Recommended Posts

Partile unui program Pascal

 

Cele trei parti principale ale unui program Pascal sunt: antetul (header-ul) programului, declaratiile in care se descriu obiectele asupra carora vor avea loc prelucrarile (in cadrul programului pe care il analizam, vom considera numai declararea variabilelor) si partea principala a programului in care se scriu instructiunile (ansamblul operatiilor ce urmeaza a fi executate).

 

O structura vizuala a unui program Pascal ar arata in felul urmator:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

PROGRAM Nume_Program;

 

CONST

(* declaratii de constante *)

 

TYPE

(* declaratii de tipuri *)

 

VAR

(* declaratii de variabile *)

 

(* declaratii de subprograme (functii si proceduri) *)

 

BEGIN

(* instructiuni *)

END.

 

De remarcat ca un program functional necesita doar ultimele 3 linii din schita de mai sus, iar compilatorul nu va avea nimic impotriva. Bineinteles, nu veti putea folosi variabile, constante, tipuri sau subprograme.

 

Pentru a intelege aceasta structura, deloc complicata, sa analizam fara graba un program Pascal care calculeaza si afiseaza volumul unui paralelipiped. Este vorba de un program care declara variabile, citeste valorile acestora, efectueaza un calcul simplu si afiseaza rezultatul.

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

PROGRAM volumul;

{calculeaza si afiseaza volumul unui paralelipiped}

VAR lungime, latime, inaltime, volum: real;

BEGIN

writeln('Introduceti valori: lungime, latime, inaltime');

readln(lungime, latime, inaltime);

volum := lungime * latime * inaltime;

writeln('Volumul paralelipipedului= ', volum:9:5,' metri cubi')

END. {volumul}

 

Cand programul este rulat, pe ecran se va afisa:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

Introduceti valori: lungime, latime inaltime

8.3 7.25 6.29

Volumul paralelipipedului= 378.50075 metri cubi

 

De remarcat ca sirul "8.3 7.25 6.29" a fost introdus de la tastatura, fiind valorile pentru lungime, latime, respectiv inaltime.

 

Examinand acest program, vom putea vedea urmatoarele elemente:

 

Antetul (header-ul) programului

 

Prima linie contine antetul programului. Program este un cuvant rezervat cu care incepe (optional) un program (Borland) Pascal. El este urmat de numele programului: volumul si de simbolul punct si virgula. Simbolul punct si virgula (" ; ") este un separator de instructiuni. Este strict necesar, bineinteles, cu unele mici exceptii, care le voi semnala la momentul potrivit.

 

O restrictie importanta a identificatorilor este aceea ca nu pot contine in interiorul lor blancuri (spatii).

 

Comentariile

 

A doua linie a programului "volumul" este numita un comentariu.

 

Orice sir de caractere delimitat de seturile { si } sau (* si *) reprezinta un comentariu. Comentariile sunt folosite pentru a mari inteligibilitatea programelor (ele fiind ignorate de compilatorul Pascal), usurand astfel munca de intelegere si corectare a acestora. Daca se doreste imbricarea comentariilor, acest lucru se face alternand acoladele cu (*.

Ex. modul corect:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

(* comentariu1 {comentariu imbricat} comentariu2 *)

{ comentariu1 (*comentariu imbricat*) comentariu2 }

 

modul incorect

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

(* comentariu1 (*comentariu imbricat*) comentariu2 *)

 

Setul de acolade { si } mai este folosit si pentru directivele de compilare.

 

Comentariile fac programul mai usor de inteles. Daca va scrieti programele fara comentarii veti putea avea nevoie de o perioada de reacomodare cu codul cand veti reveni pentru a-l modifica. In general, in partile de cod mai serioase sau mai complicate, se obisnuieste sa se foloseasca cateva comentarii. In plus, daca aveti de gand sa modificati codul pentru un alt scop decat cel initial, este bine sa faceti un comentariu in care sa explicati ce doriti sa faceti.

 

Remarcati in ultima linie a programului prezenta comentariului {volumul}, tocmai pentru a reaminti cititorului numele programului care s-a incheiat. Comentariile pot fi plasate oriunde in cadrul programului, dar nu in interiorul identificatorilor.

 

Declararea variabilelor

 

Cuvantul cheie var (prescurtare de la variables) incepe actiunea de declarare a variabilelor. Fiecare variabila trebuie sa poarte un nume. Programul volumul foloseste patru variabile (lungime, latime, inaltime, volum) identificate in faza de analiza structurata a programului. Acestea sunt grupate astfel:

 

Variabile de intrare:

lungime: lungimea paralelipipedului

latime: latimea paralelipipedului

inaltime: inaltimea paralelipipedului

Variabile de iesire:

volum: volumul paralelipipedului

Nu trebuie sa va speriati de denumirea pompoasa (de intrare, de iesire). Variabilele se declara la fel, indiferent de rolul lor. Denumirile sunt folosite doar pentru a usura intelegerea rolului acestor variabile in program.

 

Tipuri de date

 

In Pascal exista doua tipuri (simple) de date pentru variabile numerice: intregi si reale.

 

Variabilele intregi pot lua valori numai numere intregi, cum ar fi: 6, -19, 0 sau 73700.

 

Un calculator poate reprezenta numai o submultime finita de intregi. O valoare intreaga poate fi salvata in memoria unui calculator doar daca respectiva valoare apartine intervalului (-maxint-1, maxint), unde maxint este o constanta predefinita. In majoritatea implementarilor limbajului Pascal constanta maxint este egala cu 32767.

Daca o variabila Pascal va avea o valoare fractionara, variabila trebuie sa fie de tip real.

Intr-un program (Borland) Pascal tipul fiecarei variabile utilizate trebuie sa fie declarat. Omiterea declararii unei variabile folosite in partea principala a programului va genera o eroare. In programul pe care-l analizam (volumul), declararea variabilelor s-a facut utilizand enuntul:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

VAR lungime, latime, inaltime, volum: real;

 

Odata intalnit acest enunt, compilatorul afla ca toate cele patru variabile sunt de tip real.

 

Zona de memorie alocata variabilelor

 

Fiecarei variabile din program i se asociaza o locatie de memorie pe care v-o puteti imagina ca pe o cutie avand inscriptionate: nume si tip. Continutul cutiei este dat de valoarea curenta a variabilei.

Tipul defineste categoria valorii din cutie. Programul refera variabila prin nume. Partea principala a programului reprezinta zona activa, executabila a programului. Cuvintele rezervate BEGIN si END delimiteaza instructiunile care descriu algoritmul principal al problemei de rezolvat.

 

Enunturile (instructiunile) write / writeln

 

Enunturile write / writeln sunt utilizate pentru afisarea pe un suport de informatie (de regula monitorul) a rezultatelor obtinute in urma prelucrarilor, a mesajelor catre utilizator etc.

Write si WriteLn reprezinta in Pascal doi identificatori (de procedura) predefiniti (standard). De remarcat ca daca dati unui program numele "write" (sau "writeln"), nu mai aveti voie sa folositi in program nici un enunt write (sau writeln) cu sensul predefinit (adica sa afiseze un text, variabila, etc).

 

Ori de cate ori se va executa un enunt write / writeln, calculatorul va afisa ad-litteram tot ceea ce este inclus intre apostrofuri, precum si valorile oricarei variabile sau expresii aflate intre paranteze. In plus fata de write, Writeln va trece la linie noua dupa afisarea propriu-zisa. Pentru separarea elementelor din corpul instructiunii se folosesc virgulele.

 

Primul enunt din programul analizat (volumul) determina calculatorul sa scrie pe ecran mesajul:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

Introduceti valori: lungime, latime inaltime

 

dupa care va muta cursorul la inceputul liniei urmatoare.

Fara un astfel de mesaj este greu sa ne dam seama ca este timpul sa se tasteze ceva. Writeln forteaza calculatorul sa afiseze tot ceea ce s-a specificat in interiorul parantezelor si sa treaca la linie noua. La un enunt write, cursorul va ramane pe pozitia imediat urmatoare ultimul caracter scris cu acest enunt.

Writeln poate fi folosit si fara parametri pentru a muta cursorul cu o linie mai jos.

 

Enuntul readln

 

In momentul in care s-a executat instructiunea

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

readln(lungime, latime, inaltime);

 

calculatorul asteapta de la utilizator sa introduca trei numere. Primul va fi atribuit variabilei lungime, cel de-al doilea variabilei latime si in sfarsit cel de-al treilea variabilei inaltime. Nu uitati ca toate cele trei variabile sunt de tip real!

 

Aceste valori pot fi tastate pe o singura linie, cu spatii intre ele, sau cate una pe linie.

De remarcat ca valorile (folosind instructiunile Read / ReadLn) nu sunt citite pana la apasarea tastei Enter.

 

Utilizarea combinatiei write-readln in locul combinatiei writeln-readln

 

De foarte multe ori, in programarea calculatoarelor se foloseste combinatia write-readln in locul combinatiei writeln-readln.

 

Avantajul combinatiei write-readln este acela ca valoarea care se introduce va aparea pe aceeasi linie a ecranului cu cererea, in loc sa apara pe o linie proprie, cum s-ar fi intamplat in cazul folosirii combinatiei writeln-readln.

 

Enuntul de atribuire (asignare)

 

Enuntul ce urmeaza dupa enuntul readln

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

volum :=lungime*latime*inaltime;

 

se numeste enunt de atribuire intrucat el calculeaza ceva (produsul dintre lungime, latime si inaltime) si atribuie (asigneaza, afecteaza) rezultatul variabilei din stanga simbolului ":=". Partea dreapta a acestui enunt este un exemplu de expresie aritmetica.

 

Formatarea afisarii

 

Ultimul enunt din programul volumul:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

writeln('Volumul paralelipipedului= ',volum:9:5,' metri cubi');

 

afiseaza intr-o forma explicita rezultatul:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

Volumul paralelipipedului= 378.50075 metri cubi

 

Remarcati forma de prezentare a rezultatului. Pentru inceput, sirul de caractere "Volumul paralelipipedului", urmat de rezultatul propriu-zis, afisat insa intr-un sablon de 9 caractere, dintre care cinci reprezinta cifre zecimale. Acest mod de afisare a fost stabilit de specificatorul de format ":9:5" (9 caractere, din care 5 cifre zecimale). In cazul in care rezultatul ar fi avut 10 caractere (4 cifre inaintea virgulei, 5 cifre zecimale), specificatia ":9" nu era luata in seama. In cazul in care ar fi fost mai putine caractere (8 sau 7), atunci primul / primele caractere erau completate cu spatii. Specificatia de format " : x : y " este facultativa, dar fara acest specificator de format, volumul calculat ar fi fost afisat in notatie exponentiala (stiintifica), care este mai greu de citit. In sfarsit, sirul de caractere "metri cubi" completeaza imaginea rezultatului.

 

Spatii albe (whitespace)

 

Spatiile albe (spatiile, tab-urile, sfarsiturile de linie) sunt ignorate de Pascal, cu exceptia (evidenta) a sirurilor de text (stringuri) care sunt intre apostroafe. Totusi, pentru a usura munca oamenilor (a programatorului si a celor care mai vad codul) se recomanda spatierea cat mai ordonata a codului si, foarte important, indentarea codului. Folosirea TAB-ului pentru a indenta codul este nerecomandata, luandu-se in considerare diferentele posibile la intelegerea acestui caracter (2, 4, 8 spatii + posibilitati de a-l redefini in IDE-ul dvs.).

 

Identificatori

 

Asa cum am aratat mai sus, identificatorii sunt definiti cu numele dorite. Totusi, exista cateva reguli de baza, de la care nu va puteti abate:

Trebuie sa inceapa cu o litera din alfabet englezesc sau cu caracterul "_" (underline, underscore).

Poate continua cu orice litera, cifra sau underline

Nu poate contine anumite caractere speciale (~ ! @ # $ % ^ & * ( ) + ` - = { } [ ] : " ; ' < > ? , . / |), multe avand intelesul lor in Pascal.

Unele compilatoare de Pascal nu pun nicio restrictie asupra lungimii identificatorilor, dar altele folosesc doar primele cateva caractere (Borland Pascal foloseste primele 63 de caractere - n-am testat niciodata ). Problema des intalnita la identificatorii lungi este faptul ca incetinesc scrierea programului de catre programator. Lungimea identificatorilor este bine sa fie limitata la 10, maxim 15, caractere, in majoritatea cazurilor.

 

Constante

 

Constantele sunt identificatori ai unor valori ce sunt definite la inceputul programului. Valorile asignate constantelor nu pot fi schimbate in decursul rularii programului.

Mai jos aveti o lista de constante declarate ca: Integer, Real, Caracter, String, Boolean (in aceasta ordine). Aceste tipuri de date vor fi explicate in tutorialul urmator.

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

const numar = 2; {numar intreg}

alt_numar = 3.14; {numar real}

litera = 'G'; {caracter}

nume = 'Ionut'; {sir de caractere (string)}

DoWait = False; {valoare logica (boolean)}

 

Constantele sunt, de obicei, folosite pentru a tine o valoare des utilizata in program, care s-ar putea sa fie nevoie sa fie schimbata.

 

Ganditi-va ca vreti sa faceti un program care deseneaza un dreptunghi in relief (3D). Pentru aceasta va trebui sa desenati dreptunghiul de mai multe ori, cu diferite culori, pentru a realiza efectul 3D. Daca la primul dreptunghi veti pune marimea laturii 50, la al doilea 49 si tot asa, veti vedea ca atunci cand vreti sa modificati programul, va trebui sa modificati fiecare numar.

Alternativ, cu constante, in secventa de cod de mai jos:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

{ ... }

const latura_mare = 50;

latura_mica = 20;

{ ... }

begin

{ ... }

Deseneaza Dreptunghi (latura_mare, latura_mica)

Deseneaza Dreptunghi (latura_mare - 2, latura_mica - 2)

Deseneaza Dreptunghi (latura_mare - 4, latura_mica - 4)

Deseneaza Dreptunghi (latura_mare - 6, latura_mica - 6)

Deseneaza Dreptunghi (latura_mare - 8, latura_mica - 8)

{ ... }

end.

 

Atentie: acest program nu va rula in Pascal. Este dat doar pentru exemplificare. Secventele { ... } desemneaza cod care e posibil sa existe.

 

Variabile

 

Variabilele sunt identificatori ai unor valori de anumite tipuri, specificate in declaratie. Spre deosebire de constante, pot fi declarate mai multe variabile de acelasi tip pe o singura linie. Mai jos aveti o lista de declarare de variabile. Aceste tipuri de date vor fi explicate in tutorialul urmator.

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

var index, numar, suma, produs: Integer;

valoare_pi, valoare_e: Real;

litera: Char;

nume, prenume: String;

AmTerminat: Boolean;

 

Variabilele sunt folosite pentru valori care se pot schimba in decursul programului. Variabilele pot fi folosite si in loc de constante, declarandu-le valoarea in program.

 

Asignare

 

Operatia de asignare este operatia prin care variabilele primesc valori. Pentru a asigna o variabila se foloseste urmatoarea sintaxa:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

variabila := valoare;

 

Secventa := se numeste operatorul de asignare.

 

valoare trebuie sa fie de acelasi tip cu tipul declarat al variabilei.

Exemple (folosind declararea de variabile de mai sus):

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

index := 1;

numar := 15;

 

litera := 'k';

litera := #65; {caracterul A majuscula}

nume := 'Bitcell';

prenume := '.info';

nume := nume + prenume; {da, sirurilor de caractere li se poate aplica operatorul de adunare, caz in care sirurile vor fi concatenate}

{in acest exemplu, variabila "nume" va primi valoarea "Bitcell.info"}

 

AmTerminat := (litera = 'X') and (litera = 'x'); {comparatii care returneaza un rezultat boolean, True sau False}

 

valoare_pi := 22 / 7; {nu este chiar valoarea lui pi, dar pentru un exemplu merge}

 

valoare_e := (numar / index) + suma;

 

 

 

In Pascal, operatorii aritmetici sunt:

OPERATORI ARITMETICI IN PASCAL

Operator

Operatie

Operanzi

Rezultat

+

adunare sau semn pozitiv

reali sau intregi

real sau intreg

-

scadere sau semn negativ

reali sau intregi

real sau intreg

*

inmultire

reali sau intregi

real sau intreg

/

impartire

reali sau intregi

real

div

catul impartirii intregi

intregi

intreg

mod

restul impartirii intregi

intregi

intreg

 

Dupa cum se vede in tabelul de mai sus, div si mod pot fi folosite doar cu numere intregi. Operatorul de impartire / poate fi folosit si cu numere intregi, si cu numere reale, dar va returna intotdeauna un numar real. Celelalte operatii functioneaza pe si numere intregi, si pe numere reale. De tinut minte e faptul ca atunci cand intr-o operatie folosim si numere intregi, si numere reale, rezultatul va fi intotdeauna un numar real.

 

Fiecarei variabile ii poate fi asignat o valoare de acelasi tip cu ea. Acesta este motivul pentru care nu se poate asigna o valoare reala unui intreg. Totusi, anumite tipuri de date vor converti valoarea catre un tip mai mare de date. Asta se intampla, de exemplu, cand se asigneaza o valoare intreaga unei variabile reale.

 

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

numar_intreg := 170;

numar_real := numar_intreg;

 

In acest caz numarul intreg 170 va fi convertit in numar intreg, iar variabila numar_real va avea valoarea 170.0.

 

Schimbarea unui tip de data in alt tip se numeste typecasting (selectare de tip). Typecasting-ul din exemplul de mai sus este un exemplu de typecasting implicit (se intampla fara a se specifica aceasta intentie de catre programator).

 

Majoritatea compilatoarelor moderne de Pascal suporta si typecasting-ul explicit, cu o sintaxa doar putin diferita de cea a limbajului C. Codul de mai jos da un exemplu al typecasting-ului explicit.

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

var numar8biti: byte;

numar16biti: integer;

begin

numar16biti := 1000;

numar8biti := byte(numar16biti);

write(numar8biti);

end.

 

In acest exemplu asignam o valoare intreaga, reprezentata intern pe 16 biti, unei variabile intregi reprezentata pe doar 8 biti, specificand ca vrem sa schimbam tipul variabilei in byte (reprezentare interna de 8 biti). Acesta este typecasting-ul explicit si, in Pascal, se face prin a pune paranteze in jurul valorii careia ii vrem schimbate reprezentarea si punand tipul dorit in fata parantezei.

 

In exemplul de mai sus, variabila pe 8 biti va primi valoarea de 232 (byte-ul cel mai putin semnificativ din valoarea pe 2 bytes initiala).

 

Punctuatie si indentare

 

Avand in vedere ca Pascal ignora spatiile albe (vezi mai sus), punctuatia este necesara pentru a spune compilatorului unde se termina o instructiune. Caracterul care indica terminarea unei instructiuni este, in general, punct si virgula ;. Caracterul care indica terminarea programului este punctul ..

 

Trebuie sa aveti un caracter ; dupa:

numele programului

fiecare definitie de constanta

fiecare definitie de variabila

fiecare definitie de tip

aproape toate instructiunile

 

Ultima instructiune inainte de o instructiune end nu necesita sa aiba ; la sfarsit. Totusi, nu se intampla nimic sa puneti si in acest caz. De fapt, e chiar recomandat sa puneti in acest caz, datorita faptului ca e posibil sa adaugati o alta instructiune dupa instructiunea care nu are terminator ( ; ) si va veti trezi cu erori de compilare.

 

Indentarea NU este necesara, din punctul de vedere al compilatorului. Cu toate acestea, indentarea este una dintre cele mai importante lucruri in programare, oferind claritate codului. Alta problema cu indentarea este indentarea facuta folosind tasta TAB. Caracterul TAB, fiind afisat in diferite feluri in diferite editoare, duce la neclaritati si/sau imprastierea codului pe latime.

(Eu, ca programator, refuz sa lucrez pe o bucata de cod care nu e scrisa cat mai clar posibil. Daca e strict necesar sa lucrez pe ea, primul lucru de care ma ocup este indentarea codului.)

 

Alt lucru important (si care ajuta la claritate) e punerea fiecarei instructiuni pe linie separata.

 

Sa luam o bucata de program si sa vedem ce si cum.

 

Aceasta este bucata de cod, indentata si clara.

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

uses crt;

const spaced = ' ';

select = ' * ';

var c: char;

sel: integer;

begin

clrscr;

c := #0;

sel := 1;

{afisam meniul initial}

TextColor(Yellow);

TextBackground(Blue); {galben pe albastru pentru optiunea selectata}

WriteLn(select, '1. BitCell.info');

(luat dintr-un exemplu)

 

Aceeasi bucata de cod, scrisa cu picioarele (figura de stil )

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

uses crt;

const spaced = ' '; select = ' * '; var c: char; sel: integer;

begin clrscr; c := #0; sel := 1;

{afisam meniul initial} TextColor(Yellow); TextBackground(Blue); {galben pe albastru pentru optiunea selectata} WriteLn(select, '1. BitCell.info');

 

 

Sper ca m-am facut inteles. Daca va place sa lucrati pe programe scrise fara indentare, puteti sa va prefaceti ca nu ma cunoasteti

 

Indentarea, impreuna cu comentariile scurte si la obiect, ajuta foarte mult la intelegerea codului. Nu le evitati !

 

Sursa: http://www.bitcell.info/tutorial-pascal-lectia-1-partile-unui-program-t21.html?sid=ba5880663f2c18ab18ed300345f06ba8

Edited by Cdorsu
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.