Você está na página 1de 76

Curso Prtico de C++

Autor: Prof. Luiz Bianchi


Universidade Regional de Blumenau
Sumrio
FUNDAMN!"#.............................................................................................................$
Declara%&o de vari'veis.................................................................................................(
!i)os de dados...............................................................................................................(
")erador de atri*ui%&o..................................................................................................+
,oment'rios...................................................................................................................+
!i)os modificados.........................................................................................................-
,onstantes......................................................................................................................-
,omandos de entrada.....................................................................................................
,omandos de sa/da........................................................................................................0
,aracteres de controle...................................................................................................0
,onstantes num1ricas....................................................................................................2
Decimal......................................................................................................................2
"ctal..........................................................................................................................2
3e4adecimal..............................................................................................................2
#tring de caracteres........................................................................................................2
Formato da im)ress&o....................................................................................................2
#istemas num1ricos.....................................................................................................55
"PRAD"R#...............................................................................................................5$
")eradores aritm1ticos................................................................................................5$
")eradores de incremento e de decremento................................................................5$
")eradores aritm1ticos de atri*ui%&o..........................................................................5(
")eradores relacionais................................................................................................5(
")eradores l6gicos......................................................................................................5+
")erador condicional..................................................................................................5-
Preced7ncia dos o)eradores.........................................................................................5.
#!RU!URA# D ,"N!R"L...................................................................................52
,ondi%&o de controle...................................................................................................52
strutura de sele%&o.....................................................................................................52
strutura sim)les 8if9...............................................................................................:;
strutura com)osta 8if...else9...................................................................................:;
strutura seletiva 8s<itch9.......................................................................................:5
strutura de re)eti%&o..................................................................................................:(
strutura for.............................................................................................................:(
strutura <hile.........................................................................................................:+
strutura do...<hile..................................................................................................:-
"*serva%&o so*re os comandos de re)eti%&o..........................................................:.
,omandos de desvios..................................................................................................:.
" comando *rea=.....................................................................................................:0
" comando continue................................................................................................:0
" comando goto......................................................................................................:2
FUN>?#.......................................................................................................................$;
Prot6ti)o de fun%@es....................................................................................................$5
Defini%&o da fun%&o.....................................................................................................$5
Passagem de )arAmetros )or valor..............................................................................$:
Passagem de )arAmetros )or refer7ncia......................................................................$:
Passagem e retorno de valores.....................................................................................$(
#o*recarga de fun%@es.................................................................................................$+
Fun%@es inline..............................................................................................................$-
Fun%@es recursivas.......................................................................................................$-
Fun%@es do usu'rio armazenadas em *i*liotecas........................................................$.
sco)o das vari'veis....................................................................................................$0
Diretivas......................................................................................................................(5
B!"R# MA!RCD#...............................................................................................($
Betores.........................................................................................................................($
Declara%&o de vetor.................................................................................................((
Cnicializa%&o de um vetor.........................................................................................(+
Atri*ui%&o de valores...............................................................................................(+
!amanho do vetor....................................................................................................(+
Matrizes.......................................................................................................................(-
Cnicializa%&o de matriz *idimensional.....................................................................(.
Passando vetores e matrizes )ara fun%@es...................................................................(0
#!RCNE D ,ARA,!R#.........................................................................................+;
Cnicializando string de caracteres................................................................................+;
Atri*ui%&o de string.....................................................................................................+5
ntrada de string a )artir do teclado............................................................................+5
Passando strings )ara fun%@es.....................................................................................+$
"utras fun%@es de strings.............................................................................................+(
#!RU!URA# D DAD"#..........................................................................................++
Defini%&o da estrutura..................................................................................................++
Acesso a mem*ros da estrutura...................................................................................+-
Cnicializa%&o de estruturas...........................................................................................+.
Aninhamento e matriz de estruturas............................................................................+.
struturas e fun%@es.....................................................................................................+2
Passagem )or valor..................................................................................................-;
Passagem )or refer7ncia..........................................................................................-5
Retorno de vari'vel ti)o estrutura...........................................................................-5
,LA### "BF!"#..................................................................................................-$
,lasses.........................................................................................................................-$
"*Getos.........................................................................................................................-(
FUN>?# ,"N#!RU!"RA# D#!RU!"RA#.....................................................-.
Fun%@es construtoras...................................................................................................-.
Fun%@es destrutoras.....................................................................................................-0
#o*recarga de fun%@es construtoras............................................................................-2
#"BR,AREA D "PRAD"R#..............................................................................5
BCBLC"ERAFCA..............................................................................................................(
Curso Prtico de C++
FUNDAMENTOS
,HH 1 uma linguagem de )rograma%&o derivada da linguagem ,. AssimI a linguagem
, 1 um su*conGunto de ,HH. "s )rinci)ais elementos criados )ara dar origem a ,HH
est&o relacionados J )rograma%&o orientada a o*Getos.
" )rocesso evolutivo da linguagem ,HH come%a com a linguagem B,PLI a )artir da
Kual surge em 52.; a linguagem chamada BI desenvolvida )or Dennis Ritchie. B 1
a)rimorada e a nova vers&o d' origem a linguagem ,I em 52.0. m 522:I a linguagem
, 1 incrementada )ara dar su)orte J )rograma%&o orientada a o*Getos surgindoI desta
feitaI ,HH.
Um )rograma em ,HH consiste de uma ou mais fun%@es as Kuais se constituem nas
unidades fundamentais da linguagem.
!odo )rograma deve ter no m/nimo uma fun%&o )rinci)al denominada main. A
e4ecu%&o do )rograma come%a na fun%&o main e termina Kuando esta fun%&o for
encerrada.
strutura *'sica de um )rograma:
Linclude MarKuivo de inclus&oN
void main8 9
O
*loco de comandosP
Q
" *loco de comandos de toda fun%&o ,HH deve come%ar com uma chave de a*ertura 8{9
de *loco e terminar com uma chave de fechamento de *loco 8}9.
m ,HHI e4istem comandos Kue s&o )r1R)rocessados os Kuais n&o se constituem
)ro)riamente em instru%@es da linguagem ,HH e s&o chamados de diretivas de
compia!"o ou sim)lesmente diretivas. " )r1R)rocessador 1 um )rograma Kue e4amina
o )rogramaRfonte e e4ecuta os comandos genericamente chamados de diretivas. !oda
diretiva 1 iniciada )elo s/m*olo L. A diretiva #incude )rov7 a inclus&o de um arKuivo
da *i*lioteca de )rogramas contendo defini%@es e declara%@es Kue s&o incor)oradas ao
)rograma )elo )r1R)rocessador. m outras )alavrasI o )r1R)rocessador ,HH su*stitui a
diretiva include )elo conteSdo do arKuivo indicado antes de o )rograma ser com)ilado.
Por e4em)loI os arKuivos de ca*e%alhos 8header9 iostream$% e conio$% )ermitem Kue se
fa%a a utiliza%&o de diversos comandos de entrada e sa/da no )rogramaI ou seGaI tais
arKuivos servem )ara au4iliar no desenvolvimento do )rogramaRfonte. " arKuivo
iostream$%I )or e4em)loI cont1m declara%@es necess'rias ao uso do o*Geto cin e coutI
entre outros.
Prof. Luiz Bianchi 3
Curso Prtico de C++
Decara!"o de variveis
Uma vari'vel 1 um es)a%o de mem6ria reservado )ara armazenar num certo ti)o de
dado e Kue )ossui um nome )ara referenciar seu conteSdo. Uma vari'vel em ,HH )ode
ser declarada em KualKuer lugar no )rogramaI no entanto ela deve o*rigatoriamente ser
declarada antes de ser usada no )rograma.
Um nome de vari'vel )ode ter KualKuer nSmero de caracteresI sendo Kue o )rimeiro
caractere deveI o*rigatoriamenteI ser uma letra ou um caractere de su*linhado. Pode
conter letras minSsculas e maiSsculasI os d/gitos de ; a 2 e o caractere de su*linhado.
,HH considera somente os )rimeiros $: caracteres do nome da vari'velI caso ela seGa
declarada com mais de $: caracteres. ,HH 1 sens/vel a letras maiSsculas e minSsculasI
ou seGaI as letras maiSsculas s&o consideradas diferentes das minSsculasI )or e4em)loI A
1 diferente de a. " nome da vari'vel n&o )ode coincidir com uma designa%&o )r1R
definida chamada de )alavraRchave ou )alavra reservada Kue 1 de uso restrito da
linguagem.
!a*ela de )alavras reservadas:
asm auto *rea= case catch
Tcdecl cdecl char class const
continue Tcs default do dou*le
Tds else enum Tes Te4)ort
e4tern Tfar far float for
friend goto huge if inline
int interru)t Tloadds long Tnear
near ne< o)erator T)ascal )ascal
)rivate )rotected )u*lic register return
Tsaveregs Tseg short signed sizeof
Tss static struct s<itch tem)late
this tU)edef union unsigned virtual
void volatile <hile
Tipos de dados
" ti)o de uma vari'vel determina a Kuantidade de mem6ria Kue ela ocu)ar'I em *UtesI e
o modo de armazenamento. ,HH )ossui cinco ti)os *'sicos Kue s&o:
Tipo Taman%o em &'tes Escaa de vaores
char 5 R5:0 a 5:.
int : R$:.-0 a $:.-.
float ( $.(R$0 a $.(H$0
dou*le 0 5..R$;0 a 5..H$;0
void ; nenhum valor
Prof. Luiz Bianchi 4
Curso Prtico de C++
Operador de atri&ui!"o
" o)erador de atri*ui%&o 1 re)resentado )or ( 8sinal de igualdade9. Atri*ui a e4)ress&o
J direita do sinal de igualdade J vari'vel a sua esKuerda.
4em)lo:
4 V +P
1 atri*u/do o valor + J vari'vel de nome 4. "utros e4em)los:
U V ( H $P
z V 4 V 0P
esta Sltima e4)ress&oI chamada de atri&ui!)es m*tipasI )ode tam*1m ser escrita
como segue:
z V 84 V 09P
J vari'vel 4 e z 1 atri*u/do o valor 0.
Comentrios
,oment'rios s&o utilizados com a finalidade de documentar o )rogramaRfonte. les n&o
s&o tratados )elo com)ilador. "s s/m*olos utilizados )ara re)resentar coment'rios
inseridos no )rograma s&o os delimitados )or WX e XW e o iniciado com duas *arras 8WW9 e
terminado com o final da linhaI conhecido como Ycoment'rio de linhaZ.
" e4em)loI a seguirI a)resenta a declara%&o de vari'veisI o o)erador de atri*ui%&o e
coment'rios:
WX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X ste )rograma mostra o uso de vari'veisI do o)erador de atri*ui%&o X
X e de coment'rios. X
X X X XX X X X X X X X X X X X X X X X X X X X X X X X X X X XX X X X X X X X X X XXW
Linclude Miostream.hN
void main8 9
O
int numTintP WW declara%&o de vari'vel do ti)o int
float numTrealP WW declara%&o de vari'vel do ti)o float
numTint V :;P WW atri*ui%&o do valor :; J vari'vel de nome numTint
numTreal V 5;;.($P WW atri*ui%&o do valor 5;;.($ J vari'vel de nome numTreal
cout MM [\nNumero inteiro V [ MM numTintP
cout MM [\nNumero real V [ MM numTrealP
Q
Prof. Luiz Bianchi 5
Curso Prtico de C++
resultado da e4ecu%&o do )rograma:
Numero inteiro V :;
Numero real V 5;;.($
Tipos modi+icados
"s ti)os *'sicos )odem ser acom)anhados de modificadores na declara%&o de vari'veisI
e4ceto o ti)o void. "s modificadores de ti)o s&o: on,I s%ort e unsi,ned.
A ta*elaI a seguirI mostra os ti)os com os modificadores:
Tipo Taman%o em &'tes Escaa de vaores
unsigned char 5 ; a :++
unsigned : ; a -++$+
short : R$:.-0 a $:.-.
long ( R:5(.(0$-(0 a :5(.(0$-(.
unsigned long ( ; a (:2(2-.:2+
long dou*le 5; $.(R(2$: a 5.5H(2$:
" tamanho e a escala de valores )odem variar segundo o )rocessador ou com)ilador em
uso. "s valores a)resentados acima est&o de acordo com o )adr&o AN#C.
WW mostra o modificador de ti)o de dado
Linclude Miostream.hN
void main8 9
O
unsigned int i V -++$+P
cout MM [\nBariavel unsigned int V [ MM iP
short int G V iP
cout MM [\nBariavel short int V [ MM GP
Q
Resultado do e4em)lo:
Bariavel unsigned int V -++$+
Bariavel short int V R5
Constantes
Uma vari'vel declarada )or meio do Kualificador const significa Kue seu conteSdo n&o
)oder' ser alterado em todo )rograma. A constante deve ser inicializadaI isto 1I no
momento de sua declara%&o dever' ser atri*u/do um valor a ela.
Prof. Luiz Bianchi 6
Curso Prtico de C++
4em)lo:
const float )i V $.5(5+P
Comandos de entrada
"s comandos de entrada rece*em a entrada de dados inserida )elo usu'rio atrav1s do
teclado. " comando cin trata a entrada de dados )or meio do operador de e-tra!"o ..
8 maior Kue du)los9 Kue direciona os dados J vari'vel designada na instru%&o.
4em)lo:
WW mostra a utiliza%&o do comando de entrada cin
Linclude Miostream.hN
void main8 9
O
int anosP
cout MM [\nDigite sua idade em anos: [P
cin NN anosP
cout MM [\nCdade em meses: [ MM 8anos X 5:9P
Q
Resultado do e4em)lo::
Digite sua idade em anos: :;
Cdade em meses: :(;
Para a leitura de te4tos contendo es)a%os em *rancoI )or e4em)loI 1 conveniente
utilizar a fun%&o ,ets/ 0 I cuGas declara%@es )ara seu uso se encontram no arKuivo de
inclus&o stdio$%. ,ontudo ela deve ser )recedida do mani)ulador +us% utilizado no
o*Geto cout )ara li*erar o conteSdo do *uffer de sa/da carregado na instru%&o cout
anterior a chamada J fun%&o.
4em)lo:
WW mostra a utiliza%&o da fun%&o gets89
Linclude Miostream.hN
Linclude Mstdio.hN
void main8 9
O
char nome]+;^P
cout MM [\nDigite seu nome: [MMflushP
gets8nome9P WW )ara leitura do nome com es)a%o
cout MM [\n#eu nome 1 [ MM nomeP
Q
Resultado da e4ecu%&o do )rograma:
Prof. Luiz Bianchi 7
Curso Prtico de C++
Digite seu nome: Luiz Bianchi
#eu nome 1 Luiz Bianchi
As fun%@es ,etc%e/ 0 e ,etc%/ 0 s&o destinadas a ler um caractere digitado no teclado
sem a necessidade de se )ressionar a tecla nter.
4em)lo:
WW mostra a utiliza%&o da fun%&o getche89
Linclude Miostream.hN
Linclude Mconio.hN
void main8 9
O
char letraP
cout MM [\nPressione uma letra: [P
letra V getche89P WW faz a leitura sem es)erar nter
cout MM [\nLetra )ressionada [ MM letraP
Q
A diferen%a entre ,etc%e/ 0 e ,etc%/ 0 1 Kue esta Sltima n&o registra o caractere
)ressionado no v/deo. DizRse Kue a fun%&o ,etc%/ 0 n&o ecoa no v/deo. Am*as as
fun%@es necessitam do arKuivo de ca*e%alho conio$%.
Comandos de sa1da
" comando de sa/da mais utilizado )ara e4i*ir os dados na tela ou na im)ressora 1 o
coutI cuGa sa/da ou mensagem 1 conectada a este atrav1s do o)erador de inser%&o 22
8menor Kue du)los9. As defini%@es )ara seu uso est&o contidas no arKuivo de ca*e%alho
iostream$%.
#ua utiliza%&o G' foi e4)erimentada nos )rogramas e4em)los anteriores.
Caracteres de controe
A seguinte ta*ela a)resenta os caracteres utilizados )ara controle de )'ginas e e4i*i%&o
de c6digos es)eciais:
Caractere de controe Si,ni+icado
\n nova linha 8,RHLF9
\t ta*ula%&o
\f salto de )'gina
\* retrocesso
\a aciona o Bee)
\r in/cio da linha
\\ im)rime *arra invertida 8\9
\_ im)rime as)a sim)les
\Z im)rime as)a du)la
\4dd re)resenta%&o he4adecimal
Prof. Luiz Bianchi 8
Curso Prtico de C++
A instru%&o end 8end line9 encerra a linha de dados e coloca o cursor no in/cio da
)r64ima linha. !emI )ortantoI a mesma fun%&o do caractere de controle 3n.
Constantes num4ricas
Uma constante 1 re)resentada )or um valor fi4o Kue n&o )ode ser alterado ao longo da
e4ecu%&o do )rograma. ,onstantes num1ricas em ,HH )odem ser escritas nos seguintes
sistemas:
Decima
screveRse na forma ha*itualI )or e4em)lo:
(;I +02;I :2.
Octa
"s nSmeros desse sistema num1rico devem ser escritos ante)ondoRse um zero.
4em)los:
;5;I ;(:I ;+;;.
5e-adecima
"s nSmeros do sistema de *ase 5- devem ser escritos )recedidos dos caracteres ;4.
4em)los:
;4$-I ;4(dfI ;4a$*5.
O&serva!"o6
Um nSmero iniciando com zero 1 considerado um nSmero do sistema num1rico de *ase
0. PortantoI o nSmero ;5; 1 diferente 5;. " nSmero ;5; eKuivale ao nSmero 0 em
decimal.
Strin, de caracteres
` uma cadeia de caracteres delimitada )or as)as du)las. Um e4em)lo de cadeia de
caracteres )ode ser escrito como segue: YPrograma de com)utadorZ.
m ,HHI as as)as sim)les s&o utilizadas )ara re)resentar um Snico caractere.
4em)los: a<_I ab_I a(_ eI tam*1m os caracteres de controle: a\n_I a\t_I a\r_.
Formato da impress"o
" tamanho de um cam)o de dados )ode ser definido no comando cout )ara )ermitir o
alinhamento na im)ress&o ou a)resenta%&o dos dados. " arKuivo de inclus&o iomanip$%
define os mani)uladores de alinhamento e s&o os seguintes:
Prof. Luiz Bianchi 9
Curso Prtico de C++
set7 determina o tamanho do cam)o a ser e4i*idoP
set+i esta*elece o caractere de )reenchimento do es)a%o em *rancoP
setprecision determina a Kuantidade de casas decimais dos nSmeros reais ou de )onto
flutuante 8float9P
A seguir s&o mostrados dois )rogramas: um sem defini%@es de com)rimento de cam)os
e outro Kue utiliza mani)uladores de tamanho de cam)os:
Linclude Miostream.hN
void main89
O
int *anV:$I )erV5:;;I larV(+;I uvaV5(+$;P
cout MM c\nc MM [Bananas [ MM *anP
cout MM c\nc MM [Peras [ MM )erP
cout MM c\nc MM [LaranGas [ MM larP
cout MM c\nc MM [Uvas [ MM uvaP
Q
Resultado do e4em)lo:
Bananas :$
Peras 5:;;
LaranGas (+;
Uvas 5(+$;
Linclude Miostream.hN
Linclude Miomani).hN
void main89
O
int *anV:$I )erV5:;;I larV(+;I uvaV5(+$;P
cout MM c\nc MM [Bananas [ MM set<85;9 MM *anP
cout MM c\nc MM [Peras [ MM set<85;9 MM )erP
cout MM c\nc MM [LaranGas [ MM set<85;9 MM larP
cout MM c\nc MM [Uvas [ MM set<85;9 MM uvaP
Q
Resultado do e4em)lo::
Bananas :$
Peras 5:;;
LaranGas (+;
Uvas 5(+$;
A seguirI um e4em)lo com )reenchimento dos es)a%os em *ranco entre a descri%&o e
Kuantidade citada:
Linclude Miostream.hN
Linclude Miomani).hN
void main89
O
int *anV:$I )erV5:;;I larV(+;I uvaV5(+$;P
cout MM setfill8c.c9P
Prof. Luiz Bianchi 10
Curso Prtico de C++
cout MM c\nc MM [Bananas [ MM set<85;9 MM *anP
cout MM c\nc MM [Peras [ MM set<85;9 MM )erP
cout MM c\nc MM [LaranGas [ MM set<85;9 MM larP
cout MM c\nc MM [Uvas [ MM set<85;9 MM uvaP
Q
Resultado do e4em)lo:
Bananas . . . . . . . . . :$
Peras . . . . . . . 5:;;
LaranGas . . . . . . . .(+;
Uvas . . . . . . 5(+$;
" mani)ulador setprecision esta*elece arredondamento e a Kuantidade de casas
decimais a serem e4i*idas )or um nSmero de )onto flutuante.
Para ini*ir a im)ress&o em nota%&o cient/fica das vari'veis declaradas como ti)o de
dado +oatI utilizaRse o flag +i-ed da classe iosI definido no arKuivo iostream$%. #egue
um e4em)lo:
Linclude Miostream.hN
Linclude Miomani).hN
void main89
O
float *anV:$.$.+I )erV5:;;.;-;I larV(+;..I uvaV5(+$;.0+P
cout MM set)recision8:9P WW e4i*e duas casas decimais
cout MM setiosflags8ios::fi4ed9P WW ini*e a e4i*i%&o em nota%&o cient/fica
cout MM c\nc MM [Bananas [ MM set<85;9 MM *anP
cout MM c\nc MM [Peras [ MM set<85;9 MM )erP
cout MM c\nc MM [LaranGas [ MM set<85;9 MM larP
cout MM c\nc MM [Uvas [ MM set<85;9 MM uvaP
Q
Resultado do e4em)lo:
Bananas :$.$0
Peras 5:;;.;-
LaranGas (+;..;
Uvas 5(+$;.0+
Sistemas num4ricos
" o*Geto cout )ermite e4i*ir um nSmero na *ase num1rica es)ecificada no )rograma.
"s mani)uladores de *ases num1ricas encontramRse definidos no arKuivo iostream$% e
s&o eles:
dec )ara o sistema decimal 8default9I oct )ara o sistema octal e %e- )ara o he4adecimal.
4em)lo:
Prof. Luiz Bianchi 11
Curso Prtico de C++
Linclude Miostream.hN
void main89
O
int nV+$P
cout MM c\nc MM [Decimal: [ MM dec MM nP
cout MM c\nc MM ["ctal : [ MM oct MM nP
cout MM c\nc MM [3e4adecimal: [ MM he4 MM nP
Q
Resultado do e4em)lo:
Decimal: +$
"ctal: -+
3e4adecimal: $+
" o*Geto cin tam*1m )ermite esta*elecer a *ase num1rica em Kue se deseGa inserir um
nSmero:
Linclude Miostream.hN
void main89
O
int nP
cout MM c\nc MM [Cnsira um numero he4adecimal: [P
cin NN he4 NN nP
cout MM[" nro.he4adecimal [MMhe4MMnMM[ eKuivale ao decimal [MMdecMMnP
Q
Prof. Luiz Bianchi 12
Curso Prtico de C++
OPE8ADO8ES
Operadores aritm4ticos
4istem cinco o)eradores aritm1ticos *in'rios 8Kue o)eram so*re dois o)erandos9 e um
o)erador aritm1tico un'rio 8Kue o)era so*re um o)erando9. " o)erador 899I chamado
o)erador de m:duoI a)resenta como resultado o resto da divis&o e o)era somente com
o)erandos inteiros. ,ada o)erador re)resenta uma o)era%&o aritm1tica elementar: somaI
su*tra%&oI divis&oI multi)lica%&o e m6dulo.
"s s/m*olos e as res)ectivas o)era%@es dos o)eradores aritm1ticos s&o:
Operador &inrio Opera!"o
H soma
R su*tra%&o
X multi)lica%&o
W divis&o
d m6dulo
R menos un'rio
4em)lo do o)erador Kue retorna o resto da divis&o:
50 d (
resulta no valor : 850 dividido )or (I restam :9.
Para efetuar a o)era%&o de )otencia%&oI ,HH conta com uma fun%&o )r1Rdefinida:
po7/ 0.
4em)lo:
)o<8(I:9
re)resenta (
:
V 5-.
Operadores de incremento e de decremento
"s o)eradores de incremento 8HH9 e de decremento 8RR9 s&o o)eradores un'rios Kue
adicionam e su*traem uma unidade do conteSdo da vari'vel res)ectiva. 4iste duas
formas: o o)erador )ode ser escrito a direita ou J esKuerda do nome da vari'velI em
outras )alavrasI o o)erador )ode ser )refi4ado ou )6sRfi4ado J vari'vel.
#inta4e dos o)eradores:
Prof. Luiz Bianchi 13
Curso Prtico de C++
;nstru!"o e<uiva=ncia
varHH var V var H 5
HHvar var V var H 5
varRR var V var e 5
RRvar var V var e 5
m KualKuer casoI o conteSdo da vari'vel ser' incrementado 8ou decrementado9 de uma
unidade. !odaviaI se o o)erador for )6sRfi4adoI o valor da vari'vel ser' incrementado
8ou decrementado9 de)ois da e4ecu%&o da instru%&o de Kue ela faz )arte. ,aso o
o)erador seGa )refi4adoI o valor da vari'vel ser' incrementado 8ou decrementado9 antes
da e4ecu%&o da instru%&o de Kue ela faz )arte.
Operadores aritm4ticos de atri&ui!"o
stes o)eradores com*inam as o)era%@es aritm1ticas com atri*ui%&o. "s s/m*olos
utilizados s&o:
HVI RVI XVI WV e dV.
4em)los:
Aritm4tica de atri&ui!"o ;nstru!"o e<uivaente
i HV +P i V i H +P
G RV 4P G V G e 4P
= XV U H :P = V = X 8U H :9P
m WV (.:P m V m W (.:P
n dV :P n V n d :P
Operadores reacionais
")eradores relacionais fazem com)ara%@esI ou seGaI verificam a rela%&o de magnitude e
igualdade entre dois valores. #&o seis os o)eradores relacionais:
Operador Si,ni+icado
N maior
NV maior ou igual
M menor
MV menor ou igual
V V igual
fV diferente
stes o)eradores )ermitem avaliar rela%@es entre vari'veis ou e4)ress@es )ara a tomada
de decis@es.
Prof. Luiz Bianchi 14
Curso Prtico de C++
Ao contr'rio de outras linguagensI n&o e4iste um ti)o de dado l6gico Kue assuma um
valor verdade ou falsidade. gualKuer valor diferente de zero 1 considerado verdade e
zeroI falsidade.
" resultado de uma e4)ress&o l6gica 1 um valor num1rico: uma e4)ress&o avaliada
verdadeira rece*e o valor 5I uma e4)ress&o l6gica avaliada +asa rece*e o valor ;.
4em)lo:
Linclude Miostream.hN
void main89
O
int 4 V 5:I U V :;I verdadeiroI falsoP
verdadeiro V 84 M U9P
falso V 84 V V U9P
cout MM [\nBerdade: [ MM verdadeiroP
cout MM [\nFalsidade: [ MM falsoP
Q
Resultado do e4em)lo::
Berdade: 5
Falsidade: ;
Operadores :,icos
"s tr7s o)eradores l6gicos s&o:
Operador Si,ni+icado Descri!"o
hh e conGun%&o
i i ou disGun%&o
f n&o nega%&o
"s o)eradores hh e i i s&o *in'rios e o o)erador f 1 un'rio. stes o)eradores avaliam
os o)erandos como l6gicos 8; ou 59I sendo o vaor :,ico > considerado +aso e o vaor
:,ico ?I verdadeiro.
As ta*elasRverdadeI a seguirI e4)ressam melhor essas o)era%@es l6gicas:
@@ /conAun!"o0 B B /disAun!"o0 C /ne,a!"o0
; e ; V ; ; ou ; V ; n&o ; V 5
; e 5 V ; ; ou 5 V 5 n&o 5 V ;
5 e ; V ; 5 ou ; V 5
5 e 5 V 5 5 ou 5 V 5
4em)los:
Prof. Luiz Bianchi 15
Curso Prtico de C++
Admitindo Kue os valores das vari'veis 4I U e z do ti)o int seGamI res)ectivamenteI ;I 5
e :I s&o realizadas as avalia%@es das e4)ress@es da ta*ela a*ai4oI suscitando os
seguintes resultados:
E-press"o 8esutado
f. falsidade
4 hh U falsidade
4 N z ii z V V U falsidade
4 H U hh fz e U verdade
Linclude Miostream.hN
void main89
O
int 4V+I UV-I e4)r5I e4)r:I resulP
e4)r5V84VV29P
e4)r:V8UVV-9P
resulV8e4)r5 hh e4)r:9P
coutMM[\n4)ressao5: [MMe4)r5P
coutMM[\n4)ressao:: [MMe4)r:P
coutMM[\n\nResultado: [MMresulP
Q
Resultado do e4em)lo:
4)ress&o5: ;
4)ress&o:: 5
Resultado: ;
Operador condiciona
" o)erador condicional 8j:9 o)era so*re tr7s e4)ress@es. A sinta4e de uma e4)ress&o
condicional 1:
condi%&o j e4)r5 : e4)r:
condi!"o 1 uma e4)ress&o l6gica Kue ser' avaliada )rimeiro. #e o valor for diferente de
zeroI isto 1I verdadeiroI a e-pr? ser' o valor da condicional. ,aso contrario a e-prD ser'
o valor da condicional.
Uma e4)ress&o condicional 1 eKuivalente a uma estrutura de decis&o sim)les:
i+ 8condi%&o9
e4)r5
ese
e4)r:
4em)los:
Prof. Luiz Bianchi 16
Curso Prtico de C++
Admitindo Kue 4I U e z s&o vari'veis do ti)o int contendo res)ectivamente os valores 5I
: e $I s&o )rocedidas as avalia%@es das e4)ress@es da ta*ela a seguir e mostrados seus
resultados:
E-press"o Eaor
4 j U : z :
4 N U j U : z $
U N 4 j HHz : RRz (
4 NV z j z : RRU 5
Preced=ncia dos operadores
A seguirI 1 a)resentada a ta*ela de )reced7ncia dos o)eradores estudadosI organizados
em *locos. "s o)eradores de cada *loco )ossuem a mesma )rioridade e s&o e4ecutados
na ordem em Kue s&o escritos na instru%&o da esKuerda )ara direita:
Foco Cate,oria Operador Tipo
5
negativoI
incrementoW
decremento
e l6gico
R menos un'rio
HH incremento
RR decremento
f n&o l6gico
: aritm1tico
X multi)lica%&o
W divis&o
d m6dulo
$ aritm1tico
H adi%&o
R su*tra%&o
( relacional
M menor
MV menor ou igual
N maior
NV maior ou igual
+ relacional
V V igual
fV diferente
- l6gico hh e l6gico
. l6gico i i ou l6gico
0 condicional j: condicional
5;
atri*ui%&o e
aritm1tico
de
atri*ui%&o
V atri*ui%&o
XV multi)lica%&o
WH divis&o
dV m6dulo
HV adi%&o
RV su*tra%&o
"s o)eradores aritm1ticos atuam so*re o)erandos num1ricos e )roduzem resultados
tam*1m num1ricos. "s o)eradores relacionais avaliam os o)erandos num1ricos e
Prof. Luiz Bianchi 17
Curso Prtico de C++
)roduzem resultados l6gicos. os o)eradores l6gicos avaliam o)erandos l6gicos e
a)resentam resultados igualmente l6gicos.
Prof. Luiz Bianchi 18
Curso Prtico de C++
EST8UTU8AS DE CONT8OGE
Muito do )oder real de um com)utador vem de sua ha*ilidade em tomar decis@es e
determinar um curso de a%&o durante a corrida de um )rograma. As estruturas de
controle )ermitem controlar o curso das a%@es l6gicas. "s dois ti)os *'sicos de
estruturas de controle s&o as estruturas de see!"o e as estruturas de repeti!"o. A
estrutura de sele%&o ou decis&o )ermite e4ecutar um entre dois ou mais *locos de
instru%@es. A estrutura de re)eti%&o )ermite Kue a e4ecu%&o de um *loco de instru%@es
seGa re)etida um determinado nSmero de vezes.
Condi!"o de controe
Uma condi%&o de controle 1 re)resentada )or uma e4)ress&o l6gica ou aritm1tica Kue
controla Kual *loco de comandos a e4ecutar e Kuantas vezes dever' ser e4ecutado.
,omo ,HH n&o )ossui vari'veis l6gicasI Kuando uma e4)ress&o assume uma condi%&o
de controle ela ser' considerada verdadeira se seu valor for diferente de zero e +asa se
seu valor for igual a zero.
4em)lo: " Kuadro a seguir 1 analisadoI admitindoRse Kue os valores d*as vari'veis
inteiras i e G seGam res)ectivamente ; e $:
Condi!"o Eaor num4rico Si,ni+icado :,ico
8i V V ;9 5 verdadeiro
8i N G9 ; falso
i ; falso
G $ verdadeiro
Estrutura de see!"o
A sele%&o ou decis&o 1 a ha*ilidade Kue o sistema )ossui )ara escolher uma a%&o de um
conGunto de alternativas es)ec/ficas. Csto significa Kue se )ode selecionar entre a%@es
alternativas de)endendo de crit1rios de uma e4)ress&o condicional.
#eguem os comandos de sele%&o:
Comando Estrutura
if sim)les
if...else com)osta
s<itch seletiva
Prof. Luiz Bianchi 19
Curso Prtico de C++
Estrutura simpes /i+0
A estrutura de sele%&o sim)les )ermite Kue se e4ecute 8ou n&o9 um *loco de instru%@es
conforme o valor de uma condi%&o seGa verdadeiro ou falso. " *loco )ode ter uma Snica
instru%&o ou v'rias instru%@es entre chaves:
#inta4e:
Bloco
com uma instru!"o com n instru!)es
if 8condi%&o9
instru%&oP
if 8condi%&o9
O
instru%&oP
instru%&oP
Q
#e a condi%&o for verdadeiraI o bloco de instru%@es 1 e4ecutado. ,aso contr'rioI o
*loco n&o 1 e4ecutado. "*serve Kue Kuando o *loco )ossui v'rias instru%@esI elas
devem estar entre chaves.
4em)lo:
WX " )rograma l7 dois valores num1ricosI efetua a soma
e a)resenta a mensagem [#oma maior Kue dez[I
caso o resultado da adi%&o seGa maior Kue 5;.
XW
Linclude Miostream.hN
void main89
O
int n5I n:I somaV;P
coutMM[\nCnsira dois numeros inteiros: [P
cinNNn5NNn:P WW leitura dos dois valores
somaVn5Hn:P
if 8soma N 5;9 WW e4)ress&o de teste 8condi%&o9
coutMM[#oma maior Kue dez[P
Q
Estrutura composta /i+$$$ese0
" comando i+$$$ese e4ecuta um entre dois *locos de instru%@es. #e a condi%&o resultar
em verdade o )rograma e4ecuta o )rimeiro *loco de instru%@esP se resultar em falsidadeI
e4ecuta o segundo *loco de instru%@es.
#inta4e:
Prof. Luiz Bianchi 20
Curso Prtico de C++
Bloco
com uma instru!"o com n instru!)es
if 8condi%&o9
instru%&oP
else
instru%&oP
if 8condi%&o9
O
instru%&oP
instru%&oP
Q
else
O
instru%&oP
instru%&oP
Q
4em)lo:
WX " )rograma efetua o c'lculo da m1dia aritm1tica das notas
de tr7s )rovas e avalia a situa%&o Kuanto J a)rova%&o.
XW
Linclude Miostream.hN
void main89
O
float n5I n:I n$I mediaP
coutMM[\nCntroduza as tr7s notas: [P
cinNNn5NNn:NNn$P WW leitura das tr7s notas
mediaV8n5Hn:Hn$9W$P WW c'lculo da m1dia
if 8media NV -.;9 WW e4)ress&o de teste 8condi%&o9
coutMM[A)rovado[P
else
coutMM[Re)rovado[P
Q
Estrutura seetiva /s7itc%0
" comando s<itch )ermite e4ecutar um conGunto de instru%@esI selecionado dentre
v'rios casos rotulados )or uma constanteI conforme o valor de uma vari'vel ou de um
nSmero constante escrito entre )arentes.
#inta4e:
Prof. Luiz Bianchi 21
Curso Prtico de C++
s<itch 8vari'vel ou constante9
O
case valor5:
instru%&oP
instru%&oP
*rea=P
case valor::
instru%&oP
instru%&oP
*rea=
. . .
default:
instru%&oP
instru%&oP
Q
,ada caso )ode ser com)osto )or KualKuer nSmero de instru%@esI seguidas )elo
comando &reaH )ara im)edir a e4ecu%&o da instru%&o ou instru%@es dos casos
su*seKkentes. " comando default ser' e4ecutado somente Kuando o valor da vari'vel do
comando s<itch n&o calhar com os valores mencionados nos casos.
4em)lo:
WX )rograma Kue simula uma calculadora eletrlnicaI efetuando
uma das o)era%@es *'sicas )or vez a crit1rio do usu'rio.
XW
Linclude Miostream.hN
void main89
O
float n5I n:P
char o)P
coutMM[\nCntroduza a o)era%&o 85o.numero o)erador :o.numero9: [P
cinNNn5NNo)NNn:P
s<itch 8o)9
O
case cHc:
coutMM[#oma: [MMn5 H n:P
*rea=P
case cRc:
coutMM[#u*tra%&o: [MMn5 R n:P
*rea=P
case cXc: WW s/m*olos o)cionais 8X ou 49 )ara
case c4c: WW o usu'rio comandar a multi)lica%&o.
coutMM[Multi)lica%&o: [MMn5 X n:P
*rea=P
case cWc: WW s/m*olos o)cionais 8W ou :9 )ara
case c:c: WW o usu'rio comandar a divis&o.
coutMM[Divis&o: [MMn5 W n:P
*rea=P
default:
Prof. Luiz Bianchi 22
Curso Prtico de C++
coutMM[")erador invalido[P
Q
Q
#egue um e4em)lo de e4ecu%&o do )rograma:
Cntroduza a o)era%&o 85o.numero o)erador :o.numero9: 5: 4 + ]N!R^
Multi)lica%&o: -;
O&serva!"o: " comando i+$$$ese )oderia ser usado )ara )rogramar a solu%&o acima. No
entantoI )ara avaliar uma e4)ress&o Snica com v'rias a%@es )oss/veisI o comando
s7itc% a)resenta um formato mais adeKuado e claro.
Prof. Luiz Bianchi 23
Curso Prtico de C++
Estrutura de repeti!"o
A re)eti%&o 1 uma )oderosa ha*ilidadeI ao lado da decis&oI Kue o sistema tem )ara
re)etir um conGunto de a%@es es)ec/ficas. A linguagem algor/tmica
#eguem as tr7s formas de re)eti%&o de ,HH:
+or
7%ie
do$$$7%ie
Estrutura +or
sta estrutura de re)eti%&o 1 utilizada Kuando se conhece de antem&o o nSmero de vezes
Kue um conGunto de instru%@es deve ser re)etido.
sinta4e:
for8inicializa%&oP condi%&oP incremento ou decremento9
O
instru%&oP
instru%&oP
Q
a iniciaiIa!"o corres)onde a uma instru%&o Kue atri*ui um valor inicial J vari'vel Kue
controla o nSmero de re)eti%@es.
a condi!"o refereRse a uma e4)ress&o Kue 1 avaliada toda vez Kue a re)eti%&o 1
reiniciada e Kuando essa avalia%&o resultar em falso a re)eti%&o 1 encerrada.
o incremento ou decremento define como a vari'vel de controle ser' alterada a)6s
cada e4ecu%&o dos comandos de re)eti%&o.
4em)lo:
for8i V ;P i M 5;P iHH9
cout MM YXXXZP
Neste e4em)loI o valor da vari'vel de controle i 1 inicializada em ;I em seguida ela 1
testada )ara determinar se 1 menor Kue 5; e incrementada de uma unidade cada vez Kue
a instru%&o cout 22 JKKKL 1 e4ecutada. sse )rocesso de avalia%&oI e4ecu%&o e
incremento 1 re)etido at1 o valor da vari'vel i for igual a 5;I momento em Kue o
resultado da avalia%&o a)resenta valor falso 8igual a zero9. guando i )assa a valer 5; a
instru%&o so* o comando +or n&o 1 e4ecutada. Na Sltima e4ecu%&o o valor de i 1 igual a
2.
"utros e4em)los:
WW 4i*e a ta*uada de 5 a 5; do nSmero fornecido )elo usu'rio.
Linclude Miostream.hN
Linclude Miomani).hN
Prof. Luiz Bianchi 24
Curso Prtico de C++
void main89
O
int nI iP
cout MM [\nCnsira um numero: [P
cin NN nP
for8i V 5P i MV 5;P iHH9
cout MM c\nc MM set<8:9 MM i MM [ 4 [ MM n MM [ V [ MM set<8:9 MM 8iXn9P
Q
Resultado da e4ecu%&o do )rograma:
Cnsira um numero: 0
5 4 0 V 0
: 4 0 V 5-
$ 4 0 V :(
( 4 0 V $:
+ 4 0 V (;
- 4 0 V (0
.4 0 V +-
0 4 0 V -(
2 4 0 V .:
5;4 0 V 0;
WW mostra os nSmeros mSlti)los de + at1 o limite de 5;;.
Linclude Miostream.hN
void main8 9
O
for8int i V +P i MV 5;;P i HV +9
cout MM i MM c\tcP
Q
Note Kue a vari'vel i foi declarada no interior do comando +or. m ,HHI 1 )r'tica
comum declarar as vari'veis a serem utilizadasI imediatamenteI antes ou )r64imas do
local em Kue ser&o usadas.
Estrutura 7%ie
A re)eti%&o 7%ie 1 utilizada Kuando n&o se conhece )reviamente o nSmero de itera%@es
Kue ser&o realizadas. " *loco de instru%@es ser' re)etido at1 Kue a e4)ress&o de teste
condicional for falsa 8igual a zero9.
#inta4e:
<hile8condi%&o9
O
instru%&oP
instru%&oP
Q
Prof. Luiz Bianchi 25
Curso Prtico de C++
nKuanto a condi%&o for verdadeiraI as instru%@es do *loco ser&o e4ecutados. " *loco
Kue cont1m v'rias instru%@es deve estar delimitado )or chaves 8{ }9.
" teste condicional ocorre no in/cio da estruturaI o Kue significa haver a )ossi*ilidade
da re)eti%&o n&o ser e4ecutada nenhu*ma vezI se a avalia%&o da e4)ress&o condicional
for falsa G' no )rimeiro teste.
4em)lo:
WW ,onta os caracteres digitados
Linclude Miostream.hN
Linclude Mconio.hN
void main8 9
O int cont V ;P
<hile88getche899 fV c\rc9 WW c\rc in/cio da linha 8enter9
contHHP
cout MM [\nNumero de caracteres digitados: [ MM contP
Q
"utro e4em)lo:
WX
Multi)lica dois valores fornecidos )elo usu'rio e
a)resenta o resultadoI re)etindo esse )rocessamento
)or tantas vezes Kuantas forem a necessidade do usu'rio.
XW
Linclude Miostream.hN
void main8 9
O
int num5I num:I )rodP
char res) V cscP
<hile8res) VV csc9
O
coutMM[\nCnsira dois numeros: [P
cinNNnum5NNnum:P
)rodVnum5Xnum:P
coutMM[Produto: [MM)rodP
coutMM[\nDeseGa continuarj [P
cinNNres)P
Q
Q
Prof. Luiz Bianchi 26
Curso Prtico de C++
Estrutura do$$$7%ie
A re)eti%&o do$$$7%ie tam*1m )ode ser utilizada Kuando n&o se conhece de antem&o o
nSmero de itera%@es Kue ser&o realizadas. A e4ecu%&o do *loco ser' re)etida at1 Kue a
e4)ress&o condicional for falsa 8igual a zero9.
#inta4e:
do
O
instru%&oP
instru%&oP
Q <hile 8condi%&o9P
" *loco de instru%&o 1 e4ecutado enKuanto a condi%&o for verdadeira. " *loco Kue
cont1m v'rias instru%@es deve estar delimitado )or chaves 8{ }9.
Diferentemente do comando <hileI o teste condicional ocorre no final da estruturaI
sendo utilizado em situa%@es Kue e4igem )elo menos uma e4ecu%&o do *loco )ara
de)ois criar o ciclo re)etitivoI se a avalia%&o condicional for verdadeira.
4em)lo:
WW ,alcula e mostra o fatorial de um nSmero fornecido )elo usu'rio.
Linclude Miostream.hN
void main89
O
coutMM [\nCntroduza um numero )ara c'lculo do fatorial: [P
int numI fatP
cin NN numP
int i V fat V 5P
do
fat XV iHHP
<hile 8i MV num9P
cout MM [Fatorial de [ MM num MM [ V [ MM fatP
Q
O&serva!"o so&re os comandos de repeti!"o
A o)%&o de re)eti%&o 7%ie serve )ara todas as situa%@esI no entanto as outras duas em
certas situa%@es )odem ter melhor a)lica%&o.
Comandos de desvios
As instru%@es estudadas anteriormente )odem sofrer desvios e interrup!)es em sua
seKk7ncia l6gica normal atrav1s do uso de certas instru%@es. As instru%@es &reaH e
continue s&o usadas nas estruturas de re)eti%&oI n&o )odendo ser utilizadas em outras
)artes do )rograma.
Prof. Luiz Bianchi 27
Curso Prtico de C++
O comando &reaH
" comando &reaH 1 utilizado )ara terminar a e4ecu%&o das instru%@es de um la%o de
re)eti%&o 8+orM 7%ie e do$$$7%ie9 ou )ara terminar uma estrutura seletiva s7itc%.
guando utilizado em um la%o de re)eti%&oI o comando *rea= for%a a Kue*ra imediata do
la%o inde)endentemente da condi%&o de testeP o controle )assa )ara a )r64ima instru%&o
a)6s o la%o. m la%os aninhados ou estruturados em hierarKuiasI o controle )assa )ara o
la%o de n/vel imediatamente su)erior ou imediatamente e4terno.
A seguirI 1 a)resentado outra vers&o do )rograma e4em)lo Kue simula uma calculadora
)ara mostrar o uso da instru%&o &reaH.
WX )rograma Kue simula uma calculadora eletrlnicaI
efetuando uma das o)era%@es *'sicas.XW
Linclude Miostream.hN
void main89
O
const int verdadeV5P
float n5I n:P
char o)P
<hile8verdade9
O
cout MM [\n\nDigite ;R; 8zero h/fen zero9 )ara terminar9 ou[P
cout MM [\nCntroduza a o)eracao 85o.num o)er :o.num9: [P
cin NN n5 NN o) NN n:P
if 8n5 VV ;.;9 *rea=P WW for%a a sa/da do la%o e o )rograma 1 encerrado
if 8o) VV cHc9 cout MM [#oma: [ MM n5 H n:P
else if 8o) VV cRc9 cout MM [#u*racao: [ MM n5 R n:P
else if 88o) VV cXc9 ii 8o) VV c4c99 cout MM [Multi)licacao: [ MM n5 X n:P
else if 88o) VV cWc 9 ii 8o) VV c:c99 cout MM [Divisao: [ MM n5 W n:P
else cout MM [")erador invalido[P
Q
Q
O comando continue
" comando continue salta as instru%@es de um la%o sem sair do mesmoI ou seGaI o
comando for%a a avalia%&o da condi%&o de controle do la%o e em seguida continua o
)rocesso do la%oI nas estruturas de re)eti%&o 7%ie e do$$$7%ie. No la%o +orI )rimeiro 1
incrementada ou decrementada a vari'vel de controle e de)ois faz a avalia%&o da
condi%&o.
Prof. Luiz Bianchi 28
Curso Prtico de C++
4em)lo:
WW L7 valores )ara o c'lculo da m1diaI encerrando
WW o )rocesso sem considerar o valor negativo.
Linclude Miostream.hN
void main89
O
coutMM[\nCnsira valores )ara o c'lculo da m1dia.[P
coutMM[\nPara encerrar digite um valor negativo:\n[P
float valorIsomaV;.;InumV;.;P
do
O
cinNNvalorP
if 8valor M ;.;9 WW se negativo a instru%&o continue 1 e4ecutada
continueP WW salta )ara a avalia%&o do la%o
soma HV valorP
numHHP
Q <hile 8valor NV ;.;9P WW avalia%&o do la%o
coutMM[#oma V [MM8somaWnum9P
Q
O comando ,oto
ste comando causa o desvio de flu4o do )rograma )ara a instru%&o seguinte ao label
indicado no comando. " label ou r6tulo 1 um nome seguido de dois )ontos 8:9.
" uso deste comando deve ser evitado )orKue tende a dificultar a clareza e
entendimento da l6gicaI mormenteI de )rogramas e4tensos.
A seguirI 1 a)resentada uma vers&o do )rograma anterior )ara e4em)lificar o uso deste
comando:
WW L7 valores )ara o c'lculo da m1diaI encerrando
WW o )rocesso ao ler um valor negativo.
Linclude Miostream.hN
void main89
O
coutMM[\nCnsira valores )ara o c'lculo da m1dia.[P
coutMM[\nPara encerrar digite um valor negativo:\n[P
float valorIsomaV;.;InumV;.;P
inicio:
cinNNvalorP
if 8valor M ;.;9
goto fimP
soma HV valorP
numHHP
goto inicioP
fim:
coutMM[#oma V [MM8somaWnum9P
Prof. Luiz Bianchi 29
Curso Prtico de C++
Q
Prof. Luiz Bianchi 30
Curso Prtico de C++
FUNNOES
Uma fun%&o 1 um segmento de )rograma Kue e4ecuta uma tarefa es)ec/fica. Um recurso
valioso Kue )ermite a modulariza%&o ou a divis&o do )rograma em )eKuenas tarefas Kue
sim)lifica a )rograma%&o como um todo.
Um )rograma )ode conter v'rias fun%@esI devendo ter no m/nimo uma fun%&o chamada
main89 atrav1s da Kual 1 iniciada a e4ecu%&o do )rograma. guando uma instru%&o
cont1m um nome de uma fun%&oI ela 1 chamadaI )assando o controle das tarefas )ara
essa fun%&o Kue e4ecuta suas instru%@es e volta J instru%&o seguinte J da chamada.
4istem fun%@es do sistema Kue s&o fornecidas Gunto com o com)ilador e fun%@es do
usu'rio escritas )elo )rogramador.
A sinta4e de chamada a uma fun%&o )ossui o mesmo formato tanto )ara as definidas
)elo )rogramador Kuanto )ara as do sistema.
Neste tra*alho G' foram utilizadas as fun%@es ,ets/0 e ,etc%e/0 do sistema. "utra fun%&o
do sistema de largo uso 1 a s<rt/0 Kue calcula a raiz Kuadrada. #egue um e4em)lo:
Linclude Miostream.hN
Linclude Mmath.hN WW )rot6ti)o )ara sKrt89
void main8void9
O
cout MM [\nRaiz Kuadrada de :+.;: [MM sKrt8:+.;9P
cout MM [\nRaiz Kuadrada de +;.;: [MM sKrt8+;.;9MM endlP
Q
A seguir 1 mostrado um e4em)lo de um )rograma com uma fun%&o criada )elo usu'rio
)ara calcular a m1dia aritm1tica de dois nSmeros reais:
WW fetua o c'lculo da m1dia aritm1tica de dois nSmeros reais.
LincludeMiostream.hN
float media8float n5I float n:9P WW )rot6ti)o
void main8 9
O
float num5I num:I medP
coutMM[\nDigite dois nSmeros: [P
cin NN num5 NN num:P
med V media8num5I num:9P WW chamada J fun%&o
coutMM[\nMedia V [ MM medP
Q
WW Defini%&o da fun%&o
float media8float n5I float n:9
Prof. Luiz Bianchi 31
Curso Prtico de C++
O
float mP
m V 8n5 H n:9 W :P
return mP
Q
,ada fun%&o es)ecificada no )rograma a)resenta os seguintes elementos: )rot6ti)oI
chamada J fun%&o e defini%&o.
Prot:tipo de +un!)es
" )rot6ti)o refereRse a instru%&o de declara%&o Kue esta*elece o ti)o da fun%&o e os
argumentos Kue ela rece*e. " )rot6ti)o da fun%&oI geralmente 1 codificado no in/cio do
)rograma uma vez Kue ele deve )receder a defini%&o e a chamada da fun%&o
corres)ondente.
" ti)o da vari'vel es)ecificado no )rot6ti)o 1 o*rigat6rioI )or1m a informa%&o do nome
da vari'vel 1 facultativa.
A chamada J fun%&o termina com a instru%&o return/0 Kue transfere o controle )ara a
instru%&o seguinte a da chamadora. sta instru%&o tem duas finalidades: determina o +im
:,ico e o vaor de retorno da fun%&o.
De+ini!"o da +un!"o
" cor)o ou o *loco de instru%@es Kue descreve o Kue a fun%&o faz 1 chamado de
defini%&o da fun%&o.
#inta4e da fun%&o:
ti)o nome 8 declara%&o dos argumentos9
O
*loco de instru%@es da fun%&o
Q
Na )rimeira linhaI denominado ca*e%alho da defini%&o da fun%&oI o ti)o es)ecifica Kual
o ti)o de dado retornado )ela fun%&o. "s ti)os de fun%@es s&o os mesmos ti)os das
vari'veis. #e a fun%&o n&o retorna nenhum valor )ara o )rograma Kue a chamou o ti)o
de retorno 1 definido como ti)o void. ,aso nenhum ti)o seGa declarado no ca*e%alho o
sistema considera Kue o valor de retorno ser' do ti)o int.
A es)ecifica%&o do nome da fun%&o segue as mesmas regras descritas )ara nomear
vari'veis e constantes.
,ada fun%&o )ode rece*er v'rios argumentos ou valores e )ode retornar J fun%&o
chamadora um Snico valor.
As informa%@es transmitidas )ara uma fun%&o s&o chamadas de parPmetros. A fun%&o
rece)tora deve declarar essas informa%@es entre )ar7nteses as Kuais )odem ser utilizadas
Prof. Luiz Bianchi 32
Curso Prtico de C++
no cor)o da fun%&o.
#e a defini%&o da fun%&o for escrita )or inteiro antes da instru%&o de sua chamadaI o
corres)ondente )rot6ti)o n&o ser' necess'rio.
" e4em)lo anterior )oderia ser escrito como segue:
WW fetua o c'lculo da m1dia aritm1tica de dois nSmeros reais.
LincludeMiostream.hN
WW Defini%&o da fun%&o
float media8float n5I float n:9
O
float mP
m V 8n5 H n:9 W :P
return mP
Q
void main8 9
O
float num5I num:I medP
coutMM[\nDigite dois nSmeros: [P
cin NN num5 NN num:P
med V media8num5I num:9P WW chamada J fun%&o
coutMM[\nMedia V [ MM medP
Q
Passa,em de parPmetros por vaor
No e4em)lo anterior a fun%&o media declara as vari'veis n? e nD )ara rece*er os
valores )assados. ste ti)o de )assagem de argumentos 1 chamado de passa,em por
vaor )ois os valores das vari'veis do )rograma chamador s&o co)iados )ara as
corres)ondentes vari'veis da fun%&o chamada.
Passa,em de parPmetros por re+er=ncia
"s )arAmetros )assados )or valor s&o co)iados )ara as vari'veis argumentosP a fun%&o
chamada n&o tem acesso as vari'veis originais. Na )assagem )or refer7ncia a fun%&o
chamada )ode acessar e modificar o conteSdo das vari'veis da fun%&o chamadoraI n&o
ocorrendoI so* esse as)ectoI nenhuma c6)ia dos valores.
#egue e4em)lo do uso de refer7ncia como argumento de uma fun%&o:
Prof. Luiz Bianchi 33
Curso Prtico de C++
WW ,onverte a tem)eratura informada em graus Fahrenheit )ara ,elsius.
LincludeMiostream.hN
void celsius 8inth fahrI inth cels9P WW )rot6ti)o
void main89
O
int fI cP
coutMM[\nCnsira a tem)eratura em graus Fahrenheit: [P
cinNNfP
celsius8fIc9P WW chamada J fun%&o
coutMM[\n!em)eratura em graus ,elsius: [MMcP
Q
WW Defini%&o da fun%&o
void celsius8inth fahrI inth cels9
O
cels V 8fahr R $:9 X + W 2P
Q
"*serve Kue 1 utilizado o o)erador @ na declara%&o do ti)o do argumento da fun%&o
rece)tora. As vari'veis +a%r e ces declaradas na fun%&o celsius89 s&o as mesmas
vari'veis + e c da fun%&o )rinci)alI a)enas referenciadas )or outros nomes. PortantoI
KualKuer modifica%&o de conteSdo das vari'veis +a%r e ces realizada )ela fun%&o
celsius89 s&o automaticamente refletidas nas vari'veis + e c da fun%&o main89.
"utro e4em)lo:
WW troca a ordem de dois nSmeros digitados
Linclude Miostream.hN
void troca8inth aI inth*9P
void main8void9
O
int n5In:P
coutMM[\nCnsira dois numeros: [P
cinNNn5NNn:P
cout MM [\nDigitados: [MMn5MM[I [MMn:P
troca8n5In:9P
cout MM [\n!rocados: [MMn5MM[I [MMn:P
Q
void troca8inth aI inth*9
O
int tem)P
tem) V aP
a V *P
* V tem)P
Prof. Luiz Bianchi 34
Curso Prtico de C++
Q
Passa,em e retorno de vaores
As fun%@es do ti)o void n&o retornam nenhum valor e )odem tam*1m n&o rece*er
nenhum argumento.
#egue um e4em)lo Kue rece*e uma constante como argumento e n&o retorna nada:
WW e4i*e um tra%ado em forma de cai4a com um te4to interno.
Linclude Miostream.hN
void linha8int num9P
void main89
O
coutMM[\n\n[P
linha8:$9P
coutMM[\t\ti Csto ec uma moldura i\n[P
linha8:$9P
Q
void linha8int num9
O
coutMM[\t\t[P WW ta*ula%&o du)la
for8int iV;P iMnumP iHH9
coutMMcVcP
coutMMendlP
Q
Resultado do e4em)lo::
VVVVVVVVVVVVVVVVVVV
i Csto e_ uma moldura i
VVVVVVVVVVVVVVVVVVV
A seguirI 1 a)resentado um e4em)lo onde a fun%&o n&o rece*e )arAmetro e n&o retorna
valor. " e4em)lo utiliza o caractere a\4;._ Kue emite um *ee):
WW mite sinal sonoro ao ser digitado um nSmero im)ar.
LincludeMiostream.hN
void main89
O
void *ee)8void9P WW)rot6ti)o local
coutMM[\nDigite um numero )ar: [P
int n)P
cinNNn)P
Prof. Luiz Bianchi 35
Curso Prtico de C++
if 8n)d:VV59
O
coutMM[Boce digitou um numero im)ar[MMendlP
*ee)89P
Q
Q
void *ee)8void9
O
coutMMc\4;.cMMc\4;.cP
for8int iV;P iM+;;;P iHH9P
coutMMc\4;.cMMc\4;.cP
Q
Neste e4em)loI 1 mostrado tam*1m uma forma alternativa de informar o )rot6ti)o da
fun%&o no )rograma: " )rot6ti)o )ode ser declarado como oca ou e-terno. "
)rot6ti)o e-terno 1 escrito antes de KualKuer fun%&o como fora utilizado em e4em)los
anteriores e 1 a forma mais usada. " )rot6ti)o oca 1 escrito no cor)o da fun%&o
chamadora antes de sua chamada.
So&recar,a de +un!)es
As fun%@es com o mesmo nomeI mas com uma lista de )arAmetros diferentes s&o
chamadas de fun%@es so*recarregadas. A diferen%a )ode residir no ti)o ou na Kuantidade
de argumentos da lista de )arAmetros. " sistema identifica a fun%&o a)ro)riada )ara
e4ecu%&o no momento da chamada atrav1s da analise dos )arAmetros )assados.
4em)lo de fun%@es so*recarregadas Kue s&o distinguidas na chamada )elo nSmero
distintos de )arAmetros:
Linclude Miostream.hN
int soma8int aI int *9P WW )rot6ti)o da fun%&o com dois argumentos
int soma8int aI int *I int c9P WW )rot6ti)o da fun%&o com tr7s argumentos
void main8void9
O
cout MM [#oma dos nros.: :;; H 0;5 V [ MM soma8:;;I 0;59 MM endlP
cout MM [#oma dos nros.: 5;; H :;5 H .;; V [
MM soma85;;I :;5I .;;9 MM endlP
Q
int soma8int aI int *9 WW fun%&o soma com dois argumentos
O
return8a H *9P
Q
int soma8int aI int *I int c9 WW fun%&o soma com tr7s argumentos
O
return8a H * H c9P
Prof. Luiz Bianchi 36
Curso Prtico de C++
Q
Fun!)es inine
A fun%&o inline armazena tantas c6)ias de seu c6digo Kuantas forem as chamadas feitas
a elaI ou seGaI onde ocorrer no )rograma uma chamada J fun%&o o com)ilador *ai4a
uma c6)ia dessa fun%&o naKuele local.
A fun%&o inine 1 reconhecida como tal )or conter no ca*e%alho da defini%&o a )alavra
reservada inline e deve ser totalmente escrita antes de se fazer a )rimeira chamada )ara
Kue com)ilador )ossa inserir nesse local uma c6)ia da fun%&o.
4em)lo de um )rograma Kue desenha dois retAngulos de tamanhos distintos:

Linclude Miostream.hN
inline void retangulo8int larI int alt9
O
for 8int iV5P iMValtP iHH9
O
coutMM[\t\t[P
for 8int GV5P GMVlarP GHH9
cout MM c\4DBcP
coutMMc\ncP
Q
Q
void main89
O
coutMM[\n5o.retangulo\n[P
retangulo82I$9P WW o com)ilador insere uma c6)ia da fun%&o inline
coutMM[\n:o.retangulo\n[P
retangulo8.I:9P WW o com)ilador insere uma c6)ia da fun%&o inline
Q
Fun!)es recursivas
Uma fun%&o recursiva 1 aKuela Kue contem uma instru%&o Kue chama a si mesma
re)etidamente um nSmero finito de vezes.
Uma situa%&o em Kue a recursividade 1 a)ro)riada 1 a do c'lculo fatorial.
4em)lo:
Linclude Miostream.hN
int fatorial8int n9P
void main89
O
Prof. Luiz Bianchi 37
Curso Prtico de C++
int nP
do
O
coutMM[\nDigite um numero 8negativo )W encerrar9: [P
cinNNnP
if 8nM;9 *rea=P
coutMM[\nFatorial: [MMfatorial8n9P
Q <hile 859P
Q
int fatorial8int n9
O
return 88n V V ;9 j 5 : n X fatorial8nR599P
Q
Fun!)es do usurio armaIenadas em &i&iotecas
Fun%@es de uso geral escritas )elo usu'rioI geralmenteI s&o armazenadas em arKuivos
organizados em )astas es)ec/ficasI constituindoRse nas chamadas &i&iotecas do
usurio. "s )rogramas )odem acessar essas *i*liotecas )ara adicionar fun%@es a )artir
de arKuivos nomeados no )rograma. ` conveniente citar Kue esse )rocedimento 1
*astante utilizado )or )rogramadores )rofissionais.
A inclus&o de fun%@es escritas e armazenadas em arKuivo se)arado do )rograma
)rinci)al 1 feita atrav1s da diretiva #incudeI onde 1 indicadoI entre as)as du)lasI o
nome do arKuivo )recedido do endere%o de sua localiza%&o.
#egue e4em)lo de um )rograma com)osto )ela fun%&o )rinci)al e )or outras duas
fun%@es armazenadas no arKuivo de nome Ymedia,4a.*i*Z da *i*lioteca c)).
WW fetua o c'lculo da m1dia e e4i*e o resultado numa cai4a de te4to.
Linclude Miostream.hN
Linclude[c:\c))\media,4a.*i*[
void main89
O
coutMM[\n\n[P
linha8:;9P
int med V media8$;I:;9P
coutMM[\n\t\tii Media V [MMmedMM[ ii\n[P
linha8:;9P
Q
,onteSdo do arKuivo Ymedia,4a.*i*Z:
WW Defini%&o da fun%&o c'lculo da m1dia.
float media8float n5I float n:9
O
Prof. Luiz Bianchi 38
Curso Prtico de C++
float mP
m V 8n5 H n:9 W :P
return mP
Q
WW Defini%&o da fun%&o cai4a de te4to.
void linha8int num9
O
coutMM[\t\t[P
for8int iV;P iMnumP iHH9
coutMMcVcP
Q
Resultado da e4ecu%&o:
VVVVVVVVVVVVVVVVV
ii M1dia V :+ ii
VVVVVVVVVVVVVVVVV
Escopo das variveis
" esco)o define o Pm&ito de visi&iidade de vari'veis. m outras )alavrasI determina
de Kue locais do )rograma uma vari'vel )ode ser acessada e modificada.
3' Kuatro categorias de vari'veis:
auto R autom'ticasP
e-tern R e4ternasP
static R est'ticasP
re,ister R em registradores.
auto
As vari'veis usadas em todos os e4em)los at1 aKui a)resentados s&o da categoria
autom'tica. #&o vis/veis a)enas Js fun%@es nas Kuais s&o declaradas. Auto 1 uma
)alavra reservada )ara declarar uma vari'vel autom'ticaI no entantoI se nada for
mencionado na defini%&o da vari'velI ela 1 considerada auto. As vari'veis autom'ticas
s&o criadas em tem)o de e4ecu%&o do *loco ou da fun%&oI n&o s&o inicializadas )elo
sistema e ao terminar a e4ecu%&o s&o destru/das.
e4tern
As vari'veis e4ternas s&o declaradas fora da defini%&o da fun%&o. Uma vari'vel e4terna
1 vis/vel a todas as fun%@esI ou seGaI )ode ser acessada e modificada )or KualKuer
fun%&o definida a)6s a sua declara%&o. " es)a%o de mem6ria alocado )ara esta vari'vel
1 criado em tem)o de com)ila%&o e destru1do no encerramento do )rograma. Por
defaultI as vari'veis e4ternas s&o inicializadas com zeros.
A )alavra reservada e-tern deve ser )recedida na declara%&o da vari'vel somente no
caso de ter sido criada em outro )rograma Kue fora com)ilado em se)arado.
Prof. Luiz Bianchi 39
Curso Prtico de C++
WW mostra o uso de vari'veis e4ternas e autom'ticas
Linclude Miostream.hN
int i V 5;P WW vari'vel e4terna
int GP WW vari'vel e4terna inicializada com zero
void soma8int 4I int U9P
void main89
O
coutMM[\nCnsira um numero: [P
cinNNGP
int = V 5P WW vari'vel autom'tica
auto int m V :P WW idem
soma8=Im9P
coutMM[\n#oma: [MMGP
Q
void soma8int 4I int U9
O
G HV i H 4 R UP
Q
Bari'veis autom'tica e e4terna com o mesmo identificador ao ser referenciada no
)rogramaI o sistema d' )rioridade )ara a vari'vel autom'tica Kue tem )reced7ncia so*re
a vari'vel e4terna. Neste casoI )ara acessar a vari'vel e4terna deve ser usado o
operador de escopo 8669 antes do nome da vari'vel.
4em)lo:
WW mostra o uso do o)erador de esco)o
Linclude Miostream.hN
int i V 5;P WW vari'vel e4terna
int GP WW vari'vel e4terna inicializada com zero
void main89
O
int i V 5P WW vari'vel autom'tica
int G V :P WW idem
coutMM[\n4ternas: [MM::iMM[I [MM::GP
coutMM[\nAutomaticas: [MMiMM[I [MMGP
Q
Resultado da e4ecu%&o:
4ternas: 5;I ;
Autom'ticas: 5I :
Prof. Luiz Bianchi 40
Curso Prtico de C++
static
As vari'veis est'ticasI como as autom'ticasI s&o vis/veis a)enas )ela fun%&o em Kue
foram declaradasI com a diferen%a de Kue elas mant7m armazenados seus valores
Kuando a fun%&o 1 encerrada. As vari'veis static s&o criadas em tem)o de com)ila%&o e
s&o inicializadas com zero na aus7ncia de inicializa%&o e4)l/cita.
4em)lo:
WW mostra o uso do o)erador de esco)o
Linclude Miostream.hN
void soma8void9P
void main89
O
soma89P soma89P
Q
void soma89
O
static int i V +P WW vari'vel est'tica
coutMM[\n#tatic i: [MMiHHP
Q
Resultado da e4ecu%&o:
#tatic i: +
#tatic i: -
Na )rimeira chamadaI o sistema inicia e encerra a e4ecu%&o da fun%&o soma e ao
reiniciar a fun%&oI na segunda chamadaI o conteSdo anterior da vari'vel continua
)reservado.
register
A classe register 1 a)licada a vari'veis declaradas com ti)os de dados int e c%ar e s&o
semelhantes Js autom'ticasI e4ceto )or serem armazenadas em com)onentes de
mem6ria de alta velocidade de acesso e )rocessamento denominados re,istradores. #&o
inicializadas com zero na aus7ncia de inicializa%&o e4)l/cita.
4em)lo:
Linclude Miostream.hN
void main8 9
O
register int 4P
Q
Q
Prof. Luiz Bianchi 41
Curso Prtico de C++
Diretivas
As diretivas s&o instru%@es da *i*lioteca de )rogramas do com)ilador ,HH Kue s&o
)rocessadas antes da com)ila%&o )ro)riamente dita. " )r1R)rocessador Kue analisa as
diretivas faz )arte do com)ilador. le su*stitui a indica%&o do arKuivo declarado na
diretiva do )rogramaRfonte )elo seu conteSdo. As diretivasI geralmenteI s&o escritas no
in/cio do )rogramaI no entantoI )odem ser escritas em KualKuer lugar do )rograma antes
de serem usadas.
As diretivas mais utilizadas s&o:
LincludeI LdefineI Lundef.
A diretiva Linclude determina a inclus&o do arKuivo es)ecificado no )rograma )or meio
do )r1R)rocessador.
4em)lo:
Linclude Miostream.hN
" nome do arKuivo de inclus&o )ode ser delimitado )or as)as: Yiostream.hZ em vez dos
s/m*olos M e N. As as)as fazem com Kue a *usca do arKuivo comece no diret6rio atual
do sistema e de)ois no diret6rio incude.
Para usar as fun%@es da *i*lioteca de )rograma ,HHI deveRse incluir um arKuivo de
ca*e%alho da *i*lioteca Kue es)ecifica o )rot6ti)o da fun%&o. "s nomes dos arKuivos de
inclus&o )ossuem a e4tens&o $% 8header9 e se encontram armazenados no diret6rio
incude.
#eguem os nomes de alguns arKuivos da *i*lioteca de inclus&o:
conio.h ctU)e.h dir.h dirent.h dos.h
errno.h fcntl.h float.h fstream.h generic.h
gra)hics.h io.h iomani).h iostream.h limits.h
locale.h malloc.h math.h mem.h )rocess.h
setGm).h share.h signal.h stdarg.h stddef.h
stdio.h stdiostr.h stdli*.h stream.h string.h
strstrea.h sUs\stat.h sUs\time.h sUs\tU)es.h time.h
Algumas fun%@es contidas no arKuivo de inclus&o math.h:
8" )rot6ti)o da fun%&o informa Kue ti)o de dado 1 retornado e Kue ti)o de dado deve
ser enviado como )arAmetro9.
Fun%@es matem'ticas:
int a&s8int9 8determina o valor a*soluto e inteiro9
dou*le +a&s8dou*le9 8determina o valor a*soluto e real9
dou*le po78dou*le base, dou*le exp9 8)otencia%&o: )o<8$.:I+.-9 V $.:
+.-
9
dou*le s<rt8dou*le9 8raiz Kuadrada: sKrt82.;9 V $.;9
Fun%@es de arredondamento )ara inteiro:
dou*le cei8dou*le9P 8arredonda )ara cima: ceil8$.:9 V (.;9
Prof. Luiz Bianchi 42
Curso Prtico de C++
dou*le +oor8dou*le9P 8arredonda )ara *ai4o: floor8$.:9 V $.;9
Fun%@es trigonom1tricas do Angulo arcoI em radianos:
dou*le sin8dou*le9
dou*le cos8dou*le9
dou*le tan8dou*le9
dou*le asin8dou*le9
dou*le acos8dou*le9
dou*le atan8dou*le9
Fun%@es logar/tmicas:
dou*le o,8dou*le9P
dou*le o,?>8dou*le9P
Prof. Luiz Bianchi 43
Curso Prtico de C++
EETO8ES E MAT8;RES
Bari'veis com)ostas do mesmo ti)o de dado 8inteiroI real ...9 s&o denominadas de
conGunto homog7neo de dados. sses agru)amentos de vari'veis s&o conhecidos como
vetoresI matriIes 8arraUsI em ingl7s9I ta*elas ou vari'veis inde4adas ou su*scritas.
#&o vari'veis do mesmo ti)o declaradas com o mesmo identificador e referenciadas )or
um /ndice )ara determinar sua localiza%&o dentro da estrutura.
m outras )alavrasI vetor ou matriz 1 uma s1rie de elementos 8vari'veis9 do mesmo
ti)oI declarados com um Snico nomeI sendo Kue cada elemento ou vari'vel 1 acessado
individualmente atrav1s de /ndices.
` conveniente citar Kue muitos autores distinguem as estruturas com)ostas homog7neasI
chamando as estruturas de uma dimens&o de vetores eI as de mais de uma dimens&oI de
matrizes. Neste tra*alhoI achouRse a)ro)riado usar essas nomenclaturasI tratandoRas em
se%@es se)aradas.
Eetores
Um vetor 1 constitu/do de vari'veis com)ostas unidimensionaisI tam*1mI chamado de
matriz unidimensional e Kue necessitam de a)enas um /ndice )ara Kue suas vari'veis
seGam endere%adas.
Um modo sim)les de entender um vetor 1 atrav1s da visualiza%&o de uma lista de
elementos Kue cont1m um nome e um /ndice )ara referenciar os valores dessa lista.
4em)lo:
i nota
; 2.+
5 ..(
: +.0
$ 0.;
( -.;
i 8/ndice9 re)resenta o nSmero de refer7ncia e nota 8identificador9 1 o nome do conGunto
de elementos. Dessa formaI )odeRse dizer Kue a $
a
nota 1 +.0 e Kue )ode ser
re)resentado como segue: nota]:^ V +.0. ,omo )ode ser vistoI a lista de notas cont1m
nSmeros reais ou 1 do ti)o de dados +oat.
m ,HHI esta lista )oderia ser declarada assim:
float nota]+^P
A seguir 1 a)resentado e4em)lo de um )rograma Kue calcula a m1dia aritm1tica das
notas de )rovas de cinco alunos e e4i*e as notas maiores ou iguais a m1dia:
Prof. Luiz Bianchi 44
Curso Prtico de C++
Linclude Miostream.hN
void main89
O
float nota]+^P WW declara%&o do vetor
float mediaV;P
for8int iV;P iM+P iHH9
O
coutMM[Digite a [MM8iH59MM[a.nota: [P
cinNNnota]i^P WW armazena a nota no vetor
media HV nota]i^P
Q
media WV +P
coutMM[\nRelacao das notas maiores ou iguais a media: [MMmediaP
for8iV;P iM+P iHH9
O
if8nota]i^NVmedia9
coutMMc\ncMMnota]i^P WW lista a nota a )artir do vetor
Q
Q
Resultado da e4ecu%&o:
Digite a 5a.nota: 2.+
Digite a :a.nota: ..(
Digite a $a.nota: +.0
Digite a (a.nota: 0.;
Digite a +a.nota: -.;
Relacao das notas maiores ou iguais a media: ..$(
2.+
..(
0.;
Decara!"o de vetor
#inta4e da declara%&o:
ti)o nome]n^P
n entre colchetes re)resenta o nSmero de ocorr7ncias ou a Kuantidade de elementos da
vari'vel nome de um tipo es)ec/fico.
float nota]+^P
1 o vetor declarado no e4em)lo do )rograma anterior. le 1 formado )or cinco
elementos do ti)o +oat. " /ndice utilizado )ara referenciar os elementos 1 iniciado )or
zero e )ode ser o valor de uma constante ou de uma vari'vel inteira. No e4em)lo acima
foi utilizado como /ndice a vari'vel de nome i.
Prof. Luiz Bianchi 45
Curso Prtico de C++
;niciaiIa!"o de um vetor
Um vetor )ode rece*er valores na mesma instru%&o de sua declara%&o.
4em)lo:
int *rasil] ^ V O+0I-:I.;I2(I;:QP
" valores s&o escritos entre chavesI se)arados )or v/rgulas. Num vetor inicializado
)odeRse su)rimir o nSmero de elementosI dei4ando o )ar de colchetes vazioI ou
informar de modo e4)l/cito o nSmero de elementosI como segue:
int *rasil]+^ V O+0I-:I.;I2(I;:QP
Atri&ui!"o de vaores
,ada elemento do vetor 1 referenciado )or um /ndice cuGa numera%&o come%a em zero.
A instru%&o
nota](^ V 5;.;P
atri*ui o valor 5;.; ao Kuinto elemento do vetor. ,omo o /ndice 1 numerado a )artir de
zeroI o /ndice do Sltimo elemento do vetor 1 igual ao tamanho do vetor e 5.
Taman%o do vetor
Um vetor n&o )ode ser declarado de tamanho vari'vel. Para controlar o limite m'4imo
do vetor )odeRse declarar uma constante sim*6lica atrav1s da diretiva Ldefine )ara
controlar o tamanho do vetor.
" )rograma anterior )oderia ser codificado como segue:
Linclude Miostream.hN
Ldefine !AM + WW controla limite do vetor
void main89
O
float nota]!AM^P WW declara%&o do vetor
float mediaV;P
for8int iV;P iM!AMP iHH9
O
coutMM[Digite a [MM8iH59MM[a.nota: [P
cinNNnota]i^P
media HV nota]i^P
Q
media WV !AMP
coutMM[\nRelacao das notas maiores ou iguais a media: [MMmediaP
for8iV;P iM!AMP iHH9
O
if8nota]i^NVmedia9
Prof. Luiz Bianchi 46
Curso Prtico de C++
coutMMc\ncMMnota]i^P
Q
Q
Desta formaI 1 facilitada a altera%&o do tamanho do vetor. ,aso se )retenda calcular a
m1dia de mais alunosI *asta modificar o te4to da constante sim*6lica. Por e4em)loI
)ara )rocessar as notas de :; alunosI )odeRse a)enas alterar a instru%&o da diretiva
Ldefine )ara Ldefine !AM :;.
MatriIes
PodeRse tratar matrizes de v'rias dimens@es. " limite dimensional de)ende dos recursos
de )rocessamento dis)on/veis. Matrizes unidimensionaisI mais conhecidas como
vetoresI foram descritas na se%&o anterior. Nesta se%&oI ser&o discutidas as matrizes
*idimensionaisI as mais utilizadas na )r'tica.
Por e4em)loI a declara%&o
Cnt A]$^]+^
define uma matriz *idimensional de $ 4 + V 5+ nSmeros inteiros. ` conveniente
imaginarI o )rimeiro /ndice como o /ndice de linha e o segundo como /ndice de coluna.
AssimI entendeRse como mostrado na seguinte ilustra%&o:
];^];^ ];^]5^ ];^]:^ ];^]$^ ];^](^
]5^];^ ]5^]5^ ]5^]:^ ]5^]$^ ]5^](^
]:^];^ ]:^]5^ ]:^]:^ ]:^]$^ ]:^](^
Do mesmo modo como ocorre com os vetoresI os /ndices come%am em zero e v&o at1 o
tamanho das dimens@es da matriz menos uma unidade.
#egue e4em)lo de um )rograma Kue tem )or o*Getivo carregar uma matriz + 4 $ com
valores das vendas de uma em)resaI em Kue cada linha re)resente as vendas de um
vendedor e cada coluna um m7s de vendas. m seguidaI o )rograma deve determinar e
escrever o c6digo do vendedor e o valor das vendas Kue esteGam acima da m1dia.
sKuema de armazenamento:
5 : $
5; $0;;I;; (:;;I;; :(-;I;;
:; (5+;I;; $2(;I;; +5:;I;;
$; $0.;I;; (;-;I;; ($5;I;;
(; $-;;I;; $+;;I;; (-;;I;;
+; +:.;I;; (+:;I;; (;2;I;;
Prof. Luiz Bianchi 47

vendedor
m7s
Curso Prtico de C++
Linclude Miostream.hN
void main89
O
float vendas]+^]$^P WW declara%&o da matriz
float somaV;I mediaP
for8int iV;P iM+P iHH9
for8int GV;P GM$P GHH9
O
coutMM[Cnsira o valor da venda R vendedor: [MM88iH59X5;9MM[ m7s Y
MMGH5MM[: [P
cinNNvendas]i^]G^P
soma HV vendas]i^]G^P
Q
media V somaW+P
for8iV;P iM+P iHH9
O
soma V ;P
for8int GV;P GM$P GHH9
soma HV vendas]i^]G^P
if 8somaNmedia9
coutMM[\nBendedor: [MM88iH59X5;9MM[ valor: [MMsomaP
Q
Q
;niciaiIa!"o de matriI &idimensiona
Uma matriz de duas dimens@es contendoI )or e4em)loI as notas de Kuatro )rovas de tr7s
alunos )ode ser visualizada como a lista a)resentada a*ai4o: 8os nSmeros colocados
fora da ta*ela re)resentam os valores dos /ndices9.
4em)lo:
; 5 : $
; 0.+ ..; ..0 2.;
5 ..$ 0.: +.2 -.+
: -.; 0.; ..; ..:
#egue a inicializa%&o da matriz com os valores da ta*ela acima:
float notas]$^](^ V O O0.+I ..;I ..0I 2.;QI
O..$I 0.:I +.2I -.+QI
O-.;I 0.;I ..;I ..:Q QP
" valores de toda matriz s&o escritos entre chavesI )odendo ser numa Snica linhaI eI
igualmenteI entre chaves a)arecem os valores das linhas se)arados )or v/rgulas eI )or
sua vezI as linhas tam*1m s&o se)aradas )or v/rgulas a)6s o seu fechamento de chave.
Prof. Luiz Bianchi 48
Curso Prtico de C++
Passando vetores e matriIes para +un!)es
Assim como as vari'veisI os vetores e matrizes )odem ser )assados como argumento
)ara uma fun%&o.
#inta4e da )assagem )ara a fun%&o:
nomeTfun%&o 8nomeTvetorI elementosTvetor9
#inta4e do rece*imento )ela fun%&o:
ti)o nomeTfun%&o 8ti)o nomeTvetor] ^I ti)o elementosTvetor 9
A seguir 1 mostrado um e4em)lo Kue )assa vetores )ara a fun%&o e4i*e89 )ara relacionar
o conteSdo desses vetores:
Linclude Miostream.hN
void e4i*e 8int lista]^I int elementos9P WW )rot6ti)o da fun%&o
void main89
O
int )ar]5;^ V O:I (I -I 0I 5;I 5:I 5(I 5-I 50I :;QP WW declara%&o e inicializa%&o
int im)ar]5;^ V O5I $I +I .I 2I 55I 5$I 5+I 5.I 52QP WW idem
coutMM[\nNumeros )ares: [P
e4i*e8)arI5;9P WW chama fun%&o e4i*e
coutMM[\nNumeros im)ares: [P
e4i*e8im)arI 5;9P WW chama a fun%&o e4i*e
Q
void e4i*e 8int lista]^I int elementos9 WW rece*e os agumentos
O
for8int iV;P iMelementosP iHH9
coutMMlista]i^MMc cP
Q
,omo se v7I na chamada J fun%&o e4i*e89I o nome da matriz 1 escrito sem colchetesI
cuGo argumento 1 rece)cionado numa vari'vel seguida de colchetes vazios.
De modo semelhante ao vetor 1 feita a )assagem de matriz )ara fun%&o. A sinta4e da
)assagem de valores de uma matriz de duas dimens@es )ara a fun%&o 1 a mesma
a)resentada )ara o vetor. No entantoI aos )arAmetros rece*idos )ela fun%&o deve ser
inclu/do o /ndice da segunda dimens&o a)6s os colchetes vaziosI sem se)ar'Rlos )or
v/rgula.
A seguir 1 a)resentado um e4em)lo onde a fun%&o somaLinha89 efetua a soma dos
valores de cada linha da matriz e as e4i*e:
Linclude Miostream.hN
const linV+I colV$P
Prof. Luiz Bianchi 49
Curso Prtico de C++
void somaLinha8int somaLinha]^]col^I int linha9P
void main89
O
int matriz]lin^]col^ V OO5I:I$QIO(I+I-QIO.I0I2QI
O5;I55I5:QIO5$I5(I5+QQP
somaLinha8matrizIlin9P
Q
void somaLinha8int mat]^]col^I int linha9
O
int somaV;P
for8int iV;P iMlinhaP iHH9
O
soma V ;P
for8int GV;P GMcolP GHH9
soma HV mat]i^]G^P
coutMM[\n#oma da linha [MM8iH59MM[: [MMsomaP
Q
Q
Resultado do e4em)lo:
#oma da linha 5: -
#oma da linha :: 5+
#oma da linha $: :(
#oma da linha (: $$
#oma da linha +: (:
,onv1m notar Kue tanto os vetores como as matrizes )odem ter seus valores
modificados )ela fun%&o chamadaI uma vez Kue a )assagem de )arAmetros dessas
estruturas sem)re se faz )or refer7ncia e n&o )or valor.
Prof. Luiz Bianchi 50
Curso Prtico de C++
ST8;NS DE CA8ACTE8ES
Uma string ou cadeia de caracteres )ode ser entendida como uma s1rie de letrasI
nSmeros e sim*olos es)ecias escritos entre as)asI como )or e4em)loI a e4)ress&o
Y,urso )r'tico de ,HHZ.
Uma string de caracteres 1 declarada como um vetor do ti)o c%ar ca)az de armazenar
um te4to de um com)rimento es)ec/fico cuGo t1rmino 1 marcado com o caractere zero
8a\;_9. " modo de indicar o Sltimo elemento do vetor 1 a )rinci)al diferen%a entre um
vetor de carateres e outros ti)os de vetores.
" caractere a\;_ re)resenta o s/m*olo NULL ou o decimal zero na ta*ela A#,CC. `
conveniente dizer Kue os caracteres Kue n&o )odem ser o*tidos diretamente do teclado
como a tecla !ABI )or e4em)loI em ,HH eles s&o codificados atrav1s da com*ina%&o de
outros caracteresI geralmenteI antecedidos )or uma *arra invertida 8\9.
,ada caractere de uma string ocu)a um *Ute na mem6ria e todos s&o armazenados
consecutivamenteI sendo Kue o Sltimo *Ute armazena o caractere NULL 8a\;_9I como
mostra a ilustra%&o Kue segue:
# e 4 t a f e i r a \;
;niciaiIando strin, de caracteres
" vetor de caracteres a)resentado na ilustra%&o acima )ode ser inicializado atrav1s do
modo )adr&oI como segue:
char te4to ]^ V Oa#_I ae_I a4_I at_I aa_I a _I af_I ae_I _i_I _r_I _a_I _\;_Q
ou do modo sim)lificado:
char te4to]^ V Y#e4ta feiraZ
No modo )adr&o os caracteres s&o escritos entre a)6strofos e 1 informado o caractere de
fim 8a\;_9. No segundo casoI modo sim)lificadoI a constante 1 escrita entre as)as e o
caractere a\;_ 1 inserido automaticamente )elo sistema.
Um caractere colocado entre a)6strofos 1 denominado constante de caractere e entre
as)asI constante strin, de caracteres Kue sem)re 1 seguida do caractere a\;_
acrescentado )elo com)ilador.
A seguirI um e4em)lo Kue armazena as letras de A a D no vetor de nome letras atrav1s
do la%o +or eI em seguidaI as e4i*e na tela:
Linclude Miostream.hN
void main89
O
char letras]:.^P WW :- letras mais o caractere NULL
Prof. Luiz Bianchi 51
Curso Prtico de C++
for 8int iV;I char letVcAcP letMVcDcP letHHI iHH9
letras]i^ V letP
letras]i^ V c\;cP WW acrescenta o caractere NULL no fim
for8iV;P letras]i^ fV c\;cP iHH9
coutMMletras]i^P
WW ou
coutMMc\ncMMletrasP
Q
Resultado do e4em)lo::
AB,DFE3CFmLMN"PgR#!UBnboD
AB,DFE3CFmLMN"PgR#!UBnboD
Atri&ui!"o de strin,
Para atri*uir um valor a uma string de caracteres o m1todo )r'tico 1 utilizar a fun%&o
Kue a)resenta a seguinte sinta4e:
strcp' 8string5I string:9P
ste comando faz uma c6)ia do conteSdo da string: )ara a string5. A utiliza%&o dessa
fun%&o e4ige a indica%&o do arKuivo de ca*e%alho strin,$% atrav1s da diretiva Linclude.
4em)lo:
Linclude Miostream.hN
Linclude Mstring.hN WW )rot6ti)o da fun%&o
void main89
O
char nome]+;^P
strc)U8nomeI [ oasmin Ea*rielle[9P
coutMMnomeP
Q
" nome oasmin Ea*rielle 1 atri*uido ou co)iado )ara o vetor com o identificador
nome.
Entrada de strin, a partir do tecado
" o*Geto cin como at1 agora fora utilizado )ara dar entrada de valores oriundos do
teclado n&o 1 a)ro)riado )ara ler string de caracteres constitu/da de )alavras e es)a%osI
)orKuanto a entrada 1 encerrada Kuando o comando cin encontra um es)a%o em *ranco.
#egue um e4em)lo:
Prof. Luiz Bianchi 52
Curso Prtico de C++
Linclude Miostream.hN
void main89
O
char nome]+;^P
coutMM[Digite um nome: [P
cinNNnomeP
coutMMnomeP
Q
Resultado do e4em)lo:
Digite um nome: oasmin Ea*rielle
oasmin
,omo se v7I o comando cin encerra a entrada ao encontrar o es)a%o em *ranco entre os
dois nomes digitados.
Para introduzir o nome ou um te4to com)leto 1 comum a utiliza%&o do m1todo ,etine
do o*Geto cin Kue encerra a entrada ao ser )ressionada a tecla N!R. " seguinte
e4em)lo corrige o anterior:
Linclude Miostream.hN
void main89
O
char nome]+;^P
coutMM[Digite um nome: [P
cin.getline8nomeI+;9P
coutMMnomeP
Q
Resultado do e4em)lo:
Digite um nome: oasmin Ea*rielle
oasmin Ea*rielle
" )rimeiro )arAmetro da instru%&o cin$,etine /nomeMT>0 1 o nome da vari'vel 8como o
vetorI neste caso9 onde o dado de entrada do usu'rio ser' armazenado e o segundo
)arAmetro indica o tamanho m'4imo dessa vari'vel.
Uma string de caracteres )ode ser considerada como uma matriz de uma linha )or n
colunas onde 1 referenciada a)enas a coluna. Assim sendoI 1 )oss/vel inserir outras
linhasI transformandoRa numa matriz de duas dimens@es. #egue um e4em)lo onde s&o
codificados os meses do ano:
Linclude Miostream.hN
void main89
Prof. Luiz Bianchi 53
Curso Prtico de C++
O
char meses]5:^](^ VO[Gan[I[fev[I[mar[I[a*r[I[mai[I[Gun[I
[Gul[I[ago[I[set[I[out[I[nov[I[dez[QP
int mesP
do
O
coutMM[Digite o numero do mes: [P
cinNNmesP
Q <hile8mesM5 ii mesN5:9P
coutMM[\n#igla do mes: [MMmeses]8mesR59^MMendlP
Q
Resultado do e4em)lo:
Digite o numero do mes: 5;
#igla do mes: out
"*serve Kue em*ora a matriz c%ar mesesU?DVUWV a)resente dois /ndices 8matriz
*idimensional9I a instru%&o )ara im)res&o na tela:
coutMM[\n#igla do mes: [MMmeses]8mesR59^MMendlP
utiliza a)enas um /ndice U/mesX?0V.
Passando strin,s para +un!)es
A )assagem de uma string de caracteres 1 semelhante a )assagem de um vetor como um
)arAmetro.
#egue um e4em)lo de um )rograma Kue e4i*e na tela uma string de caracteres:
Linclude Miostream.hN
void e4i*e8char t4t]^9P
void main89
O
coutMM[\nDigite uma linha de te4to: [P
char te4to]0;^P
cin.getline8te4toIsizeof8te4to99P
e4i*e8te4to9P
Q
void e4i*e8char t4t]^9
O
coutMM[\n!e4to digitado: [MMt4tP
Q
Prof. Luiz Bianchi 54
Curso Prtico de C++
Resultado do e4em)lo:
Digite uma linha de te4to: Passagem de )arametro.
!e4to digitado: Passagem de )arametro.
,omo se v7I es)ecif/caRse na fun%&o void e-i&e/c%ar t-tUV0 o ti)o e o nome do vetor
seguidos de dois colchetesI sem a es)ecifica%&o do tamanho da string.
BerificaRse tam*1m neste e4em)lo Kue a instru%&o cin$,etine/te-toMsiIeo+/te-to00Y
a)arece ligeiramente modificada em rela%&o JKuela utilizada no )rograma da sec&o
anterior. sse formato torna o )rograma mais fle4/velI uma vez Kue n&o demanda
nenhuma altera%&o caso o tamanho da vari'vel te-to seGa modificado.
Outras +un!)es de strin,s
"s com)iladores ,HH fornecem uma cole%&o de fun%@es diferentes de mani)ula%&o de
strings. A *i*lioteca referente ao arKuivo de ca*e%alho strin,$% define v'rias fun%@es
)ara e4ecutar o)era%@es de mani)ula%&o de strings como a fun%&o strc)U G' a)resentada.
A seguirI s&o descritas *revemente algumas delas:
strcat/str?M strD0Y
,oncatena a string de carateres str? J string strD.
strcmp/str?M strD0Y
,om)ara as strings str? e strD. Retorna zeroI se as strings forem iguaisP retorna um
valor maior Kue zeroI se str? for maior Kue strDP e retorna um nSmero menor Kue zeroI
se str? for menor Kue strD.
srten/str?0
Retorna o tamanho ou o nSmero de carateres armazenados em str?.
Prof. Luiz Bianchi 55
Curso Prtico de C++
EST8UTU8AS DE DADOS
struturas s&o agru)amentos de dados relacionados Kue )odem ser de diferentes ti)os
*'sicos 8intI floatI dou*leI char e void9 so* uma Snica declara%&o. F' foi visto Kue as
matrizes s&o ti)os de vari'veis Kue agru)am dados do mesmo ti)o *'sico. As estruturas
tam*1m s&o ti)os de vari'veisI mas Kue )odem agru)ar dados de ti)os *'sicos
diferentes. "s itens de dados das estruturas s&o denominados mem&rosI ao )asso Kue
das matrizes s&o chamados de eementos.
"s agru)amentos de dados mais im)ortantes dis)on/veis em ,HH s&o as estruturas
com seus dadosXmem&ros e as cassesM Kue caracterizam a )rograma%&o orientada a
o*GetosI com seus dadosXmem&ros e +un!)esXmem&ros. ,omo a declara%&o das
estruturas se assemelha J das classesI a com)reens&o daKuelas aGuda so*remaneira no
entendimento de classes e o*Getos.
De+ini!"o da estrutura
" formato da estrutura 1 discriminado como segue:
struct nome
O
ti)o mem*ro5P
ti)o mem*ro:P
$$$
Q vari'veisP
A estrutura 1 definida com a )alavraRchave struct seguida de um nome identificador.
ntre chaves 1 es)ecificado um ou mais itens de dados 8ti)o e mem*ro9 eI )or SltimoI as
vari'veis Kue tanto )odem ser declaradas aKui como em outra )arte do )rograma Kue
ser' mostrado mais adiante.
4em)lo de um )rograma Kue cria uma estrutura com descri%&o e )re%oI introduz e
e4i*e seus conteSdos:
Linclude Miostream.hN
Linclude Mstring.hN
struct )roduto
O
char descr]+;^P
float )recoP
Q hdI cdP
void main89
O
strc)U8hd.descrI[3ard dis= Ma4tor[9P
hd.)reco V :+;.(:P
Prof. Luiz Bianchi 56
Curso Prtico de C++
coutMM[Descricao: [P
cin.getline8cd.descrI+;9P
coutMM[Preco: [P
cinNNcd.)recoP
coutMM[\n3D R\tDescricao: [MMhd.descrP
coutMM[\n\tPreco: [MMhd.)recoMMendlP
coutMM[\n,D R\tDescricao: [MMcd.descrP
coutMM[\n\tPreco: [MMcd.)recoP
Q
"utro modo de declarar as vari'veis da estrutura 1 usando o nomeRti)o da estrutura
seguido das vari'veis dentro da fun%&o:
Linclude Miostream.hN
Linclude Mstring.hN
struct )roduto
O
char descr]+;^P
float )recoP
QP WW )onto e v/rgula a)6s o fechar chaves
void main89
O
)roduto hdI cdP WW ti)o da estrutura e suas vari'veis
$$$
Q
RessalteRse Kue a cria%&o da estrutura a)enas caracteriza a defini%&o de um novo ti)o de
dado criado )elo usu'rio. Para sua utiliza%&oI deveRse declarar ao menos uma vari'vel
do ti)o )rodutoI neste caso. p cada vari'velI %d e cd declaradas no e4em)loI 1
reservado es)a%o cont/guo de mem6ria necess'rio )ara armazenar todos os mem*ros da
estrutura.
A defini%&o da estrutura fora de KualKuer fun%&oI como a Kue foi criada no )rograma
acimaI )ermite acesso a seus mem*ros )or todas as fun%@es es)ecificadas no )rograma.
Por outro ladoI a estrutura criada dentro da fun%&o restringe o acesso a esta fun%&o.
Acesso a mem&ros da estrutura
Para acessar um mem*ro da estruturaI deveRse informar os nomes da vari'vel e do
res)ectivo mem*ro conectados )or meio do o)erador )onto 8$9.
4em)lo de uma instru%&o de atri*ui%&o:
hd.)reco V :+;.(:P
ste e4em)lo atri*ui o valor :+;.(: ao mem*ro )reco da vari'vel hd.
Prof. Luiz Bianchi 57
Curso Prtico de C++
;niciaiIa!"o de estruturas
As estruturas )odem ser inicializadas na mesma instru%&o de sua defini%&o e se )arecem
com a inicializa%&o de vetores e matrizes.
#egue um e4em)lo:
Linclude Miostream.hN
struct contrato
O
int matriculaP
char nome]:;^P
float salarioP
QP
void main89
O
contrato func V O5:$I [Ana Maria da #ilva[I :+;;.;;QP
Q
Os valores atribudos varivel func devem seguir a ordem de acordo com a declarao
dos membros na estrutura, separados por vrgulas e entre chaves.
Anin%amento e matriI de estruturas
O aninhamento de estruturas refere-se quelas estruturas que participam como membros
de outras estruturas. No exemplo, a seguir, v-se a estrutura data definida como
membro da estrutura contrato. Verifica-se tambm no mesmo exemplo uma matriz de
50 elementos declarada na varivel func da estrutura contrato.
O exemplo objetiva cadastrar e listar elementos da varivel func (funcionrio) e exibir o
valor total dos salrios listados, segundo opo dada a escolher ao usurio.
#include <iostream.h>
#include <iomanip.h>
struct data // estrutura do tipo data
{
int dia, mes, ano; // membros da estrutura
};
struct contrato // estrutura do tipo contrato
{
char nome[30];
float salario;
Prof. Luiz Bianchi 58
Curso Prtico de C++
data nasc; // membro da estrutura do tipo data
};
void incluir(); // prottipo da funo incluir()
void listar(); // prottipo da funo listar()
contrato func[50]; // declara uma matriz de estrutura
int i=0;
void main()
{
int oper;
int verdade=1;
while(verdade)
{
cout<<"1 para incluir";
cout<<"\n2 para listar";
cout<<"\n3 para encerrar : ";
cin>>oper;
if (oper==1) incluir();
else
if (oper==2)listar();
else
verdade=0;
cout<<'\n';
}
}
void incluir()
{
cout<<"\nNome: "; cin>>func[i].nome;
cout<<"Salario: "; cin>>func[i].salario;
cout<<"Dia nasc.: ";cin>>func[i].nasc.dia;
cout<<"Mes nasc.: ";cin>>func[i].nasc.mes;
cout<<"Ano nasc.: ";cin>>func[i++].nasc.ano;
}
void listar()
{
float totsal=0;
cout<<"\n Salario"<<setw(13)<<"Data nasc."<<setw(12)<<"Nome";
cout<<setprecision(2); WW e4i*e duas casas decimais
cout << setiosflags(ios::fixed); WW ini*e a e4i*i%&o em nota%&o cient/fica
for(int j=0; j<i; j++)
{
cout<<'\n'<<setw(10)<<func[j].salario<<setw(6)
<<func[j].nasc.dia<<setw(3)
<<func[j].nasc.mes<<setw(3)
<<func[j].nasc.ano<<setw(20)<<func[j].nome;
totsal += func[j].salario;
Prof. Luiz Bianchi 59
Curso Prtico de C++
}
cout<<"\nTotal salario: "<<totsal<<endl;
}
As estruturas assim como a matriz e a varivel ndice (i) foram declaradas como
componentes externos para permitir o acesso a eles pelas funes incluir() e listar().
Resultado de duas opes de cadastramento (opo 1) e uma de listagem (opo 2) :
1 para incluir
2 para listar
3 para encerrar : 1
Nome: Antonio
Salario: 2500.00
Dia nasc.: 12
Ms nasc.: 10
Ano nasc.: 72
1 para incluir
2 para listar
3 para encerrar : 1
Nome: Maria
Salario: 1850.42
Dia nasc.: 30
Ms nasc.: 05
Ano nasc.: 78
1 para incluir
2 para listar
3 para encerrar : 2
Salario Data nasc. Nome
2500.00 12 10 72 Antonio
1850.42 30 5 78 Maria
Total salario: 4350.42
1 para incluir
2 para listar
3 para encerrar : 3
Estruturas e +un!)es
Prof. Luiz Bianchi 60
Curso Prtico de C++
Estruturas tambm podem ser passadas como argumento de funes de modo
semelhante ao procedimento realizado com quaisquer variveis comuns.
Passa,em por vaor
A seguir, um exemplo de uma funo que efetua um clculo e exibe a mdia de alunos
por sala, a partir de duas variveis do tipo estrutura passadas por valor:
#include <iostream.h>
struct curso
{
int sala;
float aluno;
};
void media(curso n1, curso n2);
void main()
{
curso c1, c2;
cout<<"Curso 1";
cout<<"\n\tQuant. de salas: "; cin>>c1.sala;
cout<<"\tNumero de alunos: "; cin>>c1.aluno;
cout<<"\nCurso 2";
cout<<"\n\tQuant. de salas: "; cin>>c2.sala;
cout<<"\tNumero de alunos: "; cin>>c2.aluno;
media(c1, c2); // variveis tipo estrutura como argumento
}
void media(curso n1, curso n2)
{
float med;
med = (n1.aluno + n2.aluno) / (n1.sala + n2.sala);
cout<<"\nMedia de alunos por sala: "<<med;
}
Resultado do exemplo::
Curso 1
Quant de salas: 12
Numero de alunos: 260
Curso 2
Quant de salas: 8
Numero de alunos: 240
Prof. Luiz Bianchi 61
Curso Prtico de C++
Media de alunos por sala: 25
Passa,em por re+er=ncia
De modo anlogo operao de passagem de variveis comuns, procede-se com as
variveis tipo estrutura na passagem destas como argumento por referncia. bom
lembrar que o mtodo por referncia economiza memria uma vez que o sistema no
faz nenhuma cpia das variveis para serem operadas pela funo. Para apresentar um
exemplo desta tcnica, foi modificado o programa do exemplo anterior para receber
argumentos por referncia:
#include <iostream.h>
struct curso
{ int sala;
float aluno;
};
void media(curso& n1, curso& n2);
void main()
{
curso c1, c2;
cout<<"Curso 1";
cout<<"\n\tQuant. de salas: "; cin>>c1.sala;
cout<<"\tNumero de alunos: "; cin>>c1.aluno;
cout<<"\nCurso 2";
cout<<"\n\tQuant. de salas: "; cin>>c2.sala;
cout<<"\tNumero de alunos: "; cin>>c2.aluno;
media(c1, c2); // variveis tipo estrutura como argumento
}
void media(curso& n1, curso& n2)
{
float med;
med = (n1.aluno + n2.aluno) / (n1.sala + n2.sala);
cout<<"\nMedia de alunos por sala: "<<med;
}
As variveis n1 e n2 compartilham o mesmo espao de memria ocupado pelas
variveis c1 e c2. Observar que o operador & (operador de endereos) escrito junto ao
nome da estrutura que aparece no argumento da funo mdia.
Prof. Luiz Bianchi 62
Curso Prtico de C++
8etorno de varive tipo estrutura
A ilustrao seguinte apresenta o mesmo exemplo modificado para que a funo retorne
uma varivel tipo estrutura:
#include <iostream.h>
struct curso
{
int sala;
float aluno;
};
void media(curso& n1, curso& n2);
curso insere(void);
void main()
{
curso c1, c2;
cout<<"Curso 1";
c1=insere();
cout<<"Curso 2";
c2=insere();
media(c1, c2);
}
curso insere(void)
{
curso sa;
cout<<"\n\tQuant. de salas: "; cin>>sa.sala;
cout<<"\tNumero de alunos: "; cin>>sa.aluno;
return (sa);
}
void media(curso& n1, curso& n2)
{
float med;
med = (n1.aluno + n2.aluno) / (n1.sala + n2.sala);
cout<<"\nMedia de alunos por sala: "<<med;
}
Notar que a funo insere( ) foi definida como uma funo do tipo curso pois ela retorna
uma varivel do tipo especificado.
Prof. Luiz Bianchi 63
Curso Prtico de C++
Prof. Luiz Bianchi 64
Curso Prtico de C++
CGASSES E OFZETOS
Uma classe um mtodo lgico de organizao de dados e funes numa mesma
estrutura e considerada como instrumento principal da programao orientada a
objetos. A varivel de uma classe chamada objeto que far uso dos dados e funes.
Casses
As classes so funcionalmente similares s estruturas, porm enquanto estas definem
apenas dados, aquelas definem os chamados dados-membro e funes-membro. As
funes-membro tambm conhecidas como mtodos so responsveis pelas operaes
realizadas sobre os dados-membro da classe.
Exemplo:
#include <iostream.h>
class area WW define a classe
{
private: // dados-membro:
float largura;
float altura;
public: // funes-membro:
void obtemdados(float larg, float alt); // prottipo da funo
float calcula() // funo inline
{ return(largura*altura);}
};
void area::obtemdados(float larg, float alt)
{
largura=larg;
altura=alt;
}
void main()
{
area parede; // declara o objeto
parede.obtemdados(3.5, 5.2);
float areapar = parede.calcula();
cout<<"Area da parede: "<<areapar;
}
Prof. Luiz Bianchi 65
Curso Prtico de C++
Resultado do exemplo::
Area da parede: 18.2
No exemplo declarada a classe area que contm quatro membros: duas variveis do
tipo float e duas funes: obtemdados e calcula. A funo obtemdados tem apenas seu
prottipo definido dentro da declarao da classe, as operaes so especificadas fora
dela, ao passo que a funo calcula tem seus comandos definidos dentro da classe.
Para definir funes fora da classe deve ser usado o operador de resoluo de escopo
(::) aps o nome da classe. Ele especifica a classe a qual pertence funo-membro. No
exemplo tem-se:
void area :: obtemdados(float larg, float alt)
que significa que a funo obtemdados uma funo-membro da classe area.
As funes-membros, tambm chamadas de mtodos, definidas dentro da classe so
criadas como inline por default, no entanto uma funo-membro inline tambm pode
ser definida fora da classe por meio da palavra reservada inline.
O exemplo traz duas sees private: e public: que especificam a visibilidade dos
membros da classe. (Note-se que na codificao as palavras devem ser seguidas de dois
pontos). Na parte private, geralmente, so escritos os membros de dados, os quais s
podem ser acessados por funes pertencentes classe. Desse modo, diz-se que os
dados esto escondidos ou encapsulados por no permitir que funes extra classe os
acessem. A palavra reservada private por ser default no precisaria ser explicitada no
programa, contudo sua colocao torna mais evidente essa circunstncia. Na seo
public da classe, geralmente, so especificadas as funes ou mtodos que atuam sobre
os dados.
O acesso aos membros pblicos feito atravs do operador ponto de modo anlogo ao
acesso requerido aos membros de uma estrutura.
A instruo
parede.obtemdados(3.5, 5.2);
usa o operador ponto (.) para chamar a funo obtemdados e atribuir valores aos dados
membro.
O&Aetos
Um o*Geto 1 um ti)o es)ecial de vari'vel Kue cont7m dados e c6digos e re)resenta um
elemento es)ec/fico. Um o*Geto 1 uma instAncia ou uma ocorr7ncia es)ec/fica de uma
classe. le geralmente )ossui v'rios atri&utos Kue definem suas caracter/sticasI e
m4todos Kue o)eram so*re esses atri*utos. No e4em)lo anteriorI )arede 1 o nome do
o*Geto do ti)o classe Kue cont1m os atri*utos largura e altura e os m1todos o*temdados
e calcula. A classe 1 o mecanismo Kue reSne o*Getos Kue )odem ser descritos com os
mesmos atri*utos e as mesmas o)era%@es. la agru)a dados e fun%@esI 1 a )e%a
fundamental da )rograma%&o orientada a o*Geto. No e4em)loI a codifica%&o:
Prof. Luiz Bianchi 66
Curso Prtico de C++
area parede;
define como objeto o elemento parede pertencente a classe area, ou seja, declara uma
instncia da classe.
"s o*Getos se comunicam atrav1s de mensa,emI isto 1I de chamada a uma +un!"oX
mem&ro reKuisitando um servi%o atrav1s da e4ecu%&o de uma o)era%&o. A instru%&o
parede.obtemdados(3.5, 5.2);
solicita ao o*Geto )arede Kue rece*a os dados ou as medidas )ara o c'lculo da 'rea.
Uma classe )ermite declarar v'rios o*Getos diferentes. ,ontinuando com o mesmo
e4em)lo Kue se aca*a de e4aminarI ser' adicionado a este outro o*Geto J classe area e o
)rograma modificado fica como segue:
Linclude Miostream.hN
class area WW define a classe
O
)rivate: WW dadosRmem*ro:
float larguraP
float alturaP
)u*lic: WW fun%@esRmem*ro:
void o*temdados8float largI float alt9P WW )rot6ti)o da fun%&o
float calcula89 WW fun%&o inline
O return8larguraXaltura9PQ
QP
void area::o*temdados8float largI float alt9
O
larguraVlargP
alturaValtP
Q
void main89
O
area )aredeI tiGoloP WW declara os o*Getos
)arede.o*temdados8$.+I +.:9P
float area)ar V )arede.calcula89P
coutMM[Area da )arede: [MMarea)arP
tiGolo.o*temdados8;.5:I ;.$;9P
float areatiG V tiGolo.calcula89P
coutMM[\nArea do tiGolo: [MMareatiGP
coutMM[\nguantidade de tiGolos necessarios )ara construir a )aredeI[P
coutMM[\nconsiderando Kue 5;d da area ec de argamassa: [
MM8area)arWareatiGX;.29MM[ tiGolos.[MMendlP
Q
Resultado do e4em)lo::
Prof. Luiz Bianchi 67
Curso Prtico de C++
Area da )arede: 50.:
Area do tiGolo: ;.;$-
guantidade de tiGolos necessarios )ara construir a )aredeI
considerando Kue 5;d da area ec de argamassa: (++ tiGolos.
Na instru%&o Kue define o o*Geto foi inclu/do outro o*Geto de nome tiGolo:
area )aredeI tiGoloP
Por meio do o)erador )ontoI o o*Geto tiGolo tam*1m acessa os mesmos m1todos do
o*Geto )arede )ara atri*uir a seus dadosRmem*ro os devidos valoresI como no caso da
instru%&o:
tiGolo.o*temdados8;.5:I ;.$;9P
" o*Geto tiGolo )ossui as mesmas caracter/sticas do o*Geto )aredeI ou seGaI uma 'rea
definida )ela largura e altura.
" )rograma tem )or o*Getivo determinar a Kuantidade de tiGolos necess'rios )ara
contruir uma )arede considerando uma )ro)or%&o da 'rea constitu/da de argamassa.
Prof. Luiz Bianchi 68
Curso Prtico de C++
FUNNOES CONST8UTO8AS E
DEST8UTO8AS
" )rocesso de inicializa%&o dos dadosRmem*ro da classe 1 sim)lificado )ela defini%&o
de uma fun%&o es)ecial chamada construtora e de forma semelhanteI outra fun%&o
es)ecial denominada destrutora 1 e4ecutada automaticamente toda vez Kue um o*Geto
for destru/do ou li*erado da mem6ria.
Fun!)es construtoras
Uma fun%&o construtora 1 uma fun%&oRmem*ro es)ecial Kue 1 chamada
automaticamente )elo sistema sem)re Kue um o*Geto for criado. la n&o retorna nenhum
valor e na sua defini%&o n&o 1 )recedida do ti)o void. Deve ser declarada com o mesmo
nome da classe e 1 )rontamente e4ecutada toda vez Kue uma nova instAncia da classe
for criada a fim de inicilizar seus atri*utos.
,omo e4em)loI ser' modificado o )rograma anterior )ara im)lementar uma fun%&o
construtora:
Linclude Miostream.hN
class area
O
)rivate:
float larguraP
float alturaP
)u*lic:
area8float largI float alt9P WW fun%&o construtora
float calcula89
O return8larguraXaltura9PQ
QP
area :: area8float largI float alt9
O
larguraVlargP
alturaValtP
Q
void main89
O
area )arede8$.+I +.:9I tiGolo8;.5:I ;.$;9P WW declara os o*Getos
float area)ar V )arede.calcula89P
coutMM[Area da )arede: [MMarea)arP
Prof. Luiz Bianchi 69
Curso Prtico de C++
float areatiG V tiGolo.calcula89P
coutMM[\nArea do tiGolo: [MMareatiGP
coutMM[\nguantidade de tiGolos necessarios )ara construir a )aredeI[P
coutMM[\nconsiderando Kue 5;d da area ec de argamassa: [
MM8area)arWareatiGX;.29MM[ tiGolos.[MMendlP
Q
,omo )ode ser vistoI a fun%&oRmem*ro o*temdados foi su*stitu/da )ela fun%&o
construtora Kue traz o nome da classe. "s argumentos s&o )assados )ara a construtora
no momento em Kue a instAncia da classe for criada.
Fun!)es destrutoras
A fun%&o destrutora 1 uma fun%&oRmem*ro es)ecial Kue 1 e4ecutada automaticamente
Kuando um o*Geto 1 li*erado da mem6ria. la 1 definida com o mesmo nome da classe
)recedida de um til 8q9. ,omo a construtoraI a fun%&o destrutora n&o retorna valor e
nem )ode rece*er argumentos. " uso de destrutores 1 es)ecialmente a)ro)riado )ara
li*erar mem6ria usada )or um o*Geto Kue aloca mem6ria dinamicamente.
A seguirI um e4em)lo da fun%&o destrutora im)lementado no modelo Kue vem sendo
usado:
Linclude Miostream.hN
class area
O
)rivate:
float larguraP
float alturaP
)u*lic:
area8float largI float alt9P WW fun%&o construtora
qarea89P WW fun%&o destrutora
float calcula89
O return8larguraXaltura9PQ
QP
area::area8float largI float alt9
O
larguraVlargP
alturaValtP
Q
area :: qarea89
O
if 8larguraVV$.+ hh alturaVV+.:9
coutMM[\nDestruindo o o*Geto )arede[P
else
Prof. Luiz Bianchi 70
Curso Prtico de C++
coutMM[\nDestruindo o o*Geto tiGolo[P
Q
void main89
O
area )arede8$.+I +.:9I tiGolo8;.5:I ;.$;9P WW declara os o*Getos
float area)ar V )arede.calcula89P
coutMM[Area da )arede: [MMarea)arP
float areatiG V tiGolo.calcula89P
coutMM[\nArea do tiGolo: [MMareatiGP
coutMM[\nguantidade de tiGolos necessarios )ara construir a )aredeI[P
coutMM[\nconsiderando Kue 5;d da area ec de argamassa: [
MM8area)arWareatiGX;.29MM[ tiGolos.[MMendlP
Q
Neste e4em)lo a fun%&o destrutora incor)ora um teste de sele%&o a)enas )ara mostrar
Kue ela est' sendo e4ecutada e Kuais o*Getos est&o sendo destru/dos.
So&recar,a de +un!)es construtoras
,omo KualKuer outraI uma fun%&o construtora )ode ser so*recarregada a)resentando o
mesmo nome com nSmero de argumentos diferentes. #u)ondo Kue se )retenda Kue o
usu'rio insira as medidas no momento em Kue um o*Geto for criado e deseGando manter
a fun%&o construtora )ara os o*Getos definidos com valores iniciaisI )odeRse declarar
uma nova fun%&o construtoraI como mostrado no e4em)lo a seguir:
Linclude Miostream.hN
class area
O
)rivate:
float larguraP
float alturaP
)u*lic:
area8float largI float alt9P WW fun%&o construtora
area89P WW fun%&o construtora so*recarregada
float calcula89
O return8larguraXaltura9PQ
QP
area::area8float largI float alt9
O
larguraVlargP
alturaValtP
Prof. Luiz Bianchi 71
Curso Prtico de C++
Q
area::area89
O
coutMM[Cnsira as medidas R largura e altura: [P
cinNNlarguraNNalturaP
Q
void main89
O
area )arede8$.+I +.:9I tiGoloP
float area)ar V )arede.calcula89P
coutMM[\nArea da )arede: [MMarea)arP
float areatiG V tiGolo.calcula89P
coutMM[\nArea do tiGolo: [MMareatiGP
coutMM[\n\nguantidade de tiGolos necessarios )ara construir a )aredeI[P
coutMM[\nconsiderando Kue 5;d da area ec de argamassa: [
MM8area)arWareatiGX;.29MM[ tiGolos.[MMendlP
Q
Resultado do e4em)lo::
Cnsira as medidas R largura e altura: ;.5 ;.:
Area da )arede: 50.:
Area do tiGolo: ;.:
guantidade de tiGolos necessarios )ara construir a )aredeI
considerando Kue 5;d da area ec de argamassa: 052 tiGolos.
,omo o o*Geto tiGolo foi declarado sem )arAmetrosI ele 1 inicializado com a fun%&o
construtora so*recarregada Kue n&o )ossui )arAmetros. Assim ser' solicitado ao usu'rio
Kue insira as medidas do o*Geto tiGolo.
Prof. Luiz Bianchi 72
Curso Prtico de C++
SOF8ECA8SA DE OPE8ADO8ES
A so*recarga de um o)erador 1 o )rocesso de modificar a funcionalidade desse o)erador
)ara uso de uma determinada classeI com o )ro)6sito de melhorar a legi*ilidade do
)rograma. #o*recarregar um o)erador significa redefiniRlo )ara a)lic'Rlo a ti)os de
dados definidos )elo usu'rio como estruturas e classes. A so*recarga 1 esta*elecida )or
meio da )alavraRchave operator em fun%@es chamadas o)eradoras. A fun%&o rece*e
como nome o s/m*olo do o)erador.
A seguir 1 mostrado um e4em)lo Kue utiliza o o)erador aritm1tico H *in'rio )ara
adicionarI )or disci)linaI as notas de duas disci)linas de tr7s alunos Kue corres)ondem
aos o*Getos aI * e c:
WW so*recarga do o)erador aritm1tico H
Linclude Miostream.hN
class nota
O
)rivate:
float n5I n:P
)u*lic:
nota 89 OQP WW fun%&o construtora vazia
nota 8floatIfloat9P WW fun%&o construtora com argmentos
nota o)erator H 8nota9P WW fun%&o o)eradora de adi%&o
void e4i*e89P
QP
nota::nota 8float nt5I float nt:9
O
n5 V nt5P
n: V nt:P
Q
nota nota::o)erator H 8nota m9
O
float d5 V n5 H m.n5P
float d: V n: H m.n:P
return nota8d5Id:9P
Q
void nota::e4i*e89
O
coutMM[#oma V 8[MMn5MM[I [MMn:MMc9cMMendlP
Q
void main 89
O
nota a 80.+I 5;.;9P
Prof. Luiz Bianchi 73
Curso Prtico de C++
nota * 8(.;I -.+9P
nota c 8-.;I 2.;9P
nota somaP
soma V a H * H cP WW efetua a soma dos valores dos o*Getos
soma.e4i*e89P
Q
Resultado do e4em)lo::
#oma V 850.+I :+.+9
A fun%&o o)eradora declarada fora da classe e destacada a seguir:
nota nota::o)erator H 8nota m9
O
float d5 V n5 H m.n5P
float d: V n: H m.n:P
return nota8d5Id:9P
Q
rece*e a)enas um argumento e retorna o ti)o nota. "s o*Getos da instru%&o
soma V a H * H cP
s&o )assados como argumentos )ara a fun%&o o)eradora.
" )r64imo e4em)lo mostra a so*recarga do o)erador e )ara a fun%&o o)eradora Kue
trata string de caracteres. " )rograma inicialmente e4i*e um te4to e de)ois retira do
te4to a letra , onde ela a)arece.
WW so*recarga do o)erador R
Linclude Miostream.hN
Linclude Mstring.hN
class str
O
)rivate:
char te4to]+;^P
)u*lic:
str8char ]^9P WW fun%&o construtora
str o)erator R 8char9P
void e4i*e89P
QP
str::str8char Xcar9
O
strc)U8te4toI car9P
Q
str str::o)erator R 8char let9
O
Prof. Luiz Bianchi 74
Curso Prtico de C++
char tem)]+;^P
WW for8int iV;I GV;P te4to]i^P iHH9
for8int iV;I GV;P te4to]i^fVc\;cP iHH9
if8te4to]i^ fV let9
tem)]GHH^ V te4to]i^P
tem)]G^VNULLP
return8strc)U8te4toItem)99P
Q
void str::e4i*e89
O
coutMMte4toMMendlP
Q
void main89
O
str nome8[,urso )ratico de ,HH[9P
nome.e4i*e89P
nome V nome R c,cP
nome.e4i*e89P
Q
Resultado do e4em)lo::
,urso )ratico de ,HH
urso )ratico de HH
,omo se )ode verI a sinta4e utilizada na instru%&o
nome V nome R c,cP
melhora so*remaneira a legi*ilidade do )rograma )or a)resentar o estilo de uma
o)era%&o normal de atri*ui%&oI su*traindo do o*Geto nome a letra ,. Lem*rar Kue o
)ro)6sito das so*recargas de o)eradores 1 de tornar o )rograma claro e f'cil de
entender. No entantoI nem todos os o)eradores )odem ser so*recarregados. ")eradores
Kue n&o )odem ser so*recarregados: o o)erador )onto 8$9 de acesso a mem*rosI o
o)erador de resolu%&o de esco)o 8669 e o o)erador de e4)ress&o condicional 8[69.
Prof. Luiz Bianchi 75
Curso Prtico de C++
F;FG;OS8AF;A
A#,N,C"I Ana Fernanda EomesI ,AMP"#I dilene A)arecida Beneruchi de.
Fundamentos da )rograma%&o de com)utadores : algoritmosI Pascal e ,W,. #&o
Paulo : Prentice 3allI :;;:. 4viiiI $++).
F"RBLL"NI Andr1 Luiz BillarP BR#PA,3RI 3enri Frederico. L6gica de
)rograma%&o : a constru%&o de algoritmos e estruturas de dados. :.ed. #&o Paulo :
Ma=ron Boo=sI :;;;. 52.).
FAM#AI mris A. A)rendendo ,. #&o Paulo : Ma=ron Boo=s do BrasilI 5222. :.5).
MCDRA3CI Bictorine Biviane. !reinamento em linguagem ,. #ao Paulo : Ma=ronI
522(. v.
,om)lementar
BRRoI Fohn !homas. Programando em ,. #ao Paulo : Ma=ron Boo=sI 5225. 4viI
$0+).
U,,CI naldirP #"U#AI Reginaldo LuizP m"!ANCI Alice MaUumiI et al. . L6gica de
)rograma%&o : os )rimeiros )assos. 0.ed. #ao Paulo : ricaI 5222. $$2).
Eetr\nica
Algoritmos: htt):WW<<<.manzano.)ro.*rWmenu.html
,HH: htt):WW<<<.c)lus)lus.comWdocW
Prof. Luiz Bianchi 76

Você também pode gostar