Showing posts with label FORTRAN. Show all posts
Showing posts with label FORTRAN. Show all posts

Wednesday, December 20, 2017

Stilul de programare

În vremurile de demult, fiecare programator lucra așa cum credea el, cum învățase la școală sau cum îl învățaseră cărțile de unde citise despre limbajele de programare și unde se găseau numeroase exemple. Eu am avut marele noroc:
- să am profesori speciali care știau programare și scriau programe elegante;
- să studiez cărți de programare ale IBM care erau scrise de meseriași;
- să citesc reviste precum Communication of the ACM unde se publicau programe;
- să consult imprimante cu programe scrise de programatori de înaltă clasă;
- să merg la Biblioteca Americană din București unde erau și cărți și reviste tari.
Prin 1984 o echpă de cercetare într-ale informaticii și statisticii formată din Baron Tudor, Ivan Ion, și Balog Alexandru  au elaborat lucrarea Informaticã Economicã: Calitatea programelor si stilul de programare, de 43 pagini pe care au publicat-o în  litografia Academiei de Studii Economice din Bucuresti. La nivelul acelor ani, când programarea era o artă și programatorii de FORTRAN sau de COBOL niște artițti, prin stil de programare se înțelegea existența unor:
- convenții acceptate de toată lumea legate de cum se scriu textele sursă;
- structuri de secvențe de instrucțiuni considerate a fi eficiente;
- reguli de utilizare a bibliotecilor de programe pentru a reutiliza componente;
- soluții și structuri de programe care trebuiau implementate obligatoriu;
- modalități de a alege definirile numelor de operanzi și de etichete;
- indicatori de măsurare a nivelului de autodocumentare pentru a stimula comentariile;
- mijloace de a comunica între programatori pentru a asigura creșterea calității;
- dogme cum că așa trebuie sau așa este bine să se utilizeze instrucțiuni și nu altfel.
Ideia stilului de programare era de a se asigura omogenitatea subprogramelor, a modulelor și a programelor în totalitatea lor, știut fiind faptul că de la un anumit nivel de complexitate încolo era imposibil să se scrie un produs software de către o singură persoană. În plus, toate achizițiile pozitive ale experienței acumulate în timp, prin includerea de reguli care să le reflecte, ducea la continuarea în munca tuturor programatorilor a respectivelor cuceriri.
Școala de programare IBM atât pentru programe FORTRAN prin SSP, cât și pentru COBOL-iști a fost, este și va fi un etalon în materie de stil de programare, căci orice persoană din exterior avea ocazia să preia texte sirsă elaborate în bibliotecile software IBM direct, fără nicio dificultate, de parcă toate programele de acolo fuseseră scrise de către un singur programator. În realitate, exista un stil de programare, însușit de toată lumea și aplicat la perfecție.
Stilul de programare este singura modalitate de a se asigura omogenitatea și eficiența textelor sursă scrise de către o schipă în care programatorii lucrază independent unii de alții, ceea ce în întreprinderea virtuală și în telelucru este condiție de bază a calității outputurilor.



(20 decembrie 2017)

Tuesday, December 19, 2017

Object time în FORTRAN

Cel mai simplu mod de a face mentenanță este de a transforma modificările în date care se preiau de către program de pe cartele, iar lista de descriptori de format o definește benefiarul exact cum are nevoie. Se știe că marile probleme de mentenanță sunt cu datele de intrare și cu cele de ieșire în ceea ce privește precizia.
Pentru a avea o astfel de soluție se procedează astfel:
- se definește un masiv cu atâtea elemente cât sâ se memoreze descrierea din FORMAT;
- se scrie o secvență de citire a descriptorilor de FORMAT ca șir de caractere;
- se scrie secvența de citire a datelor folosind vectorul inițializat cu descriptori.
Construcția arată astfel:
..................
             DIMENSION FORM(20)
             INTEGER A,B,C,D
             READ(5,10) FORM
10         FORMAT(20A4)
.........................
             READ(5,FORM)A,B,C,D,E
-----------------
Cartelele de date vor avea printre ele:
- o cartelă ce conține 5 descriptori cu conținutul: (I2,I4,I3,I5,F7.4)
- o cartelă ce conține numerele cu care se inițializează variabileleA, B, C, D, E
- pentru A se alocă două coloane, B are 4 , C are 3 , D are 5, iar E are 7 coloane.
Dacă beneficiarul dorește la o altă rulare să folosească alte ordine de mărime, altă precizie pentru variabila E, va scrie noii descriptori pe o cartelă și va avea grijă să perforeze numere  pe următoarea  cartelă așa cum impun descriptorii dați de el. Se observă că mentenanța s-a mutat de la programatorul-dezvoltator de software la beneficiar. Este posibil în condițiile utilizării de fișiere ca operația de definire a listei de descriptori să se facă numai atuncți când se cer modificări și nu mereu așa cum se vede în secvența de mai sus. În acest caz:
- se scrie un program cu care se crează și se actualizează un fișier;
- se definește un fișier cu un singur articol;
- se populează fișierul cu descriptori de format la prima exploatare a programului și la mentenanță;
- se rulează programul cerut de beneficiar ori de câte ori e nevoie, dar acesta citește șișierul;
- se fac prelucrările așa cum sunt dați descriptorii din articolul fișierului;
- când apar modificări beneficiarul le solicită dezvoltatorului;
- dezvoltatorul actualizează fișierul și exploatarea programului se face normal. 
Limbajul FORTRAN lucra și el cu fișiere, iar acum limbajul C++ o face fără nicio dificultate.


(20 decembrie 2017)

Blank-urile în FORTRAN

Programatorii FORTRAN au avut surpriza să constate că în comparație cu modul în care scriau programe în limbajul COBOL, utilizarea de spații era miraculoasă, adică blank-urile nu contau.
Secvența:
            ISUMX=0
            ISUMXX=0
            DO 10 I=1, N
            ISUM=ISUM+X(I)
10        ISUMXX=ISUMXX+X(I)*X(I)
 Este echivalentă cu secvența: 
            IS     UM     X=0
            I   S    U    M    X   X    =0
            D   O 1     0 I     =    1      , N
            IS   U    M=ISU     M+X   (I    )
10        ISUM    XX=IS    UMX   X+X    (I)*     X(     I)   
În contextul lucrului cu cartele perforate probabil era benefic. Totul era ca aceste ghidușii să se producă între coloanele 7 - 72 ale foii de programare sau ale cartelei perforate, pentru că în celelalte coloane erau de perforat cu totul alte lucruri precum etichete, continuare dar și numere de secvență. Eu am considerat nefirească această larghețe, dar mi s-a părut benefic să fac anumite alinieri care să faciliteze citirea rapidă a textului sursă, ca și cum aș fi avut blocuri.
Secvența:
            ISUMX=0
            ISUMXX=0
            DO 10 I=1, N
                        ISUM=ISUM+X(I)
                        ISUMXX=ISUMXX+X(I)*X(I)
10        CONTINUE
mi se pare cu mult mai frumoasă decât celelalte întrucât se văd lucrurile ceva mai clar, ceea ce este OK din toate punctele de vedere dacă și programul este autodocumentat ca lumea. Blank-urile în FORTRAN sunt mană cerească pentru cine a știut să le folosească în a defini structuri de program ușor de urmărit în procesul de mentenanță.





(19 decembrie 2017)

Thursday, December 14, 2017

Aflarea minimului dintre trei elemente

Ani în șir, la disciplina Limbaje de programare am dat la examen problema: să se scrie programul FORTRAN pentru aflarea elementului minim dintre elementele a, b și c, date pe cartele și să se afișeze rezultatul. Nu m-am plictisit niciodată, pentru că din 20 de persoane foarte rare au fost cazurile în care aveam și schema logică și programul așa cum trebuiau ele să fie și nu niște caricaturi de tot râsul, deși cei cărora le ceream acest mic detaliu se dădeau mari programatori.
Schema logică esteprezentată în partea dreaptă, iar programul FORTRAN IV este următorul:
C         PROGRAM AFLARE ELEMENT MINIM
C         DINTRE 3 ELEMENTE INTREGI CITITE DE PE
C         CARTELE
            INTEGER A,B,C,MIN
            READ(5,10)A,B,C
10        FORMAT(I5,I5,I5)
            MIN=A
            IF(MIN.GT.B) MIN=B
            IF(MIN.GT.C) MIN=C
            WRITE(6,20) MIN
20         FORMAT(13HMINIMUL ESTE ,I5)
             STOP
             END
O altă variantă de a realiza acest program fără a folosi IF() logic este aceea în care se utilizează evaluarea de expresii aritmetice, ceea ce conduce la construcția un pic mai complicată ce urmează:
C         PROGRAM AFLARE ELEMENT MINIM
C         DINTRE 3 ELEMENTE INTREGI CITITE DE PE
C         CARTELE
            INTEGER A,B,C,MIN
            READ(5,10)A,B,C
10        FORMAT(I5,I5,I5)
            MIN=A
            IF(MIN-B) 30,30,20
20        MIN=B
30        IF(MIN-C) 50,50,40
40        MIN=C
50        WRITE(6,60) MIN
60         FORMAT(13HMINIMUL ESTE ,I5)
             STOP
             END

Acest al doilea program nu prea arată bine căci conține prea multe instrucțiuni și acea pânză de păianjen de etichete, care sunt destul de greu de urmărit și mai ales de a li se asigura să fie în progresie aritmetică cu primul termen 10 și cu rație tot 10.
Aflarea minimului dintre trei elemente este un program fortran banal, dar care dă de furcă la foarte mulți programatori care știu să rezolve lucruri complicate, dar se împiedică în fleacuri.



(14 decembrie 2017)

Wednesday, November 29, 2017

Structuri de date și literatură

Structurile de date și literatură oricât s-ar părea de bizar, ele există și lumea trebuie să știe de ele. Marele Mihail EMINESCU a folosit stiva în mod magistral.
În Glossa prima strofă este:
Vreme trece, vreme vine, 
Toate-s vechi si noua toate; 
Ce e rau si ce e bine 
Tu te-ntreaba si socoate; 
Nu spera si nu ai teama, 
Ce e val ca valul trece; 
De te-ndeamna, de te cheama, 
Tu ramâi la toate rece.
Ultima strofă este:
Tu ramâi la toate rece, 
De te-ndeamna, de te cheama: 
Ce e val, ca valul trece, 
Nu spera si nu ai teama; 
Te întreaba si socoate 
Ce e rau si ce e bine; 
Toate-s vechi si noua toate: 
Vreme trece, vreme vine.
Ultimul vers devine primul vers în ultima strofă. Penultimul vers din prima strofă devine al doilea vers în ultima strofă, deci se aplică regula ultimul venit, primul servit, ceea ce corespunde traversării unei stive, după regula LIFO - Last-in-First-out.
Poetul George Coșbuc a scris versurile din poemul Nunta Zamfirei:
Trei paşi la stânga linişor
Şi alţi trei paşi la dreapta lor;
Se prind de mâini şi se desprind,
S-adună cerc şi iar se-ntind,
Şi bat pământul tropotind
În tact uşor.
Cuvintele S-adună cerc înseamnă că se crează o listă circulară dublu înlănțuită. Cuvintele şi iar se-ntind arată că lista circulată se transformă în listă liniară dublă. Versul Trei paşi la stânga linişor arată cum se traversează lista de la dreapta spre stânga. Versul i alţi trei paşi la dreapta lor evidențiază traversarea listei duble de la stânga spre dreapta. Cuvintele se desprind arată operația de deconcatenare, iar cuvintele Se prind de mâini arată că fora are o operație de concatenare a mai mltor liste duble.
Și la definirea structurii de tip articol lucrurile stau tot în spirit dacic. Construcția unei expresii de referire este una, dar citirea este extrem de interesantă.
Expresia:
 nume1.nume2.nume3
merită un studiu aparete, căci iată cum se interpretează expresia:
deal.Mărin.Leana
dacă se traversează de la dreapta la stânga: Leana lu'Mărin din deal. Și numele irlandezilor cu acel O urmat de un apostrof tot cam pe acolo este, dar la noi este exact ce vor structurile de date.





(26 noiembrie 2017

Monday, November 13, 2017

Program pentru formula lui HERON

Programul în FORTRAN IV pentru calcului ariei triunghiului folosind forma lui HERON este:
C Calculul areiei triunghiului cu formula lui HERON
C cititorul de cartele are simbolul 5
C imprimanta are simbolul 6
C Daca apar erori in date se tipareste un mesaj
C Unitatea de masura este metrul, m
  10 FORMAT(3I5)
  20 FORMAT(4H A= ,I5,5H  B= ,I5,5H  C= ,I5,8H  AREA= ,F10.2,
     $13H Matri PATRATI)
  30 FORMAT(14SFARSIT NORNAL)
  40 FORMAT(53HEROARE IN DATELE DE INTRARE, TOATE VALORILE SUNT ZERO)
      INTEGER A,B,C
   50 READ(5,10) A,B,C
      IF(A.EQ.0 .AND. B.EQ.0 .AND. C.EQ.0) GO TO 60
      IF(A.EQ.0 .OR.  B.EQ.0 .OR.  C.EQ.0) GO TO 70
      S = (A + B + C) / 2.0
      AREA = SQRT( S * (S - A) * (S - B) * (S - C) )
      WRITE(6,20) A,B,C,AREA
      GO TO 10
   60 WRITE(6,40)
      STOP
   70 WRITE(6,40)
      STOP
      END
Programul C pentru calculul ariei triunghiului folosind forma lui HERON este:
/* Program C pentru calculul ariei unui triunghi cu formula lui HERON */
#include<stdio.h>
#include<math.h>
void main()
{
     float a,b,c,p=0,s=0;
     printf("Introduceti lungimile in metri ale laturilor triunghiului \n");
     scanf("%f %f %f",&a,&b,&c)
     if(a>0 && b>0 && c>0)
              {
                  p = (a+b+c)/2.0; /* s este semiparametrul*/
                  s = (sqrt)(p*(p-a)*(p-b)*(p-c));
                  printf("\n Area of triangle =\t %f",s);
               }
               else printf("\n Laturile nu formează un triunghi");
     getch();
}
Programul PASCAL pentru calculul ariei triunghiului folosind forma lui HERON este:
{.Program SuprafataTriunghului.}
var
A:real;
B:real;
C:real;
S:real;
P:real;
begin
    writeln ('Introduceti prima latura');
    read (A);
    writeln ('Introduceti a doua latura');
    read (B);
    writeln ('Introduceti a treia latura');
    read (C);
    if(A>0)AND (B>0)AND (C>0) then
            {
             P:=(A+B+C)/2;
             S:= Sqrt(P*((P-A)*(P-B)*(P-C)));
             writeln ('Suprafata triunghi = ', S);
            }
             else writeln ('Valorile nu formeaza laturi triunghi');
 end.
Programul COBOL pentru calculul ariei triunghiului folosind forma lui HERON este:
IDENTIFICATION DIVISION.
PROGRAM-ID.  Formula-Heron.
AUTHOR.  Ion IVAN.
DATA DIVISION.
WORKING-STORAGE SECTION.
77  A           PIC 9(5)  VALUE ZEROS.
77  B           PIC 9(5)  VALUE ZEROS.
77  V           PIC 9(5)  VALUE ZEROS.
77  SUM     PIC 9(5)  VALUE ZEROS.
77  P           PIC 9(5)V99  VALUE ZEROS.
77  TMP1   PIC 9(5)V99  VALUE ZEROS.
77  TMP2   PIC 9(5)V99  VALUE ZEROS.
77  TMP3   PIC 9(5)V99  VALUE ZEROS.
77  S           PIC 9(8)V99  VALUE ZEROS.
PROCEDURE DIVISION.
CITIRE-DATE.
       DISPLAY "Introduceti prima latura a triunghiului : " WITH NO ADVANCING.
       ACCEPT A.
       DISPLAY "Introduceti a doua latura a triunghiului : " WITH NO ADVANCING.
       ACCEPT B.
       DISPLAY "Introduceti a treia latura a triunghiului : " WITH NO ADVANCING.
       ACCEPT C
CALCULE..
       ADD A TO SUM.
       ADD B TO SUM.
       ADD C TO SUM.
       DIVIDE 2 INTO SUM GIVING P.
       SUBTRACT A FROM P GIVING TMP1.
       SUBTRACT B FROM P GIVING TMP2.
       SUBTRACT C FROM P GIVING TMP3.
       COMPUTE S=P*TMP1*TPM2*TMP3.
       COMPUTE S=S**.5.
       DISPLAY "Aria triunghiului este = ", S.
    SFARSIT-PROGRAM.
    STOP RUN.
În programul COBOL și calculul celebrei expresii se realiza lălăit bucată cu bucată, dar am preferat folosirea lui COMPUTE, iar pentru extragere de radical numai folosind ridicarea la puterea 0.5 s-a realizat calculul exact al expresiei așa cum zice geometria.
Sunt interesante abordările și se vede că limbajul C este de departe cel mai comod pentru a soluționa această problemă.
Programul pentru formula lui HERON scris în diferite limbaje de programare evidențiază diferențele dintre aceste limbaje și direcționează programatorii spre a pune în corespondență tipuri de probleme cu tipuri de limbaje de programare.



(14 noiembrie 2017)

Sunday, November 12, 2017

Structurarea pe blocuri

Limbajele de programare permit implementări care asigură încărcarea echilibrată a membrilor unei echipe de programatori, ceea ce înseamnă că aceștia au posibilitatea de a lucra cu unități de program numite fie module, fie blocuri, fiecare dintre ele având reguli proprii de asamblare a părților în întreg.
Sunt limbaje în care se lucrează cu blocuri delimitate prin acolade, {,  }.
Sunt limbaje care permit lucru cu subprograme care se constituie în entități independente.
Sunt limbaje care sunt structurate pe secvențe delimitate prin etichete.
Indiferent cum stau lucrurile, trebuie definite variabile pe diferite niveluri și gestionat conținutul acestora astfel încât să nu apară rezultate imprevizibile. Limbajele PASCAL și C operează cu variabile locale în raport cu blocul definit prin acolade, fiind considerate variabile locale, întrucât alocarea lor se realizaeză la intrarea în bloc și care se dealocă la ieșirea din bloc.


În lucru acum
(13 noiembrie 2017)

Alcătuirea bibliotecilor standard

Limbajele de programare au biblioteci standard care sunt asociate programelor prin comanda include.
Limbajul PASCAL conține biblioteci pentru:
- conversii;
- calcule matematice abs(), odd(), sqr(), sqrt(), sin(), cos(), ln(), exp();
- alocare dinamică a memoriei new, dispose, ;
- șiruri de caractere StrConcat(), StrDelete(), StrInsert(), StrLen(), StrScan(), StrSize(),
  SubStr(),Delete(), Insert(), Copy(), Length(), Str();
- lucru cu pointeri address(), Ofs(), Addr(), RawPointer(), peek(), poke(), Move(), Seg();
- generare numere pseudoaleatoare initrandom(), random();
- funcții pe mulțimi succ(), pred();
Limbajul  are biblioteci pentru:
- funcții matematice care se inserează în programe cu <math.h>;
- funcții de manipulare șiruri care se inserează în programe cu<string.h>;
- funcții matematice cu numere complexe se inserează în programe cu <complex.h>;
- funcții de gestiune a timpului din calculator care se inserează în programe cu <time.h>.
Limbajul C conține cu mult mai multe biblioteci precum <stdio.h>, <limits.h>, <stddef.h> și multe altele. Este necesar după ce programatorul se familiarizează cu limbajul să treacă la studierea acestor biblioteci și cu mare atenție să vadp ce parametri au funcțiile, dar mai elas ce returnează ele, căci el are posibilitatea de a exploata acele rezultate returnate, precum se întâmplă la instrucțiunile de citire scriere dar și la cele de deschidere, repsectiv de închidere de fișiere unde numărul returnat dă informații prețioase pe care programatorul le introduce inteligent în expresii condiționale și după aceea în secvențe compuse în care apare if(), neinițiații mirându-se siderați.



În lucru acum
(13 noiembrie 2017)

Sintaxa limbajului

Înainte de orice, programatorul trebuie să citească cu atenție regulile de sintaxă ale limbajului pentru a ști:
- ce să ceară limbajului;
- ce are voie să scrie în programe;
- care este lista de cuvinte cheie;
- care este setul de caractere utilizat;
- ce nu are voie să construiască;
- cum se termină o instrucțiune;
- ce rol alre spațiul între cuvinte;
- care este diferența între - și _;
- cum se scriu comentariile;
- ce este obligatoriu și ce nu.
Sunt definite complet folosind diferite modalități toate limbajele de programare. Cel mai frecvent este folosită pentru a descrie sintaxa unui limbaj BNF - Backus-Naur Form.
Pentru expresiile unare din limbajul C se propune definirea:
<unary-expression> ::= <postfix-expression>
                     | ++ <unary-expression>
                     | -- <unary-expression>
                     | <unary-operator> <cast-expression>
                     | sizeof <unary-expression>
                     | sizeof <type-name>
Toate celelalte definiri sunt date la adresa, unde construcțiile se realizează din aproape în aproape. Intrând pe Internet se găsesc definirile BNF pentru toate limbajele de programare. Este esențial să se citească și elementele cantitative referitoare la lungimi, complexități și niveluri de indirectare.
În FORTRAN numărul maxim de dimensiuni este 7 pentru masive.
În limbajul C numărul maxim al nivelurilor de indirectare este 3.
În COBOL lungimea etichetelor nu depășește 31 de caractere.


În lucru acum
(13 noiembrie 2017)

Implementarea structurilor fundamentale de control


Structurile fundamentale sunt:

  • structura liniară în care instrucțiunile se execută una după cealaltă;
  • structura alternativă în care se produce o selecție funcție de care se execută una sau alta dintre instrucțiuni, după care se revine la execuție în secvență:
  • structura repetitivă în care o anumită secvență de instrucțiuni se execută de mai multe ori, fie că numărul de repetări este cunoscut, fie până când o condiție este îndeplinită și numărul de repetări nu este cunoscut de dinainte;
  • structura alternativă multiplă care presupune selectarea dintre mai multe secvențe de instrucțiuni a uneia care se execută la un moment dat, după care se revine la execuția în secvență a altor instrucțiuni.

De la limbaj la limbaj există diferite implementări ale acestor structuri de control și am mari dubii că sunt prea multe limbajele în care să nu existe instrucțiunea IF() THEN....ELSE.
Limbajul de asamblare conține tot felul de implementări și încă libere ale structurilor de control. Dacă în FORTRAN nu sunt permise intersecțiile de domenii în secvențele de program scrise în limbaj de asamblare așa ceva este permis. În limbajele de asamblare însă se construiesc secvențele pas cu pas, prin evaluări de expresii, comparări și salturi necondiționate cât îi poftește inima programatorului. Chiar dacă există instrucțiunea LOOP programatorul o gestionează chiar cum vrea el sau o ignoră construind repetitivitatea după pofta inimii cu evaluări, comparări și salturi condiționate combinate cu salturi necondiționate.
Limbajul FORTRAN implementează structurile fundamentale de control destul de ușor și simplu. Pentru structura alternativă implementarea este  prin:
IF(expresie) eticheta1,eticheta2,eticheta3
unde:
eticheta- dirijează execuția spre o secvență dacă expreia evaluată este mai mică decât  zero;
eticheta- dirijează execuția spre o secvență dacă expreia evaluată este egală cu zero;
eticheta3 - dirijează execuția spre o secvență dacă expreia evaluată este mai mare ca zero.
Structura repetitivă este implementată cu construcția:
                 DO eticheta  variabila_control = valoare_inițială, valoare_finală, rație
                 ......................
eticheta    ultima_instrucțiune_repetată
unde:
eticheta  - delimitează sfârșitul secvenței de repetat care începe după instrucțiunea DO;
variabila_control  - variabila cu care se gestionează numărul repetărilor, căci nivelul este între valoarea inițială și valoarea finală;
valoare_inițială - valoarea de start a variabilei de control;
valoare_finală - este valoarea limită superioară care nu este depășită de variabila de control; în caz de depășire repetarea este întrerultă;
rație - este o constantă sau o variabilă care arată cu cât se modifică variabila de control la iterația următoare.
Astructura alternativă multiplă este implementată în acest limbaj cu ceea ce se numea GO TO calculat, o construcție de forma:
GO TO (eticheta1, eticheta2, eticheta3,...., etichetan), variabilă_control
în care:
etichetai  -  arata la ce instrucțiune se face saltul dacă variabila_control este egală cu i:
variabila_control - este variavila care are valori cuprinse între 1 și n.
Acest limbaj nu are structura repetitivă condiționată anterior DO-WHILE și nici pe dea condiționată posterior, DO-UNTIL. Acestea se simulează folosind IF() și o întrețesere de instrucțiuni GO TO, ceea ce programarea structurată implementată forțat pentru FORTRAN IV se străduia să facă greoi, aproape imposibil de acceptat.
Limbajul C dispune de tot tacâmul de construcții pentru a implementa toate structurile de control fără mari probleme și tocmai de aceea a fost acceptat ca fiind un limbaj complet, ușor și prietenos.
Structura liniară este implementată folosind expresii aritmetice, expresii de atribuire dar și apeluri de funcții.
Structura alternativă este implementată folosind construcția:
if (expresie) {
                      secventa1;
                     }
                      else
                     {
                      secventa2;
                      }
dacă după evaluarea expresiei se obține că este adevărată se execută secventa1, În caz contrar se execută secventa2. Se observă că lipsește then pentru a selecta secventa1, lucru nenecesar, ci presupus, că nu tot ceea ce este în vorbirea curentă trebuie preluat în limbaj.
        

În lucru acum
(13 noiembrie 2017)

Modul de implementare a recursivității

Limbajul FORTRAN nu are implementată recursibitatea.
Limbajul COBOL nu are implementată recursibitatea.
Limbajul ALGOL nu are implementată recursibitatea.
Limbajul PASCAL are implementată recursibitatea chiar la nivel de definire de variabile.
Limbajul C are implementată recursibitatea chiar la nivel de definire de variabile.
Limbajele de  asamblare implementează recursibitatea prin gestionarea stivelor de către programator.



În lucru acum
(13 noiembrie 2017)

Modul în care se scriu comentariile

Cei ce au făcut mentenanță în programe FORTRAN și COBOL știu pe pielea lor de programatori care au fost binefacerile introducerii de comentarii în programe care au lămurit:
- semnificația datelor definite;
- semnificația secvențelor de prelucrare;
- localizarea sursei unde se află formulele de calcul;
- legislația care a stat la baza unor blocuri decizionale;
- numele programatorilor care au realizat textele;
- semnificația unor constante folosite pentru diferite stări;
- semnificația codurilor utilizate;
- restricții privind pentru definirile  parametrilor.
În limbajul FORTRAN comentariile sunt date de litera C pe prima coloană a formularului de programare.
În limbajul C pentru comentarii există două modalități de a le introduce:
- dacă se dorește mai multe linii de comentarii succesive se folosesc /* pentru debut și */ pentru final;
- dacă se dorește comentariu pentru o linie sursă se scrie un text oarecare după //.
În limbajul PASCAL comentariile se introduc prin (* texte oarecare *) sau  {*text oarecare *}, iar dacă se dorește pe linia unei instrucțiuni să se introducă un text se scrie // text oarecare.
În limbajele de asamblare comentariile diferă de la calculator la calculator.În limbajul ASSEMBLER al IBM comentariile încep cu un asterisc pe prima coloană. În limbajul ASSIRIS comentariul este și el la loc de cinste. În limbajul ASM cel folosit acum de toate PC-urile comentariile au în fața textului punct și virgulă, adică ; permițând scrierea în acest fel de texte pe o line dar și după fiecare instrucțiune pentru a lămuri semnificația acesteia.



În lucru acum
(13 noiembrie 2017)

Regula de evaluare a expresiilor

Limbajele de programare au operanzi și operatori cu care construiesc expresii mai complexe sau mai puțin complexe. Există o singură regulă de evaluare a expresiilor, indiferent care sunt acestea și această regulă vizează:
- prioritatea operatorilor;
- sensul de parcurgere în procesul de evaluare.
Pentru limbajul C există tabelul:
PrioritateaOperatorDescriereaAsociativitatea
1++ --Post incrementare, respectiv decrementare 
Stânga la dreapta
()Apel funcție
[]Definire în masiv
.Referire membru în articol
->accesare pointeri în structuri
(type){list}Compunere literali
2++ --Pre Incrementare și pre decrementareDreapta la stânga
+ -Operatori unari
! ~negarea logică NOT și complement pe biți NOT
(type)Tipul
*Referirea lui
&Adrea lui
sizeofLungimea lui
_AlignofAliniere impusă
3* / %Înmulțire, împărțire și împărțire cu restStânga la dreapta 
4+ - Adunare și scădere
5<< >>Deplasare pe biți
6< <=Operatorul relațional  <  și ≤
> >=Operatorul relațional  >  și ≥ 
7== !=Operatorul relațional =  și  ≠ 
8&Operatorul și pe bițiAND
9^Operatorul logic sau exclusiv  XOR (exclusive or)
10|Operatorul logic sau iclusiv OR 
11&&Operatorul logic AND
12||Operatorul logic OR
13?:Operatorul ternarDreapta la stânga
14=Simple assignment
+= -=Assignment by sum and difference
*= /= %=Atribuire cu operații aritmetice
<<= >>=Atribuirea cu deplasare biți spre stânga, dreapta
&= ^= |=Atribuirea cu operații pe biți AND, XOR, and OR
15,VirgulaStânga la dreapta
Expresiile din parantezele rotunde se evaluează primele.
Expresia *alfa++ se evaluează *(alfa++) pentru că postincrementarea are prioritatea 1, iar operatorul de referire are prioritatea 2.
Expresia  a=3, b=5, c=7;
se evaluează de la stânga spre dreapta căci operatorul virgulă așa cere.  Se evaluează mai întâi atribuirea a=3, apoi se inițializează  b și la urmă se evaluează expresia c=7.
Expresia:
e = a < d ? a++ : a = d
se evaluează astfel:
e = ( ((a < d) ? (a++) : a) = d )
Operatorul = are prioritatea 14 și presupune evaluare de la stânga la dreapta.
Operatorul < are prioritatea 6.
Operatorul  de postincrementare ++ are prioritatea 1.
Operatorul ?: are prioritatea 13.
Se evaluează expresia a<d.
Dacă rezultatul evaluării este adevărat are loc postincrementarea și apoi e=a.
Dacă rezultatul evaluării nu este adevărat are loc atribuirea e=d.

În lucru acum
(13 noiembrie 2017)

Lista de operatori și rangurile lor

Un limbaj diferă de altul prin lista de operatori, listă care dă puterea unui limbaj. Operatorii sunt cei care spun de fapt ce se întâmplă cu zonele de memorie, până unde se merge , adică la ce nivel:
- bit;
- byte;
- șir de biți;
- cuvânt;
- dublu cuvânt;
- caracter;
- șir de caractere.
Limbajele mai slabe merg la nivel de byte și la nivel de cuvânt sau dublu cuvânt și șir de caractere. Limbajele mai sofisticate merg și în interiorul byte sau a cuvântului.
Lista operatorilor în limbajele de asamblare este dată de lista de instrucțiuni, căci fiecare cod de operație înseamnă un operator de fapt. Conchid că limbajul de asamblare are cea mai complexă listă de operatori și că în limbajul de asamblare se face orice cu orice. SE găsesc instrucțiuni pentru:
- operatorii aritmetici;
- operatorii de comparare;
- operatorii logici;
- operatorii pe șiruri de biți;
- operatori atribuire;
- operatori de inițializare;
- operatori incrementare/decrementare;
- operatorii pe șiruti de caractere.
Lista operatorilor în limbajul COBOL este  formată din:
- operatorii aritmetici + - * / **, add, subtract, multiply, divide;
- operatorii de comparare = < > <= >= <> less than, greater thac, equal to ;
- operatorii logici and, or, not ;
- operatorii pe șiruri de biți b-and, b-or, b-xor, b-not, b-left, b-right;
- operatori atribuire move, set, compute;
- operatori de inițializare move;
- operatorii pe șiruti de caractere move .
Lista operatorilor în limbajul C este  formată din:
- operatorii aritmetici +, -, *, /, %;
- operatorii de comparare == != ;
- operatorii logici !, &&, ||, or, not, ;
- operatorii pe șiruri de biți ~, &, |, ^,<<, >>  ;
- operatori atribuire compu;i +=,-=, *=,/=,%=,  |=, ^=, &=,<<=, >>= ;
- operatori de inițializare;
- operatori incrementare/decrementare ++, --;<, <=, !<, >,>=, !>
- operatori pentru membrii unei structuri agregate de date . și -> ;
- operatori cu pointeri & și *;
- operatorii pe șiruri de caractere definiți ca funcții  în biblioteca string.h.
În limbajul C virgula este operator. Există operatorul ternar ?:, dar și mulți alți operatori care sunt de fapt funcții implementate în limbaj precum sizeof(), new, delete, type și mulți alții.
Lista operatorilor în limbajul PASCAL este  formată din:
- operatori arithmetici +, -, *, /, %;
- operatori relationali =, <, <=, >, >=, <> ;
- operatori booleeni and, and  then, or, or else, not;
- operatori pe biți &, |, !, ~, <<, >> ;
- operatori pe mulțimi +, -, *, ><, <=, include, exclude, in;
- operatori pe șiruri de caractere sub forma unor funcții de bibliotecă.
Comparând listele operatorilor, se vede că limbajul C este cel mai puternic, dar după oricare alt limbaj de asamblare, deși limbajul PASCAL permite operare elegantă pe mulțimi.

În lucru acum
(13 noiembrie 2017)

Flexibilitatea de a defini tipuri și structuri de date





În lucru acum
(13 noiembrie 2017)

Setul de caractere

Fiecare limbaj are setul său de caractere.
Limbajul C are setul de caractere format din:
- literele mari de la A la Z, literele mici de la a la z;
- cifrele 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;
- caracterele speciale  ~, %, |, @, +, <, _, -, >, ^, #, =, &, $, /, (, *, \, ), ′, :, [, ", ;, ], !, ,, {, ?, ., };
- caracterele denumite spații albe \b, \t, \v,  \r, \f, \n, \\, \’, \", \?, \0, \a, \x, \o.
Limbajul FORTRAN are setul de caractere format din:
- literele mari de la A la Z;
- cifrele 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;
- caractere speciale ., , (, ), =, +, -, /, *, **, $, blanc.
Limbajul COBOL are setul de caractere format din:
- literele mari de la A la Z;
- cifrele 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;
- caractere speciale ., , (, ), =, +, -, /, *, **,  blanc.
Limbajul PASCAL are setul de caractere format din:
- literele mari de la A la Z;
- literele mici de la a la z;
- cifrele 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;
- caractere speciale ., , (, ), =, +, -, /, *, **,  blanc, {, }, [, ], ;, :, =, <. >, ~, %, $, #, !.
Semnificația caracterelor trebuie studiată cu mare atenție căci nu este obligatoriu ca un simbol să aibă aceeași semnificație la toate limbajele de programare. Se învață un limbaj cunoscând diferențele față de limbajul anterior în care a lucrat programatorul, dar acele diiferențe trebuie nu identificate, ci învățate și trebuie ținut seama de ele.
În lucru acum

(13 noiembrie 2017)

Wednesday, November 8, 2017

Istoria românească a limbajelor de prima generație


În mod artificial se zice că FORTRAN și COBOL sunt limbeajele de programare din prima generație. Ele nu sunt cu nimic nici dâmbovițene și nici mioritice, așa cum ne-ar place nouă să credem când ne deslănțuim a spune că istoria a început pe undeva pe ici-șa.
Aceste limbaje de programare au pătruns la noi pe măsură ce economia noastră a fost dotată cu calculatoare IBM și FELIX C-256, căci eu nu iau în calcul implementări de sublimbaj făcute de persoane entuziaste care exersau construirea de compilatoare autohtone, cu caracter limitat, particoluar și cu comportament imprtevizibil, care nu funcționai în niciun caz independent de cel ce dezvoltase așa ceva.
Ceea ce a intrat la noi a fost acel FORTRAN IV și după aceea limbajul FORTRAN implementat pentru calculatorul FELIX C-256 la peste 20 de ani de la crearea în USA a limbajului.
Aceste limbaje au avut o răspândire importantă pentru că:
- a existat o literatură românească cu prezentarea lor;
- funcționau nenumărrate calculatoare;
- industria cerea soluții rezolvabile cu ele;
- programatorii aveau un entuziasm și o dorință enormă de afirmare;
- cei ce nu se pricepeau nu-și băgau nasul în oalele programatorilor.
Știu că în 1970 navele de la ICEPRONAV se proiectau pe calculatorul IBM 360 din Centrul de Calcul al ASE. Știu că reparațiile capitale de la Rafinăria Brazi se derulau pe baza graficului de drum critic  scos la calculatorul IBM 360 din Centrul de Calcul al ASE. Știu că studiile privind dezvoltarea  cu modele cibernetice a zonei Mureșului Superior se obțineau la calculatorul IBM 360 din Centrul de Calcul al ASE. Și la Danubiana se făcea programarea producției de anvelope și calculul de necesar cu ceea ce se obținea de la calculatorul IBM 360 din Centrul de Calcul al ASE. Și toate acestea se produceau undeva prin anul 1971. Programele de irigații optimale ale ISPH coordonate de Ulise BERAR se rulau tot la calculatorul IBM 360 din Centrul de Calcul al ASE.
Despre marile probleme ale întrerpinderilor și ele mari care funcționau în economia socialistă, toate centrele teritoriale de calcul-CTE se găseau soluții cu programe scrise în limbajele COBOL preponderent dar și în FORTRAN. Cele mai multe programe erau scrise în COBOL.
Limbajul ALGOL n-a prins la noi deși ca poezie era aproape perfect, genial, pe care muritorii de rând fie că nu l-au înțeles, fie că nu l-au iubit, dar eu sunt sigur că nu avea compilator performant. Cine venea din FORTRAN găsea construcțiile din ALGOL peste mână și cei din jur îl descurajau din invidie sau din ignoranță, dar eu cred că mai mult din lipsă de preocupări de perfecționare.
Limbajul PL/1 nu a prins nici el pentru că era prea apropiat de ALGOL și prea departe de FORTRAN sau de COBOL și  programatorii ori acceptă, ori resping pur și simplu, nu există acel nu prea.


(07 noiembrie 2017)

Saturday, November 4, 2017

Generația a VII-a de dispozitive de calcul corespunde calculatoarelor electronice cu circuite integrate pe scară largă și foarte largă . La noi s-a produs o variantă avansată a calculatoare personale din familia Feix dar și calculatorul Junior și calculatorul personal COBRA la Brașov.
Detalii despre toate acestea se află pe Internet dacă se face căutare pe cuvinte cheie precum istoria calculatoarelor românești, COBRA, Felix PC aMIC și altele.

     *
*          *
Voi fi recunoscători turutor celor care  mă vor ajuta fie cu detalii, fie cu elemente care să corecteze cele relatate aici. Toate materialele propuse de mine aici la generații de echipamente de tehnică de calcul sunt provizorii, întrucât documentarea provine din mai multe surse pe care nu am avut posibilitatea să le verific.




(04 noiembrie 2017)

Generația a VI-a de dispozitive de calcul

Generația a V-a de dispozitive de calcul corespunde calculatoarelor electronice cu circuite integrate pe scară largă și foarte largă . La noi s-a produs o variantă avansată a calculatorului MECIPT la ITC Cluj, dar și calculatoare din familia FELIX. Detalii despre toate acestea se află pe Internet dacă se face căutare pe cuvinte cheie precum istoria calculatoarelor românești, Felix C-256, I-100 și altele.

     *
*          *
Voi fi recunoscători turutor celor care  mă vor ajuta fie cu detalii, fie cu elemente care să corecteze cele relatate aici. Toate materialele propuse de mine aici la generații de echipamente de tehnică de calcul sunt provizorii, întrucât documentarea provine din mai multe surse pe care nu am avut posibilitatea să le verific.


(04 noiembrie 2017)

Generația a Generația a V-a de dispozitive de calcul

Generația a V-a de dispozitive de calcul corespunde calculatoarelor electronice cu circuite integrate. La noi s-a produs o variantă avansată a calculatorului MECIPT la ITC Cluj. Detalii despre toate acestea se află pe Internet dacă se face căutare pe cuvinte cheie precum istoria calculatoarelor românești, adăugând și ITC Timioșara sau ITC Cluj sau IPB catedra de calculatoare, căci acolo s-au produs. La UPB s-a produs calculatorul Felix PC.
De asemenea în aceeași cateforie se află mini și microcalculatoarele Felix M18, Felix M18B, Felix M118GS pe 8 biți, cu procesor Intel 8080, Felix M-216 pe 16 biți, cu procesor Intel 8086. Calculatorul aMIC  a fost construit în IPB în 1982-1983 folosind procesor Intel 8080. Microcalculatorul COBRA a fost realizat în 1986 cu procesor Z80 la Brașov


     *
*          *
Voi fi recunoscători turutor celor care  mă vor ajuta fie cu detalii, fie cu elemente care să corecteze cele relatate aici. Toate materialele propuse de mine aici la generații de echipamente de tehnică de calcul sunt provizorii, întrucât documentarea provine din mai multe surse pe care nu am avut posibilitatea să le verific.


(04 noiembrie 2017)