Mulțumim anticipat tuturor acelora care vor transmite critici/observații/sugestii

Similar documents
Structura și Organizarea Calculatoarelor. Titular: BĂRBULESCU Lucian-Florentin

Titlul lucrării propuse pentru participarea la concursul pe tema securității informatice

Metrici LPR interfatare cu Barix Barionet 50 -

2. Setări configurare acces la o cameră web conectată într-un router ZTE H218N sau H298N

Mecanismul de decontare a cererilor de plata

Mediul de programare C/C++ (Versiunea Borland C++ 3.1)

PROIECTAREA ALGORITMILOR

Subiecte Clasa a VI-a

D în această ordine a.î. AB 4 cm, AC 10 cm, BD 15cm

Auditul financiar la IMM-uri: de la limitare la oportunitate

Lucrarea de laborator nr. 4

Versionare - GIT ALIN ZAMFIROIU

Reflexia şi refracţia luminii. Aplicaţii. Valerica Baban

2. SCHEME LOGICE ŞI PSEUDOCOD

Procesarea Imaginilor

9. Memoria. Procesorul are o memorie cu o arhitectură pe două niveluri pentru memoria de program și de date.

CAIETUL DE SARCINI Organizare evenimente. VS/2014/0442 Euro network supporting innovation for green jobs GREENET

INTEROGĂRI ÎN SQL SERVER

Excel Advanced. Curriculum. Școala Informală de IT. Educație Informală S.A.

Programare în limbaj de asamblare 16. Formatul instrucţiunilor (codificare, moduri de adresare).

Arbori. Figura 1. struct ANOD { int val; ANOD* st; ANOD* dr; }; #include <stdio.h> #include <conio.h> struct ANOD { int val; ANOD* st; ANOD* dr; }

Capitolul IV. Programarea în limbajul C

REVISTA NAŢIONALĂ DE INFORMATICĂ APLICATĂ INFO-PRACTIC

The First TST for the JBMO Satu Mare, April 6, 2018

Reţele Neuronale Artificiale în MATLAB

ARBORI AVL. (denumiti dupa Adelson-Velskii si Landis, 1962)

GHID DE TERMENI MEDIA

Nume şi Apelativ prenume Adresa Număr telefon Tip cont Dobânda Monetar iniţial final

MS POWER POINT. s.l.dr.ing.ciprian-bogdan Chirila

Proiectarea bazelor de date. PL/SQL Înregistrări și Colecții # 13. Adrian Runceanu

ISBN-13:

ARHITECTURA SISTEMELOR DE CALCUL ŞI SISTEME DE OPERARE. LUCRĂRILE DE LABORATOR Nr. 6, 7 şi 8 REPREZENTAREA INFORMAŢIILOR NUMERICE ÎNTREGI ŞI REALE.

6. Bucle. 6.1 Instrucţiunea while

Semnale şi sisteme. Facultatea de Electronică şi Telecomunicaţii Departamentul de Comunicaţii (TC)

Updating the Nomographical Diagrams for Dimensioning the Concrete Slabs

Ghid identificare versiune AWP, instalare AWP şi verificare importare certificat în Store-ul de Windows

3.2 Arhitectura setului de instrucţiuni ISA. Copyright Paul GASNER

Modalitǎţi de clasificare a datelor cantitative

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

CURS 2. Reprezentarea numerelor intregi si reale. Sistem de numeraţie

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

3. Limbajul Pascal : elementele limbajului, structura programelor, tipuri simple de date.

Aspecte controversate în Procedura Insolvenţei şi posibile soluţii

Textul si imaginile din acest document sunt licentiate. Codul sursa din acest document este licentiat. Attribution-NonCommercial-NoDerivs CC BY-NC-ND

Olimpiad«Estonia, 2003

CERERI SELECT PE O TABELA

Crearea aplicaţiilor consolă

Constructii sintetizabile in verilog

Studiul elementelor de bază din limbajul C++

Proiectarea bazelor de date # 11. PL/SQL Funcții în PL/SQL (partea a II-a) Adrian Runceanu

I. Instrucţiuni PRELEGERE IX PROGRAMAREA CALCULATOARELOR ŞI LIMBAJE DE PROGRAMARE

Tema 1 - Transferuri de date DMA intr-o arhitectura de tip Cell

Limbajul VHDL. Circuite integrate numerice. Limbajul VHDL

2. Setări configurare acces la o cameră web conectată într-un echipament HG8121H cu funcție activă de router

Candlesticks. 14 Martie Lector : Alexandru Preda, CFTe

Baze de date distribuite și mobile

Macrocomenzi. Figura 1. Personalizarea barei de meniuri. Se va afișa fereastra din figura 2. Figura 2. Includerea tab ului Developer.

Preţul mediu de închidere a pieţei [RON/MWh] Cota pieţei [%]

Seminar 3 ASC MIR Operatii pe biti Operatii cu siruri

earning every day-ahead your trust stepping forward to the future opcom operatorul pie?ei de energie electricã și de gaze naturale din România Opcom

4. Asignarea adreselor IP

INFORMAȚII DESPRE PRODUS. FLEXIMARK Stainless steel FCC. Informații Included in FLEXIMARK sample bag (article no. M )

Funcţii grup şi clauzele GROUP BY, HAVING. Operatorii ROLLUP şi CUBE.

X-Fit S Manual de utilizare

Update firmware aparat foto

Ierarhia memoriilor Tipuri de memorii Memorii semiconductoare Memoria cu unități multiple. Memoria cache Memoria virtuală

Propuneri pentru teme de licență

Documentaţie Tehnică

Metoda BACKTRACKING. prof. Jiduc Gabriel

Creare baza de data Deschidem aplicaţia Microsoft Access. Lansarea în execuţie a programului se face urmând calea:

La fereastra de autentificare trebuie executati urmatorii pasi: 1. Introduceti urmatoarele date: Utilizator: - <numarul dvs de carnet> (ex: "9",

9. CURSOARE. Obiective. În acest Capitol, vom învăţa despre: Manipularea cursoarelor. Folosirea Cursor FOR Loops şi Nesting Cursors.

Sisteme de numeraţie Reprezentarea informaţiei numerice în calculatoare Terminologia folosită în legătură cu erorile de calcul Reprezentarea

Subprograme şi pachete PL/SQL

Capitolul 4 SUBCERERI. F. Radulescu. Curs: Baze de date - Limbajul SQL

DECLARAȚIE DE PERFORMANȚĂ Nr. 101 conform Regulamentului produselor pentru construcții UE 305/2011/UE

Colegiul Național Calistrat Hogaș Piatra-Neamț LIMBAJUL SQL

EN teava vopsita cu capete canelate tip VICTAULIC

PACHETE DE PROMOVARE

Capete terminale şi adaptoare pentru cabluri de medie tensiune. Fabricaţie Südkabel Germania

Sisteme de operare 19. Gestiunea memoriei

SISTEME DE CALCUL. LIMBAJ DE ASAMBLARE. SIMULATORUL PCSPIM UAL DPE. Fig.1. Structura unui sistem de calcul

5.1 Definirea datelor în SQL

10. Modelarea şi eliminarea zgomotelor din imaginile digitale

SISTEME DE CALCUL. LIMBAJ DE ASAMBLARE. SIMULATORUL QTSPIM UAL DPE. Fig.1. Structura unui sistem de calcul

INTERPRETOARE DE COMENZI

I. PROGRAMARE ORIENTATĂ PE OBIECTE...

CERERI SELECT PE MAI MULTE TABELE

Memorii în Sisteme Embedded. Tipuri de memorii. Arhitectura memoriilor.

Proprietăţi obiectual-relaţionale în standardul SQL prof. dr. ing. Mircea Petrescu

În continuare vom prezenta unele dintre problemele de calcul ale numerelor Fibonacci.

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

Dispozitive Electronice şi Electronică Analogică Suport curs 02 Metode de analiză a circuitelor electrice. Divizoare rezistive.

Lucrarea nr. 1. Automatizarea unui reactor de etilare

Tratarea excepţiilor

Laboratorul 1 1. Introducere

Noţiuni de bază (II) 4. Scrierea constantelor

Proiectarea Sistemelor Software Complexe

manivelă blocare a oglinzii ajustare înclinare

R O M Â N I A CURTEA CONSTITUŢIONALĂ

Transcription:

Mulțumim anticipat tuturor acelora care vor transmite critici/observații/sugestii ilincamircea@yahoo.com TEMA III.1 v1 : ORGANIZAREA DATELOR UNUI PROGRAM C/C++ ÎN MO postat 02.11.2016 (sinteză) Coținutul temei: - tipuri de date; - instrucțiuni de declarare a varabilelor; - constant simbolice; - exemplu complex de declarare a variabilelor; - exerciții; - referințe bibliografice. 1. CONSTANTE SIMBOLICE Limbajul C/C++ permite definrea constantelor simbolice. Acestea nu sunt propriu-zis constante pentru care să se atribuie locații distincte în MO. Rolul lor estede înlocui o valoare numerică printr-un identificator. În continuare, dacă într-o instrucțiune de tip expresie de calcul, se regăsește respectivul identificator, acesta va fi înlocuit prin constant ape care o reprezintă. Introducerea constantelor simbolice se face în ona directivelor printr-o construcție de forma: #define G 9.81 Constantele simbolice se pot folosi pentru introducerea constantelor fizice universal. Ex. Secvența următoare calculează greutatea unui corp. #define G 9.81 int main() { int masa=20; float greutatea; greutatea=masa*g; printf( \n Acceleratia gravitationala = %4.2f,G); Deoarece constantele simbolice nu reprezintă variabile,deci nu li se atribuie locații în MO, acestea nu pot fi incluse în listele de citie, afișare sau atribuire (nu li se pot aloca valori). De aceea, instrucțiunea de afișare de mai sus,este interpretată ca o eroare de sintaxă. 2. TIPURI DE DATE ÎN C/C++ Tipuri de date. Domenii de reprezentativitate În principal, într-un program C/C++ se pot atribui parametrilor problemei, adică variabilelor definite în program,următoarele tipuri de constante/valori: - constante/valori întregi cu semn (Z), definite prin cuvintele tip int(long int) 1 ; long long int; short int; - constante/valori întregi fără semn,adică valori strict pozitive (N), definite prin cuvântul tip unsigned int; unsigned long long int; unsigned short int; - constante reale (R), definite prin cuvântul tip float; double; long double; - constante caracter care corespund semnelor alfabetului limbajului C/C++ (litere,cifre,semne speciale- + ; * ;, caractere negrafice), semne grafice). Aceste semne se codifică prin codurile ASCII și sunt definite prin cuvântul char; unsigned char.se pot codifica 256 de caractere.

Obs. 1 ) Pentru IDE DEV++ și Eclipse int și long int definesc același tip de dată întreagă, pentru care se alocă 4 o. Locația din MO folosită pentru înscrierea unei constante/valori numerice este alcătuită dintr-un număr diferit de octeți. De aceea se spune că pentru reprezentarea constantelor numerice se folosește un format fix, predefinit. Tipurile de date cel mai frecvent folosite sunt: - int pentru care se alocă o locație alcătuită din 4 o/octeți; - float pentru care se alocă o locație alcătuită din 4 o/octeți - char pentru care se alocă o locație alcătuită de 1 o/octet. Conform [1] și [2] constantele reptrezentând valorile variabilelor sunt înscrise în locațiile MO prin reprezentarea în baza 2 a codificării realizate conform tipului respectivelor variabile.aceasta reprezintă formatul intern al valorii variabilelor. Pentru afișarea formatului intern,deci în exterior, se folosește baza 16 respectiv 2 cifre hexazecimele pentru fiecare octet în baza doi. Ex. Să se precizeze reprezentarea în forma executabilă a unui program a valorilor variabilelor a și b. Se vor indica formatul intern (baza 2) și formatul extern (baza 16).Conform tipului declarant locațiile atribuite sunt alcătuite din 4 octeți/bytes. Fie declarația: int a = 260,b= -260 (a) = (00...01 00000100) 2 = (0x 00 00 01 04) 16 = 260 10 (b) = (11...1111 1110 11111100) 2 = (0x FF FF FE FC) 16 = - 260 10 Numărul de octeți,respectiv numărul cifrelor binare folosite pentru reprezentarea unei constante limitează valorile maximă/minimă care pot fi înscrise în respectiva locație sau,altfel spus, numărul maxim/ minim care poate fi alcătuit folosind numărul de cifre binare/biți care alcătuiesc locația. Ex. Pentru tipul int locația are 32 biți(4o) care sunt folosiți astfel: b 31 sau msb codifică semnul numărului iar următorii 31 de biți (b 0 - b 30 ) sunt folosiți pentru reprezentarea unui număr n. Deci, pentru o locație de 4o n Є [- 2 31, 2 31-1] iar pentru o locație de 2o n Є [- 2 15,2 15-1] Celelate tipuri de date/constante precizate anterior (long,...) se folosesc numai în cazul atribuirii/calculului unor valori care nu se încadrează în limitele de reprezentativitate specifice fiecărui tip. Adresa unei locații din MO Orice locație din MO este identificată prin adresa/numărul de ordine al primului octet al acesteia. Evident,ceilalți octeți ai locației succed primului. De aceea este suficient să se cunoască numărul de octeți ai locației și adresa primului octet pentru ca locația să poată fi corect identificată. Într-un program C/C++ adresa se determină cu ajutorul operatorului &. Ex. Dacă identificatorul/numele unei variabile este x atunci adresa acesteia este &x. 3. INSTRUCȚIUNI DE DECLARARE A VARIABILELOR Pentru variabilele unui program C/C++ atribuirea locațiilor în MO se face diferit,în funcție de modul în care acestea sunt definite/introduse în program. O variabilă definită printr-o instrucțiune de declarare are următoarele caracteristici: - variabilă simplă deoarece i se poate atribui numai o singură locație în MO; - variabilă predefinită deoarece dimensiune locaței(numărul de octeți) este unic determinat în funcție de tipul precizat la declarare; - variabilă locală sau globală în funcție de poziția istrucțiunii de declarare (in interiorul unei funcții sau în zona directivelor;

- variabilă adresabilă direct prin identificator sau indirect prin adresă(alocare dinamică). Locațiile se pot afla în zone diferite ale segmentului MO atribuit respectivului program(fig.2). În funcție de modul în care se regăsesc locațiile atunci când variabilele sunt folosite/apelate în instrucțiunile programului se disting două posibilități: - adresarea directă sau alocarea statică și respectiv - adresarea indirectă sau alocarea dinamică. Alocarea directă SC folosește adresare directă atunci cînd variabilele sunt definite prin instrucțiuni de declarare.caracteristic este faptul că la adresarea directă locațiile se regăsesc prin intermediul identificatorului atribuit în instrucțiunea de declarare. De aici și termenul adresare directă. Locațiile atribuite prin alocare directă nu mai pot fi refolosite pentru alte variabile. Poziția în program a instrucțiunilor de declarare determină: poziția locației în segmentul de date, durata de viață a unei locații,posibilitatea de recunoștere a unei locații atunci când variabila corespunzătoare este folosită într-o instrucțiune. Pot exista două posibilități: Declararea în interiorul unei funcții a programului(cazul cel mai frectvent) definește variabilele locale. Pentru acestea se atribuie locații în prima zonă a stivei (fig.1) atunci când începe interpretarea instrucțiunilor unei funcții din program. În cadrul unei funcții, un identificator care definește o variabilă locală este prioritar față de același identificator folosit pentru o variabilă globală. Durata de viață, deci posibilitatea de folosire a variabilelor astfel declarate, este numai pe perioada interpretării instrucțiunilor funcției în care au fost declarate. După încheierea efectuării tuturor instrucțiunilor unei funcții, locațiile atribuite variabilelor locale sunt eliberate iar conținutul acestora este pierdut/șters. Ulterior,la executarea unei alte funcții, locațiile eliberate anterior vor putea fi atribuite pentru variabilele locale ale funcției care se interpretează.aceasta permite ca variabile locale din funcții diferite să folosescă același identificator întrucât locațiile în MO sunt atribuite diferit. Declararea în zona directivelor,deci în afara funcțiilor programului definește variabilele globale.acestea sunt organizate distinct de variabilele locale(fig.2) și sunt recunoscute deci pot fi folosite/modificate de instrucțiunile oricărei funcții a programului. Atribuirea locațiilor se face în etapa Build-faza compilare. IMPORTANT. Caracterul global al unei variabile se pierde numai pentru funcțiile programului în care același identificator este folosit pentru declararea unei variabile locale. Alocarea indirectă sau alocarea dinamică permite atribuirea dar și eliberarea locațiilor MO în timpul executării programului (etapa Run). Atribuirea locațiilor se face întro zonă diferită de aceea a variabilelor locale și globale.(fig.2).locațiile sunt apelate/recunoscute prin adresa fiecăreia, deci prin numărul de ordine al primului octet al respectivei locații).adresele sunt stabilite automat de către SC dar atribuirea se face prin instrucțiunile din program (ex. funcția malloc()). Folosirea alocării dinamice se va trata și exemplifica in extenso în cadrl temei privind datele de tip utilizator(arii de date și struct). Ex. În fig. 1 se exemplifică procedeul adesării directe prin interpretarea intrucțiunii de declarare: int x=645; Este prezentată legătura dintre: identificatorul ales pentru variabilă (x), locația atribuită aflată la adresa &x și valoarea înscrisă-constanta 645. Informația înscrisă în locația x este reprezentată pe 4o/32 biți și în format intern (baza 16) respectiv (0x 00000285) = (285) 16 = (645) 10

program c/c++ int x MO &x 0x00000285 instrucțiunea de declarare locația atribuită Fig 1 Se menționează că instrucțiunea de declarare poate fi folosită,deși nu se recomandă, și pentru inițializarea valorii unei variabile.constanta atribuită este convertită la tipul variabilei. Ex. int x,y=10.4,z; float a=-12.4,a,bc; char c1,c2= C,m; long long int q; Obs.1 Pentru fiecare variabilă(x,y,...m,q) se atribuie/rezervă o locație alcătuită conform tipului declarat. De aceea variabile definite prin instrucțiunile de declarare se numesc și variabile simple de tip predefinit. Corespunzător, o variabilă simplă poate avea/memora o singură valoare.atribuirea unei alte valori se face prin înlocuirea valorii precedente care este de aceea pierdută. Obs2. În locația atribuită variabilei y constanta reală 10.4 este convertită, în conformitate cu instrucțiunea de declarare, la tipul int. Deci, în locația x se înscrie constanta (0x0000000A). Într-un program, prin intermediul declarațiilor se pot defini și tipuri de date proprii sau tip de date utilizator: arii de date și struct. Tipurile de date utilizator se pot alcătui numai folosind tipurile predefinite. RECOMANDARE. Pentru evitarea neconcordanțelor între tipul declarat al unei variabile și tipul constantei atribuite se recomandă ca alcătuirea declarațiilor să se facă pe baza tabelului variabilelor. (vezi TEMA II,$ 2.b,Tabelul 1). Regulile de folosire/recunoaștere a valorilor atribuite unei variabile sunt: - variabilele definite prin declarații incluse într-o funcție se numesc variabile locale și pot fi folosite numai în interiorul respectivei funcții; - pentru variabilele locale atribuirea locațiilor în MO se face numai în timpul în care respectiva funcție se execută. Toate locațiile atribuite variabilelor locale, adică variabilelor declarate în funcțiile programului, sunt organizate într-o zonă comună denumită stiva de date a programului (fig. 2); - variabile definite prin declarații înscrise în afara funcțiilor programului C/C++, deci imediat după directive, se numesc variabile globale și sunt recunoscute, deci pot fi folosite, direct în oricare funcție a programului. Locațiile atribuite variabilelor globale alcătuiesc o secțiune distinctă în zona de locații atribuită programului.(fig.2) zona variabilelor locale zona liberă (heap) zona variabilelor globale zona rezervată instrucțiunilor variabile declarate în funcțiile programului variabile declarate în timpul interpretării programului (etapa RUN) variabilele declarate în afara funcțiilor programului instrucțiunile corespunzătoare formei executabile a programului Fig.2

Modificarea tipului unei variabile Într-un program C/C++ modificarea tipului unei variabile nu este permisă. Dar,la interpretarea instrucțiunilor de calcul/expresiilor operanzii sunt convertiți automat la același tip. Modificarea tipului/codificării unei constante respectă regula din fig.3: Fig 3 Dar, într-o instrucțiune de calcul programatorul poate impune modificarea/schimbarea tipului unei constante. Aceasta nu semnifică însă faptul că este posibilă modificarea formei în care o constantă este înscrisă în locația din MO, adică a tipului declarat pentru o variabilă. Pentru conversia tipului într-o expresie de calcul se folosește operatorul de conversie explicită cast ( (int), (float),...). Operatorul de conversie explicită permite impunerea modificării pentru orice tip de dată. (fig.4) Fig 4 Ex. int x=7; float y; y=x/2; Așa cum este alcătuită instrucțiunea de calcul, deși y este o variabilă reală valoarea atribuită este constanta reală 3.0 și nu 3.5 cât ar trebui să fie. Acest tip de eroare nu este semnalizat de către SC. Partea rațională 0.5 este pierdută deoarece operația de împărțire se execută între operanzi întregi. Pentru obținerea rezultatului corect se introduce operatorul cast: y=(float)x/2; Instrucțiunea se execută astfel: (7) (7.0) (conversie explicită) ; (2) (2.0) (conversie implicită) ; 7.0/2.0=3.5 (împărțire între operanzi constante reale) ; (3.5) (y). Deci valoarea atribuită lui y este corectă. 4. EXEMPLU Să se alcătuiască instrucțiunile de declarare pentru variabilele prezentate în Tabelul 1. Nr. crt. Variabila char int float (int) (char) char int float Tipul ales Tabelul variabilelor Tabelul 1 Dimensiunea Specificatorul Valoarea locației de format atribuită [o] 1 x float 4 %f 150.7 2 y int 4 %f -0.00021 3 z unsigned int 4 %u 1024 4 a char 1 %c A 5 b char 1 %c Bc 6 c long int 8 %ld 2 34 7 d int 4 %d -210 Instrucțiunile de declarare sunt: float x; int y,d; long int c; Formatul intern

char a,b; unsigned int z; 5. ERORI POSIBILE LA DECLARAREA VARIABILELOR a. Într-un program nu se pot folosi variabile care nu au fost declarate deoarece nu lea fost atribuită o locație în MO și nu există posibilitatea memorării valorii atribuite acesteia. Ex. int a=100; b=(float)a/25; Eroarea constă în nedeclararea variabilei b. b. Este interzisă redeclararea variabilelor. Ex. int a; float A; char a,b; Eroarea constă în redeclararea variabilei a. De notat că identificatorii a și A reprezintă două locații diferite,deci folosirea lor nu constituie o eroare. c. Atribuirea unei valori alcătuite din două caractere pentru o variabilă de tip char. Ex. char a; a= AB ; La interpretarea instrucțiunii variabilei a i se atribuie codul ASCII al primului character, în cazul nostru 65. Deci,deși această atribuire nu este tratată ca o eroare, pentru utilizator ea este totuși o eroare deoarece informația memorată nu coincide cu aceea furnizată prin instrucțiunea de atribuire. d. Inițializarea unei variabile prin intermediul unei instrucțiuni de atribuire nu este recomandată deoarece, atunci când nu este respectată concordanța tip declarat constantă atribuită în MO se înscrie o valoare eronată. Pentru evitarea unor astfel de situații se recomandă ca atribuirea valorilor pentru variabilelor prin instrucțiune de citire sau de atribuire (x=2+y-...) 6. TEMĂ 1. Să se completeze ultima coloană a Tebelului 1 cu reprezentarea internă a variabilelor inițializate. 2. Să se aclătuiască tabelul de variabile și instrucțiunile de declarare pentru memorarea următoarelor informații: - 1500124300218 (numărul reprezintă CNP-ul unei persoane); - 87.5 km/h; - 2 40 și 2 64 ; - 2 63 și -2 63 ; - MAI 7. REFERINȚA BIBLIOGRAFICE 1. *** http://infopuc.ro/resurse/cursuri_ppt/l2_reprezentarea_inf_sc_suport_ teoretic_v2.pdf 2. *** http://infopuc.ro/resurse/cursuri_ppt/l4_tipuri_de_date_predefinite_ Suport_teoretic_v1.pdf 3. *** http://elf.cs.pub.ro/programare/articole?action=download&file=pc2008. pdf&safe(pg.17-20)