3. Tipuri De Date: • C âteva Concepte Teoretice: Data, Tipul De Dată • Tipul De Dată Combină

  • Uploaded by: gabyroot18
  • 0
  • 0
  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View 3. Tipuri De Date: • C âteva Concepte Teoretice: Data, Tipul De Dată • Tipul De Dată Combină as PDF for free.

More details

  • Words: 1,342
  • Pages: 29
3. Tipuri de date • •

Câteva concepte teoretice: data, tipul de dată Tipul de dată combină: 1. 2.



Din pc. de vedere fizic: 1. 2.



Reprezentare nativă (VF, VM) Reprezentare “prin convenţie”

Din pc. de vedere logic: 1. 2.



Conceptul fizic (reprezentarea internă) Conceptul logic (nevoia prelucrării)

Simple (probleme reprezentării interne) Structurate (probleme liniarizării)

Din punct de vedere al adresării: statice, dinamice

Tipuri de date Pascal

C

Da

Da

reale (diverse)

Da

Da

caracter

Da

Da1

enumerativ

Da

Da

boolean

Da

Nu

masiv

Da

Da

şir

Da

Nu

articol

Da

Da

fişier

Da

Da

Da

DA2

întregi (diverse) Simple STATICE

Structurate

DINAMICE

simple+structurate

TOATE DATELE TREBUIE DECLARATE INAINTE DE FOLOSIRE (A)

O importantă caracteristică C: datele reprezentate prin convenţie (caracter, boolean, enumerativ) au doar interpretare numerică (sunt numere) LIMBAJUL C ESTE MAI APROAPE DE MAŞINĂ DECÂT ALTELE

De exemplu: • Tipul char poate memora caractere, dar el este un întreg cu valori intre diverse valori; • Tipul BOOLEAN nu există, dar expresiile logice au valorile 1 (adevărat); 0 (fals); • Tipul enumerativ este un întreg cu valori între diverse valori.

NU TE PANICA ! LUCRURILE SUNT SIMPLE. TE VEI CONVINGE.

3.1. TIPURILE SIMPLE DE DATE •

Întregi native: 1. Aritmetice (fără semn): au prefixul unsigned: char, int, long 2. Algebrice (cu semn): au prefixul signed, care este şi atribut implicit (poate lipsi): char, int, long



Reale native: simplă, dublă şi extra precizie

Tipuri de date în C Grupa de dată

INTREG

REAL

Tipul

Lungi- Domeniul de mea valori/Magnitudine (B)

Observaţii

unsigned char

1

0..255 (0..28-1)

Fără semn

char

1

-128..127 (-27..27-1)

Cu semn

unsigned int

2

0..65535

Fără semn

[short] [int]

2

-32768..32767

Cu semn

unsigned long

4

0..232-1

Fără semn

long [int]

4

-231..231-1

Cu semn

enum

2

0..216-1

Fără semn

float

4

3.4*10-38..3.4*1038

Simplă

double

8

1.7*10-308.. 1.7*10308

Dublă

long double

10

3.4*10-4932.. 3.4*104932

Extra

Reprezentare internă

VF

VM

Corespondenţa P - C Tip

Reprezentare Aritmetică

ÎNTREG Algebrică

REAL

Lungime

C

P

1

unsigned char

BYTE

2

unsigned int

WORD

4

unsigned long

-

1

char

SHORTINT

2

int

INTEGER

4

long

LONGINT

4

float

SINGLE

8

double

DOUBLE

10

long double

EXTENDED

CONSIDERENTE PRIVIND UNELE TIPURI SIMPLE DE DATE • Tipul caracter a)Tipul char memorează valori numerice (se comporta ca shortint din Pascal); b)Tipul unsigned char: i) memorează valori numerice (se comportă ca byte din Pascal); ii)memorează caractere (se comportă ca char din Pascal); Exemple: [unsigned] char a,b; ……………………. a=100; /* corect */ b=’Q’; /* corect */ b=81; /* corect, echivalent cu precedentul */ a=a+b; /* corect, prin context, se lucrează numeric */

• Calificatori ai tipului int short int  short  int long int  long signed int  int signed long  long

• Tipul enumerativ enum identificator {lista_valori_simbolice} !! ESTE TIP Ex.enum culoare {rosu,verde,galben} (valorile 0,1,2) Variabila: culoare x=rosu; Se accepta şi atribuiri de valori : Ex.enum culoare {rosu=5,verde,galben=10} (valorile 5,6,10)

ÎN C, LUNGIMILE NU MAI SUNT CATEGORICE: DIFERĂ DE LA O MAŞINĂ LA ALTA ŞI DE LA O IMPLEMENTARE LA ALTA MODUL DE DECLARARE A VARIABILELOR: tip lista_variabile Pascal: lista_variabile:tip DEFINIREA TIPULUI DE DATA AL UTILIZATORULUI: typedef nume_utilizator Pascal: TYPE nume_utilizator=orice_tip

Constante •

Definiţie: sunt valori precizate la momentul compilării şi nu se modifică la execuţie.



Constantele pot fi: A. Literali B. Constante simbolice

A. LITERALI •

Literali întregi: se exprimă în zecimal, octal (prefixul 0) şi hexazecimal (prefixul 0x). În funcţie de mărimea lor se asociază un tip întreg.

Exemplu ZECIMAL 0-32767

OCTAL 00-077777

HEXAZECIMAL 0x0000-0x7fff

TIP unsigned int

Dacă se doreşte ca un literal să aibă un tip explicit (long) se poate folosi sufixul L/l. Dacă se doreşte ca un literal să fie fără semn se poate folosi sufixul U/u. L şi U pot fi folosiţi împreună. Vezi necesitatea corespondenţei parametrilor funcţiilor ! • Literali reali: se exprimă matematic (cu punct) sau ştiinţific (cu E).

• Literali caracter: ‘c’. • Literali şiruri de caractere: “text”

B. Constante simbolice (numite):

# define nume valoare Ex. #define PI 3.14159 C. Constante obiect (nu există în Pascal): const tip nume = valoare Ex. const int a=7; /* vezi deosebirea faţă de int a=7;*/

3.2. DATE STRUCTURATE 1.MASIVE • Declarare: nume[d1][d2]…, unde d1,d2 sunt constante care indică numărul de elemente de pe fiecare dimensiune. Sintaxa diferită de Pascal ! Exemple: int b [10]; float a [10][20];

/* vector cu 10 componente */ /* matrice cu 10 linii şi 20 de coloane */

• Liniarizarea; “în ordinea liniilor” (lexicografic) (A)

• Iniţializarea: int b [10] ={2,3,0,5,6,7,3,6,8,5} /* numărul constantelor = dim */ (iniţializarea se face în ordinea liniarizării) • Referirea:  globală;  Dimensiune completă: a[2] - linia 3 a matricei a;  Un element: b[3], b[j], a[3][5], a[s][p].

• În C, primul indice de pe fiecare dimensiune este 0.

Exemplu: float x[100]; ……………. x[0]=5.987; /* primul element */ x[99]=7.4539; /*ultimul element*/

OBS.: Nu se face control de indici: a[12][20] este corect.

ATENŢIE LA CONTROLUL CORECT AL INDICELUI. Se acceptă oricâte dimensiuni.

2. TIPUL ARTICOL (STRUCT) – încapsulează unul sau mai multe câmpuri. Este un tip de date neomogene. • Declararea tipului: struct nume_tip_art { cimp_1; cimp_2; }; • Declararea variabilei: nume_tip_art variabila_articol; • Referirea câmputilor (prin calificare): variabila_articol.cimp

Exemplu: #include<string.h> main() { struct articol { char nume[40]; char adresa[20]; int an; int luna; int zi; }; [struct] articol pers; /*cuvântul struct poate lipsi în turbo C*/ ……………………………… strcpy(pers.nume,”Popescu Ion”); strcpy(pers.adresa, “Bucuresti, Pta. Romana 77”); pers.an = 1979; pers.luna = 3; pers.zi = 15; }

În ANSI C se putea obţine acelaşi rezultat sintactic scriind: typedef struct articol { cimpurile } articol pers;

Pot fi construite structuri complexe: articol – articol; articol – masiv; masiv – articol etc.

Exemplul 1 (articol - articol): [typedef] struct art_1 { int an; int luna; int zi; }; [typedef] struct articol { char nume[40]; char adresa[20]; art_1 data_nasterii; }; [struct] articol pers; /*struct poate lipsi în turbo C*/ …………………………………….. strcpy(pers.nume,”Popescu Ion”); strcpy(pers.adresa, “Bucuresti, Pta. Romana 77”); pers.data_nasterii.an = 1979; pers.data_nasterii.luna = 3; pers.data_nasterii.zi = 15;

Exemplul 2 (masiv - articol): Struct articol { Int cant; Float pret }; Articol x[200]; ….. X[7].cant = 50; X[7].pret = 100000;

X[0] cant pret

X[1] cant pret

X[2] cant pret

… …

X[199] cant pret

Exemplul 3 (articol - masiv): struct articol { int cant[30];float pret[30]; }; ……… articol vinz; …………. vinz.cant[7] = 50; vinz.pret[7] = 100000; cant 0 1

2

29

pret 0 1

2

29

3. Lucrul cu şiruri de caractere Nu există un tip special ŞIR, dar se pot prelucra şiruri!

• Şirurile în C se scriu între ghilimele: Exemplu: “Limbajul C” Şirurile scrise pe mai multe rânduri se concatenează automat: unsigned char a[11] = “Limbajul ” “ C”; Reprezentarea internă a şirurilor:caractere încheiate cu 0x00 (caracterul null): L i

m b a j

u l

C 0x00

• Cum se pot memora şirurile? ÎN TABELE DE CARACTERE. (vectori de tip char sau alte tipuri întregi) Exemplul 1: unsigned char c[15]=“Limbajul C”; /* aceasta este iniţializare*/ Spaţiu nefolosit L

i

m b

a

j

u

l

C 0x00

Început Exemplul 2: char d[]=“este”;/*Se rezervă exact cât trebuie (4+1 elemente)*/

Exemplul 3: unsigned char x[4]= “ABC”; este echivalent cu unsigned char x [4]={‘A’,’B’,’C’,0x00}; Exemple eronate a) char c[3]=“Limbajul C”; b) char c[14]; c=“Limbajul C”; /* Nu se pot face atribuiri*/

NU SE POATE FACE ATRIBUIRE LA MOMENTUL EXECUŢIEI (ATRIBUIRE DINAMICĂ) “Atribuirea” din ex. 3 este făcută la compilare (compilatorul are incluse reguli de atribuire; de fapt, o iniţializare)

NU EXISTĂ OPERAŢII CU ŞIRURI (NU EXISTĂ TIPUL SIR)

• CUM SE PRELUCREAZĂ ŞIRURILE ÎN C? Cu funcţii speciale: SE GĂSESC ÎN FIŞIERUL string.h ( #include<string.h> ) NUME PARAMETRI SEMNIFICAŢIE OBSERVAŢII ŞI EXEMPLE

strcpy

strcat

(destinaţie, sursă)

(sir1, sir2)

Copiere (rezultat şir)

Concatenare (rezultat şir)

Se poate folosi în locul atribuirii de la momentul execuţiei. EX: strcpy(a, “ok”) EX:strcat (“ok”,”.”)

NUME PARAMETRI SEMNIFICAŢIE OBSERVAŢII ŞI EXEMPLE strcmp

(sir1, sir2)

Comparare (rezultat întreg)

Se returnează: 1:sir1>sir2 0:sir1=sir2 -1:sir1<sir2 EX: If(strcmp(a,b)>0) /*a>b*/; else /*a
strlen

(sir)

Lungime şir (rezultat întreg)

Se returnează lungimea efectivă a şirului (până la terminatorul 0x00)

Există şi alte funcţii (inclusiv de I/E pentru şiruri)

Related Documents

Dat
October 2019 44
Thue Dat
November 2019 45
Bai 3. Trai Dat
June 2020 41
Nha Dat
June 2020 14
Analyza Dat
October 2019 21
Gestione Dat
May 2020 18

More Documents from ""