Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi....
Transcript of Algoritmi. Limbajul C - users.utcluj.rousers.utcluj.ro/~simona/pclp/pclp2.pdf · Algoritmi....
PCLP2 - 1
Algoritmi. Limbajul C
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()
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.
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
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
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.
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){ ........}
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);}
PCLP2 - 9
Tipuri simple de date
• întreg
• real
• caracter (şiruri)
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
PCLP2 - 11
Tipul real (1)
• format zecimal
(+ sau -)(întreg).(întreg)
de ex.: 3.14
-2.56
0.0
+1.414
-3.0
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
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
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
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′
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]
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
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
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″
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″;
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
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
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;}
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
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 *
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*
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*
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*