A. Considerații teoretice

Produsele software (sistemele complexe de programe) sunt dezvoltate și realizate de către colective de specialiști într-un cadru organizat, compus din laboratoare de cercetare, proiectare, codificare, testare și validare a acestor produse. Pentru o mai bună conlucrare și creșterea eficienței muncii se utilizează modularizarea programelor. În PASCAL (versiunile Borland, Microsoft, MetaWare, Free Pascal, GNU Pascal, etc.), modulul (care nu este o construcție standard PASCAL) se numeste unitate ("unit") și amănuntele legate de sintaxa și utilizarea acestuia au fost tratate la curs. Mediul de lucru Turbo Pascal pune la dispoziție o serie de unități predefinite, pentru lucrul în mod ecran (precizarea coordonatelor în ecran, ștergerea ecranului etc.), pentru apeluri de sistem, grafică etc. Lista operațiilor puse la dispoziție de aceste unități și sintaxa de apel se poate consulta parcurgând help-ul pus la dispoziție de mediul de dezvoltare Turbo Pascal. Scopul acestei lucrări este de a realiza două unități Pascal. După realizarea, introducerea și compilarea unităților din această lucrare, se vor scrie programe de test care utilizează tipuri, variabile și subprograme exportate din aceste unități.


B. Exemple

Se dă, mai jos, un exemplu care implementează o extensie a tipului string, cu depășirea limitei de 255 caractere pentru lungime. În acest scop se definește tipul:

const lmax = 1000; {lungimea maxima a unui sir}
type
  mystring = record 
    lng: 0..lmax;
    s: array[1..lmax] of char
end;

În continuare se vor defini următoarele proceduri și funcții:

Se va crea fișierul UNITATI.PAS:

unit Unitati;
interface
const lmax = 1000;
type
  mystring = record 
    lng: 0..lmax;     
    s: array[1..lmax] of char
  end;

procedure ReadMyString(var SirulDeCitit: mystring);
procedure WriteMyString(SirulDeScris: mystring);
procedure Concatenare(Primul, AlDoilea: mystring; 
	var Rezultat: mystring);
function Valoare(Sir: mystring): longint;
procedure GenSir(Numar: longint; var Sir: mystring)

implementation
...
procedure Concatenare;
var i: integer;
begin
  for i := 1 to Primul.lng do
    Rezultat.s[i] := Primul.s[i];
  for i := 1 to AlDoilea.lng do
    Rezultat.s[i + Primul.lng] := AlDoilea.s[i];
  Rezultat.lng := Primul.lng + AlDoilea.lng
end; {concatenare}

...

end.

Apoi se introduce programul:

program TestUnitati;
uses Unitati;
var A,B,C: mystring;
begin
  ReadMyString(A);
  ReadMyString(B);
  WriteMyString(A); writeln;
  WriteMyString(B); writeln;
  writeln('Val (A)=', Valoare(A));
  Concatenare(A, B, C);
  WriteMyString(C);
end.

C. Teme

  1. Să se construiească o unitate care implementează și exportă operații (simbolice) cu polinoame declarate în felul următor:

    const Maxgrad = 25;
    type
      Polinom = record    {tip exportat de unitate}
        Grad: integer;
        Coeficienti: array[1..Maxgrad] of real
      end;

    Operații

    • adunare și scădere;

    • înmulțire;

    • derivare;

    • integrare;

    • evaluare pentru un X dat.

  2. * Să se studieze unitățile predefinite Crt, Dos, Win, Graph și exemplele oferite de TP Borland, cu ajutorul facilității Help. Procedurile predefinite întâlnite aici și considerate importante vor fi reținute în caietul de laborator.