programarea calculatoarelor (pc) · 2016. 10. 25. · de ce alegem un limbaj de programare de nivel...

29
Curs Programarea Calculatoarelor © Ovidiu Grigore Programarea Calculatoarelor (PC) Curs: prof. dr. ing. Ovidiu GRIGORE date contact: sala: B319a / B134 tel: 021 402 4897 e-mail: [email protected] url: ai.pub.ro/~ovidiu Laborator: conform orarului notare pe parcurs colocviu laborator in ultima sedinta problema cu rezolvare practica

Upload: others

Post on 28-Jan-2021

9 views

Category:

Documents


0 download

TRANSCRIPT

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Programarea Calculatoarelor (PC)

    Curs: prof. dr. ing. Ovidiu GRIGORE

    date contact: sala: B319a / B134

    tel: 021 402 4897

    e-mail: [email protected]

    url: ai.pub.ro/~ovidiu

    Laborator:

    conform orarului

    notare pe parcurs

    colocviu laborator in ultima sedinta

    problema cu rezolvare practica

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Notare:

    Semestru: Lucrare verificare (sapt. 7/8) / Tema de casa 30 pct.

    Nota laborator (teme+colocviu) 30 pct.

    Sesiune: Examen (scris) 40 pct.

    In examen se intra NUMAI daca la probele din timpul semestrului s-

    au obtinut MIN 50% punctaj.

    In sesiunile de restante se repeta NUMAI examenul (40pct)

    daca la probele din timpul semestrului s-au obtinut MIN 50% punctaj.

    Pentru promovare trebuie obtinute cel putin 50 pct.

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Bibliografie:

    Ov. Grigore, Programare in C, Ed. Printech, Bucuresti,2000;

    F. Ionescu, “Elemente de programare orientata pe obiecte”, Ed.

    Printech, Bucuresti,2000;

    D. Somnea, D. Turturea, “Initiere in C++”, Ed.Tehnica, Bucuresti, 1993;

    L. Negrescu, “Limbajele C si C++ pentru incepatori”, Editura

    MicroInformatica, Cluj, 1998.

    Surse internet:

    http://ai.pub.ro/content/PC.html

    Conventie definire nume in C++

    http://geosoft.no/development/cppstyle.html

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Etapele realizarii unei aplicatii software:

    1. Formularea problemei

    2. Formalizarea problemei

    3. Elaborarea/proiectarea algoritmului

    4. Stabilirea resurselor

    5. Scrierea codului sursa, folosind sintaxa limbajului

    6. Compilare = verificare sintaxa

    7. Depanarea erorilor

    8. Testarea aplicatiei.

    9. Scrierea documentatiei

    10. Explorarea/utilizarea aplicatiei (Lansare pe piata)

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Etapele realizarii unui program:

    1. Formularea problemei

    - De obicei se face de către client, persoana fără experiență în

    programare

    - E posibil sa nu fie o formulare clară sau completă

    - Trebuie să pună in evidenta:

    • entitățile (date) de intrare;

    • ce se dorește sa se obțină in final (date de ieșire);

    • pe cat este posibil sa se specifice demersul care trebuie efectuat

    pentru a ajunge de la intrare către ieșire

    - Daca sunt necesare/cunoscute, trebuie specificate modul de

    alcatuire/organizare a datelor de intrare si a celor de ieșire

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Etapele realizarii unui program:

    2. Formalizarea problemei

    - Se identifica parametrii/variabilele problemei (eventual tipul lor).

    - Se alege metoda teoretica de rezolvare a problemei; se determina

    formulele matematice care sunt implicate in rezolvarea problemei.

    Este o etapa de punere in evidenta a cunoștințelor teoretice din

    domeniul problemei (matematica, fizica, economie, etc).

    - Se pun în evidență condițiile inițiale și restricțiile referitoare la datele

    de intrare, respectiv la soluțiile posibile.

    - Se aleg metodele numerice folosite in rezolvarea problemei. Se

    analizează cu atenție stabilitatea și convergența metodei, tipul,

    mărimea și propagarea erorilor, precizia rezultatelor.

    - Se estimează necesarul de memorie și timpul de prelucrare

    (complexitate de calul)

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Etapele realizarii unui program:

    3. Elaborarea/proiectarea algoritmului

    - Stabilirea succesiunii etapelor de prelucrare, necesare realizării unei

    sarcini propuse (rezolvării unei probleme) = elaborare algoritm

    - Pentru dezvoltarea un algoritm, dar si pentru verificarea,

    optimizarea, depanare mai ușoară și mai eficientă, este bine ca un

    algoritm sa fie reprezentat prin una dintre următoarele metode:

    - scheme logice

    - pseudocod

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Etapele realizarii unui program:

    3. Elaborarea/proiectarea algoritmului

    Reprezentarea algoritmilor prin scheme logice (Flowchart)

    - Avem la dispoziție un număr finit de blocuri prin îmbinarea

    (înlănțuirea) cărora trebuie elaborat algoritmul cerut.

    - Execuția etapelor de prelucrare (a blocurilor) se face secvențial,

    adică la fiecare moment se executa un singur bloc, după care urmează

    următorul, etc.

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Etapele realizarii unui program:

    3. Elaborarea/proiectarea algoritmului

    Reprezentarea algoritmilor prin scheme logice (Flowchart)

    Blocul de pornire

    Blocul de oprire

    Blocul de citire date

    START

    STOP

    Citeste

    date_de_intrare

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Etapele realizarii unui program:

    3. Elaborarea/proiectarea algoritmului

    Reprezentarea algoritmilor prin scheme logice (Flowchart)

    Blocul de scriere/afisare date

    Blocul de atribuire

    Blocul ramificatie/decizie

    C = conditie,

    poate fi adevarata sau nu(falsa)

    Scrie

    date_de_iesire

    v = e

    CNU DA

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Etapele realizarii unui program:

    3. Elaborarea/proiectarea algoritmului

    Reprezentarea algoritmilor prin scheme logice (Flowchart)

    Exemplu: Calcularea mediei a doua numere, a si b

    START

    STOP

    Citeste a,b

    a=0,b=0

    m=(a+b)/2

    Scrie m

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Etapele realizarii unui program:

    3. Elaborarea/proiectarea algoritmului

    Reprezentarea algoritmilor prin pseudocod

    Conceptul, similar schemelor logice (evidențierea pașilor algoritmului),

    însă sub o forma mai apropiata limbajului natural și celui de

    programare:

    - Sunt puse la dispoziție un număr finit de propoziții/comenzi

    /instrucțiuni cu structura (sintaxa) standard (nu poate fi modificata).

    - Numai prin îmbinarea (înlănțuirea) unor astfel de comenzi trebuie

    rezolvata aplicația.

    - Execuția etapelor de prelucrare (a blocurilor) se face secvențial,

    adică la fiecare moment se executa o singura comanda, după care

    urmează următoarea, etc.

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Etapele realizarii unui program:

    3. Elaborarea/proiectarea algoritmului

    Reprezentarea algoritmilor prin pseudocod. Setul de comenzi

    • Citirea datelor: Citeste lista_date

    • Tiparire/scriere date: Scrie lista_date

    • Atribuire: variabila ← expresie

    Ex.: a ← b+c

    • Instructiunea decizionala:

    Daca expresie_logica atunci

    bloc_instrunctiuni

    Altfel

    bloc_instrunctiuni

    sfDaca

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Etapele realizarii unui program:

    3. Elaborarea/proiectarea algoritmului

    Reprezentarea algoritmilor prin pseudocod. Setul de comenzi

    • Ciclu cu contor:

    Pentru contor = V_init, V_final [, pas] executa

    bloc_instrunctiuni

    sfPentru

    • Ciclu cu test initial:

    CatTimp expresie_logica executa

    bloc_instrunctiuni

    sfCatTimp

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Etapele realizarii unui program:

    3. Elaborarea/proiectarea algoritmului

    Reprezentarea algoritmilor prin pseudocod. Setul de comenzi

    • Ciclu cu test final:

    Repeta

    bloc_instrunctiuni

    CatTimp expresie_logica

    Tema: 1. Sa se scrie echivalentul unui ciclu cu test inițial, folosind un ciclu cu test final. Si invers.

    2. Sa se reprezinte prin scheme logice:

    - ciclu cu contor

    - ciclu cu test inițial

    - ciclu cu test final

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Etapele realizarii unui program:

    3. Elaborarea/proiectarea algoritmului

    Reprezentarea algoritmilor prin pseudocod. Setul de comenzi

    Exemplu: Calcularea/afisarea minimului a doua numere citite.

    Citeste a, b

    min ← a

    Daca b < min atunci

    min ← bsfDaca

    Scrie min

    Tema: S-a depus la o bancă suma de S lei pe termen de 6 luni. Cunoscând că dobânda anuală oferită de bancă este de d %, să se determine suma aflată în cont la sfârşitul termenului de depunere. Daca la terminarea termenului, depozitul se prelungeste automat cu capitalizarea dobanzii, sa se afle suma obtinuta dupa n termene.

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Etapele realizarii unui program:

    4. Stabilirea resurselor

    - Pe baza analizei algoritmilor se specificațiile hardware,

    echipamentele (periferice) necesare: parametrii procesor, dimensiune

    / tip memorie, memorie externă, etc.

    - Limbajul în care urmează să fie scris programul se stabilește in

    funcție de scopul si modul de utilizare a aplicației:

    - Daca este dezvoltată pentru un sistem de calcul anume și un

    sistem de operare dat (specificații stricte).

    - Daca se dorește a fi multi-platforma (cross-platform), la nivel

    hardware (să ruleze pe sisteme de calcul cu arhitecturi diferite)

    sau pentru a putea fi executat pe mai multe sisteme de operare

    (MacOS, Windows, Linux, Android, etc)

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Etapele realizarii unui program:

    5. Scrierea codului sursa

    - Pornind de la algoritmul scris anterior se dezvolta aplicația folosind

    sintaxa limbajului ales.

    - Codul sursa trece, în general, prin mai multe etape de rafinare,

    urmarindu-se optimizarea timpului de execuție, optimizarea

    resurselor (memorie), etc.

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Etapele realizarii unui program:

    5. Scrierea codului sursa

    De ce alegem un limbaj de programare de nivel înalt??

    1. Limbajul mașină

    - Mașinile/sistemele de calcul folosesc în interiorul lor, pentru a

    stoca, transmite date, pentru a primi sau executa comenzi, un

    limbaj binar (cu doua valori posibile, notate 0, respectiv 1),

    numit limbaj mașină (este specific mașinii de calcul:

    procesorului, arhitecturii sale).

    - Programarea in limbaj mașină este posibila, însă extrem de

    complicată.

    - Codurile numerice asociate comenzilor sunt greu de reținut.

    (exemplu: adunarea = 5B, scadearea = 5C)

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Etapele realizarii unui program:

    5. Scrierea codului sursa

    De ce alegem un limbaj de programare de nivel înalt??

    2. Limbaj de asamblare

    - Pentru ușurarea „dialogului” cu mașina, s-a introdus limbajul de

    asamblare, care folosește comenzi specifice, particulare fiecărui

    procesor.

    - Comenzile sunt sub forma de cuvinte cheie (sub formă prescurtată),

    numite mnemonice. Setul de comenzi coincide cu setul de operații al

    procesorului. (ex. : mov , push , int , etc. )

    - Comenzile se dau la nivel de bază, folosind adresele memoriei,

    accesarea regiștrilor procesorului, etc.

    Exemple: lea ax, v; încarcă în registrul ax adresa variabilei v

    mov ax, v; încarcă în registrul ax conţinutul variabilei v

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Etapele realizarii unui program:

    Limbaj de asamblare

    Exemplu: Fișierul sursă "hello.asm", scris în asembler X86, afisareamesajului “Hello World”:

    .MODEL SMALL

    .DATA

    sir DB 'Hello World$'

    .STACK 64

    .CODE

    START:

    mov AX,@DATA

    mov DS,AX

    mov AH,9

    mov DX,OFFSET sir

    int 21H

    mov AH,4CH

    int 21H

    END START

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Etapele realizarii unui program:

    5. Scrierea codului sursa

    De ce alegem un limbaj de programare de nivel înalt??

    3. Limbaj de nivel înalt

    - Comenzile se apropie foarte mult de limbajul natural => simplificarea scrierii programelor.

    - În general nu se lucrează la nivel de memorie/adrese. Exista limbaje (precum C, C++) la care se lucrează suficient de mult la nivel de memorie, motiv pentru care se numesc de nivel mediu.

    - Sunt ascunse mecanismele de prelucrare la nivel de baza (procesor, memorie) => ușurința in abordare, performanțe mai slabe

    - Ca și limbajul natural, limbajul de nivel înalt are definite un set de reguli sintactice și semantice.

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Etapele realizarii unui program:

    5. Scrierea codului sursa

    De ce alegem un limbaj de programare de nivel înalt??

    3. Limbaj de nivel înalt

    - Calculatorul/Procesorul lucrează numai in limbaj mașină

    (binar). Scrierea programelor in limbaj de nivel înalt

    presupune existența unei etape de translatare a codului din

    limbaj înalt în limbajul mașina pe care-l cunoaște procesorul.

    - Translatarea codului in limbaj mașină se poate face folosind

    • compilator

    • interpretor

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Etapele realizarii unui program executabil (fișier .exe)

    1. Editare codului sursa (fișier .cpp) = înșiruire de instrucțiuni

    (comenzi) ale limbajului respectiv.

    2. Compilare = translatează codul sursă în cod obiect (fișier .obj),

    comenzi în limbaj mașină. Se execută în mai multe faze:

    a) preprocesare = prelucrează o serie de comenzi speciale,

    numite directive de preprocesare (încep cu #). Sunt eliminate

    spațiile albe.

    b) Verificare sintactică = sunt verificate regulile de alcătuire

    (sintaxa) a instrucțiunilor. Daca sunt erori de sintaxă,

    procesul de translatare se întrerupe, iar acestea sunt

    semnalate sub forma unei liste de erori.

    3. Linkeditare (editarea legăturilor) = “leagă” modulele obiect,

    rezolvă referințele către funcțiile externe și rutinele din biblioteci, în

    final produce cod executabil, (fisier .exe)

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Erori in procesul de realizarea unui program

    Exista 3 mari categorii de erori care pot apărea în realizarea unui

    program:

    1. Erori de compilare = în general sunt erori de sintaxă.

    3. Erori de linkeditare = nu sunt gasite bibliotecile, sau funcțiile

    externe la care se face referire in cod

    4. Erori de execuție = erori care apar în timpul executării

    programului. Unele sunt semnalate (împărțirea la zero, depașirea

    memorie ce se poate aloca, etc), altele nu sunt semnalate, programul

    se execută greșit, rezultatul obținut este eronat, motiv pentru care

    programele trebuie sa treacă printr-o etapă de testare foarte

    riguroasă, in speranța găsirii tuturor situațiilor de execuție eronată

    (se realizează scenarii de execuție în care sunt simulate situații

    diverse, in special cazurile atipice/singulare)

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Tehnici (moduri) de programare

    Programare procedurala → accentul se pune pe descompunerea

    programului în proceduri (funcții) care sunt apelate în

    ordinea de desfășurare a algoritmului. Limbajele care

    suporta aceasta tehnica de programare trebuie să asigure

    posibilități de transfer a argumentelor către funcții și de

    returnare a valorilor rezultate. Limbajul Fortran a fost

    primul limbaj de programare procedurala . Au urmat

    Algol60, Algol68, Pascal, C…

    → avantaje: dezvoltarea și depanarea ușoară,

    prin lucru cu blocuri de cod mai mici; posibilitatea de

    reutilizare a unor funcții deja definite pentru alte părți ale

    aplicației

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Programare modulara → creșterea cerințelor pentru aplicațiile software

    => creșterea dimensiunii programelor, a complexității

    algoritmilor și a implementării acestora

    => efort de organizare mai bună a datelor și funcțiilor de

    prelucrare

    => schimbarea conceputului de structurare / asociere între

    procedurile de prelucrare si datele folosite de acestea

    => apare necesitatea izolării procedurilor și a datelor în module

    separate (relativ independente), care să interacționeze între ele cât

    mai puțin.

    Tehnici (moduri) de programare

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Programare modulara → descompunerea unui program în module, care

    încorporează o parte din datele programului și funcțiile care le

    manevrează

    → avantaj principal: separarea/izolarea datelor

    folosite în module diferite =

    . tehnica (incipientă) de ascunderea/protejarea datelor.

    Observații: - in interiorul unui modul se aplica principii de programare

    procedurala;

    - Gruparea de date si proceduri în module nu implica și o

    asociere conceptuală

    Tehnici (moduri) de programare

  • Curs Programarea Calculatoarelor © Ovidiu Grigore

    Programare obiect orientată → descompunerea aplicației la nivel conceptual (abstractizari), fiecare conținând date și proceduri proprii;

    → utilizeaza mecanismele: abstractizare, încapsulare, ierarhizare, moștenire… etc.

    Observație: S-a pornit de la o descompunere algoritmica a aplicațiilor, s-a ajuns la o descompunere conceptuala a lor

    Exemplu: Dezvoltarea aplicațiilor vizuale (MS Visual C++), împărțirea în 3 clase principale (concepte):

    MainFrame (interfata cu utilizatorul)=comenzi, butoane, meniu

    Document = stocare/salvare/citire date, prelucrare

    View = vizualizare date

    Tehnici (moduri) de programare