Sunteți pe pagina 1din 69

Algoritmi i programare

2011 2012
Cristian Gau
Mdlina Rschip
www.inoiasi.ro!"ap
Algoritmi i programare 2
#rgani$are
% &ector dr. Cristian Gau
e'mail( cgatu)ino.uaic.ro
ca*inet( C212 +corp C, parter-. tel( 02/2'201012
url( www.inoiasi.ro!"cgatu
consultaii( 3ineri, 10(00'12(00
% Asist. dr. Mdlina Rschip

e'mail( mionita)ino.uaic.ro

ca*inet( C112 . tel( 02/2'202124

url( www.ino.uaic.ro!"mionita

consultaii( luni, 10(00'12(00


Algoritmi i programare /
5agina cursului
www.ino.uaic.ro!"ap
Algoritmi i programare 1
#*iecti3e
% Algoritmi
6nsuirea unei g7ndiri algoritmice
de$3oltarea a*ilitilor de proiectare de soluii
algoritmice
6nsuirea tehnicilor de utili$are a principalelor
structuri de date
e3aluarea timpului de e8ecuie 6n ca$ul cel mai
nea3ora*il
% 5rogramare
iniiere 6n utili$area unui lim*a9 de programare
implementarea principalelor structuri de date
6nsuirea tehnicilor de *a$ 6n proiectarea
programelor
Algoritmi i programare 0
Coninutul disciplinei
% Algoritmi
lim*a9 algoritmic, ta*louri, structuri statice,
structuri 6nlnuite
liste liniare
ar*ori *inari, heap'uri, union'ind
grauri +ca structuri de date-
sortare, cutare
paradigme
% 5rogramare
pre$entarea graduat a lim*a9ului C +:;#
;tandard- cu accent pe implementarea
structurilor de date i a soluiilor pre$entate 6n
partea de algoritmic
Algoritmi i programare 2
<3aluare
% condiii(
acti3itatea la la*orator +A&-
testele scrise +=;-
% criterii de promo3are(
numr de teme de la*orator( 0
A& >? 2, =; >? 1
% orme(
A&
% iecare tem de la*orator 3a i punctat +note 1'10-
% 6ntre*ri, participare la discuii, soluii originale +*onus@-
=;(
% 2 teste scrise +spt. A, 12-, iecare test conin7nd A 6ntre*ri de tip
gril i o pro*lem
Algoritmi i programare B
<3aluare
% normele <C=; +<uropean Credit =ranser ;Cstem-
% 5uncta9 Dinal +5D- ? 00E A& F00E =;
% Gota inal(
H? 1 dac sunt 6ndeplinite condiiile i GI sunt
6ndeplinite criteriile de promo3are,
? 10 dac 5D este 6n primii 0E din cei promo3ai +A-
? 4 urmtorii 10E din cei promo3ai +J-
? A urmtorii 20E din cei promo3ai +C-
? B urmtorii /0E din cei promo3ai +K-
? 2 urmtorii 20E din cei promo3ai +<-
? 0 ultimii 10E din cei promo3ai
Algoritmi i programare A
Ji*liograie
D. Lucanu, M. Craus( 5roiectarea algoritmilor,
5olirom, 200A.
T.H. Cormen, C.E. Leiserson, R.L. Rivest(
:ntroducere in algoritmi, &i*ris Agora, 2000.
L. Livovschi, H. Georgescu( ;inte$a si anali$a
algoritmilor, <d. ;tiintiica si enciclopedica, 14A2.
H. Schildt( C Manual complet, =eora, 144A.
B.W. ernighan, D.M. Ritchie( =he C 5rogramming
&anguage, 2
nd
edition, 5rentice Lall, 14AA
!. elle", #. $ohl( A *ooM on C( 5rogramming in C,
1
th
edition, Addison NesleC, 144A
Algoritmi i programare 4
Curs 1
% lim*a9 algoritmic
% modelarea memoriei
% tipuri de date elementare
+cu pre$entarea elementelor de
lim*a9 C corespun$toare-
Algoritmi i programare 10
Algoritmi, lim*a9 algoritmic
% 5ro*lem, ;oluie
% Algoritm( o sec3en init de pai aran9at 6ntr'o
ordine logic speciic, cu proprietatea c, atunci
c7nd este e8ecutat, produce o soluie pentru o
pro*lem dat.
% <8emplu( reeta culinar
% Algoritm calculator +Ocomputer algorithmP- ? un
algoritm pentru care sec3ena de pai este
e8ecutat de un calculator
% &im*a9 Algoritmic ? un lim*a9 olosit pentru
descrierea algoritmilor
% <timologie( Muhammad i*n Musa al%h&ari'mi
Algoritmi i programare 12
Algoritmi ' proprieti
% intrare +input- $ero sau mai multe entiti de
date urni$ate din e8terior
% ieire +output- algoritmul produce inormaie
% terminare pentru orice intrare, algoritmul
e8ecut un numr init de pai
% corectitudine algoritmul se termin i produce
ieirea corect pentru orice intrare. ;punem c
algoritmul re'olv( pro*lema dat.
Algoritmi i programare 1/
5rimul program C
void main(){}
You dont have to know every detail of C++ to write
good programs. (B. Stroustrup
Algoritmi i programare 11
5rimul program C
/*
* first program in C
*/
#include <stdio.h>
int main(void)
{
printf(Salut!\n)
printf(!rimul pro"ram #!)
return ($)
}
Algoritmi i programare 10
5rimul program C
/*
* first program in C
*/
#include <stdio.h>
int main(void)
{
printf(Salut!\n)
printf(!rimul pro"ram #!)
return ($)
}
Algoritmi i programare 12
5rimul program C
#I=5I=(
Salut!
!rimul pro"ram #!!ress an% &e% to continue
Algoritmi i programare 1B
Caracterele lim*a9ului C
Litere(
' ( # ) * + , -
a . c d * / % 0
Ci)re(
$ 1 2 3 4 5 6 7 8 9
!lte caractere(
: ; < = > ( ) { } ? @ < > A !
# B C D EF G \ . H I J
Caractere s*a+iu( *lanM, newline, ta*, etc.
Algoritmi i programare 1A
Cu3intele cheie +re$er3ate-
auto .rea& case char
const continue default do
dou.le else enum
e/tern
float for "oto if
inline int lon"
re"ister
restrict return short si"ned
si0eof static struct sKitch
t%pedef union unsi"ned void
volatile Khile
Algoritmi i programare 14
&im*a9 algoritmic
% modelarea memoriei
% tipuri de date elementare
% instruciuni
% tipuri de date structurate de ni3el 9os
% calcul
% timp de e8ecuie
Algoritmi i programare 20
Qaria*il
% Gume
% Adres
% Atri*ute +tip de date asociat 3alorilor
memorate-
% :nstan a 3aria*ilei
/
adr
int
Algoritmi i programare 21
% ;tructur liniar de celule
Qaria*ile
5ointeri
Memoria
/
adr
int
<p
int
p
int<
adr
adr
Algoritmi i programare 22
=ip de date
% Komeniul tipului +colecia de o*iecte-
% #peraiile tipului
% Categorii de tipuri de date(
=ipuri de date elementare
=ipuri de date structurate de ni3el 9os
% #peraiile la ni3el de component
=ipuri de date de ni3el 6nalt
% #peraiile implementate de algoritmi utili$ator
Algoritmi i programare 2/
=ip de date
% # 3aloare memorat sau returnat de o uncie este
determinat de tipul e8presiei utili$ate pentru a o
accesa +un identiicator cel mai simplu e8emplu
de e8presie are tipul speciicat 6n declaraia sa-
% =ipuri
obiect( descriu 3alori
funcie( descriu uncii
incomplete( descriu o*iecte dar pentru determinarea
dimensiunii lor mai tre*uiesc inormaii
Algoritmi i programare 21
=ipuri standard
% =ipul char
% =ipurile standard 6ntregi(
0 tipuri 6ntregi cu semn( signed char, short int,
int, long int i long long int.
0 tipuri 6ntregi r semn( desemnate de cu37ntul
unsigned +tipuri ce ocup aceeai cantitate de
memorie-
% =ipuri reale lotante(
)loat, dou,le i long dou,le.
Algoritmi i programare 20
<chi3alene
si"ned short int short
unsi"ned short int unsi"ned short
si"ned int int
unsi"ned int unsi"ned
si"ned lon" int lon"
unsi"ned lon" int unsi"ned lon"
Algoritmi i programare 22
Keclaraii
% Dorma unei declaraii(
tip variabila-
tip var1, var2, , varn;
tip variabila = expresie_constanta;
% Variabile globale( declararea lor se ace 6n aara
oricrei uncii.
% Variabile locale( declararea se ace 6n corpul unciei.
char c
si"ned char sc
char c
si"ned char sc
int i
int suma > $
lon" L
int i
int suma > $
lon" L
float /1H /2H /3
float pi > 3.14
dou.le %
float /1H /2H /3
float pi > 3.14
dou.le %
Algoritmi i programare 2B
=ipul 6ntreg
% int
si'eo).int/ 0 1 sau 2 octei
% short int sau short
si'eo).short/01, R'/2B2A, S, /2B2BT
% long int sau long
si'eo).long/02
R'2 11B 1A/ 21A, S, 2 11B 1A/ 21BT
% signed int, signed short int, signed long
int
Algoritmi i programare 2A
Untregi r semn
% unsigned int
% unsigned short int
R0, S, 200/0T
% unsigned long int
% Gu e8ist o3erlow +depire- calculul se
eectuea$ modulo 2
n
, unde n este numrul
de *ii
Algoritmi i programare 24
Untregi Ooarte scuriP( char
% =ipul char este o su*mulime a tipului int
% char repre$int, 6n uncie de main,
domeniul de 3alori(
R'12A, S, 12BT sau R0, S, 200T
% unsigned char R0, S, 200T
% signed char R'12A, S, 12BT
% si'eo).char/ 0 3
Algoritmi i programare /0
Constante 6ntregi 6n 4limits.h5
1 2
15

INT_MAX
INT_MIN
LONG_MAX
LONG_MIN
Atenie la reprezentarea circular!
INT_MAX + 1 == INT_MIN
INT_MIN 1 == INT_MAX
LONG_MAX + 1 == LONG_MIN
LONG_MIN 1 == LONG_MAX
16 ii !" ii
1 2
31

15
2
31
2
1 2
31

1 2
63

31
2
63
2
Algoritmi i programare /1
Constante 6ntregi
% #ctale( au prei8ul 0 +$ero-
0/2 ? 22 0BB ? 2/
% Le8a$ecimale( au prei8ul 08 sau 0V
08/2 ? 00 08/D ? 2/
% Untregi OlongP( au sui8ul l sau &
211B1A/21B& 08a4Dl ? 11404
% Untregi OunsignedP au sui8ul u sau I
/10u 08u ? 200/0
% Caractere 6ntre apostro( WAX, WFX, WnX
% Caractere 6n $ecimal( 20, 12
% Caractere 6n octal( XY101X, WY02X
% Caractere 6n he8a$ecimal( WY811X, WY82AX
% Gotaii pentru caractere speciale( WYnX, WYtX, WYrX, WYYX, WYaX,WYXX,
WY0X, WYPX
Algoritmi i programare /2
Citiri, airi
citirea unui int
a#i$area unui int
citirea unui char
a#i$area unui char
printf(aI )
scanf(BdH Ca)
printf(aI )
scanf(BdH Ca)
int a > 1$
printf(a > BdH a)
int a > 1$
printf(a > BdH a)
printf(aI )
scanf(BcH Ca)
printf(aI )
scanf(BcH Ca)
char a > AaM
printf(a > BcH a)
char a > AaM
printf(a > BcH a)
Algoritmi i programare //
Constante ' e8emplu
=< N/emple de constante caracter <=
#include <stdio.h>
int main(){
char aH .H cH d
a > O'O . > 65 c > O\1$1O d > O\/41O
printf(PBc Bc Bc Bc\nPH aH .H cH d)
printf(PBc Bd Bo B/\nPH aH aH aH a)
return $
}
=< N/emple de constante caracter <=
#include <stdio.h>
int main(){
char aH .H cH d
a > O'O . > 65 c > O\1$1O d > O\/41O
printf(PBc Bc Bc Bc\nPH aH .H cH d)
printf(PBc Bd Bo B/\nPH aH aH aH a)
return $
}
' ' ' '
' 65 1$1 41
Algoritmi i programare /1
Codurile A;C::
#include <stdio.h>
int main (void){
short c
for(c > $ c <> 127 c::){
printf(Pcod 'S#QQI BdPHc)
printf(P caracterI Bc\nPHc)
}
return $
}
=< for(c>AaM c<>A0M c::) <=
#include <stdio.h>
int main (void){
short c
for(c > $ c <> 127 c::){
printf(Pcod 'S#QQI BdPHc)
printf(P caracterI Bc\nPHc)
}
return $
}
=< for(c>AaM c<>A0M c::) <=
Algoritmi i programare /0
Macrourile getchar+- i putchar+-
% ;unt deinite 6n 4stdio.h5
% Citire caracter de la tastatur
% ;criere caracter pe ecran
#include <stdio.h>
int main (void){
char c
Khile ((c>"etchar()) !> NRS)
{putchar(c) putchar(c)}
return $
}
#include <stdio.h>
int main (void){
char c
Khile ((c>"etchar()) !> NRS)
{putchar(c) putchar(c)}
return $
}
Sirul de intrareI 123456a.cd
va produce sirulI 112233445566aa..ccdd
Algoritmi i programare /2
#peraii. Duncii 6n *i*lioteci
% #peraii pentru tipurile 6ntregi(
: ; < = B >> !> < <> >
>> :: ;;
% Duncii(
cele de la tipul lotant
cele din *i*lioteca 4ct"*e.h56 tolo&er,
tou**er, isal*ha, isalnum, iscntrl, isdigit,
is7digit, islo&er, isu**er, isgra*h, is*rint,
is*unct, iss*ace
Algoritmi i programare /B
#peratorii FF i ''
% ;e aplic doar unei e8presii ce desemnea$
un o*iect din memorie +&'3alue-(
::5 ;;(&:1) ::i:: nu au sens
N/presie ::i i:: ;;i i;;
Taloare i:1 i i;1 i
i dupU evaluare i:1 i:1 i;1 i;1
Algoritmi i programare /A
<8emplu FF +tem-
#include <stdio.h>
int< f(int< a){
int . > 2
(<a) :> .
return a
}
int main (void){
int a > 5
(<f(Ca))::
printf(PBd \nPH a)
return $
}
#include <stdio.h>
int< f(int< a){
int . > 2
(<a) :> .
return a
}
int main (void){
int a > 5
(<f(Ca))::
printf(PBd \nPH a)
return $
}
Algoritmi i programare /4
=ipul lotant +real-
% )loat
Gumere reale 6n simpl preci$ie
si'eo).)loat/ ? 1

2 cire semniicati3e
% dou,le
Gumere reale 6n du*l preci$ie
si'eo).dou,le/ ? A

10 cire semniicati3e
38 37
10 ) ( abs 10

f
308 307
10 ) ( abs 10

f
Algoritmi i programare 10
=ipul lotant +real-
% long dou,le
Gumere reale 6n Oe8traP du*l preci$ie
si'eo).long dou,le/ ? 12

1A cire semniicati3e
% &imitele se gsesc 6n 4)loat.h5
% #peraii( : ; < = >> !> < <> > >>
4932 4931
10 ) ( abs 10

f
Algoritmi i programare 11
Constante reale
% Constantele reale sunt implicit dou,le
120.1/0 1.12<2 12/<'2 .10eF2 1/. .02
% 5entru a i )loat tre*uie sa ai* sui8ul sau D
.02 2/e1 10.01<'1D
% 5entru long dou,le tre*uie sa ai* sui8ul l sau &
12/.102eBA&
Algoritmi i programare 12
Citire, aiare
citirea unui float
a#i$area unui float
citirea unui double
a#i$area unui double
printf(/I )
scanf(BfH C/)
printf(/I )
scanf(BfH C/)
float pi > 3.14
printf(pi > BfH pi)
float pi > 3.14
printf(pi > BfH pi)
printf(/I )
scanf(BlfH C/)
printf(/I )
scanf(BlfH C/)
dou.le pi > 3.14V
printf(pi > BlfH pi)
dou.le pi > 3.14V
printf(pi > BlfH pi)
Algoritmi i programare 1/
Duncii
+6n *i*lioteca 4math.h5-
sin cos tan asin
acos atan sinh cosh
tanh e/p lo" lo"1$
poK sWrt ceil floor
fa.s lde/p fre/p modf
fmod
Algoritmi i programare 11
Itili$are t%pedef
Mecani%& prin care %e a%'ciaz un tip unui
i(enti#icat'r)
t%pedef char literaDmare
t%pedef short varsta
t%pedef unsi"ned lon" si0eDt
t%pedef char literaDmare
t%pedef short varsta
t%pedef unsi"ned lon" si0eDt
I(enti#icat'rul re%pecti* %e p'ate utiliza pentru
a (eclara *ariaile %au #uncii)
literaDmare uH v>AaM
varsta v1H v2
si0eDt dim
literaDmare uH v>AaM
varsta v1H v2
si0eDt dim
Algoritmi i programare 10
Kate *ooleene +logice-
% Gu e8ist un tip special pentru date logice
% Komeniul de 3alori( R)alse, trueT
% )alse ? 0
% true ? 1 dar i orice 6ntreg nenul
% #peraii( 8 CC 99 00 80
% Keclaraii posi*ile(
t%pedef enum {false > $H true > 1} .ool
.ool /H %
t%pedef enum {false > $H true > 1} .ool
.ool /H %
Algoritmi i programare 12
<8presii logice
expresie_relationala ((?
expr H expr | expr > expr
| expr H? expr | expr >? expr
| expr ?? expr | expr @? expr
expresie_logica ::=
@ expr
| expr ZZ expr
| expr CC expr
Algoritmi i programare 1B
Qaloarea e8presiilor relaionale
a;. a<. a>. a<>. a>>. a>>. a!>.
positiv $ 1 $ 1 $ 1
0ero $ $ 1 1 1 $
ne"ativ 1 $ 1 $ $ 1
Algoritmi i programare 1A
Qaloarea e8presiilor logice ZZ
e/p1 e/p2 e/p1 EE e/p2
<> $
nu se
evaluea0U
1
> $ se evaluea0U
1 dacU e/p2 <> $
$ dacU e/p2 > $
Algoritmi i programare 14
Qaloarea e8presiilor logice CC
e/p1 e/p2 e/p1 CC e/p2
> $
nu se
evaluea0U
$
<> $ se evaluea0U
1 dacU e/p2 <> $
$ dacU e/p2 > $
Algoritmi i programare 00
<8emple
% # condiie de orma a [ 8 [ * se scrie 6n
lim*a9ul C(
(/ >> a) CC (/ <> .) (/ >> a) CC (/ <> .) (a <> /) CC (/ <> .) (a <> /) CC (/ <> .)
% # condiie de orma a > 8 sau 8 > * se
scrie 6n lim*a9ul C(
(/ < a) EE (/ > .) (/ < a) EE (/ > .) !(/ >> a CC / <> .) !(/ >> a CC / <> .)
Algoritmi i programare 01
#peratorul condiional \(
exp1 : exp2 6 exp3
% ;e e3aluea$ exp1
% Kac exp1 are 3aloare true +nenul- atunci
3aloarea e8presiei este 3aloarea lui exp2. exp3 nu
se e3aluea$
% Kac exp1 are 3aloare alse +nul- atunci 3aloarea
e8presiei este 3aloarea lui exp3. exp2 nu se
e3aluea$
% #peratorul :6 este drept asociati3
Algoritmi i programare 02
#peratorul condiional \(
<8emple
/ >> $ J / I %
/ > % J / I %
/ > % J / > 0 J / I 0 I % > 0 J % I 0
/ >> $ J / I %
/ > % J / I %
/ > % J / > 0 J / I 0 I % > 0 J % I 0
#include <stdio.h>
int main(void){
int a>1H .>2H c>3
int /H %H 0
/ > aJ.IcJaI.
% > (aJ.Ic)JaI. =< asociere stan"a <=
0 > aJ.I(cJaI.) =< asociere dreapta <=
printf(P/ > BdH % > BdH 0 > Bd\nPH /H %H 0)
}
=< / > 2H % > 1H 0 > 2 <=
#include <stdio.h>
int main(void){
int a>1H .>2H c>3
int /H %H 0
/ > aJ.IcJaI.
% > (aJ.Ic)JaI. =< asociere stan"a <=
0 > aJ.I(cJaI.) =< asociere dreapta <=
printf(P/ > BdH % > BdH 0 > Bd\nPH /H %H 0)
}
=< / > 2H % > 1H 0 > 2 <=
Algoritmi i programare 0/
#peratorul ? +<8presia de atri*uire-
exp1 0 exp2
% exp1 este o O&'3alueP +o*iect din memorie( 3aria*il,
3aria*il ta*lou cu indici, etc.-
% =ipul e8presiei este tipul lui exp1
% ;e e3aluea$ exp2, apoi exp1 capat 3aloarea lui exp2,
e3entual con3ertit
% Aadar, operatorul ? modiic 3aloarea operandului stang
% Qaloarea e8presiei este 3aloarea lui exp1 dup e3aluare
% #peratorul ? este drept asociati3
Algoritmi i programare 01
#peratorul ? +<8emple-
/ > sWrt(9)
a > ( . > 2 ) : ( c > 3 )
a > . > c > $ =< echivalenta cu <=
a > (. > (c > $))
Khile((c > "etchar()) !> NRS) putchar(c)
/ > sWrt(9)
a > ( . > 2 ) : ( c > 3 )
a > . > c > $ =< echivalenta cu <=
a > (. > (c > $))
Khile((c > "etchar()) !> NRS) putchar(c)
Nu c'n#un(ai e1 = e2 cu e1 == e2 !
a > $
if ( a >> $ ) printf(nul)
else printf(nenul) =< nul <=
if ( a > $) printf(nul)
else printf(nenul) =< nenul <=
a > $
if ( a >> $ ) printf(nul)
else printf(nenul) =< nul <=
if ( a > $) printf(nul)
else printf(nenul) =< nenul <=
Algoritmi i programare 00
#peratori de atri*uire compus
# e8presie de atri*uire compus are orma(
exp1 op0 exp2
unde op? este unul din(
:> ;> <> => B> C> E> F> >>> <<>
<8presia este echi3alent cu
exp1 0 exp1 op .exp2/
cu preci$area c exp1 se e3aluea$ o singur dat.
L <> & : 3 =< echivalentU cuI <=
L > L < (& : 3)
L <> & > m : 5 =< echivalentU cuI <=
L > (L < (& > (m : 5)))
L <> & : 3 =< echivalentU cuI <=
L > L < (& : 3)
L <> & > m : 5 =< echivalentU cuI <=
L > (L < (& > (m : 5)))
Algoritmi i programare 02
#peratorul 3irgul ,
expresia_irgula ((? expresie, expresie
% ;e e3aluea$ prima e8presie apoi cea de'a doua.
% Qaloarea i tipul 6ntregii e8presii este 3aloarea i tipul
operandului drept.
% #peratorul 3irgul are cea mai mic preceden.
a > 1H . > 2
i > 1H L > 2H ::& : 1
& !> 1H ::/ < 2.$ : 1
for(suma > $H i > 1 i <> n suma :> iH ::i)
a > 1H . > 2
i > 1H L > 2H ::& : 1
& !> 1H ::/ < 2.$ : 1
for(suma > $H i > 1 i <> n suma :> iH ::i)
Algoritmi i programare 0B
=ipul 3oid
% Con3ersia 6n tip void a unei e8presii semniic
aptul c 3aloarea sa este ignorat
% Itili$at pentru tipul pointer. nu se ace controlul
tipului la un pointer de tip void
% Itili$at pentru uncii r 3aloare returnat sau
pentru uncii r parametri
% <ste un tip incomplet ce nu poate i completat
Algoritmi i programare 0A
#peratorul si0eof()
% #perator unar ce permite gsirea numrului
de octei pe care se repre$int un o*iect
+tip,e8presie-
si0eof(int)H si0eof(dou.le)
si0eof(.<.;4<a<c)H si0eof(i)
si0eof(int)H si0eof(dou.le)
si0eof(.<.;4<a<c)H si0eof(i)
si0eof(char)<>si0eof(short)<>si0eof(int)<>si0eof(lon")
si0eof(si"ned) > si0eof(unsi"ned) > si0eof(int)
si0eof(float)<>si0eof(dou.le)<>si0eof(lon" dou.le)
Algoritmi i programare 04
#peratorul si0eof()
#include <stdio.h>
int main(void){
int / > 1 dou.le % > 9 lon" 0 > $
printf(PRperatorul si0eof()\n\n\nP)
printf(Psi0eof(char) > B2u\nPHsi0eof(char))
printf(Psi0eof(int) > B2u\nPHsi0eof(int))
printf(Psi0eof(short) > B2u\nPHsi0eof(short))
printf(Psi0eof(lon") > B2u\nPHsi0eof(lon"))
printf(Psi0eof(float) > B2u\nPHsi0eof(float))
printf(Psi0eof(dou.le) > B2u\nPHsi0eof(dou.le))
printf(Psi0eof(lon" dou.le) > B2u\nPHsi0eof(lon" dou.le))
printf(Psi0eof(/ :% : 0) > B2u\nPHsi0eof(/:%:0))
return $
}
#include <stdio.h>
int main(void){
int / > 1 dou.le % > 9 lon" 0 > $
printf(PRperatorul si0eof()\n\n\nP)
printf(Psi0eof(char) > B2u\nPHsi0eof(char))
printf(Psi0eof(int) > B2u\nPHsi0eof(int))
printf(Psi0eof(short) > B2u\nPHsi0eof(short))
printf(Psi0eof(lon") > B2u\nPHsi0eof(lon"))
printf(Psi0eof(float) > B2u\nPHsi0eof(float))
printf(Psi0eof(dou.le) > B2u\nPHsi0eof(dou.le))
printf(Psi0eof(lon" dou.le) > B2u\nPHsi0eof(lon" dou.le))
printf(Psi0eof(/ :% : 0) > B2u\nPHsi0eof(/:%:0))
return $
}
Algoritmi i programare 20
#peratorul si0eof()
Re$ultatul e8ecutiei Qisual CFF(
si0eof(char) > 1
si0eof(int) > 4
si0eof(short) > 2
si0eof(lon") > 4
si0eof(float) > 4
si0eof(dou.le) > 8
si0eof(lon" dou.le) > 8
si0eof(/ : % : 0) > 8
Algoritmi i programare 21
5recedena operatorilor
;*eratori !sociere
() :: ;; (postfix) stXn"a
:: ;; (prefix) ! C (adresa)
< (deref) : ; (unari) si0eof()
dreapta
< = B stXn"a
: ; stXn"a
< <> > >> stXn"a
>> !> stXn"a
CC stXn"a
EE
stXn"a
JI dreapta
> :> ;> <> => B> dreapta
H (operatorul vir"ula)
stXn"a
Algoritmi i programare 22
Compati*ilitatea tipurilor predeinite
% =oate tipurile aritmetice +caractere, 6ntregi,
reale- sunt compati*ile 6ntre ele.
compilatorul admite orice com*inaie de
o*iecte de di3erse tipuri 6ntr'o e8presie
% &a e3aluarea unei e8presii 6n care apar tipuri
dierite compilatorul ace con3ersii implicite
Algoritmi i programare 2/
Reguli pentru con3ersia implicit
% Un a*sena unui unsi"ned o*iectele se con3ertesc
la tipul cel mai O6naltP 6n ordinea +descrescatoare-(
lon" dou.leH dou.leH floatH lon" intH int
% Regulile pentru operan$ii unsi"ned depind de
implementare.
% Con3ersia la unsi"ned se ace doar 6n ca$ de
necesitate +de e8. 3aloarea din unsi"ned nu
O6ncapeP 6n cellat operand-.
Algoritmi i programare 21
Reguli pentru con3ersia implicit
% Regula Ointeger promotionP ( operaiile se ac cel
puin 6n int, deci char i short sunt Opromo3aiP la
int.
% &a o asignare +3 ? e8p- tipul mem*rului drept se
con3ertete la tipul mem*rului st7ng +care este i
tipul re$ultatului-.
A=<G]:<( se pot produce
% 5ierderea preci$iei +dou.le float lon" int-
% 5ierderea unor *ii semniicati3i +lon" int-
% Gedeterminri
Algoritmi i programare 20
<8emplu
#include <stdio.h>
int main(void){
char c1 > ;126H c2 =< c1 > 1$$$$$1$ <=
unsi"ned char c3H c4 > 255 =< c4 > 111111111 <=
short s1H s2 > ;32767 =< s2>1$$$$$$$ $$$$$$$1 <=
short s3 > ;1H s4 =< s3 > 11111111 11111111 <=
s1 > c1
printf(Pc1 > BdH s1 > Bd\nPH c1H s1)
c2 > s2
printf(Pc2 > BdH s2 > Bd\nPH c2H s2)
c3 > s3
printf(Pc3 > BdH s3 > Bd\nPH c3H s3)
s4 > c4
printf(Pc4 > BdH s4 > Bd\nPH c4H s4)
return $
}
#include <stdio.h>
int main(void){
char c1 > ;126H c2 =< c1 > 1$$$$$1$ <=
unsi"ned char c3H c4 > 255 =< c4 > 111111111 <=
short s1H s2 > ;32767 =< s2>1$$$$$$$ $$$$$$$1 <=
short s3 > ;1H s4 =< s3 > 11111111 11111111 <=
s1 > c1
printf(Pc1 > BdH s1 > Bd\nPH c1H s1)
c2 > s2
printf(Pc2 > BdH s2 > Bd\nPH c2H s2)
c3 > s3
printf(Pc3 > BdH s3 > Bd\nPH c3H s3)
s4 > c4
printf(Pc4 > BdH s4 > Bd\nPH c4H s4)
return $
}
Algoritmi i programare 22
<8emplu +re$ultatul e8ecuiei-
c1 > 1$$$$$1$ s1 > c1
c1 > ;126H s1 > ;126
s2>1$$$$$$$ $$$$$$$1 c2 > s2
c2 > 1H s2 > ;32767
s3 > 11111111 11111111 c3 > s3
c3 > 255H s3 > ;1
c4 > 111111111 s4 > c4
c4 > 255H s4 > 255
Algoritmi i programare 2B
Dorarea tipului ' cast
% Con3ersia e8plicit la tipul numetip(
.numetip/ expresie
% <8emple(
(lon")(A'M : 1.$)
(int)(.<.;4<a<c)
(dou.le)(/:%)=0
(float)/<%=0
/ = (float)2
(lon")(A'M : 1.$)
(int)(.<.;4<a<c)
(dou.le)(/:%)=0
(float)/<%=0
/ = (float)2
Algoritmi i programare 2A
<8emplu cast
#include <stdio.h>
int main(void){
int iH L dou.le /H %H 0H t
i > 5=2 / > 5=2 % > (dou.le)(5=2)
L > (dou.le)5=2 0 > (dou.le)5=2
t > 5.=2
printf(BdH B"H B"H BdH B"H B"\nH
iH /H %H LH 0H t)
return $
}
=< 2H 2H 2H 2H 2.5H 2.5 <=
#include <stdio.h>
int main(void){
int iH L dou.le /H %H 0H t
i > 5=2 / > 5=2 % > (dou.le)(5=2)
L > (dou.le)5=2 0 > (dou.le)5=2
t > 5.=2
printf(BdH B"H B"H BdH B"H B"\nH
iH /H %H LH 0H t)
return $
}
=< 2H 2H 2H 2H 2.5H 2.5 <=
Algoritmi i programare 24
Diiere 6n *i*liotec relati3e la tipuri
% 4limits.h5 ' pentru tipurile 6ntregi
Untregul min!ma8( :G=^M:G, :G=^MAV
Gumrul de *ii pe caracter CLAR^J:=
<tc.
% 4)loat.h5 ' pentru tipurile lotante(
<8ponentul ma8im
5reci$ia $ecimal, etc.
% 4stdli,.h5 ' conine uncii de con3ersie(
_ir de caractere 6n intI atoi(const char<)
_ir de caractere 6n floatIatof(const char<)