Vous êtes sur la page 1sur 54

Algoritmos Prof.

Anita Lopes


2


FUNDAMENTOS DA LINGUAGEM C
++

1 A linguagem C
++

1.1 Introduo

A linguagem C
++
uma linguagem de alto nvel e herda muitos conceitos da linguagem C.
Alm disso, acrescenta caractersticas de uma linguagem orientada a objetos.
Em nosso estudo, usaremos como uma linguagem estruturada.
Assim como vrias linguagens hoje em dia, a linguagem C
++
case sensitive, isto ,
diferencia letras maisculas de minsculas.


1.2 Estrutura de um programa em C
++

Cada linguagem de programao cria, ou herda da linguagem que lhe originou, uma
estrutura para o programa. A estrutura de um programa codificado em C++ ser
apresentada a seguir
[arquivos de cabealho]
[definies de constantes]
[uso de namespaces]
[declarao de variveis globais]
int main()
{
[declaraes das demais funes]
Bloco de comandos
}
tipo de retorno da funo1 nome_da_funo1 (parmetros)
{
Bloco de comandos da funo1
}
...
tipo de retorno da funon nome_da_funon ( parmetros)
{
Bloco de comandos da funon
}


A funo main poder ser, ou no, a primeira funo. Se for a primeira, os
prottipos das demais funes precisaro estar presentes na main, mas se as
demias vierem antes da main, no.

Algoritmos Prof. Anita Lopes


3
Exemplo de um programa em C
++
:
#i ncl ude <i ost r eam>
usi ng namespace st d;
i nt mai n( )
{
cout <<" \ nPRI MEI RO PROGRAMA EM C++" ;
r et ur n 0;
}

Explicando:
#include <iostream> instrui o compilador a usar a biblioteca padro
using namesapce std; uso do namespace padro std(cin..., cout)
int main() cabelhao da funo principal(main)
{ inicia a funo
cout... ; Exibe msg na tela a msg aps alimentar linha
return 0;
Comando que retorna ao sistema operacional Se omitirmos no
caso da main, nenhum erro ocasionar.
} finaliza a funo





A diretiva using possibilita que todos os identificadores de um
namespace(entenda como um pacote de nomes) fiquem disponibilizados de
maneira global.

1.2.1 Conjunto de caracteres

Um programa fonte em C
++
um texto no formatado que faz uso do conjunto
padro de caracteres ASCII. Poder ser escrito em qualquer editor de texto e salvo
com a extenso cpp.


1.2.2 Comentrios

Muitas vezes para facilitar a manuteno ou elucidar, precisaremos escrever
comentrios sobre trechos do programa. A linguagem C
++
permite que comentrios
apaream em qualquer parte e podem ser de dois tipos:
Comentrios de bloco, herana da linguagem C, tero um /* antes e um */
depois.
Comentrio de linha ser precedido por //.



Algoritmos Prof. Anita Lopes


4
Exemplos:

/* A disciplina de Algoritmos simplesmente apaixonante. Estou ficando cada vez mais
exigente com minhas solues. */

// A cada aula tem sempre algo interessante.


1.2.3 Diretivas de Compilao

Voc perceber que nossos programas comearo com alguns comandos para que as
bibliotecas e constantes possam ser anexadas a eles no momento que o programa
executvel for gerado.
Nem sempre existiram as bibliotecas, chamadas de unidades por outras linguagens,
mas quando as linguagens foram se tornando mais complexas ficou invivel carregar todas
as funes/comandos. Sendo assim, foram agrupadas de acordo com suas finalidades e s
teremos que inclu-las em nossos programas quando formos, de fato, us-las.
A biblioteca iostream ser obrigatria porque agrega as funes/comandos bsicos.
Sintaxes:
#include <nome_da_biblioteca >
#include ...nome_da_biblioteca
onde nome_da_biblioteca o nome da biblioteca que se deseja incluir.
Estando entre os sinais < e > significa que est no diretrio padro e ficando entre
, significa que precisamos fornecer o caminho onde se encontra a biblioteca.

Exemplos de bibliotecas:

BIBLIOTECA cctype
Converte para maiscula ou para minscula uma letra
toupper(letra)
tolower(letra)


BIBLIOTECA cmath
Calcula o valor absoluto real d
fabs(double d)
Funes trigonomtricas do ngulo arco, em radianos
sin(double arco)
cos(double arco)
tan(double arco)
asin(double arco)
acos(double arco)
atan(double arco)

Algoritmos Prof. Anita Lopes


5
Funes de arredondamento para inteiro
ceil(double num) Ex. ceil(3.2) => 4.0 arredonda pra cima
floor(double num) Ex. floor(3.2) => 3.0 arredonda para baixo
Funes logartmicas: log() logaritmo natural (base e), log10() logaritmo
decimal (base 10)
log(double num)
log10(double num)
Funes: potncia e raiz quadrada
pow(double base, double exp); Potenciacao: pow(3.2,5.6) => 3.2
5.6
sqrt(double num); Raiz quadrada: sqrt(9.0) = >3.0.


BIBLIOTECA cstdlib
Calcula o valor absoluto do inteiro i e do real d, respectivamente
abs(int /float)
Converte para inteiro, se possvel, um vetor de char
atoi( vetor de char )
Converte para real, se possvel, um vetor de char
atof( vetor de char )



BIBLIOTECA cstring
Concatena duas strings
strcat(str1, str2);
Copia o contedo de uma varivel em outra varivel
strcpy(str1, str2) /* no permitido: str1 =str2;*/
Fornece o nmero de caracteres de uma string
strlen(str1)
Compara duas strings
devolve nmero menor que 0 se str1 vier antes de str2
strcmp(str1, str2) devolve nmero maior que 0 se str1 vier depois de str2
devolve 0 se str1 for igual str2



Algoritmos Prof. Anita Lopes


6
2.Sada

O objeto cout tem como objetivo o envio de dados/mensagens para a tela. Ele pode ser
usado das trs formas abaixo:

Usando: using namespace std;
cout<<;
cout<<varivel ou expresso<<endl;
Usando: using std::cout;
cout<<;
cout<<varivel ou expresso<<endl;
Sem using
std::cout<<;
std::cout<<varivel ou expresso<<endl;

Na tabela abaixo, encontramos alguns caracteres de controle que podero ser usados
com o objeto cout:

Caracter de Controle Sequncia de escape
nulo(null)
tabulao horizontal(tab)
nova linha(new line/enter)
aspas()
apostrofo()
barra invertida(\)
\0
\t
\n
\
\
\\

Exemplo
#i ncl ude <i ost r eam>
usi ng namespace st d;
i nt mai n( )
{ cout <<" Apr endendo a usar \ " cout \ " \ n" ;
/ / o car act er \ " i mpr i me aspas na t el a
cout <<" O oper ador de i nser cao << separ a os el ement os que se desj a col ocar
na t el a\ n" ;
cout <<" O car act er de cont r ol e \ ' \ \ n\ ' equi val e a endl , al i ment a
l i nha" <<endl ;
cout <<" Usando \ ' \ \ t \ ' \ t i mpr i me- se na pr oxi ma zona\ n" ;
/ / o car act er \ i mpr i me apost r of o na t el a e o car cat er \ \ i mpr i me \ na
t eal
syst em( " pause" ) ;
}




Algoritmos Prof. Anita Lopes


7
3. Constantes e variveis

3.1 Constantes

Em nosso estudo, faremos uso de quatro tipos bsicos de constantes: inteiras, de ponto
flutuante, caracteres, cadeia de caracteres(strngs) e booleanas. Constantes inteiras e de
ponto flutuante representam nmeros de um modo geral.

3.1.1 Constantes inteiras

As constantes inteiras na linguagem C
++
podem ser escritas no formato decimal
(base 10), hexadecimal (base 16) ou octal (base 8).
Exemplos:
Decimal: 12
Octal : 033 ( em decimal vale 27. O zero antes do nmero caracteriza a constante
octal)
Hexadecimal: 0xff ( em decimal vale 255. O zero e o x antes do nmero
caracterizam a constante hexadecimal)

Exemplo
#i ncl ude <i ost r eam>
usi ng namespace st d;
i nt mai n( )
{ i nt n=033, n1=0xA0;
cout <<" \ nA const ant e emoct al 033 equi val e emdeci mal : " <<n;
cout <<" \ nA const ant e emhexadeci mal 0xA0 equi val e emdeci mal : " <<n1;
cout <<" \ n\ n" ;
syst em( " pause" ) ;
}



3.1.2 Constantes de ponto flutuante

So nmeros reais com um ponto decimal.

Exemplos: 23.12 -18.123




Algoritmos Prof. Anita Lopes


8
3.1.3 Constantes caracteres

Uma constante caracter uma letra ou smbolo colocado entre plicas(asapas
simples).
Exemplo:
A N I T A
As constantes caracter so armazenadas como nmeros inteiros. Estes nmeros
correspondem aos valores de cada caracter dentro do cdigo ASCII.


3.1.4 Constantes strings

Uma constante string consiste de um conjunto de caracteres do cdigo ASCII
padro ou estendido, colocados entre aspas duplas.

Exemplos:
UAL! Matemtica APRENDENDO A PROGRAMAR EM C++
Na linguagem, C
++
uma string um vetor de caracteres terminado com um caracter
nulo. O caracter nulo um caracter com valor inteiro igual a zero (cdigo ASCII igual a 0).
O finalizador nulo tambm pode ser escrito usando a conveno de barra invertida do C
como sendo '\0'.
char nome_da_string[tamanho];


Como precisamos reservar uma posio para o finalizador, sempre iremos
declarar o tamanho necessrio mais um.

Vamos supor que declaremos uma varivel de nome palavra de 11 posies(char
palavra[11]; ) e armazenemos a palavra PROGRAMAS nela.

bom ressaltar que a linguagem C
++
no inicializa as variveis e toda clula no
usada tm valor indeterminado.
No se esquea de inicializar as variveis de seus programas, pois coisas
incrveis podem acontecer!
As strings so consideradas vetores de caracteres( matriz linha). Como na
Matemtica, para se acessar um determinado caracter de uma string, basta "indexarmos".

Algoritmos Prof. Anita Lopes


9

str[1] = 'o'
str[2] = 'a'

No exemplo acima, percebemos que o primeiro caracter se encontra na posio 0(
em algumas linguagens, seria a posio 1). Desta forma, se indexarmos com 1, na verdade
estaremos nos referindo ao segundo caracter da string; se indexarmos com 2, na verdade
estaremos nos referindo ao terceiro caracter da string e assim sucessivamente.


3.1.5 Constantes Booleanas

As constantes booleanas so: true ou false.


3.1.6 Constantes Simblicas

A constante pi muito conhecida nossa desde o ensino no fundamental quando
comeamos a estudar trigonometria.
Algumas linguagens de programao j tem essa constante definida, mas outras no.
Alm dessa, temos outras constantes que precisaro ser definidas em nossos
programas para facilitar os clculos.
A diretiva define possibilitar a definio de constantes ou de pequenas funes.
Sintaxe:
#define <nome> < valor >

3.2 Variveis

A varivel um lugar(endereo) na memria principal que armazena um dado e tem um
nome associado para facilitar a programao .
Em C
++
, as variveis podem ser declaradas no inicio do programa, mas poderemos
tambm declarar dentro de algumas estruturas, diferentemente de outras linguagens. Estas
variveis podem ser de vrios tipos, mas, inicialmente, usaremos: int (inteiro), float (real de
simples preciso) , char (caracter nico), double (real de dupla preciso).

Tipo Tamanho Intervalo Uso
char
int
float
double
1 byte
4 bytes
4 bytes
8 bytes
-128 a 127
-2147483648 a 2147483647
3.4e-38 a 3.4e38
1.7e-308 a 1.7e308
nmero muito pequeno e caracter ASCII
contador, controle de lao
real (preciso de 6dgitos)
cientfico (preciso de 10 dgitos)


Algoritmos Prof. Anita Lopes


10
Quando se define um tipo de varivel, informamos ao computador quanto de memria
ser necessria para armazenar esse dado e que tipos de operaes podero ser realizadas
com esse dado.
Para se declarar uma varivel, usamos a seguinte sintaxe:

< tipo> nome_da_varivel ;

O nome de uma varivel deve obedecer algumas regras:
1. O primeiro caracter pode ser uma letra (maiscula ou minscula) ou o caracter
sublinha. Aconselha-se a no usar o caracter sublinha no inicio para no confundir
com algumas funes.
2. Os demais caracteres, letras algarismos ou o caracter sublinha.

Exemplos:
int a; float peso; char sexo; int idade1, idade2;


3.2.1 Palavras reservadas

Existem certos nomes que no podero ser usados como identificadores. So
chamadas as palavras reservadas e so de uso restrito da linguagem C++.

3.2.2 Tipos modificados

Alm dos tipos de dados mencionados, existem os modificadores: long, short, signed
e unsigned. Tipicamente o modificador long aumenta o nmero de bytes usados para o
registro do nmero. O modificador unsigned, usado somente em inteiros, permite que um
bit usado para guardar o sinal do nmero seja usado para guardar o valor do nmero.

Tipo Tamanho (bytes) Intervalo
unsigned char 1 0 a 255
unsigned int 2 0 a 65 535
unsigned long int 4 0 a 4 294 967 295
long int (int) 4 -2 147 483 648 a 2 147 483 647
short int 2 -32768 a 32767
long double 10 3.4e-4932 a 1.1e4932



3.2.3 Converso de tipo (Casting)

Algumas vezes precisamos, momentaneamente, modificar o tipo de dado para us-lo
como argumento de uma funo, por exemplo, mas no desejamos declar-lo com esse tipo.

Algoritmos Prof. Anita Lopes


11

A converso de tipo nos possibilita isso e uma herana da linguagem C.

Sintaxe:
(tipo) varivel ou expresso

onde tipo o nome do tipo ao qual queremos converter o dado ou a expresso.

Exemplo
#i ncl ude <i ost r eam>
usi ng namespace st d;
i nt mai n( )
{ cout <<" \ nNumer o 7 DI VI DI DO por 3" ;
cout <<" \ n\ nsemconver sao: " <<7/ 3<<" \ t comconver sao: " <<
( f l oat ) 7/ 3<<" \ n\ n" ;
syst em( " pause" ) ;
}



3.2.4 Varivel ponteiro

Ns j sabemos que uma varivel um endereo na MP que armazena um dado.
bom deixar claro que no um nico endereo, pois, dependendo do tipo, poderemos estar
alocando 1, 2, 4, 8 ou mais posies para cada varivel como vimos na ltima tabela.
Uma varivel ponteiro armazena o endereo de outra varivel. Em outra disciplina,
voc estudar esse tipo.


4. Atribuio

Consiste em atribuir um valor a uma varivel. Em C
++
, o comando de atribuio tem a
seguinte sintaxe:

nome_da_varivel = contedo ;



Algoritmos Prof. Anita Lopes


12
Exemplos:
a = 12 ; peso = 65.2; sexo ='f'; idade1 = 21; idade2 = 34;
Observao 1: Em C
++
, possvel declarar e inicializar uma varivel: int a = 12;
Observao 2: Em C
++
, possvel inicializar vrias variveis: x =t =s = 0;
Na atribuio mltipla as operaes ocorrem da direita para a
esquerda, isto , inicialmente o valor 0 atribudo a s, depois o valor de
s atribudo a t e, por ltimo, o valor de t atribudo a x.

4.1 Atribuio mltipla.
A linguagem C
++
permite que se atribua um valor a muitas variveis. em uma nica
instruo.


Sintaxe:

var1 = var2 = valor;

Exemplo:
a = b = 0;




5. Entrada de dados
scanf
5.1 cin

cin>>nomedavarivel;
cin>>nomedavarivel1>> nomedavarivel2;

O objeto cin permite que o usurio digite dados atravs do dispositivo padro de
entrada: teclado. O operador >> chamado de extrao.

Exemplo 1: Escreva o enunciado deste programa.
#i ncl ude <i ost r eam>
usi ng namespace st d;
i nt mai n( )
{ i nt i dade; f l oat al t ur a;
cout <<" \ nDi gi t e i dade: " ; ci n>>i dade;
cout <<" \ nDi gi t e al t ur a: " ; ci n>>al t ur a;
cout <<" \ n\ n\ nI dade: " <<i dade;
cout <<" \ nAl t ur a: " <<al t ur a<<endl ;
syst em( " pause" ) ;
}

Algoritmos Prof. Anita Lopes


13


Exemplo 2: Escreva o enunciado deste programa.
#i ncl ude <i ost r eam>
usi ng namespace st d;
i nt mai n( )
{ char sexo; char nome[ 30] ;
cout <<" \ nDi gi t e nome: " ; ci n>>nome;
cout <<" \ nDi gi t e sexo( m/ f ) : " ; ci n>>sexo;
syst em( " pause" ) ;
syst em( " cl s" ) ;
cout <<" \ nNome; " <<nome;
cout <<" \ nSexo; " <<sexo<<endl ; ;
syst em( " pause" ) ;
}





O objeto cin quando l um vetor de char(string) termina a leitura no primeiro
espao, deixando RENATO no buffer.
Quando um outro cin para ler o sexo executado, o teclado no liberado e a
letra R apanhada e armazenada na varivel sexo.
Por estas razes, precisamos conhecer outros mtodos.


Se voc escolher o formato cin>>var1>>var2;, na entrada de dados, separe-os
com um espao ou pressione enter aps cada valor.

Algoritmos Prof. Anita Lopes


14
5.2 cin.get

Est sive com espaos e no deixa
line
mtodo permite a leitura de um vetor de char inclu e
nada no buffer.

Sintaxe:

cin.getline(nome do vetor de caracteres, tamanho );

Exem Escreva o enunciado deste programa.
#i nc
si n
nt mai n( )
nome[ 30] ;
nome: " ; ci n. get l i ne( nome, 30) ;
sexo( m/ f ) : " ; ci n>>sexo;
" \ n\ n\ nNome: " <<nome;
l ; ;
plo:
l ude <i ost r eam>
g namespace st d; u
i
{
char sexo; char
cout <<" \ nDi gi t e
" \ nDi gi t e cout <<
cout <<
cout <<" \ nSexo: " <<sexo<<end
syst em( " pause" ) ;
}



5.3 cin.get

Este mtodo permite a leitura de um char.
es: Sintax

cin.get(nome da varivel char);
cin.get();

ler uma varivel do tipo char, mas deixa enter no
buffe que o objeto cin sempre libera o teclado para o usurio digitar.

Exemp
A primeira sintaxe serve para
r enquanto
lo: Escreva o enunciado deste programa.
#i ncl ude <i ost r eam> #i ncl ude <i ost r eam>

Algoritmos Prof. Anita Lopes


15
namespace st d;
o( m/ f ) " ;
( m/ f ) : " ;
usi ng namespace st d;
mai n( )

o( m/ f ) " ;
( m/ f ) " ;

usi ng
i nt mai n( )

i nt
{ char sexo1, sexo2;
cout <<" \ nDi gi t e sex
sexo1) ; ci n. get (
cout <<" \ nDi gi t e sexo
ci n. get ( sexo2) ;
o: " <<sexo1; cout <<" \ n\ n\ nSex
cout <<" \ nSexo: " <<sexo2<<endl ;
syst em( " pause" ) ;
}
{ char sexo1, sexo2;
cout <<" \ nDi gi t e sex
o1; ci n>>sex
cout <<" \ nDi gi t e sexo
ci n>>sexo2;
nSexo: " <<sexo1; cout <<" \ n\ n\
cout <<" \ nSexo: " <<sexo2<<endl ; ;
e" ) ; syst em( " paus
}




No se surpreenda se encontr alguns bugs quando usar cin, cin.get() ou ar
cin.getline() em alguns compiladores.


No gosta de usar system(pause); ? Veja o exemplo abaixo:

#i ncl ude <i ost r eam>
usi ng namespace st d;
t ai n( )

o( m/ f ) " ; ci n>>sexo1;
o( m/ f ) : " ; ci n>>sexo2;
<<sexo1;
ar da o pr essi onament o de uma
i n m
{ char sexo1, sexo2;
cout <<" \ nDi gi t e sex
nDi gi t e sex cout <<" \
cout <<" \ n\ n\ nSexo: "
cout <<" \ nSexo: " <<sexo2<<endl ;
ci n. get ( ) ; ci n. get ( ) ;
e o segundo agu / / o pr i mei r o l i mpa o buf f er
t ecl a
}



Algoritmos Prof. Anita Lopes


16
. Operadores Aritmticos

Alm dos quatros operadores aritmticos bsicos, adio, subtrao, multiplicao e
diviso, a linguagem C
++
ainda disponibiliza o operador (%) chamado de mdulo cujo significado
o resto da diviso inteira(Em alguma linguagens conhecido como mod).

6
Operador Operao
+
-
*
/
%
adio
subtrao
multiplicao
diviso
mdulo (resto da diviso inteira)

Sintaxe:

operando1 operador operando2

onde operador um dos smbolos mostrados acima e operando uma constante ou um
identificador de varivel.
Exemplos:
12 + 5 -> 17
12 - 5 -> 7
12 * 5 -> 60
12 / 5 -> 2 quando se divide dois inteiros, o resultado um inteiro
12 % 5 -> 2 resto da diviso inteira


Se voc precisar dividir dois nmeros inteiros e quiser a resposta em real, existe
duas sadas:
1- Coloque um ponto em um dos operandos caso, pelo menos um, seja uma
constante: 12 / 5.0 .
2- Caso os dois operandos sejam variveis, faa: (float) a/b .


No existe em C
++
, como existe em outras linguagens, um operador especfico para
a operao de potenciao (a
b
). Existe, porm, uma funo de biblioteca
(pow(...,...)) que realiza esta operao, ou voc poder criar quando aprender a
usar as funes log e exp..


Algoritmos Prof. Anita Lopes


17
s 6.1 Hierarquia das operae

Categoria Operadores
parnteses ( )
funo nome()
incremental, l ++ -- gico !
aritmtico % * /
aritmtico + -
relacional < > <= >=
relacional == !=
lgico &&
lgico ||
condicional ?:
atribuio = += -= *= /= %=



6.2 e Atribuio Aritmtica
uma operao
A forma clssica ser permitida na maioria das linguagens como por exemplo:

Operadores d

Muitas vezes queremos alterar o valor de uma varivel realizando alg
aritmtica com ela.
cont = cont + 1; ou soma = soma + altura;
A l da linguagem C os operadores de atribuio aritmtica,
simplifican , %=).
Sintaxes:


inguagem C
++
herdou
do a expresso clssica. Os smbolos usado so (+=, -=, *=, /=
var += exp;
var -= exp;
var *= exp;
var /= exp;
var %= exp;
var = var + exp;
var = var - exp;
var = var * exp;
var = var / exp;
var = var % exp;

onde var o identificador da varivel e exp uma expresso vlida. Estas instrues
so equivalentes as seguintes:


Algoritmos Prof. Anita Lopes


18
Exemplos:
Atribuio Aritmtica Instruo Equivalente
con
j -=
num
divid

c
j = j i ;
num = * k;
divid e / 5;
resto = resto % 2;
t += 1;
i ;
*= k;
e /= 5;
resto %= 2;
ont = cont + 1;

num
e = divid

O operador de atribuio aritmtica tem precedncia menor que os outros
operador discutidos.



6.3 Opera

Em stem instrues muito comuns chamadas de incremento e
decremento struo de incremento adiciona uma unidade ao contedo de uma
varivel. decremento su i uma unidade do contedo de uma varivel.
Ex C++, operadore realizar as operaes de incremento
(++) e decremento (--). Eles so genericamente chamados de operadores incrementais.

Sintaxe:
es at aqui
dores Incrementais
programao exi
. Uma in
Uma instruo de btra
istem, em s especficos para
Instruo Equivalente
++ var;
;
var = var + 1;
var = var 1;
var ++ ;
-- var
var = var + 1;
var -- ; var = var 1;
onde var o nome da varivel da qual se quer incrementar ou decrementar um unidade.

Observe que existe duas sintaxes possveis para os operadores: pode-se colocar o
operad
ixo, o valor
da var crementado (ou decrementado) antes que a varivel seja usada em alguma
outra operao. Caso o operador seja colocado como sufixo, o valor da varivel ser
incremen rem ue a varivel for usada em alguma outra operao.
#i ncl ud >
usi ng n d;
i nt mai
{ i nt n suf
cout < " ;
ci n>>
n1=n; / / par a nao per der o val or de n
n
p
c " \ t n= " <<n1<<endl ;
suf =n2++;
or como prefixo ou como sufixo. Nos dois casos o valor da varivel ser incrementado
(ou decrementado) de uma unidade. Porm se o operador for colocado como suf
ivel ser in
tado (ou dec entado) depois q
e <i ost r eam
amespace st
n( )
, n1, n2, pr e, ;
<" \ nnumer o:
n;
2=n; / / par a nao per der o val or de n
r e=++n1;
out <<" \ n\ npr ef i xo= " <<pr e<<

Algoritmos Prof. Anita Lopes


19
cou f i xo= " <<suf <<" \ t n= " <<n2<<endl ;
ci n. g
}
t <<" \ n\ nsu
et ( ) ; ci n. get ( ) ;



6.4 O

s
relacio


6.4.1 Operadores relacionais

Oper laciona onhecidos nossos da Matemtica e sofreram
pequenas mo ua , mas permanecem com os mesmos conceitos.


peradores Relacionais e Lgicos

As expresses lgicas usadas nas estruturas de teste so formadas pelos operadore
nais e lgicos.
adores re is so velhos c
dificaes na s apresentao
Operador Significado
> maior que
< menor que
>=
<=
==
!=
maior ou igual a
menor ou igual a
igual a
diferente de

_1 operador expresso_2
Sintaxe:

expresso
onde expresso_1 e exp
adores relacionais.
resso_2 so duas expresses numricas quaisquer, e operador

ncia menor que os operadores aritmticos.
um dos oper
Os operadores relacionais tm preced



Algoritmos Prof. Anita Lopes


20
Os operadores lgicos tambm so nossos conhecidos da Lgica Matemtica. Quem
no se lembra da negao, conjuno e disjuno?
Aqui tambm sofreram modificaes em suas representaes, mas permanecem com
os mesmos conceitos.
So trs os operadores lgicos de C: &&, || e !. Estes operadores tm os mesmos
significados dos operadores lgicos Booleanos AND, OR e NOT.

Sintaxes:

expr_1 && expr_2
expr_1 || expr_2
!expr
6.4.2 Operadores lgicos


onde expr_1 , expr_2 e expr so expresses quaisquer.


Para esses operadores todo valor numrico diferente de 0 considerado 1.
Operador Matemtica C
conjuno
negao
e
ou
no !
&&
||
!
disjuno


Supon gunt ssoas. Se a resposta do candidato for
negativa, dever falar 0, rio, falar 1.
Suponha tambm que s ser chamado para entrevista o candidato que dominar as duas
linguagens.

Voc con C+ conhece JAVA? SADA
TABELA VERDADE DO OPERADOR &&
ha duas per as feitas a quatro pe
caso contr
hece +? Voc
0 0 0
0 1 0
1 0 0
1 1 1

s
presso como verdadeira se todas as expresses testadas
forem verdadeiras.

Neste exemplo, somente o quarto candidato seria chamado para a entrevista, poi o
operador && (e) considera a ex

Algoritmos Prof. Anita Lopes


21
ERADOR ||



Voc conhece C++? Voc conhece JAVA? SADA
TABELA VERDADE DO OP
Suponha duas perguntas feitas a quatro pessoas. Se a resposta do candidato for
negativa, dever falar 0, caso contrrio, falar 1.
Suponha tambm que ser chamado para entrevista o candidato que dominar pelo
menos uma linguagem.
0 0 0
0 1 1
1 0 1
1 1 1

Neste exemplo, somente o primeiro candidato no seria chamado para a entrevista,
poi deira se, pelo menos uma
expresso testada for verdadeira.
s o operador || (ou), considera a expresso como verda


O O t ia sobre o operador ||. Estes dois tm perador && em precednc
prec or q res re ais. edncia men u do e os opera lacion



TABELA VERDADE DO OPERADOR !

Suponha uma pergunta feita a duas pessoas. Se a resposta do candidato for
negativa, dever falar 0, caso contrrio, falar 1.
Voc No conhece C++? SADA
1 0
0 1


O op dor ! tem a mesma precedncia que os operadores incrementais. era







Algoritmos Prof. Anita Lopes


22
7.
era
ov estrutura de seleo nos dar uma viso maior da complexidade de
arefas que ele poder executar.



7.1 Estrutura d eciso - if...else

A estrutura if...else uma estrutura de controle do C++ muito fcil de ser usada
Aps o teste, o fluxo poder seguir dois caminhos, isto , se o teste resultar em uma
verdade
p
c ndo else.




7.1.1 Estrutura de deciso com um bloco(if simples)

Estruturas de seleo - if

Nossos programas at agora seguiram um mesmo padro: entrava-se com dados, estes
m processados e alguma informao era mostrada na tela.
Agindo desta forma, o computador mais parecia uma mquina de calcular. O aprendizado de
os conceitos como a da n
t
e d
, ser executado o comando ou bloco de comandos que se encontra aps o fecha
arnteses do teste, caso contrrio, se existir, ser executado o comando ou bloco de
omandos que se encontra aps o coma

Sintaxe:
if(condio)
{
bloco
}

onde: con o uma expresso u relacional.
bl unto de in rues, separadas por ponto-e-vrgula.
{ e } s sero obrigatrias se tiver mais de uma ao para ser executada
di lgica o
oco um conj st
.

Se a no
executado.
Vejamos exemplo na prxima pgina. Na primeira execuo, o nmero de inscrio
aparece porque a nota foi maior ou igual a 8 e, na segunda, nada saiu.
condio for verdadeira, o bloco executado. Caso contrrio, o bloco

Algoritmos Prof. Anita Lopes


23
ste programa.
i ncl ude <i ost r eam>
si ng namespace st d;
i f ( not a >= 8)
cout <<i nscr i cao<<" \ n" ;
ci n. get ( ) ; ci n. get ( ) ;

Exemplo: Escreva o enunciado de
#
u
i nt mai n( )
{ i nt i nscr i cao;
f l oat not a;
cout <<" \ nDi gi t e numer o de i nscr i cao: " ;
ci n>>i nscr i cao;
cout <<" \ nDi gi t e not a: " ;
ci n>>not a;
}



7.1.2 Estrutura de deciso com dois blocos(if composto)

Sintaxe:
if(condio)
{
bloco
}
else
{
bloco
}

aparece a mensagem
classificado porque a nota foi maior ou igual a 8 e, na segunda, a mensagem Nao
classificado porque a mdia foi menor do que 8.



onde: condio uma expresso lgica ou relacional.
bloco 1 e bloco 2 so conjuntos de instrues.

Se a condio for verdadeira o bloco 1 executado. Caso contrrio, o bloco 2
executado.
Vejamos exemplo na prxima pgina. Na primeira execuo,

Algoritmos Prof. Anita Lopes


24
cout <<" Nao cl assi f i cado\ n" ;
ci n. get ( ) ; ci n. get ( ) ;
}
Exemplo: Escreva o enunciado desse programa.
#i ncl ude <i ost r eam>
usi ng namespace st d;
i nt mai n( )
{ i nt i nscr i cao;
f l oat not a;
cout <<" \ nDi gi t e numer o de i nscr i cao: " ;
ci n>>i nscr i cao;
cout <<" \ nDi gi t e not a: " ;
ci n>>not a;
i f ( not a >= 8)
cout <<" Cl assi f i cado\ n" ;
el se






7.1.3 e mltiplos blocos (ifs encadeados)

Muitas vezes, noss ogramas podero envolver vrias condies excludentes.
Programas que envolvem faixas iais ou faixas de idades so exemplos clssicos do uso
da instruo if ... else if ...

Sintaxe: Deciso de iplos blocos:


Deciso d
os pr
salar
.
mlt
i dio 1) f(con
{
bloco 1
}
...
else if(condio N)
{
bloco N
}
else
{
bloco P
}

Algoritmos Prof. Anita Lopes


25
presses lgicas ou relacionais.
1 , bloco 2,... so conjuntos de instrues.
for verdadeira o bloco 1 executado. Caso contrario, as condies
rdadeira ou chegue ao ltimo else, onde o
dos blocos executado.
o enunciado deste programa.
ade3;
cout <<" \ nDi gi t e 1a i dade: " ;
ci n>>i dade1;
cout <<" \ nDi gi t e 2a i dade: " ;
ci n>>i dade2;
cout <<" \ nDi gi t e 3a i dade: " ;
ci n>>i dade3;
i f ( i dade1>i dade2 && i dade1>i dade3)
cout <<" \ nMai or i dade: " <<i dade1<<" \ n" ;
el se i f ( i dade2>i dade3)
cout <<" \ nMai or i dade: " <<i dade2<<" \ n" ;
el se
cout <<" \ nMai or i dade: " <<i dade3<<" \ n" ;
ci n. get ( ) ; ci n. get ( ) ;
}
onde: condio 1, condio 2, ... so ex
bloco

Se a condio 1
sero avaliadas, sucessivamente at que seja ve
do. Observe que apenas um bloco P seria executa

Exemplo: Escreva
#i ncl ude <i ost r eam>
amespace st d; usi ng n
i nt mai n( )
{
i nt i dade1, i dade2, i d







Algoritmos Prof. Anita Lopes


26
7.2 Est t

A estrutura switch...case, tambm conhecida como alternativa de mltiplas escolhas,
uma e
q
co de cada um dos
rtulos, e os comandos so executadas a partir desde rtulo.
ru ura switch...case
strutura que simplifica nossos programas no uso de deciso de mltiplos blocos
uando a expresso de controle envolver tipos int ou char(de um caracter que tambm
nsiderada inteira). O resultado desta expresso comparado ao valor


apa
J foi difcil o
rece mais es
tal de if... else if e agora
ta para complicar?
Calma! para facilitar.


Vou poder usar sempre?
No! Veja as regras abixo.

1- Se voc tiver em seu programa ifs aninhados.
nte a mesma varivel.
ualdade: == em
2- Se em todos os ifs estiver prese
3- Se a varivel for int ou char de um caracter.
4- Se o operador relacional for o de ig
todos os ifs, ento voc poder usar a estrutura do
itch. sw


Sintaxe:

onde: expresso uma expresso inteira ou char de um caracter
switch(expresso)
{
case rtulo_1:
bloco1;
break;
case rtulo_2:
bloco2
break;
...
case rtulo_n:
bloco n
break;
<default: bloco d>;
}

.
rtulo_1,rtulo_2,...rtulo_n e rtulo_d so constantes inteiras ou char
de um caracter.
bloco 1, bloco 2, ..., bloco n e bloco d so conjuntos de instrues.

Algoritmos Prof. Anita Lopes


27
A expresso avaliada e o fluxo desviado para o conjunto cujo rtulo igual ao
Exem lo 1: Escreva o enunciado deste programa.
#i ncl ude
usi ng nam
i nt mai (
{
i n
cout <<" \ nDi gi t e mes do seu nasci ment o: " ;
ci n>>me
swi t ch(
{
1:
cou
br e

case 2:
cou
br e

case 3:
cout << ;
br eak;


cout <<" Abr i l \ n"
br eak;

case 5:
cout <<"
br eak;

case 6:
cout <<"
br eak;

case 7:
cout <<" J ul ho\ n" ;
br eak;

case 8:
cout <<" Agost o\ n"
br eak;

case 9:
cout <<" Set embr o\ n" ;
;
case 1
" ;

Execuo:
resultado da expresso. O bloco abaixo do rtulo executado. Se o valor da
expresso no for igual a nenhum rtulo, o bloco do default executado. Voc no
obrigado a colocar o rtulo do default e por esta razo ele se encontra entre os
sinais de menor e maior.

p
<i ost r eam>
espace st d;
) n
t mes;
s;
mes)
case
t <<" J anei r o\ n" ;
ak;
t <<" Fever ei r o\ n" ;
ak;
" Mar co\ n"
case 4:
;
Mai o\ n" ;
J unho\ n" ;
;
br eak

0:
cout <<" Ot ubr o\ n
br eak;

Algoritmos Prof. Anita Lopes


28

ca



ca



i
i n. get ( ) ;
se 11:
cout <<" Novembr o\ n" ;
br eak;
se 12:
cout <<" Dezembr o\ n" ;
br eak;

def aul t :
cout <<" Mes nexi st ent e\ n" ;
}

ci n. get ( ) ; c
}





Po reak? r que usar b

Leia o pargrafo abaixo e veja o exemplo.

Normalmente, em outras linguagens de programao, aps a avaliao da
o e a execuo do bloco correspondente, o fluxo do programa passa para a
todos os outros rtulos. Na linguagem C
++
isto no
razer conseqncias indesejveis para seus programas. O uso do
orar a sada do comando switch.
ncl u <i o
ce st d;

i nt mes;
gi t e mes do seu nasci ment o: " ;
swi t ch( mes
{
" J anei r o\ n" ;
case 2:
cout <<" Mar co\ n" ;
case 4:
express
xim pr a instruo, ignorando
acontece e poder t
break f

#i de st r eam>
usi ng namespa
nt mai n( ) i
{

cout <<" \ nDi
ci n> mes; >
)

case 1: cout <<

Fever ei r o\ n" ; cout <<"

case 3:

Abr i l \ n" ; cout <<"


Algoritmos Prof. Anita Lopes


29
" Mai o\ n" ;
case 6:
case 7: cout <<" J ul ho\ n" ;
case 8:
se 9: cout <<" Set embr o\ n" ;
;
case 12: cout <<" Dezembr o\ n" ;

def aul t : cout <<" Mes i nexi st ent e\ n" ;
}

ci n. get ( ) ; ci n. get ( ) ;
}
case 5: cout <<

cout <<" J unho\ n" ;



cout <<" Agost o\ n" ;

ca

case 10: cout <<" Ot ubr o\ n" ;

case 11: cout <<" Novembr o\ n"






Entendi: quando comparou o ms com o
rtulo e achou, da em diante
executou todos os comandos.

Voc est ficando timo!


Ento o break; ser sempre
obrigatrio.

Errado!
Veja o exemplo abaixo.

Exemplo 2: Escreva o enunciado deste programa.
st r eam> #i ncl ude <i o
usi ng namespace
mai n( )
st d;
t o: " ;
i nt
{
i nt mes;
cout <<" \ nDi gi t e mes do seu nasci men
ci n>>mes;
swi t ch( mes)
{
case 1:
case 2:

Algoritmos Prof. Anita Lopes


30
cout <<" Voce nasceu no pr i mei r o t r i mest r e\ n" ;
case 5:
cout <<" Voce nasceu no segundo t r i mest r e\ n" ;
case 8:
cout <<" Voce nasceu no t er cei r o t r i mest r e\ n" ;
11:
case 12:
nasceu no quar t o t r i mest r e\ n" ;
br eak;

def aul t :
cout <<" Mes i nexi st ent e\ n" ;
}

ci n. get ( ) ; ci n. get ( ) ;
}

case 3:

br eak;

case 4:

case 6:

br eak;

case 7:

case 9:

br eak;

case 10:
case

cout <<" Voce





Algoritmos Prof. Anita Lopes


31
8. Estruturas de repetio
truturas de repetio disponveis na linguagem C
++
: for, while e do ... while.
Em turas estar presente pelo menos uma expresso para controlar a repetio.

8 or
ra do for a mais simples estrutura de repetio, sendo usada para repetir
u ra mais indicada quando
o onhecido embora, as outras duas estruturas tambm possam
s ntrole do nmero de repeties, na maioria das vezes, feito por uma
v de varivel contadora.
++
linguagens, pois
a




Trs so as es
todas as estru

.1 Estrutura de repetio: f

A estrutu
ou vrios co m mandos tantas vezes quanto desejarmos. a estrutu
nmero de repeties for c
er usadas. O co
arivel chamada
A estrutura do for na linguagem C um pouco diferente das demais
r somente a uma varivel contadora. condio pode no se prende
Sintaxes:
for (inicializao;condio;incremento) comando;

for (inicializao ;condio ;incremento)
{
bloco de comandos
}

onde: inicializao uma expresso de inicializao da varivel contadora e s
executada uma vez..
condio uma expresso lgica de controle de repetio.
incremento uma expresso de incremento da varivel contadora.
bloco de comandos um conjunto de instrues a ser executado.

Exemplo 1: Escreva o enunciado deste programa.
#i ncl ude <i ost r eam>
usi ng namespace st d;
i nt mai n( )
{ i nt n, c;
f or ( c=1; c<=3; c++)
{
cout <<" \ nnumer o i nt ei r o: " ;
ci n>>n;
i f ( n%5 == 0)
cout <<" \ nO numer o e mul t i pl o de 5\ n" ;
el se
cout <<" \ nO numer o nao e mul t i pl o de 5\ n" ;
}
ci n. get ( ) ; ci n. get ( ) ;
}

Algoritmos Prof. Anita Lopes


32


Exemplo 2: Escreva o enunciado deste programa.
#i ncl ude <i ost r eam>
usi ng namespace st d;
i nt mai n( )
{ i nt c;
f or ( c=1; c<=10; c++)
c<<" \ t " ;
;
f or ( c=20; c>=2; c- =2)

c
f or ( c=3; c<=59049; c*=3)


or ( c=100000; c>=3125; c/ =2)

cout <<
ci n. get ( ) ; ci n. get ( ) ;

cout <<
cout <<" \ n\ n"
cout <<c<<" \ t " ;
out <<" \ n\ n" ;
cout <<c<<" \ t " ;
cout <<" \ n\ n" ;
f
cout <<c<<" \ t " ;
" \ n\ n" ;
}





Algoritmos Prof. Anita Lopes


33


Definio: uma varivel que tem seu valor alterado dentro de uma estrutura
de repetio. Na verdade, quando falamos em acumulador, estamos nos
referenciando a um comando de atribuio que incrementa, ou decrementa, o
contedo da varivel.
Sintaxe:
nomeVarivel = nomeVarivel Op. Aritmtico valor ;
Exemplos:
Expresso Como se l?
a = a + valor ;
A varivel a recebe o valor que estava armazenado
nela, acrescido do valor armazenado na varivel valor.
a = a * valor ;
A varivel a recebe o valor que estava armazenado
nela, multiplicado pelo valor armazenado na varivel
valor.
a = a - valor ;
A varivel a recebe o valor que estava armazenado
nela, decrementado do valor armazenado na varivel
valor.
a = a / valor
A varivel a recebe o valor que estava armazenado
nela, dividido pelo valor armazenado na varivel valor.
;

Quando a varive
tante, costum
l acrescida (ou decrementada) de um valor
amos chamar o acumulador de contador. cons
Exemplos:
Expresso Como se l?
a = a + 1 ; ou a++; A varivel a incrementada de 1.
a = a - 1 ; ou a--; A varivel a decrementada de 1.
a = a + 2 ; ou a+=2; A varivel a incrementada de 2.
a = a - 2 ; ou a-=2; A varivel a dencrementada de 2.

Quando devo usar?

Em todo algoritmo que tenha repetio
e voc precise somar os nmeros que
entram, calcular a mdia, contar de
acordo com uma condio, etc.
Regras para se usar um acumulador

1- Todo acumulador uma varivel, logo PRECISA SER DECLARADO.
2- Todo acumulador precisa ser INICIALIZADO.
Como fao isto?
Use um comando de atribuio ANTES da estrutura de repetio em que
ele aparece e
Atribua um valor inicial. Normalmente, o elemento neutro da operao.
3- A expresso do acumulador precisa estar DENTRO DA ESTRUTURA DE
REPETIO.
4- Alguma operao dever ser feita com o acumulador APS A ESTRUTURA
DE REPETIO.


Algoritmos Prof. Anita Lopes


34
Exemplo 3: Escreva o enunciado deste programa.
#i ncl ude <i ost r eam>
usi ng namespace st d;
i nt mai n( )
{ i nt c, i dade, contaMaior, somaIdades;
contaMaior=0; somaIdades=0;
f or ( c
{


;
}
cout << Maior;
cout <<" \ n\ nSo

cout <
ci n. get ( ) ; ci n. get ( ) ;
}
=1; c<=4; c++)
cout <<" Di gi t e i dade: " ; ci n>>i dade;
i f ( i dade>=18) contaMaior++;
somaIdades+=idade
" \ n\ nTot al de i dades mai or es ou i guai s a 18: " <<conta
ma das i dades: " <<somaIdades;
<" \ n\ n" ;


somaIdades.
Observe que a v
sam
arive vezes no programa,
ent como a varivel
l contaMaior aparece quatro
seguindo rigoro e as quatro regras assim



Algoritmos Prof. Anita Lopes


35
8.2
uma estrutura "poderosa" da programao. Muitos
prog Ela testa primeiro a condio e poder
nem ja falsa. Logo, a estrutura do while repete enquanto
a co
m o tenha seu valor alterado dentro da
repe .
res mostram simplesmente a sintaxe da estrutura, mas
esqu
da na prtica:
taxe Sintaxe na prtica
Estrutura de repetio: while

A estrutura while
ramadores fazem uso somente desta estrutura.
executar o bloco caso a condio se
ndi
i
o for verdadeira.
portante que a varivel presente na condi
ti o ar em loop o, p is, caso contrrio, entr
rmalmente, todos os auto No
ecem de informar como na prtica ela dever ser escrita.
Abaixo, apresentarei a sintaxe geral e a sintaxe usa


Sin
while(condio)
{
bloco de comandos
}



atribuio ou leitura da varivel presente na condio
while(condio)
{
bloco de comandos
atribuio ou leitura da varivel presente na condio
}

onde: condio uma expresso lgica ou numrica.
bloco de comandos um conjunto de instrues.

Exemplo 1: Escreva o enunciado deste programa.
#i ncl ude <
usi ng name
i nt mai n )
{ i nt n, c
cout <<" \ nnumer o i nt ei r o ou 0 par a sai r : " ;
ci n>>n;
cont =0;
whi l e( n>0)
{
i f ( n%2==0)
cont ++;
cout <<" \ nnumer o i nt ei r o ou 0 par a sai r : " ;
ci n>>n;
}
cout <<" \ n\ nQuant i dade de par es di gi t ados " <<cont <<" \ n" ;
ci n. get ( ) ; ci n. get ( ) ;
}

i ost r eam>
space st d;

ont ;
(





Algoritmos Prof. Anita Lopes


36


Exemplo 2: Escreva o nu ama.
<i ost r eam>
e e st d;
t mai n( )
c
c=1;
whi l e( c<=5)
{
cout <<" \ nnumer o i nt ei r o: " ;
ci n>>n;
(
o
c++;
" <<cont *100. 0/ ( c- 1) <<" \ n" ;
;
e nciado deste progr
#i ncl ude
usi ng namspac
i n
{ i nt n, cont , c;
ont =0;




i f n%2==0)
c nt ++;

}
cout <<" \ n\ nPer cent ual de par es di gi t ados:
ci n. get ( ) ; ci n. get ( )
}



No segundo exemplo, simulamos a estrutura do for.

Algoritmos Prof. Anita Lopes


37
8.3 Estrutura de repetio: do...while

Esta estrutura parecida com while. Sua diferena que o bloco executado pelo
menos uma vez, pois testa ao final. Esta estrutura repete enquanto a condio for
verdadeira.

Sintaxe:

do
{
bloco de comandos
}
while(condio);


onde: condio uma expr
o de coman
esso lgica ou numrica.
dos um conjunto de instrues.

eva o enunciado deste programa.

i r o: " ;
ci n>>n;
i f ( n%2==0)
cont ++;
c++;
}
whi l e( c<=5) ;
cout <<" \ n\ nPer cent ual de par es di gi t ados: " <<cont *100. 0/ ( c- 1) <<" \ n" ;
ci n. get ( ) ; ci n. get ( ) ;
}
bloc
Exemplo 1: Escr
#i ncl ude <i ost r eam>
ace st d; usi ng namesp
i nt mai n( )
, c; { i nt n, cont
; cont =0
1; c=
do
{
cout <<" \ nnumer o i nt e




Algoritmos Prof. Anita Lopes


38

exemplo 2 da estrutura while.
Estranho. Igual soluo do porque as duas simularam a
estrutura do for.



Esta estrutura ideal para programas com menus como veremos a seguir.


Exemplo 2


RA CONSTRUIR UM PROGRAMA COM MENU

1. C diretivas e o
cab
#i ncl ude <i ost r eam>
usi ng namespace st d;
ai n( )
PASSOS PA
oloque as
ealho
i nt m
Abra chaves
{
2.
3. Declare todas as variveis
nec lgoritmo
i nt op;
f l oat num1, num2, num3, soma, pr od;
essrias para o a
4. Use a do do para
rep
do
{
estrutura
etir
impe a tela
syst em( " cl s" ) ;
5.L
6. Coloque tantos comandos cout
quantas forem as linhas do menu
ou um comando cout, usando \n.
cout <<" \ n\ n\ t MAQUI NA ESPERTA " ;
cout <<" \ n1 - Soma doi s numer os " ;
cout <<" \ n2 - Mul t i pl i ca t r es numer os " ;
cout <<" \ n3 - Sai do pr ogr ama " ;
cout <<" \ nOPCAO: " ;
7. Coloque um comando cin para
que possa armazenar a escolha do
usurio.
A varivel poder ser inteira ou
char.
ci n>> op;
8. Limpe a tela
syst em( " cl s" ) ;
9. Faa uso do switch.

swi t ch( op )
{

Algoritmos Prof. Anita Lopes


39


10. Em
um trecho de programa que
satisfaa o que foi pedido.
case 1:
out <<" \
ci n>>n
cout <<" \ nSoma: " <<soma<<endl ;
br eak;

ci n>>num1>>num2>>num3;
pr od=num1 * num2 * num3;
cout <<" \ nPr odut o: " <<pr od<<endl ;
br eak;

case 3:
cout << " \ nSai do pr ogr ama\ n" ;
br eak;

def aul t : cout <<" \ nOpcao nao di spon vel \ n" ;
}
cada caso dever conter
c

soma=num1+num2;
nDoi s numer os: " ;
1>>num2; um
case 2:
cout <<" \ nTr es numer os: " ;
11. Coloque cin.get para parar
ci n. get ( ) ; ci n. get ( ) ;
12. Feche o do while
}whi l e( op! =3) ;
13. Feche o programa
}



Agora voc inventa um tal de endl. Eu ainda
nem
Leia as notas abaixo.
entendi por que dois cin.get().




endl serve para alimentar linha. igual ao \n que foi herdado da linguagem C.
endl mais usado pelos programadores de C++




Quando se digita um nm cla enter fica no buffer do teclado. ero, o cdigo da te
O objeto cin.get() serve ler um caracter que foi digitado, mas se existir um
caracter no buffer, ele apanha este caracter. Nossa idia us-lo para
simular o system(pause); e se colocarmos s um de nada vai adiantar. Assim,
colocando dois, o primeir egundo, espera o apanha o cdigo da tecla enter e, o s
que o usurio digite um caracter.



Algoritmos Prof. Anita Lopes


40
9 Estruturas

cialmente, vamos abordar
as temtica
qua

9.1 Estruturas homogneas

Em C
++
, o uso de matrizes d mento
estreito entre matrizes e ponteiros ais adiante.
As matrizes so tabelas na ter uma ou mais dimenso e todos os
elementos so do mesmo tipo.
Quando uma matriz tem some
As estruturas em C
++
podem ser ho
homogneas, pois so mais familiare
ndo estudamos matrizes.
m as e heterogneas. In ogne i
s uma vez que conhecemos seu conceito da ma
e fundamental importncia e existe uma relaciona
que estudaremos m
MP e podem
nte uma dimenso, tambm chamamos de vetor.
Na linguagem C
++
, como j vim um
caracter, faz uso de matriz, pois po seus caracteres em separado,
u posi
na linguagem a posio do primeiro caracter 0 ?

O endereo guardado o do primeiro caracter que chamamos de base, logo qualquer
outro carac a posio
os, uma varivel char ,que precisa armazenar mais de
demos acessar cada um de
o entre colchetes. sando o nome da varivel e sua

Por que ser que C
++
ter ser acessado pelo endereo base mais su . Se o endereo o da
r na mesma posio. primeira po ido para permanece sio, somente o 0 poderia ser acresc


Se declararmos pal com tamanho 5, lembre-se de que s podemos usar 4 posies,
pois uma reservada para o finaliza
bo
programar


9.1.1 De

dor \0 que indica o fim do vetor.
m voc j ir se acostumando com este conceito de apontamento, pois para se
bem em C, precisaremos dominar o conceito de ponteiros.
clarando uma matriz:
tipo nomeDoConjunto [ ... ] [ ...] ... ;

Exemplos:
/* declara uma matriz unidimensional de 5 elementos inteiros */
int num[ 5 ];


Algoritmos Prof. Anita Lopes


41
clara uma matriz bidimensional com 100 linhas e 4 colunas do tipo float */
float notas [ 100 ][ 4 ];
][ 30 ];

rdar nomes, na linguagem C
++
, bidimensional, pois o primeiro
ndice indica a quantidade de nomes e o segundo o nmero de caracteres 1 que sero
arma



9
/ *uma di mensao */

}
. . .
/* de

/* declara uma matriz bidimensional com 100 linhas e 30 colunas do tipo char */
char nomes [ 100
Toda matriz para gua
zenados em cada nome.

9.1.2 Armazenamento
O armazenamento na matriz poder ser feito atravs de um comando de leitura ou
de atribuio.

.1.2.1 Leitura
. . .
f or ( a=0; a<t amanho; a++)
{
cout <<" \ n: " <<a+1;
ci n>>nomeVet or [ a] ;
/ *duas di mensoes */
. . .
f or ( L=0; L<t amanhoLi nha; L++)
f or ( c=0; c<t amanhoCol una; c++)
{
cout <<" \ nNumer o da Li nha " <<L+1<<" col una " <<c+1<<" : " ;


ci n>>nomeMat r i z[ L] [ c] ;
}
. . .

.1.2.2 Atribuio
matrizes atravs de atribuies:
xemplos:
int vet[4]={6,7,8,9}
float nota[3]={8.5,6.2,9.8};
cha ="Joo Renato";
cha
int
/* de ao/atribuio acima, assumido 3 como nmero de linhas */


9

Podemos tambm inicializar as
E
;
r nome[12]
r nomes[4][30]={"JOO", "MARIA", "PEDRO","FILIPE"};
4,5,6,7,8,9}; mat[][3]={1,2,3,
clar na

Algoritmos Prof. Anita Lopes


42
#i
us
i n
{i nt L, c;
i
di as_meses[ ] [ 12] ={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31, 29, 31, 30, 31, 30,
31
cout <<" \ n\ nPar a anos nao bi ssext os, pr i mei r a l i nha e par a bi ssext os,
se
[ L] [ c] <<" " ;
cout <<" \ n\ n" ;
}
ci n. get ( ) ; ci n. get ( ) ;
ncl ude <i ost r eam>
i ng namespace st d;
t mai n( )
nt
, 31, 30, 31, 30, 31};
gunda l i nha\ n\ n" ;
f or ( L=0; L<2; L++)
{ f or ( c=0; c<12; c++)
cout <<di as_meses
}



9 1.3 S
mensao MATRI Z COLUNA*/ / *uma di mensao MATRI Z LI NHA*/
. . .
syst em( " cl s" ) ;
cout <<" \ nTi t ul o\ n" ;
f or ( a=0; a<t amanho; a++)
cout <<nomeVet or <<" \ t " ;
. ada
/ *um di a
. . .
syst em( " cl s" ) ;
cout <<" \ nTi t ul o\ n" ;
f or ( a=0; a<t amanho; a++)
cout <<" \ n: " <<nomeVet or ;
. . . . . .
/ *duas di mensoes TODOS OS ELEMENTOS*/
. . .
sy t e s
cout
m( " cl s" ) ;
<<" \ nTi t ul o\ n" ;
f or ( L=0; L<t amanhoLi nha; L++)
{ f or ( c=0; c<t amanhoCol una; c++)
at r i z[ L] [ c] <<" \ t " ;

cout <<nomeM
cout <<" \ n" ;
}
. . .

Algoritmos Prof. Anita Lopes


43
uns El ement os*/
" ) ;
t ul o\ n" ;

Condi o

( L==c)
s di agonal Pr i nci pal
/ *duas di mensoes Al g
. . .
syst em( " cl s
t <<" \ nTi cou
f or ( L=0; L<t amanhoLi nha; L++)
hoCol una; c++)

( L! =c)
{ f or ( c=0; c<t aman
i f ( condi o )
cout <<nomeMat r i z[ L] [ c] <<" \ t " ;
el se
cout <<" \ t " ;
cout <<" \ n" ;
}
. . .
t odos menos a di agonal
Pr i nci pal


( L<c) el ement os aci ma da
di agonal pr i nci pal

( L>c) el ement os abai xo da
di agonal pr i nci pal



9.1.4 Matrizes somaLinha e somaColuna


9 aLinha

l(vetor o tas linhas
quantas forem as linhas da matriz original e todos os
e iz original. Em outras palavras, cada
e s os elementos das colunas de uma linha.
ha
mo uma matriz de acumuladores precisa ser inicializada.
f or ( L=0; L<t amanhoLi nha; L++)
somaLi nha[ L] =0;

.1.4.1 Matriz som

uma matriz unidimensiona u matriz coluna) que ter tan
a elemento ser a soma d e cad
lementos da linha correspondente na matr
lemento soma de todo


9.1.4.1.1 Inicializando a matriz somaLin

Co



9.1.4.1.2 Gerando a matriz somaLinha

f or ( L=0; L< t amanhoLi nha; L++)
f or ( C=0; C< t amanhoCol una; C++)
somaLi nha[ L] +=mat [ L] [ C] ;

Algoritmos Prof. Anita Lopes


44
o
manhoLi nha; L++)
n" ;
9.1.4.1.3 Imprimindo a matriz somaLinha s zinha

f or ( L=0; L< t a
cout <<somaLi nha[ L] <<" \
cout <<endl ;


primindo a matriz somaLinha c 9.1.4.1.4 Im o inal
l s" ) ;
cout <<" \ nMat r i z Or i gi nal commat r i z
SomaLi nha\ n\ n" ;
f or ( L=0; L< t amanhoLi nha; L++)
{ f or ( C=0; C< t amanhoCol una; C++)
cout <<mat Or i gi nal [ L] [ c] <<" \ t
cout <<somaLi nha[ x] <<" \ n" ;
}
m a matriz orig

syst em( " c

" ;



9.1.4.2 Matriz somaColuna

uma matriz unidimensional(vetor ou matriz linha) que ter tantas colunas
quantas forem as colunas da matriz original e cada elemento ser a soma de todos os
elementos da coluna correspondente na matriz original. Em outras palavras, cada
elemento a soma de todos os elementos das linhas de uma coluna.

.2.1 Inicializando a matriz somaColuna
somaCol una[ c] =0;

9.1.4

Como uma matriz de acumuladores precisa ser inicializada.

f or ( c=0; c<t amanhoCol una; c++)


9.1.4 Gerando a matriz somaColuna
f or ( L=0; L< t amanhoLi nha; L++)
.2.2

f or ( c=0; c< t amanhoCol una; c++)
mat [ L] [ c] ; somaCol una[ c] +=

na sozinha 9.1.4.2.3 Imprimindo a matriz somaColu

f or ( c=0; c< t amanhoCol una; c++)
cout <<somaCol una[ c] <<" \ t " ;
cout <<endl ;

Algoritmos Prof. Anita Lopes


45
atriz original
mat r i z
\ n" ;
f or ( L=0; L< t amanhoLi nha; L++)
{ f or ( c=0; c< t amanhoCol una; c++)

hoCol una; c++)
9.1.4.2.4 Imprimindo a matriz somaColuna com a m

syst em( " cl s" ) ;
cout <<" \ nMa r i z Or i gi nal com t
SomaCol una\ n
cout <<mat Or i gi nal [ L] [ c] <<" \ t " ;
cout <<" \ n" ;
}
f or ( c=0; c< t aman
cout <<somaCol una[ c] <<" \ t " ;
cout <<" \ n" ;


9.1.5 Operae

Em relao s matrizes numricas, podemos realizar todas as operaes que j
conhecemos com matrizes: produto escalar, soma, subtrao, multiplicao por escalar,
mul plicao de matrizes, clculo do determinante, etc.



9.2
O uso e estruturas heterogneas, o to conhecido struct, ser visto mais adiante.
Este tipo de estrutura no faz parte do nosso estudo, mas tenha certeza de que voc
vai gos


s
ti

Estruturas heterogneas

d
tar de conhec-la.

Algoritmos Prof. Anita Lopes


46
10 Fun

10.1 Conceito

Funo u s especficos.
Um progra ormado por vrias funes.


10.2 Vantagen

As fu es at dos parmetros e atravs do seu nome permitem
que sejam retornados valores rotina chamadora e desta forma esses valores podero ser
im dos a uma varivel ou podem servir em operaes aritmticas entre
outras.
O
legibilidade do
programa uma vez que a funo main ficar menor;
Possibilidade de testar os trechos em separados;
Permitir que o programador construa sua prpria biblioteca de funes, tornando
ficiente uma vez que poder fazer uso de funes por ele
escritas em vrios outros programas com a vantagem de j terem sido testadas;

10.3. Funes Pr-definidas

O conjunto de funes pr-definidas muito extenso e aqui vamos estudar algumas
funes das bibliotecas: cmath, cstring, cctype, cstdlib, etc.
Quando estudamos uma funo, temos vrios parmetros a observar. Veja, por
exemplo a seguinte funo pr-definida da biblioteca cmath:

double sqrt(double x)

Este o prottipo da funo, isto , informaes sobre o tipo de retorno da funo
e tipos dos parmetros.
Esta funo retorna um valor double, seu nome sqrt e o tipo da varivel que recebe
o valor passado double.
Quando voc criar suas funes, elas precisaro ter uma declarao semelhante a
esta.
As funes que voc criar podero ser localizadas antes da funo principal(main) ou
es
m trecho de programa com objetivo
ma escrito em linguagem C++ poder ser f
s
n ravs da passagem
pressos ou atribu
s principais objetivos de uma funo so:
Evitar que uma seqncia de comandos se repita em vrias partes de um programa ;
Dividir o programa em partes menores(modularizar), aumentando a
sua programao mais e

Tudo isto justifica o uso de funes em nossos programas


Algoritmos Prof. Anita Lopes


47
uma funo for declarada antes, o prottipo da funo no precisar ser
declarado na funo main, mas se declarada depois, o prottipo precisar ser declarado na
D
)
depois. Se
funo main.

eclarao de uma funo:
tipo identificador (lista de parmetros
int, float, char, void Nome da funo ( tipo1 nome1, tipo2 nome2 )

Exemplos:
int quadrado(int l)
char maiuscula(char n[] )


Calma! Voc vai comear a
Muito difcil. No enetendi nada!
usar as funes que j esto
prontas.


10.3
Bi

#i
#i
#d
usi ng namespace st d;
i nt mai n( )
{
cout <<" \ nFUNCOES NUMERI CAS\ n" ;
cout <<" \ nDi gi t e numer o r eal : " ;
f ;
<<f abs( f ) ;
" \ nCEI L: " <<cei l ( f ) ;


cout <<" \ nPot enci a de 2 el evado a 3: "
cout <<" \ nLogar i t mo de 8 na og( 8. 0) ;
cout <<" \ nLogar i t mo de 8 na base 10: " <<l og10( 8. 0) ;


.1 Funes Numricas
blioteca: cmath
ncl ude <i ost r eam>
ncl ude <cmat h>
ef i ne PI ( 3. 14159265)
f l oat f ;
ci n>>f ;
cout <<" \ nNumer o: " <<
cout <<" \ nABSOLUTO: "
cout <<
cout <<" \ nFLOOR: " <<f l oor ( f ) ;
cout <<" \ nFMOD: " <<f mod( f , 3) ;
cout <<" \ nSQRT: " <<sqr t ( f +0. 5) ;
cout <<" \ nSeno de 30: " <<si n( 30*PI / 180) ;
cout <<" \ nCo- seno de 30: " <<cos( 30*PI / 180) ;
cout <<" \ nTangent e de 30: " <<t an( 30*PI / 180) ;
<<pow( 2. 0, 3. 0) ;
base neper i ana: " <<l
cout <<" \ nLogar i t mo 8 na base 2: " <<l og( 8. 0) / l og( 2. 0) ;
cout <<" \ nRai z cubi ca de 8: " <<exp( 1. / 3*l og( 8. 0) ) ;
cout <<" \ n\ n" ;
syst em( " pause" ) ;
}

Algoritmos Prof. Anita Lopes


48



10.3.2 Funes que Convertem strings em Nmeros
NCOES CHAR- NUMER0\ n" ;
nt ei r o: " ;
" <<at oi ( s) / 2;
( s) ) ;
Biblioteca: cstdlib

#i ncl ude <i ost r eam>
> #i ncl ude <cst dl i b
usi ng namespace st d;
i nt mai n( )
] ; { char s[ 30
cout <<" \ nFU
cout <<" \ nDi gi t e numer o r eal : " ;
ci n>>s;
nDobr o: " <<at of ( s) *2; cout <<" \
cout <<" \ nDi gi t e numer o i
ci n>>s;
r 2: cout <<" \ nNumer o di vi di do po
cout <<" \ nABSOLUTO: " <<abs( at oi
cout <<" \ n\ n" ;
syst em( " pause" ) ;
}



Algoritmos Prof. Anita Lopes


49
10.3.3 Funes Strings
Biblioteca: ctring, cctype

#i ncl ude <i ost r eam>
#i ncl ude <cst r i ng>
#i ncl ude <cct ype>
usi ng namespace st d;
i nt mai n( )
{char c, s1[ 30] , s2[ 30] ;
cout <<" \ nBI BLI OTECA cct ype\ n" ;
cout <<" \ nLet r a: " ;
ci n>>c; ci n. get ( ) ;
c=t oupper ( c) ;
cout <<" Conver t i da par a mai uscul a: " <<c;
c=t ol ower ( c) ;
cout <<" \ nConver t i da par a mi nuscul a: " <<c;
cout <<" \ n\ nBI BLI OTECA cst r i ng\ n" ;
cout <<" \ nDi gi t e pal avr a: " ; ci n. get l i ne( s1, 30) ;
st r cat ( s1, " FI M" ) ;
" \ nConcat enacao da pal avr a di gi t ada comFI M: " <<s1;
" \ nDi gi t e pal avr a: " ; ci n. get l i ne( s2, 30) ;
ar ando st r i ngs\ n" ;
" Di gi t e PAZ: " ; ci n. get l i ne( s1, 30) ;
; ci n. get l i ne( s2, 30) ;

r ent es" ;
e( s1, 30) ;
( s2, 30) ;
cout <<
cout <<
st r cpy( s1, s2) ;
cout <<" \ nApos copi a de t oda pal avr a2: " <<s1;
o de s2: " <<st r l en( s2) ; cout <<" \ nTamanh
cout <<" \ n\ nComp
cout <<
cout <<" Di gi t e PAZ: "
0) i f ( st r cmp( s1, s2) ==
cout <<" \ nI GUAI S" ;
el se
cout <<" \ nDi f e
cout <<" \ nDi gi t e PAZ: " ; ci n. get l i n
ne cout <<" Di gi t e AMOR: " ; ci n. get l i
p( s1, s2) ! =0) i f ( st r cm
cout <<" \ nDI FERENTES" ;
el se
\ nI guai s" ; cout <<"
cout <<" \ n\ n" ;
syst em( " pause" ) ;
}

Algoritmos Prof. Anita Lopes


50



1

dor e um contedo que ir ser substitudo toda vez que o
id grama.
a
fu
gens o uso de funes.
riao de suas funes.

E unciado deste programa.

ncl ude <cmat h>
#def i ne quadr ado( x) ( ( x) *( x) )
#def i ne pi ( 3. 14159265)
#def i ne NP ( 2. 71828182846)
#def i ne conv( x) ( ( x) *( pi ) / ( 180) )
usi ng namespace st d;
i nt mai n( )
{
cout <<" \ nnumer o: 12" ;
cout <<" \ n\ nquadr ado= " << quadr ado( 12) ;
cout <<" \ n\ nangul o: 30" ;
cout <<" \ n\ nseno de 30 eh " <<si n( conv( 30. 0) ) ;
cout <<" \ n\ nneper i ano: " <<NP ;
cout <<" \ n\ n" ;
syst em( " pause" ) ;
}
0.4. Diretiva #define
Define um identif
dor aparecer em um pro
ica
entifica
Esta diretiva pode ser associada a uma string ou a uma macro semelhante a um
no.
ro for pequena, substitui com vanta Se o tamanho da mac
Ser seu primeiro contato com a c
xemplo 1: Escreva o en
#i
#i
ncl ude <i ost r eam>

Algoritmos Prof. Anita Lopes


51


Exemplo 2: Escreva o enunciado deste programa.
#i ncl ude <i ost r eam>
#def i ne AREA( b, h) ( b*h)
usi ng namespace st d;
i nt mai n( )
{ f l oat base, al t ;
" \ nBASE: " ;
;
cout <<" \ nAREA: " <<AREA( base, al t ) ;
c
cout <<
ci n>>base ;
cout <<" \ nALTURA: "
ci n>>al t ;
out <<" \ n\ n" ;
syst em( " pause" ) ;
}


E nciado deste programa.
l ude <i ost r eam>
1: " ;
cout <<" \ nCATETO 2: " ;
ci n>>cat 2 ;
cout <<" \ nHI POTENUSA: " <<HI PO( cat 1, cat 2) ;
cout <<" \ n\ n" ;
xemplo 3: Escreva o enu
#i nc
#i ncl ude <cmat h>
#def i ne HI PO( c1, c2) ( sqr t ( c1*c1+c2*c2) )
usi ng namespace st d;
i nt mai n( )
{ f l oat cat 1, cat 2;
cout <<" \ nCATETO
ci n>>cat 1 ;


Algoritmos Prof. Anita Lopes


52
syst em( " pause" ) ;
}


Exemplo 4: Escreva o enunciado deste programa.
og( b) ) )
nt e;
nt e) ;
#i ncl ude <i ost r eam>
#i ncl ude <cmat h>
#def i ne POT( b, e) ( exp( e*l
usi ng namespace st d;
i nt mai n( )
{ f l oat base, expoe
cout <<" \ nBase: " ;
ci n>>base ;
cout <<" \ nexpoent e: " ;
e; ci n>>expoent
cout <<" \ nPot enci a: " <<POT( base, expoe
cout <<" \ n\ n" ;
syst em( " pause" ) ;
}








Algoritmos Prof. Anita Lopes


53
1 o pr-definida

Quando uma funo pr-definida chamada, o fluxo de controle desviado para a
funo, no momento em que ela ativada no na funo que a chama. Em nosso estudo ser
sempre chamda da main(principal). Ao terminar a execuo dos comandos da funo, o fluxo
de controle retorna ao ponto que foi ativada.

0.5 Chamada da fun



























Algoritmos Prof. Anita Lopes


54

3. EVARISTO, Jayme. Aprendendo a Programar em C. Rio de Janeiro: Book Express,
2001.
4. Kernighan, Brian W. Ritchie, Dennis M. C- A linguagem de Programao padro
ANSI . Rio de Janeiro , Campus , 2002
5. MIZRAHI, V.V. Treinamento dem liguagem C Curso completo.Mdulos 1 e 2. So
Paulo: Mc Graw Hill, 1990
6. MRALES,Celso R. Estruturas de daos e Algoritmos. So Paulo: Berkley,2001.

7. SCHILDT, Herbert. C completo e total. Makron Book

8. UFMG. Apostila de C.

. UNIVERSIDADE DE CAXIAS DO SUL. Apostila de C.

0. PROF. SILVIO Anotaes. ni.faj.br/nourau/document/get.php/2934/aula8.pdf




Bibliografia:
1. LOPES, Anita, GARCIA, Guto. Introudo Programao- 500 Algoritmos. 6
a

ed.Rio de Janeiro: Campus, 2002.
2. LOPO,Erik de Castro, JONES Bradlely, AIKTEN Peter. C for Linux Programming
.SAMS
9
1

Vous aimerez peut-être aussi