Tuesday, September 1, 2026

Cartea lui Petre DIMO de Programare în FORTRAN ca sursă de inspirație

Lucram încă în Centrul de Calcul al ASE când am cumpărat cartea lui Petre DIMO și venind din programarea în ASSEMBLER, iar programele mele FORTRAN se inspirau din documentația extrem de bine pusă la punct de la IBM, îmi scriam subprogramele mele FORTRAN căci aveam ambiția de a avea cât mai multe subprograme care operau pe un șir de caractere.  Mă voi referi la cartea referită prin:

Petre DIMO - Programare în FORTRAN, Editura Didactică și Pedagogică, București, 1971, 298 pag.

ca sursă de inspirație, căci la un moment dat am dorit să extind crearea de subprograme la operații pe masive bidimensionale, folosindu-mă cât mai mult de modul în care se făcea alocarea de memorie. Știam că în FORTRAN, compilatoarele dispuneau elementelor din  matrici coloană după coloană, Adică, dacă aveam o matrice A cu m linii și n coloane, dispunerea se realiza astfel:

- elementul A(1,1) era dispus la adresa relativă de memorie X,

- elementul A(1,2) era dispus la adresa relativă de memorie X+4,

- elementul A(1,3) era dispus la adresa relativă de memorie X+2*4,

- elementul A(1,m) era dispus la adresa relativă de memorie X+(m-1)*4,

- elementul A(2,1) era dispus la adresa relativă de memorie X+m*4,

- elementul A(m,n) era dispus la adresa relativă de memorie X+(m*n-1)*4.

Mi-a venit ideea de a mă folosi pentru anumite subprograme care lucrau pe matrici de subprogramele pe care le aveam deja. Având la dispoziție cartea lui Petre DIMO, îmi aduc aminte ca și acum, am căutat să văd dacă în poginile ei se află ceva despre dispunerea coloană după coloană a elementelor matricei în FORTRAN și la pagina 57 am găsit ce căutam. Cum mie îmi place să sriu programe având o documentație în față și aveam cartea lui DIMO, am verificat ce și cum cu instrucțiunea EQUIVALENCE și era exact ceea ce mai știam eu de la documentațiile IBM, cu exemple sugestive, deci am prins curaj.

Aveam subrogramele:

        SUBROUTINE MINIM(X,N,MIN)

        DIMENSION X(100)

        MIN=X(1)

        DO 10 I=2,N

        IF(X(I).LT.MIN) MIN=X(I)

10    CONTINUE

        RETURN


        SUBROUTINE MAXIM(X,N,MAX)

        DIMENSION X(100)

        MAX=X(1)

        DO 10 I=2,N

        IF(X(I).GT.MIN) MAX=X(I)

10    CONTINUE

        RETURN


        SUBROUTINE SUMA(X,N,SUM)

        DIMENSION X(100)

        SUM=0.

        DO 10 I=1,N

        SUM=SUM+X(I)

10    CONTINUE

        RETURN


Dacă în programul apelator aveam o matrice definită fix cu:

        DIMENSION W(10,10)

ale cărei elemente se inițializau prin citirea de cartele a valorilor, atunci scriam în program:

    DIMENSUIB W(10,10), U(100)

    EQUIVALENCE (W(1,1),U(1))

după care urmau instrucțiunile de citire a cartelelor unde se aflau cele 100 de valori cu care se inițializau  elementele matricei, după care urmau instrucțiunile de apelare

CALL MINIM(U,100, UMIN)

CALL MAXIM(U,100, UMAX)

CALL SUMA(U,100, USUM)

și instrucțiunile de scriere pentru UMIN, UMAX, USUM.

Cumoscând formulele de punere în corespondență ale elementelor matricei cu elementele vectorului, la vremea aceea am construit și subprograme în care numărul de  linii era m și numărul de coloane era n, cu m și n mai mici decât 50, căci m-am gândit că dacă scriu subprograme, să nu fie restrictive la un număr prea mic de linii și de coloane. Programatorii știu ce vorbesc câd spun că m și n erau mai mici decât 50, căci elementele inițializate ale matricei A prin EQUIVALENCE (A(1,1),B(1,1)) nu mai sunt consecutive tot timpul cu elementele vectorului B de 2500 componente.

Îmi aduc aminte că în subprogramele mele băgasem instrucțiuni de testare a valorilor lui m și n, complectasem lista de parametri cu m și n a subprogramelor și după multe teste, ajunsesem să fiu mulțumit de ceea ce făcusem, dar de fiecare dată când simțeam nevoia, deschideam cartea lui Petre DIMO.

Nu forțez lucrurile dacă spun că Petre DIMO a creat un curent în Programarea în limbajul FORTRAN cam la nivelul pe care l-a generat publicarea poemului LUCEAFĂRUL, atât prin calitatea cărții, cât și prin tirajul acesteia. Tirajul nu este făcut public de către  Editura Didactică și Pedagogică, dar cu siguranță, era un tiraj de peste 4000 exemplare.





(02 septembrie 2026)

No comments:

Post a Comment