Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi....

28
PCLP2 - 1 Algoritmi. Limbajul C

Transcript of Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi....

Page 1: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 1

Algoritmi. Limbajul C

Page 2: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 2

Despre ce vom discuta astăzi

• Alte exemple de algoritmi

• Structura unui program în C

• Tipuri de date simple

– tipul întreg

– tipul real

– tipul caracter (şiruri de caractere)

• Constante şi variabile

• Funcţii de intrare/ieşire

– printf()

Page 3: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 3

Exemplu 1

Se ştie ce dată este astăzi (zi, lună, an). Să se determine ce

dată va fi mâine.

Se presupune că cele trei numere ce reprezintă ziua, luna şi

anul sunt introduse corect: ziua între 1 şi 31, în funcţie de

lună, luna între 1 şi 12, şi anul un număr pozitiv de maxim

4 cifre.

Page 4: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 4

Exemplu 1 (continuare)START

Citestezi, luna an

zi 28FA

zi = zi + 1

luna=1sau luna=3 sau luna=5 sau luna=7 sau luna =8

sau luna=10 sau luna=12

ultima = 31 FA

1

ultima = 30

FA

luna=4sau luna=6 sau

luna=9 sau luna=11

FA

ultima = 29

(an div 4 si an nediv 100)

sau an div 400

ultima = 28

2

Page 5: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 5

Exemplu 1 (continuare)

zi < ultimaFA

zi = zi + 1

Scrie zi, luna, an

STOP

FA

luna = 1

an = an +1

luna > 12

21

zi = 1

luna =luna +1

Page 6: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 6

Exemplu 2

Un tren de marfă este compus dintr-un număr cunoscut de

vagoane încărcate cu marfă. Ştiind masa fiecărui vagon, să

se determine masa totală a trenului. Ce se modifică în

algoritm dacă se doreşte a se aranja vagoanele astfel încât

masa acestora să descrească începand de la locomotivă.

Se presupune că toate valorile corespunzătoare numărului

de vagoane şi masei acestora sunt pozitive şi sunt introduse

corect.

Page 7: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 7

Structura unui program în C

• limbaj procedural

• o colecţie de funcţii

• fişierul -> extensia .c

// un comentariu generalSecţiunea preprocesor

#include <stdio.h> #define A 3

Secţiunea prototipurilor funcţiilor utilizatorvoid afisare(int *, int);

Secţiunea de declarare a const. şi var. globaleint x,y;.......

Secţiunea funcţiei principaleint main() /* exista in orice program in C */{ int a,b; //declararea const. si var. locale

b= a+3*x; //blocul de instructiuni........return 0;

}Secţiunea funcţiilor utilizator

void afisare(int *a, int n){ ........}

Page 8: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 8

Structura unui program în C (2)Exemplu:

// citirea si afisarea unui numar intreg#include <stdio.h> int citire_int(void);void afisare_int(int);

int main() { int n;

n = citire_int();afisare_int(n);return 0;

}

int citire_int(void){ int nr;

scanf(″%d″, &nr);return nr;

}

void afisare_int(int nr){ printf(″\nNumarul introdus este %3d\n″, nr);}

Page 9: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 9

Tipuri simple de date

• întreg

• real

• caracter (şiruri)

Page 10: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 10

Tipul întreg

• cuvinte cheie

• depăşiri - de ex. pt. int : 32*1000

100*1000

(100*1000)/5

Tipul de întreg Domeniul de valori Nr.octeţi

(pr. 16 biţi)

int

long

unsigned int

unsigned long

-215…215-1 (-32768 la 32767)

-231…231-1 (-2147483648 la 2147483647)

0…216-1 (0 la 65535)

0…232-1 (0 la 4294967295)

2

4

2

4

Page 11: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 11

Tipul real (1)

• format zecimal

(+ sau -)(întreg).(întreg)

de ex.: 3.14

-2.56

0.0

+1.414

-3.0

Page 12: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 12

Tipul real (2)

• format exponenţial(+ sau -)(valoare zecimală)e(exponent întreg)

de ex.:

1.32e3 = 1.32 * 103 = 1320.0

0.45e-6 = 0.45 * 10-6 = 0.00000045

-35.02e-4 = -35.02 * 10-4 = 0.003502

-1.333E7 = -1.333 * 107 = -13330000.0

Page 13: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 13

Tipul real (2)

Tipul de real Domeniul de valori

Octeţi

necesari

float

double

long double

3,4 * 10-38 … 3,4 * 1038 ( 7 zecimale prec.)

1,7 * 10-308 … 1,7 * 103o8 ( 9 zecimale prec.)

3,4 * 10-4932 … 1,1 * 104932 (17 zecimale prec.)

4

8

10

Page 14: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 14

Tipul caracter (1)

• caracter = toate caract. alfanumerice, semnele de punctuaţie,

tastele de control şi simboluri speciale

• ASCII – American Standard Code for Information Exchange

-de ex. : ′A′ = 65, ′#′ = 35, ′z′ = 122

Tipul caracter Domeniul de valori

Octeţi

necesari

char

unsigned char

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

0 … 28 -1 (0..255)

1

1

Page 15: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 15

Tipul caracter (2)

• caractere :

– caractere negrafice - [0,31] si 127 pt. DEL

– caractere grafice [33,126]

• toascii(′A′) – returnează codul ASCII al caracterului

• operaţii permise:

- comparare ′A′ < ′Z′

- op. aritmetice ′A′+1 => ′B′

Page 16: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 16

Tipul caracter (3)

Şiruri de caractere

• tratate în mod special• ex.: adresa, numele, prenumele,

denumirea disciplinei

′V′ ′I′ ′S′ ′U ′A′ ′L′ ′ ′ ′C′ ′+′ ′+′ ′\0′

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]

Page 17: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 17

Constante şi variabile (1)

• constantă

– are valoare fixă

– NU este stocată în memorie

• variabilă

– are valori diferite la momente diferite

– are un nume simbolic

– este stocată în memorie

Page 18: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 18

Constante şi variabile (2)1. Constanta

– se declară cât mai globală

const <tip_de _data> <identificator> = <valoare constanta>;

ex.: const int A=7; const float rata = 0.02

– identificator• orice lungime (primele 32 de caractere)• începe cu o literă sau ‘_’• nu conţine spaţii sau semne de punctuaţie• case sensitive (Visual ≠VISUAL)

1.1. Constante întregi– zecimale: 100, 15, -23– octale: 010 – încep cu 0– hexazecimale: 0xAB, 0X10

Page 19: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 19

Constante şi variabile (3)1.2. Constante reale

– ex.: 100.5, 10., 12.4E-2, 19.723e-7, 1927.0

1.3. Constante caracter

– excepţii: ' \\ ' , ' \″ ', ' \' '

– caractere negrafice: '\ddd′, unde ddd este simbolul în

octal '\42'= '\″ '

1.4. Constante şir de caracter

– ″Visual C++″, ″Mediul \″Visual C++\″ ″

– ex. : const char Nume[]= ″Popescu″

Page 20: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 20

Constante şi variabile (4)2. Variabila

– se declară cât mai locală

<tip_de _data> <identificator> = <valoare_de_initializare>;

<tip_de _data> <identificator>[, <identificator>];

ex.: int A=7;

float rata = 0.02;

float Tensiune, Rezistenta, Curent=15.45;

char zileleSaptamanii[9];

char zileleSaptamanii[]= ″miercuri″;

Page 21: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 21

Funcţia de ieşire printf() (1)

• definită în stdio.h

• returnează nr. de caractere afişate sau -1 la eroare

• prototipul:

int printf(const char *format [,arg1, arg2, …]);

unde:

- format - şir de caractere (caractere, specificatori

de format şi caractere speciale)

- arg1, arg2,…- sunt var. sau expresii

- nr. arg. = nr. specificatorilor de format

Page 22: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 22

Funcţia de ieşire printf() (2)

Specificator de format:

%[-mmm.nnn]cc

unde: - ‘-’ – aliniere la stânga- mmm - nr. de câmpuri

- începe cu 0 dacă spaţiilelibere se compl. cu 0

- nnn – precizia de scriere- cc – specificator de conversie

Caractere speciale:\n -> Enter

\t -> Tab

Specificator de con. Tipul datei citite

c char

s şir de caractere

d int (zecimal)

o int (octal)

x, X int (hexazecimal)

ld, lo, lx, lX long

u unsigned

lu unsigned long

f float (f. zecimal)

e, E float (f.exponenţial)

g, G float (spaţiul min.)

lf, le, lE, lg, lG double

Lf, Le, LE, Lg, LG long double

Page 23: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 23

Funcţia de ieşire printf() (3)

Exemplul 1. Să se afişeze pe monitor textul: Limbajul C.

#include <stdio.h>

void main(){ printf(″Limbajul C″);}

-----------------------------------------------------

#include <stdio.h>

int main(){ printf(″Limbajul C″);

return 0;}

Page 24: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 24

Funcţia de ieşire printf() (4)

Exemplul 2. Să se afişeze pe monitor valoarea uneivariabile întregi şi a uneia reale, pe linii diferite.

#include <stdio.h>

int main(){ int a=14;

float b=3.7634;printf(″a=%d\n″,a);printf(″b=%f\n″,b);return 0;

}

#include <stdio.h>

int main(){ int a=14;

float b=3.7634;printf(″a=%d\nb=%f\n ″,a,b);return 0;

}

a=14

b=3.763400

Page 25: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 25

Funcţia de ieşire printf() (5)• Alte exemple de utilizare:

char sir[]= abc;printf(*%10s*\n, sir); => * abc*

char sir[]= abc;printf(*%-10s*\n, sir); => *abc *

char sir[]= limbajul C++ ;printf(*%15.10s*\n, sir); => * limbajul C*

char car= 'A';printf(*%-4c*\n, car); => *A *

Page 26: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 26

Funcţia de ieşire printf() (6)• Alte exemple de utilizare:

int nr= 123;printf(*%05d*\n, nr); => *00123*

int nr= 123;printf(*%-5d*\n, nr); => *123 *

int nr= 12732;printf(*%3d*\n, nr); => *12732*

int nr= 123;printf(*%5o*\n, nr); => * 173*

Page 27: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 27

Funcţia de ieşire printf() (7)• Alte exemple de utilizare:

float nr= 3.14159265;printf(*%5f*\n, nr); => *3.141593*

float nr= 3.14159265;printf (*%7.2f*\n, nr); => * 3.14*

float nr= 3.14159265;printf (*%7.0f*\n, nr); => * 3*

float nr= 3.14159265;printf(*%e*\n, nr); => *3.141593e+000*

Page 28: Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi. Limbajul C. PCLP2 - 2 Despre ce vom discuta astazi • Alte exemple de algoritmi • Structura

PCLP2 - 28

Funcţia de ieşire printf() (8)• Alte exemple de utilizare:

float nr= 123.672;printf(*%7f*\n, nr); => *123.672000*

float nr= 123.672;printf(*%10.1f*\n, nr); => * 123.7*

float nr= 123.672;printf(*%e*\n, nr); => *1.236720e+002*

float nr= 123.672;printf(*%10.2e*\n, nr); => * 1.24e+002*