Showing posts with label Margareta DRĂGHICI. Show all posts
Showing posts with label Margareta DRĂGHICI. Show all posts

Saturday, August 22, 2026

Despre textele sursă din cartea Inițiere în FORTRAN de Stelian NICULESCU din anul 1972

Programarea înseamnă scrierea de texte sursă. Cartea referită prin:
Stelian NICULESCU - Inițiere în FORTRAN, Editura Tehnică, București, 1972, 280 pag.
conține 44 de texte sursă tipărite așa cum apar ele de la imprimanta calculatorului și aceste texte sursă trebuie analizate prin prisma obiectivului cărții, de a a-l învăța pe cititor să utilizeze facilitățile limbajului de programare FORTRAN în a-și rezolva problemele, desigur la nivelul anului 1972, nu acum.
În primul rând, remarc consecvența autorului cărții Stelian NICULESCU de a păstra notațiile din enunțul problemei în schema logică și mai apoi în textul sursă.
La pagina 132 se află textul sursă destinat implementării metodei de calcul al unei integrale folosind metoda trapezelor. Funcția f(x) este referită în programul FORTRAN ca F(A), F(B), F(A+X), căci programatorul a identificat mai multe subexpresii în formula de calcul a integralei folosind metoda trapezelor.
Sunt alese denumiri sugestive de variabile și de subprograme. Programul  de la pagina 144 care un factorial, utilizează un subprogram de tip FUNCTION numit FACT()
Dacă programatorul își dorește să-și construiască propria bibliotecă de subprograme, va face astfel de alegeri și-i va fi foarte ușor să identifice componentele bibliotecii atunci când dorește să le reutilizeze.
La paginile 150 și 151 se află textul sursă care exemplifică utilizarea lucrului cu matrici utilizate la definire folosind instrucțiunea DATA și, respectiv, prin citirea elementelor ale căror valori se află perforate cu un anumit format pe cartele. Programul apelează două subprograme de tip SUBROUTINE fără transmitere de parametri în listă, datorită faptului că acei parametri se află specificați în instrucțiunile COMMON scrise atât în programul apelator, cât și în subrutine. Autorul Stelian NICULESCU a ales pentru subprogramul de transpunere a unei matrice, numele TRANSPUS, iar pentru subprogramul de înmulțire a matricilor numele PRODUS.
Se știe că atunci când cineva vrea să scrie un program, o face pentru a rezolva toate problemele din clasa de probleme căreia aparține enunțul problemei pe care a preluat-o programatorul și de aceea, acesta caută să se asigure că atunci când va dori să mai rezolve și o altă problemă din aceeași clasă, nu va fi necesar să intervină pe textul sursă să facă oarece modificări. Autorul cărții, Stelian NICULESCU, a ținut seama de această cerință și în capitolul 11 intitulat APLICAȚII, a matricele de dimensiuni suficient de mari, încât să acopere cât mai multe dintre problemele care ar apărea de-a lungul timpului. În textul sursă al programului 11.1 se definesc matrici cu 50 de linii și 50 de coloane și vectori cu 50 de elemente, prin instrucțiunea:
DIMENSION A(50,50),B(50,50),X(50)
Și în cazul programului 11.7 se definesc matrici de dimensiuni mult mai mari, precum:
DIMENSION A(45,45),B(50,45),P(45,45),T945,45)
iar programatorul care va vrea să înmulțească două matrici și să tipărească matricea produs și transpusa acestui produs, nu va face altceva decât să folosească programul, dacă și numai dacă, matricile lui au numărul de linii și de coloane care să se încadreze în dimensiuniel matricelor definite în programul scris și testat cândva, căci presupunem că textul sursă 11.7 are un set de cartele perforate, o imprimantă și câteva detalii de pregătire a cartelelor cu propriile valori ale eleentelor matricelor A și B.
Când am citit textele sursă 5.9 de la pagina 124 și 5.11 de la pagina 126, mi-am adus aminte de seminariile mele de programare din studenție, când Ștefan MUSTĂȚEA, asistentul nostru ne-a prezentat problemele de alegere a elementului maxim dintr-un șir și de ordonare crescătoare e a elementelor unui șir pentru a scrie programe în COPCODER pe care să le rulăm pe calculatorul japonez NEAC 1240. Am studiat cu atenție textele scrise de autorul cărții, Stelian NICULESCU am regăsit aceleași idei în care inițializam o variabilă de lucru Y=X(1) după care o comparam cu celelalte elemente din șir și o modificam dacă Y era mai mică decât respectiva valoare a șirului.
În cazul ordonării elementelor unui șir, asistentul nostru ne-a prezentat mai multe variante, dar una dintre ele era eficientă, căci dacă șirul era deja ordonat, procesul de ordonare se oprea automat. Stelian NICULESCU definește o variabilă INDEX care contorizează inter-schimburile de elemente și procesul se încheie dacă și numai dacă după un proces de comparare nu mai apar interschimburi de elemente, ceea ce înseamnă că șirul este ordonat.
Programul de la capitolul 10 intitulat SEGMENTAREA PROGRAMELOR corespunde vremurilor de demult când erau restricții severe de memorie internă a unui calculator, iar dimensiunile operanzilor erau foarte, foarte mari. Atunci se segmentau programele, ceea ce însemna că exista un segment de bază, permanent în memorie cu operanzi necesari tuturor etapelor și segmente care se încărcau dinamic, executau prelucrări, după care lăsau loc altor segmente de program. Este ceea ce în viața de zi cu zi se întâmplă cu depozitările temporare a mărfurilor.
În programul 10.1 aturoul cărții Stelian NICULESCU a definit un segment principal unde a inițializat matricele A(45,45) și B(45,45) de mari dimensiuni, pe care le-a inițializat. Această parte de text sursă a plasat-o în segmentul numit S1. A construit o subrutină unde a adunat martricele A și B și a aflat elementul maxim al matricei rezultate din adunare. Acest fragment de text sursă l-a plasat într-un segment numit S2. El a mai construit un segment numit S3 în care a scris liniile sursă ale unei subrutine destinată scăderii dintre două matrice și aflării elementului minim din matricea rezultat.
Apelurile folosind instrucțiunea CALL realizează mai întâi încărcarea segmentului S1 și apoi executarea operațiilor procedurii AD(MAX). Celălalt apel determină încărcarea segmentului S3, apoi execuția operațiilor de prelucrare corespunzătoare ale subrutinei SC(MINI).
Autorul folosește în acest text sursă și ideea de procedură cu mai multe puncte de intrare ENTRY  SUBSC pentru a da un pic de culoare textului sursă, căci toată lumea știe că soluția era un pic alta dacă ENTRU e precedat de RETURN.
Chiar dacă este vorba de concepte ceva mai aride ale limbajului FORTRAN, autorul a găsit modalități clare de prezentare, fără a-l speria pe cititor că limbajul este greu, că este pândit la tot pasul de erori. Este foarte clar că prezentarea elementelor limbajului și exemplificarea fără a introduce eventuale erori pe care le-ar face programatorul, arată caracterul pozitiv al abordării. La paginile 47 și 48 cititorul este atenționat care sunt erorile pe care dacă le face, construcțiile sale nu mai sunt identificatori, căci ies în afara definiției
<identificator> ::= < literă > | <identificator> < literă > | <identificator> < cifră > 
Faptul că există textele sursă tipărite după listingurile obținute la imprimanta un calculator FELIX C 256, dovedește că toate programele au fost rulate și cititorul dacă va avea și el un set de cartele perforate identice, va obține la rulare exact programele existente în cartea lui Stelian NICULESCU.
Am scris undeva că recitind această carte, am remarcat prospețimea ei, deși limbajul FORTRAN este istorie, căci problemele enunțate, soluțiile propuse și secvențele de texte sursă sunt exact ceea ce trebuie unui programator. Cărțile despre alte limbaje de programare din zilele noastre au cam aceeași structură. Este adevărat că limbajele de azi folosesc pointeri, structuri de tip articol, obiecte, recursivitate, alocări dinamice de memorie și numeroase biblioteci de funcții, dar cu un mic efort de imaginație, toate ar putea fi alipite aici, adăugând noi capitole, dacă și numai dacă limbajul FORTRAN ar mai fi și el un pic șlefuit și ar fi aruncate peste bord restricțiile prea dure, puse în vremurile de demult pentru a avea pentru el un compilator cu fiabilitate cât mai ridicată.
Nu spun că trebuie să privim cu indulgență ceea ce era acum 54 de ani, dar trebuie să acceptăm ideea că fără progresele generat de produsele software scrise în limbajul FORTRAN multe dintre realizările de care beneficiem acum nu ar fi existat și mă refer la construcțiile ale căror calcule de rezistență s-au obținut prin rulări de programe FORTRAN, la navele gigantice care circulau pe oceane, a căror proiectare s-a făcut pe calculator cu programe FORTAN, ca să nu mai zic prea multe despre zborurile omului spre Lună, care au fost dirijate la NASA tot folosind programe scrise în FORTRAN.


(22 august 2026)

Friday, August 21, 2026

Cartea Inițiere în FORTRAN de Stelian NICULESCU din anul 1972

Azi am rpimit prin coletărie rapidă cartea referită prin:
Stelian NICULESCU - Inițiere în FORTRAN, Editura Tehnică, București, 1972, 280 pag.
Această carte a apărut într-un tiraj de 18.100 + 140 exemplare broșate, ceea ce la acea vreme pentru o carte tehnică a unui autor român era un lucru extraordinar. Când am cumpărat cartea atunci, am citit-o, am studiat-o, am aprofundat-o și am folosit-o la seminariile mele de programare a calculatoarelor, căci eram asistent universitar la Secția de Informatică Economică din cadrul Facultății de Calcul Economic și Cibernetică Economică. Am recomandat cartea studenților. Acum, după 54 de ani de la momentul în care am făcut cunoștință cu conținutul acestei cărți constat că este o carte:
- bine structurată,
- pe care nu s-a așezat praful uitării,
- cu elemente de actualitate,
- interesantă pentru cei ce scriu programe în PYTHON,
- utilă pentru a înțelege dinamica programării ca meserie.
Acum, ca și atunci când am deschis cartea, am mers direct la Bibliografie, căci la mine bibliografia spune totul despre:
- carte,
- autor,
- conținuit,
- nivel,
- context,
- utilitate.
Bibliografia cărții include 25 de titluri, dintre care 16 titluri conțin cuvântul cheie FORTRAN. O singură carte este publicată în 1955, celelalte fiind publicate în marea lor majoritate după anul 1965. Să nu uităm că suntem în anul 1972 și România era o țară de după Cortina de Fier, unde circulația cărților din Occident era destul de greoaie, chiar dacă regimul comunist căuta să dezvolte ramuri noi ale industriei și tehnologiei, dar și cercetarea științifică, aliniate la cerințele de top ale economiei mondiale. În bibliografie se află și cartea de FORTRAN a lui Petre DIMO, publicată în Editura Tehnică tot în anul 1972. Ca și acum, atunci la apariția cărții, am apreciat bibliografia că nu conținea documente de partid și nici cuvântări ale lui CEAUȘESCU, așa cum se obișnuia în epocă.
În 1972 eram deja familiarizat cu documentația de la IBM și lucram curent cu biblioteca de subprograme științifice, folosind cartea SSP - Scientific Subroutine Package, a cărei a III-a versiune publicată în 1968 de către  International Business Machines Corporation - IBM, referită prin codul H20-0205-3; includea texte sursă ale unor programe FORTRAN:
- fiabile,
- de maximă generalitate,
- auto-documentate,
- cu stil de programare,
- perfecte,
Înseamnă că atunci ca și acum am privit cartea cu ochii unuia care știa ce înseamnă programarea în limbajul FORTRAN, căci scrisesem destul de multe programe în acest limbaj de programare și pentru vârsta și experiența mea, acele programe aveau un nivel de complexitate bunicel și urmăream nu să le optimizez, dar să le îmbunătățesc, cu siguranță.
Primul text sursă de program FORTRAN rulat pe calculatorul FELIX C 256 apare în carte la pagina  93, dar până atunci autorul clarifică multe aspecte legate de:
- convențiile limbajului FORTRAN,
- cartela perforată - pagina 46, 
- descrierea algoritmilor,
- foaia de programare - pagina 71, 
- schemele logice - pagina 16.
Cartea are 11 capitole echilibrate ca dimensiune, după cum urmează:
- capitolul 01 intitulat Introducere, de la paginile 11 - 14, face o incursiune în evoluția calculatoarelor electronice, care în ziua de azi este mai degrabă o incursiune în arheologia calculatoarelor electronice și a limbajelor de programare, pentru că denumiri precum MARK 1, EDSAC, ALGOL, PL/1, SNOBOL, SIMSCRIPT, GPSS, aparțin unui trecut îndepărtat al istoriei universale a informaticii;
- capitolul 02 intitulat Descrierea algoritmilor cu ajutorul schemelor logice, de la paginile 15 - 43 include acele elemente absolut necesare transpunerii unui algoritm prezentat inițial prin cuvinte și prin formule matematice, folosind scheme logice, construite din blocuri și din arce orientate; tabelul 2.1 descrie cele 8 elemente fundamentale de construire a unei scheme logice; autorul pune accent pe schemele logice în care apar cicluri cu număr cunoscut de pași, dar și pe acele probleme care duc spre număr necunoscut de pași; autorul știe cum să pornească prezentarea problemei, de la simplu la complex, pentru că el este interesat să se ajungă la scrierea de programe corecte și complete FORTRAN pentru a soluționa clase de probleme cu complexitate undeva nu mult peste medie;
- capitolul 03 intitulat Elemente de bază ale limbajului FORTRAN de la paginile 44 - 69 include descrierea alfabetului utilizat, definirea de identificatori, construirea claselor de constante, utilizarea de variabile și construirea de expresii; autorul vine după fiecare enunț cu exemple bine alese și lasă cititorului posibilitatea ca acesta să dezvolte propriile construcții, ceea ce este extrem de important, căci programatorii trebuie să scrie propriile programe; este interesant că autorul folosește descrierea BNF pentru a prezenta reguli riguroase de a realiza construcții precum un identificator - pagina 47,
<identificator> ::= < literă > | <identificator> < literă > | <identificator> < cifră > 
mi-a plăcut caracterul dens al acestui capitol, care crează posibilitatea trecerii la screrea de programe proprii, căci munca oricărui programator este aceea de a scrie programe pentru a rezolva probleme noi, pentru care încă nu există programe scrise și rulate pe calculator;
- capitolul 04 intitulat Practica limbajului FORTRAN. Instrucțiuni de intrare/ieșire standard, de la paginile 70 - 96 include acele aspecte absolut necesare programatorului pentru a realiza inițializarea variabilelor din programe cu datele problemelor și de a tipări la imprimantă rezultatele prelucrărilor din program; autorul acordă o mare importanță modului cu se scriu datele de intrare pe foaia de programare, cum arată datele în cartela perforată, pentru că dacă nu sunt respectate reguli stricte, proverbul cu gunoi bagi în program, gunoi iese din program devine o realitate crudă, foarte greu de depășit; exemplele de la paginile 83 - 96 sunt edificatoare;
- capitolul 05 intitulat Practica limbajului FORTRAN. Instrucțiuni de atribuire și de control, de la paginile 97 - 128  include prezentarea instrucțiunilor GO TO, IF, DO, dar și instrucțiunile de declarare a variabilelor DIMENSION, REAL, INTEGER, DOUBLE, COMPLEX, LOGICAL, DATA; este creat contextul ca programatorul să construiască secvențe în care utilizează structurile fundamentale, implementare direct în limbajul FORTRAN; programele tipărite de la 5.1 la 5.13 conțin exemple de utilizare a instrrucțiunilor folosind rezolvări pentru probleme clasice precum proodusul a două matrice, ordonarea elementelor unui șir, determinarea elementului maxim dintr-un șir, ordonarea elementelor unui șir, determinarea numărului de elemente negative, pozitive și nule existente într-un șir, dar și altele; prgramele tipărite probin din listinguri scoase la imprimanta calculatorului, ceea ce dă garanția că autorul și-a testat programele și abordarea problematicii este serioasă;
- capitolul 06 intitulat Proceduri, de la paginile 129 - 153 include tot ceea ce trebuie să știe programatorul pentru a construi subprograme de tip SUBROUTINE și subprograme de tip FUNCTION; se prezintă instrucțiunile COMMON, EQUIVALENCE, BLACK DATA, dar și altele;  mie mi-a plăcut cum este introdusă noțiunea de subprogram, folosind calculul integralei unei funcții folosind metoda trapezelor, paginile 132 - 133; pentru realizarea unui subprogram de tip FUNCTION este dat ca exemplu calculul factorialului unui număr, pagina144; autorul alege să arate cum se refolosește o funcție pentru a calcula combinări de n luate câte k; tot aici sunt prezentate funcțiile intrinseci ale limbajului FORTRAN, tabelul 6.2;
- capitolul 07 intitulat FIȘIERE, de la paginile 154 - 166  include noțiuni absolut necesare lucrului cu fișiere în limbajul FORTRAN, numai că în acei ani a solicita să ți se pună un fișier pe bandă magnetică sau pe disc magnetic era o epopee, căci limitările de suport de atunci erau dramatice; numai dacă lucrai la contracte cu beneficiari și volumele de date erau imense, aveai acces la astfel de facilități; erau interesante instrucțiunile de lucru cu fișiere căci arătau că limbajul permite și folosirea de fișiere cu definirea de articole, cu regăsirea de articole și tot așa; în vremurile de demult, am avut un contract, se lucrau cu volume destul de mari de datre, dar pentru a stoca datele pe bandă magnetică am obținut aprobări, iar pentru a folosi acea bandă, trebuia anunțat special montarea ei în unitatea de citire a benzilor magnetice;
- capitolul 08 intitulat Instrucțiuni de intrare/ieșire de la paginile 167 - 189  include descrierea instrucțiunii FORMAT cu descriptorii F, E, G, D, L, T, Z, istrucțiunea READ, instrucțiunea WRITE, instrucțiunile ENCODE, DECODE, NAMELIST; numeroasele exemple și modul practic de prezentare, permit cititorului să-și construiască propriile secvențe de program prin care să citească date și să afișeze rezultate, pentru problemele pe care vrea să le rezolve; se vede experiența de programator a lui Stelian NICULESCU;
- capitolul 09 intitulat Cartele de comandă, de la paginile  190 - 214 include prezentarea cartelelor necesare rulării unui program FORTRAN pe un calculator FELIX C 256, căci în acele vremuri, fiecare programator își alcătuia propriul JOB, delimitat de cartele de comandă care identificau începutul, respectiv, sfârșitul setului de cartele cu care fiecare programator venea la dispecerat pentru a fi rulat pe calculator și pentru a obține rezultate; autorul cărții ia principalele cartele de control, le prezintă parametri și arată concret ce are de făcut programatorul pentru a avea o rulare de succes; aici se vede experiența lui Stelian NICULESCU în a scrie și a rula programe;
- capitolul 10 intitulat Segmentarea programelor, de la paginile 215 - 229 include prezentarea cartelelor de comandă cu care se realizează segmentarea, procedeu extrem de util în cazul programelor de mari dimensiuni, mai ales, când se lucra cu matrice de foarte mari dimensiuni; au fost prezentate comenzile SEG, TREE, SEGMENT, SEGDATA și modul lor de utilizare; exemplul de la paginile 226 - 230 este edificator;
- capitolul 11 intitulat Aplicații,  de la paginile 230 -278  include enunțuri, soluții și programe FORTRAN pentru probleme de soluționare a sistemelor liniare de ecuații prin metodele lui GAUSS, GAUSS-SEIDEL și SOUTHWELL, suluții și programe pentru integrarea numerică prin metoda dreptunghiurilor, metoda trapezelor, dar și aplicații din fizică; sunt 10 programe rulate pe calculator căci sunt prezentate listingurile lor; autorul prezintă problema, prezintă formulele utilizate și există o corespondență excelentă între formula matematică și expresia aritmetică inclusă în program; programele au comentarii; între prezentarea algoritmului, schema logică și instrucțiunile din program există o legătură strânsă, căci ceea ce este ca formulă Xi = Xi/Vi în schema logică se află tot așa, iar în program se scrie X(I)=X(I)/V(I); în opinia mea, a fost o muncă uriașă pentru a realiza prezentarea de probleme, pentru a desena scheme logice pentru a fi puse în pagină corect și pentru a scrie texte sursă de calitate; este meritul autorului de a duce la bun sfârșit un astfel de demers.
Când i s-a publicat această carte, Stelian NICULESCU avea 35 de ani. Să ai o capodoperă la 35 de ani este o mare performanță. Spun că această carte este o capodoperă, pentru că dacă în loc de limbajul FORTRAN ar fi prezentat limbajul PYTHON sau oricare alt limbaj și textele sursă ale programelor ar fi scrise în PYTHON sau în oricare alt limbaj de programare și nu în FORTRAN, cartea ar rămâne de mare actualitate și în ziua de azi.
Așa cum Mihail EMINESCU prin poemul Luceafărul a definit un etalon în poezia românească, tot așa cartea Inițiere în FORTRAN a însemnat pentru literatura română de informatică un punct de referință și toți autorii au trebuit să țină seama de acesta în abordările lor. De aceea, literatura română de informatică are un nivel foarte ridicat, pentru că începuturile ei a avut o bază extrem de solidă și filtrele impuse au fost extrem de severe, neputând trece mai departe spre cititor, decât lucruri absolut remarcabile.
L-am inclus pe STELIAN NICULESCU în galeria marilor clasici ai literaturii române de informatică, pentru că lucrarea analizată aici, realizată de el, îl definește ca pe unul dintre marii clasici, alături de Margareta DRĂGHICI, Emil MUNTEANU, Horia GEORGESCU și Octavian BÂSCĂ.
(20 august 2026)

Monday, July 13, 2026

O carte de demult scrisă de Margareta DRĂGHICI

 

Fără înaintașii noștri nu am fi ajuns aici. Este important să ne cunoaștem istoria, căci trecutul nostru în informatică este unul special și numai datorită cărților publicate în vremurile de demult au fost formate echipe puternice de specialiști care au dezvoltat software de mare complexitate și de înalt nivel calitativ.







(13 iulie 2026)