Buscar

apstila c++ rev

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 144 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 144 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 144 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

3 
SUMÁRIO 
 
Unidade I 
 
1.0 Itens fundamentais......................................................................pg-
8 
1.1 Dados Numéricos.........................................................................pg-
8 
1.2 Dado literal...................................................................................pg-
8 
2.0 Variável.........................................................................................pg-
8 
2.1 Formação de 
Identificadores........................................................pg-9 
2.2 Declaração de 
variáveis.................................................................pg-9 
2.3 Modificadores de tipos oferecidos por 
c++...................................pg-9 
3.0 
Operadores.....................................................................................pg-10 
3.1 Operadores de 
atribuição...............................................................pg-10 
3.2 Operadores 
aritméticos...................................................................pg-10 
4.0 Funções de entrada e 
saída..............................................................pg-11 
 
 4 
4.1 
Entrada.............................................................................................pg-11 
4.2 
Saída..................................................................................................pg-11 
5.0 Manipuladores de tamanho de campos na 
impressão.....................pg-12 
6.0 Funções 
aritméticas..........................................................................pg-14 
7.0 Operadores 
relacionais.....................................................................pg-14 
8.0 manipuladores de bases 
numéricas..................................................pg-17 
9.0 Imprimindo caracteres 
gráficos.......................................................pg-17 
10.0 Códigos 
Especiais............................................................................pg-18 
11.0Comentários.....................................................................................
pg-18 12 Estruturas 
condicionais.....................................................................pg-19 
13.0 Estruturas de 
repetições.................................................................pg-22 
13.1 Estrutura 
For..................................................................................pg-22 
13.2 Estrutura 
While..............................................................................pg-23 
 
 5 
 13.3 Estrutura Do-
While.......................................................................pg-25 
14.0 
Commandos:......................................................................................pg-28 
14.1 
Break..............................................................................................pg-28 
14.2 
Continue..........................................................................................pg-29 
14.3 
Switch..............................................................................................pg-29 
 
Unidade II 
 
1.0 
Matrizes...........................................................................................pg-31 
1.1 Matriz 
Unidimensional....................................................................pg-31 
1.2 Matriz 
Multidimensional.................................................................pg-33 
 
Unidade III 
 
1.0 
Funções.............................................................................................pg-34 
 
 
 6 
1.1Chamando um 
função........................................................................pg-35 
1.2 Funções 
simples................................................................................pg-35 
1.3 Protótipo de 
funções..........................................................................pg-35 
1.4 Tipos de 
funções................................................................................pg-36 
1.5 O comando 
Return............................................................................pg-36 
1.6 Definição da 
função...........................................................................pg-36 
1.7 Parâmetros da 
função.......................................................................pg-36 
1.8 Passagem por 
valor...........................................................................pg-37 
1.9 Passagem vários 
argumentos............................................................pg-38 
1.10 O operador unário de 
referência:&...............................................pg-39 
1.11 Passagem por 
referência.................................................................pg-40 
1.12 Referência 
constantes.....................................................................pg-41 
1.13 Classes de 
argumentos....................................................................pg-41 
 
 7 
1.14 O operador de 
escopo.....................................................................pg-42 
1.15 Funções 
recursivas.........................................................................pg-43 
 
Unidade IV 
 
 
1.0 
Estruturas.......................................................................................pg-45 
1.1 Definindo a 
estrutura......................................................................pg-45 
1.2 Acessando os membros da 
estrutura...............................................pg-46 
1.3 Combinando 
declarações..................................................................pg-46 
1.4 Inicializando 
estruturas....................................................................pg-46 
1.5 Operações entre 
estruturas..............................................................pg-46 
1.6 Estruturas 
aninhadas........................................................................pg-47 
1.7 Passando estruturas para 
funções....................................................pg-47 
1.8 Matrizes de 
estruturas......................................................................pg-48 
 
 8 
1.8.1declarando a matriz de 
estruturas..................................................pg-49 
1.9.0 
Arquivos.........................................................................................pg-53 
1.9.1 Classes 
iostream.............................................................................pg-53 
1.9.2 Detectando o fim de 
arquivo..........................................................pg-54 
1.9.3- Lendo e gravando um caracter por vez no arquivo. 
 
1.9.4 A função 
Open().............................................................................pg-55 
1.9.5 Gravando 
Objetos..........................................................................pg-55 
1.9.6 Lendo 
Objetos................................................................................pg-57 
1.9.7 Gravando e lendo objetos de um mesmo 
arquivo.........................pg-57 
1.9.8 As funções seekg(), tellg(0, seekp() e 
tellp()...................................pg-59 
1.9.9 Calculando o número de registros do 
arquivo..............................pg-59 
1.10 Exemplos adicionais de 
arquivos...................................................pg-62 
Unidade V 
 
 
 9 
1.0 
Ponteiros............................................................................................pg-69 
1.1 Por que os ponteiros são 
usados.......................................................pg-69 
1.2 Ponteiros 
variáveis............................................................................pg-70 
1.3 Endereços de 
memória......................................................................pg-701.4 Operador de 
endereços.....................................................................pg-70 
1.5 Passando argumentos por referência com 
ponteiros.......................pg-71 
1.6 variáveis que armazena 
endereços...................................................pg-72 
1.7 O operador 
indireto..........................................................................pg-72 
1.8 Passando endereços para a 
função...................................................pg-72 
1.9 Ponteiros sem 
funções.......................................................................pg-72 
1.10 Ponteiros e variáveis 
apontadas.....................................................pg-73 
1.11 
atribuição.........................................................................................pg-73 
1.12 Operação 
indireta...........................................................................pg-73 
 
 10 
1.13 Trazendo o endereço do 
ponteiro...................................................pg-74 
1.14 Incremento em 
ponteiro..................................................................pg-74 
1.15 Ponteiro no lugar de 
matrizes.........................................................pg-74 
1.16 Ponteiros constantes e ponteiros 
variáveis.....................................pg-74 
1.17 Passando matrizes como argumento para 
funções........................pg-75 
1.18 
Precedência.....................................................................................pg-76 
1.19 Ponteiros e 
strings...........................................................................pg-76 
1.20 Matrizes de 
ponteiros......................................................................pg-77 
1.21 Área de alocação dinâmica: 
Heap.................................................pg-77 
1.22 Retornado o ponteiro 
This..............................................................pg-79 
1.23 dimensionando matrizes em tempo de 
execução...........................pg-79 
 
 11 
 
 
LINGUAGEM C++ 
 
UNIDADE - I 
 
1.0 - Itens Fundamentais 
 
 1.1 - Dados Numéricos 
 
 É representado pelo sistema decimal inglês. 
 Obs.: A separação da parte inteira da fracionária é feita pelo ponto decimal. 
 
 Ex.: 0.19 
 0.298 
 
 I . FF E n 
 
 expoente 
 potência de dez 
 parte fracionária 
 ponto decimal 
 parte inteira 
 
Ex.: a) 2.98E3 = 2,98 X 103 
 b) 0.45E-4 = 0,45 X 10-4 
 
 1.2 - Dado Literal 
 
 
 12 
 É formado por qualquer seqüência de caracteres e vem entre aspas duplas. 
 
 Ex. a) " 2040" 
 b) " " 
 c) " Não Fume" 
 
2.0 - Variável 
 
 É o endereço de memória (RAM) reservado para armazenar certo tipo de 
dado. 
 Obs.: RAM - Memória dinâmica de acesso aleatório a leitura e escrita e é 
volátil. 
 
 13 
 
 Ex.: 
 
d 1
0 
n
ota 
1
00 
s
exo 
f 
 
 2.1 - Formação de identificadores é formada por apenas uma letra ou então 
uma letra seguido de letras e dígitos nunca símbolos especiais. 
 Obs.: A letra maiúscula é diferente de letra minúscula. 
 
 Ex.: 1) funcao 3) media 
 2) d 4) m200 
 
 Cuidado - MEDIA  media 
 
 2.2 - Declaração de variáveis 
 
 Tipo da variável <nome-do-identificador>; 
 
 O ponto-e-vírgula manda o computador executar a próxima instrução. 
 Nome-do-identificador são os nomes das variáveis separadas por vírgula. 
 
 Tipo da variável pode ser do tipo int, float, double, char, etc. 
 
 Ex.: int x,y; 
 
 14 
 float med; 
 
 Tabela de tipos 
Tipo Bytes Escala 
int 2 -32768 a 32767 
char 1 -128 a 127 
float 4 3.4E-38 a 3.4E38 
double 8 1.7E-308 a 
1.7E308 
void 0 Nenhum valor 
 
 2.3 - Modificadores de tipos oferecidos por C++ são: 
 
 1 - long 
 2 - short 
 3 - unsigned 
 
 Obs.: O modificador de tipo pode ser utilizado sem que seja especificado o 
tipo da variável, por default assume o tipo INT. 
 
 A tabela de tipo utilizando os modificadores. 
Tipo Bytes Escala 
unsigned char 1 0 a 255 
unsigned 2 0 a 65535 
short 2 -32768 a 32767 
long 4 -2147483648 a 
2147483647 
unsigned long 4 0 a 42949667295 
long double 10 3.4E-4932 a 
1.1E+4932 
 
 15 
 
 
 
 Obs.: 
 int tem sempre o tamanho da palavra da máquina, isto é, em computadores de 
16 bits ele terá 16 bits de tamanho. 
 Short tem tamanho diferente do tipo int, geralmente à metade do tamanho de 
um int. 
 
 STRINGS são declaradas da seguinte maneira 
 
 char nome[n]; 
 Onde: n é o numero de caracteres da string. 
 
 Ex.: 
 int id,nm; 
 float alt,peso; 
 char nome[25]; 
 char sexo; 
 
3.0 - Operadores 
 
 3.1 - Operador de atribuição: = 
 Representa a atribuição da expressão a sua direita a variável a sua 
esquerda. 
 
 Ex.: 1) x = 200; 
 2) y = 5; 
 
 3.2 - Operadores aritméticos 
 
 16 
 
 + soma 
 - subtração 
 * multiplicação 
 / divisão 
 % resto da divisão de 2 números inteiros 
 
 Prioridade 
 
Prioridade operadores 
1ª. *, /, % 
2ª. +, - 
 
Ex: 1. x+y; 
 2. x-y; 
 3. 2*nota + 10; 
 4. tot/k - 40; 
 5. y=9 % 4; 
 
4.0 - Funções de entrada e saída 
 
 Funções: 
 i) cin >> nome-da-variável >> nome-da variável >> . . . 
 
 Transfere os dados externos via teclado para as variáveis especificadas. 
 
 Obs.: >> significa OPERADOR DE EXTRAÇÃO 
 Ex.: cin >> anos; 
 Cuidado os dados são separados de uma variável para outra através do espaço 
em branco. 
 
 17 
 Ex.: cin >> anos >> altura 
 
 Tela 
 
 26 1.70 anos 26 
 altura 1.70 
 
 
 ii) gets (nome-da-variável); 
 
 Ler uma cadeia de caracteres do teclado enquanto não for pressionada a tecla 
ENTER. 
 
 Ex.: gets(nome); 
 
 Tela 
 nome 
 
 
 
 iii) getche( ) e getch( ) 
 
 Transferem um caracter para a variável sem esperar pressionar <ENTER>. 
 
 Ex.: ch = getche( ); 
 ch = getch( ); 
 
 Tela 
 
 A ch A 
a
A 
n
n 
a
a 
 p
P 
a
a 
u
u 
l
l 
a
a 
 
 18 
 
 4.2 - Saída 
 
 cout << identificador << . . . 
 Onde: Identificadores são os nomes das variáveis e/ou mensagem. 
 
 << operador de inserção. 
 
 Exibe na tela o conteúdo de variáveis e/ou mensagens. 
 Obs: A mensagem vem entre aspas duplas. 
 
 Ex.: cout <<"A sua idade é : " << id; 
 
 Tela 
id 18 A sua idade é : 18 
 
 
5 - Manipuladores de tamanho de campos na impressão. 
 
 O tamanho do campo é definido pelo arquivo iomanip.h e são os seguintes: 
 
 1 - setw - seleciona o tamanho do próximo campo a ser impresso. 
 
 2 - setprecision - define o numero de casas decimais a serem impressas para 
o número ponto flutuante (float). 
 
 3 - setfill - seleciona o caractere que deverá preencher as colunas em branco 
de um campo. 
 
Exemplos: 
 
 19 
 
1) com números inteiros 
 
#include <iostream.h> 
main( ) 
{ 
 int lap,bor,can,cad,fit; 
 lap=45; bor=2345; can=420; cad=8; fit=13050; 
 cout << "\n\n\n" // insere linhas 
 cout << '\n' << "Borracha" <<bor; 
 cout << '\n' << "Lapis" << lap; 
 cout << '\n' << "Canetas" << can; 
 cout << '\n' << "Cadernos" << cad; 
 cout << '\n' << "fitas" << fit; 
} 
 
#include <iostream.h> 
#include <iomanip.h> 
main( ) 
{ 
 int lap=45,bor=2345, can=420, cad=8, fit=13050; 
 cout << "\n\n\n" // insere linhas 
 cout << '\n' << "Borracha" << setw(12) << bor; 
 cout << '\n' << "Lapis" <<setw(12) << lap; 
 cout << '\n' << "Canetas" <<setw(12) << can; 
 cout << '\n' << "Cadernos" <<setw(12) << cad; 
 cout << '\n' << "fitas" <<setw(12) << fit; 
{} 
 2) Preencher as colunas em branco com o caracter (.). 
 
 
 20 
 - acrescentar: 
 
 cout << setfill(' . '); 
 cout << '\n'<<"lapis"<<setw(12)<<lap; 
 . 
 . 
 . 
 . 
 
Ex.: Tamanho de campos com pontos flutuantes. 
 
#include <iostream.h> 
#include <iomanip.h> 
main( ) 
{ 
 float lap=4.875,bor=234.542,can=42.036,cad=8.0,fit=13.05; 
 cout << "\n\n\n"; 
 cout << setprecision(2); 
 cout <<'\n'<<"lapis"<<setw(12) << lap; 
 . 
 . 
 . 
 . 
} 
 
Ex.: Tamanho de campos com cadeias de caracteres 
 
 . 
 . 
 . 
 
 21 
{ 
 cout << "\n\n\n"; 
 cout << "objeto"<<setw(12)<<"codigo"<<'\n'; 
 cout <<'\n'<< "lapis"<<setw(12)<<"WQR"; 
 cout << '\n'<< "borracha"<<setw(12)<<"ASO"; 
 . 
 . 
 . 
} 
 
 
#include <iostream.h> 
#include <iomanip.h> 
#include <conio.h> 
void main(void) 
{ 
 float lap=4.875, bor = 234.542; 
 cout<<"\n\n\n"; 
 cout<<setprecision(2)<<setfill('.'); 
 cout<<"\nlapis "<<setw(12)<<lap; 
 cout<<"\nborracha "<<setw(12)<<bor; 
 cout<<"\nAperte enter "; 
 getch( ); 
 return; 
} 
 
6.0 - Funções Aritméticas 
 1) sin(x) 
 2) cos(x) 
 
 22 
 3) atan(x) - arco-tangente de x 
 4) sqrt(x) - raiz quadrada de x 
 5) exp(x) - Nº. e elevado a x 
 6) abs(x) - valor absoluto inteiro 
 7) fabs(x) - valor absoluto real 
 8) log(x) logaritmo 
 9) log10 - logaritmo na base 10 
 10) pow(x,y) - elevar x a y 
 
7.0 - Operadores relacionais 
 
 1) = = 3) > 5) > = 
 2) ! = 4) < 6) < = 
 
 7.1 - O resultado de uma operação de dois valores pode ser: 
 - 0 (falso) ou 1 (verdadeiro) 
 
 7.2 - O resultado de uma operação lógica é um valor cujos bits são operados 
um a um de acordo com a álgebra de proposições. 
 
 7.3 - Operadores lógicos 
 
 ! (negação) 
 && (conjunção) 
 || (disjunção) 
OBS: 1º. PORTA LÓGICA AND(&&) 
 
 TABELA VERDADE: 
 
 23 
 
X Y Z 
0 0 0 
0 1 0 
1 0 0 
1 1 1 
 
Analogia De Um Circuito Em Série, Basta Uma Chave Desligada Para A Lâmpada 
Desligar. 
 
2ª. PORTA OR ( | | ) 
 
TABELA VERDADE: 
 
X Y Z 
0 0 0 
0 1 1 
1 0 1 
1 1 1 
 
Analogia De Um Circuito Em Paralelo, Basta Uma Chave Ligada Para A Lâmpada 
Acender. 
 
 
 7.4 - Operadores aritméticos de atribuição 
 
 1) + = 4) / = 
 2) - = 5) % = 
 3) * = 
 
 
 24 
 Ex.: 1) t + = 2; ------> t=t+2; 
 2) x * = y+1; -- > x = x * (y + 1) 
 3) t / = 25; -- > t = t / 25 
 4) p % = 5; -- > p = p % 5 
 
 7.5 - Operadores de incremento (+ +) e de decremento (- -) 
 
 - O Operador de incremento pode ser usado de 2 formas: 
 
 a) Prefixado quando aparece antes do nome da variável 
 b) Pós-fixado aparece em seguida ao nome da variável 
 
Ex.: 1) x = x + 1; // adiciona 1 a x 
 2) + + x; // adiciona 1 a x 
 3) x + +; // adiciona 1 a x 
 
 Obs.: A diferença entre as operações executadas pelo operador prefixado e o 
pós-fixado aparece em instruções que fazem mais do que somente incrementar a variável 
operando. 
 
 1) O operador de incremento prefixado incrementa a variável operando antes 
de executar a instrução em que ele aparece. 
 
Ex.: n = 5; 
 x = + + n; 
 cout << "\n N= " << n <<" X = "<< x; 
 
 A saída será 
 N = 6; X = 6 
 
 
 25 
 2) O operador de incremento pós-fixado incrementa a variável operando logo 
após a execução da instrução em que ele aparece. 
 
Ex.: n = 5; x = n++; 
 cout << "\n N = "<< n <<" X = "<< x; 
 
 A saída será 
 N = 6; X = 5 
 
 3) A sintaxe do operador de decremento é idêntica a do operador de 
incremento. 
 
 7.6 - Operador condicional ternário: ? : 
 
 Sintaxe: 
 
 exp1 ? exp2 : exp3; 
 
 A exp1 é avaliada, se for verdadeira a exp2 é executada; caso contrário, se a 
exp1 for falsa a exp3 é executada. 
 
 Ex1.: max = (a > b) ? a: b; 
 
 A variável max receberá o maior valor. 
 
 Ex2.: abs = (x > 0) ? x : -x; 
 
 Ex3.: cout << ( (x % 2) ? "Impar " : "Par"); 
 
// Calcula a média aritmética de 4 notas 
 
 26 
 
#include <iostream.h> 
main( ) 
{ 
 float nota,media; 
 media = 0; 
 cout<<"\nDigite a primeira nota : "; 
 cin >> nota; 
 media + = nota; 
 cout<<"\nDigite a segunda nota : "; 
 cin >> nota ; 
 media + = nota; 
 cout<<"\nDigite a terceira nota : "; 
 cin >> nota; 
 media + = nota; 
 cout<<"\nDigite a quarta nota : "; 
 cin >> nota; 
 media + = nota; 
 media / = 4; 
 cout << "\n Media = "<<media; 
} 
 
 
#include <iostream.h> 
main() 
{ 
 int verdadeiro,falso 
 verdadeiro = (15<20); 
 falso = (15 = = 20); 
 cout << "\n Verdadeiro "<<verdadeiro; 
 
 27 
 cout << "\n Falso "<<falso; 
} 
 
 
#include <iostream.h> 
main( ) 
{ 
 cout << "\n"<<(4+1<3); 
 cout << "\n"<<(2<1+3); 
} 
 
 
8 - Manipuladores de bases Numéricas 
 
 Os manipuladores de bases numéricas estão definidos no arquivo iostream.h e 
são os seguintes: 
 dec - decimal (default) 
 hex - hexadecimal 
 oct - octal 
 
Ex.: 
#include <iostream.h> 
main( ) 
{ 
 int n=65 
 cout<<'\n'<<"Hexadecimal"<<hex<<n; 
 cout<<'\n'<<"Octal"<<oct<<n; 
 cout<<'\n'<<"Hexadecimal"<<dec<<n; 
} 
 
 
 28 
 Saída: 41 
 101 
 65 
 
9 - Imprimindo caracteres gráficos 
 
 O código ASCII dispõe de números de 0 a 127 (decimal) abrangendo letras, 
dígitos, caracteres de pontuação, etc. Os computadores IBM-PC usam 128 caracteres 
adicionais, com códigos de 128 a 255, que consistem em símbolos de línguas estrangeiras e 
caracteres gráficos 
 A forma de representar um caractere de código acima de 127 é : \xdd; 
 onde: \xdd é um caractere e pode ser contido por uma cadeia de caracteres 
entre aspas duplas. 
 
 
 
Ex.: 
#include <iostream.h> 
main( ) 
{ 
 cout<<"\n\n"; 
 cout<<"\n\xDC\xDC\xDB\xDB\xDB\xDB\xDC\xDC"; 
 cout<<"\n\xDFO\xDF\xDF\xDF\xDFO\xDF"; 
 cout<<"\n\n"; 
 cout<<"\n\xDC\xDC\xDB\xDB\xDB\xDB\xDB\xDB\xDB"; 
 cout<<"\n\xDFO\xDF\xDF\xDF\xDF\xDFO\xDF"; 
 cout<<"\n\n"; 
} 
 
10 - Códigos especiais 
 
 29 
 
Códigos Especiais Significado 
\n Nova linha 
\t Tab 
\b Retrocesso 
\f Salta página de formulário 
\a Beep - toca o alto falante 
\r CR - Cursor para o inicio da linha 
\\ \ - Barra invertida 
\0 Null - zero 
\' ' - Aspa simples 
\" " - Aspa dupla 
\xdd Representação hexadecimal 
 
11 - Comentários 
 
 Podem ser colocadas em qualquer lugar do programa e são tratados pelo 
compilador como espaços em branco e vem entre /* ............................. */ ou então // 
.................. 
 
 obs.: // só uma linha 
 
Ex.: 
#include <iostream.h> // diretiva do pré-processador 
#include <conio.h> // necessário p/ o getche( ) 
// início do programa 
 
main( ) 
{ 
 charch; /* declaração de variável */ 
 
 30 
 cout<<"\nPressione uma tecla "; 
 ch=getche( ); // solicita uma tecla 
 cout<<"\nA tecla sucessora ASCII é "<<char(chr+1); 
} 
 
12 -Estruturas Condicionais 
 
 12.1 - Estrutura condicional simples: 
 
 1) Só uma instrução 
 
 if (expressão de teste) 
 instrução; 
 
Ex1.: 
 if (a = = b) 
 x = x + 1; 
 
Ex2.: 
 if (a>b+c | | a>20) 
 y = y + 2; 
 
 2) Mais de uma instrução 
 
 if (expressão de teste) 
 { 
 instrução; 
 instrução; 
 } 
 
 
 31 
Ex1.: 
 if (ch = = '0') 
 { 
 cout<<"\n Zero detectado"; 
 cont = cont+1; 
 } 
 
 12.2 - Estrutura condicional composta 
 
 1) Só uma instrução: 
 
 if (expressão de teste) 
 instrução a; 
 else instrução b; 
 
Ex1.: 
 if (a > 10) 
 k = k+2; 
 else y = y+3; 
 
 
 2) Mais de uma instrução 
 
 if (expressão de teste) 
 { 
 instrução1a; 
 . . . 
 instrução na; 
 } 
 else { 
 
 32 
 instrução1b; 
 . . . 
 instrução nb; 
 } 
 
 
 
 
Ex2.: 
 if (sexo = ='f') 
 { 
 nm = nm + 1; 
 k = k+i; 
 } 
 else { 
 nh = nh +1; 
 y = y+i; 
 } 
 
Ex: 
 1) Fazer um programa em C+ + que leia valores distintos. Determine e 
escreva o menor deles. 
 
#include <conio.h> 
#include <iostream.h> 
void main(void) 
{ 
 float a,b,c,men; 
 clrscr(); 
 cout <<"\nDigite três valores distintos "; 
 
 33 
 cin >> a >> b >> c; 
 if (a<b && a<c) 
 men=a; 
 else if (b<c) 
 men=b; 
 else men = c; 
 cout<<“\n menor = “<<men; 
 cout <<"\n Aperte quqlquer tecla "; 
 getch( ); 
 return; 
} 
 
 2) Fazer um programa em C+ + que leia os coeficientes de uma equação do 
2º. Grau. Calcule escreva as raízes reais se houver. 
 
 
#include <conio.h> 
#include <math.h> 
#include <iostream.h 
void main(void) 
{ 
 float x1,x2,a,b,c,d; 
 cout<<"\nDigite os coeficientes da equação do 2º. Grau"; 
 cin>>a>>b>>c; 
 d = pow(b,2)-4*a*c; 
 if (d>=0) 
 { 
 x1=(-b+sqrt(d))/2*a; 
 x2=(-b-sqrt(d))/2*a; 
 cout<<'\n x1= "<<x1<<" x2= "<<x2; 
 
 34 
 } 
 else cout<<"\n Não existem raízes reais "; 
 cout<<"\n Aperte qualquer tecla "; 
 getch( ); 
 return; 
} 
 
3 - fazer um prog. em c++ que leia os lados de um triângulo. Determine se os lados 
formam um triângulo se houver indique através de uma mensagem o tipo (eqüilátero, 
isósceles ou escalenos); caso contrário informe que não existe triângulo. 
 
 
#include <conio.h> 
#include <iostream.h> 
#include <math.h> 
void main(void) 
{ 
 int x,y,z; 
 cout<<"\nDigite os lados do triângulo "; 
 cin >> x >> y >> z; 
 if (x<y+z && y<x+z && z<x+y) 
 if (x = = y && x = = z) 
 cout<<"\n Triângulo eqüilátero "; 
 else if (x = = y | | x = = z | | y = = z) 
 cout<<"\n Triângulo isósceles "; 
 else cout <<"\n Triângulo escaleno"; 
 else cout<<“\n não existe triângulo”; 
 cout << "\n Aperte qualquer tecla"; 
 getch( ); 
 return; 
 
 35 
} 
 
13 - Estruturas de repetições 
 
 13.1 - A estrutura for: 
 
 1. só uma instrução: 
 
 for (inicialização; teste; incremento) 
 instrução; 
 
 2. Mais de uma instrução: 
 
 for (inicialização; teste; incremento) 
 { 
 instrução; 
 instrução; 
 } 
 
Obs.: i) for é usado quando sabemos o número de vezes a repetir. 
 ii) Só pode usar for se a variável de controle for do tipo inteira e variando de 
um em um. 
 iii) Todas as variáveis que estiverem dentro da estrutura de repetição tem que 
atribuir valores iniciais, exceto as lidas. 
 
Ex.: 1) Fazer um programa em C+ + que leia a altura e o sexo de 10 pessoas. 
Calcule e escreva a maior e a menor altura com os respectivos sexos. 
 
 
 
 36 
 Dados: alt 
 sexo 
 10 pessoas (np) 
 
#include <stdio.h> 
#include <conio.h> // diretiva limpa tela 
#include <iostream.h> 
void main(void) 
{ 
 char sexo,aux1,aux2; 
 float alt,ma,me; 
 int np; 
 ma = 0; me =4; 
 for (np=1; np<=10; np++) 
 { 
 cout<<"\nDigite o sexo : "<<np<<” ? “; 
 cin >>sexo; 
 cout<<"\nDigite a altura : "<<np<<” ? “; 
 cin >> alt; 
 if (alt > ma) 
 { 
 ma = alt; 
 aux1 = sexo; 
 } 
 if (alt < me) 
 { 
 me = alt; 
 aux2 = sexo; 
 } 
 clrscr( ); 
 
 
 37 
 } 
 cout<<"\n ma = "<<ma<<" aux1 = "<<aux1; 
 cout<<"\n me = "<<me<<" aux2 = "<<aux2; 
 cout<<"\nAperte qualquer tecla "; 
 getch( ); 
 return; 
} 
 
 13.2 - Estrutura while 
 
 Sintaxe: 
 1- uma instrução: 
 
 i) while (expressão de teste) 
 instrução; 
 
 2- mais de uma instrução: 
 
 ii) while (expressão de teste) 
 { 
 instrução; 
 instrução; 
 } 
 
 Obs.: 
 i) O laço while é apropriado em situações em que o laço pode ser terminado 
inesperadamente, por condições desenvolvidas dentro do laço. 
 ii) while executa as instruções enquanto a expressão de teste for verdadeira. 
 
 
 38 
 Ex. 1) Fazer um programa em C+ + que leia a idade de um grupo de pessoas. 
O último dado que não entrará nos cálculos tem idade igual a 0 (zero). Calcule e escreva: 
- a idade média do grupo 
- 
 Dado: id 
 
 idm = sid/np 
 
#include <iostream.h> 
#include <stdio.h> 
#include <conio.h> 
void main(void) 
{ 
 int id; 
 unsigned long np,sid; 
 float idm; 
 np = 0; sid = 0; 
 cout<<"\nDigite a idade ; "; 
 cin>>id; 
 while (id!=0) 
 { 
 sid=sid + id; 
 np = np + 1; 
 cout<<"\nDigite a idade e idade = 0 para "; 
 
 cin >> id; 
 clrscr( ); 
 } 
 if (np!=0) 
 { 
 
 39 
 idm = sid/np; 
 cout<<"\nA média é : "<<idm; 
 } 
 else cout<<"\nNão existe "; 
 cout<<"\n Aperte qualquer tecla "; 
 getch( ); 
 return ; 
} 
 
Ex: 2 Fazer um prog. em c++ que leia o nome,idade e o sexo.O último dado que não 
entrará tem nome igual a fim. Calcule e escreva: 
- o número de mulheres de idade entre 18 e 30 anos e nome igual à Luciane; 
- a idade média dos homens. 
 
#inclcude <stdio.h> // Para a função gets() 
#include <string.h> // Para a função strcmpi(s1,s2) 
#include <iostream.h> 
#include <conio.h> 
void main(void) 
 { 
 char no[25],sexo; 
 int id,nh,nm,sid; 
clrscr(); 
sid=0;nm=0;nh=0; 
cout<<“\n digite o nome”; 
gets(no); 
while(strcmpi(no,”fim”)) //executa enquanto o nome diferente de fim 
 { 
 cout<<“\n digite a idade e o sexo”; 
 cin>>id>>sexo; 
 
 40 
 if(sexo==‘m’) 
 { 
 nh=nh+1; 
 sid=sid+id; 
 } 
 
 if(sexo==‘f’ && id>18 && id<30 && strcmpi(no,”luciane”)=0) 
 nm++; 
 cout<<“\n digite o nome e nome igual a fim interrompe o laço”; 
 gets(no); 
 clrscr(); 
 } 
if(nh!=0) 
 cout<<“\n A media e: “<<(sid/nh); 
cout<<“\n nm= “<<nm; 
cout<<“\n aperte qualquer tecla”; 
getch(); 
return; 
}Obs: A função strcmpi(s1,s2) compara duas strings, se forem diferentes é 
verdadeiro(1); caso contrário é falso(0). 
 
 
 13.3 - A estrutura do-while 
 Sintaxe do laço do-while 
 do 
 { 
 instrução; 
 instrução; 
 
 41 
 } while (expressão de teste); 
 
 Obs.: i) do-while é utilizado em situações em que é necessário executar o 
corpo do laço uma primeira vez e depois avaliar a expressão de teste e criar um ciclo 
repetido. 
 ii) Este ciclo de execução do bloco e teste é repetido até que a expressão 
de teste se torne falsa (igual à zero), então o laço termina e o controle do programa passa para 
a linha seguinte ao laço. 
 
 Ex.1) Fazer um programa em C+ + que leia a nota e o código. O último dado 
que entrará tem código igual a 3020. Calcule e escreva: 
 - As duas maiores notas, com os respectivos códigos. 
 
#include <stdio.h> 
#include <conio.h> 
#include <iostream.h> 
void main(void) 
{ 
 float no,m1,m2,cod,aux1,aux2; 
 m1=0;m2=0;aux1=0;aux2=0; 
 do 
 { 
 cout<<"\nDigite a nota e o código : "; 
 cin>>no>>cod; 
 if (no>m1) 
 { 
 m2=m1; 
 aux2=aux1; 
 m1=no; 
 aux1=cod; 
 
 42 
 } 
 else if (no>m2 && no!=m1) 
 { 
 m2=no; 
 aux2=cod; 
 } 
 clrscr( ); 
 } while (cod!=3020); 
 cout<<"\nm1 = "<<m1<<"aux1 = "<<aux1; 
 cout<<"\nm2 = "<<m2<<"aux2 = "<<aux2; 
 cout<<"\n Aperte qualquer tecla"; 
 getch( ); 
 return; 
} 
 
ex.2 Fazer um prog. em c++ que calcule e escreva o número de anos necessários para 
que a população de A seja maior ou igual à de B. Sabendo que a população de A é 90000000 
milhões de habitantes com uma taxa de crescimento constante de 3% ao ano e que B tem 
200000000 de habitantes com uma taxa constante de 1.5% ao ano. 
 
 
#include <conio.h> 
#include <stdio.h> 
#include <iostream.h> 
void main(void) 
{ 
 long popa,popb; 
 int na; 
 popa=9E7; popb=2E8; na=0; 
 do 
 
 43 
 { 
 na = na+1; 
 popa=popa+0.03*popa; 
 popb=popb+0.015*popb; 
 } 
 while (popa<popb); 
 cout<<"\nO numero de anos : "<<na; 
 cout<<"\n Aperte qualquer tecla "; 
 getch( ); 
 return; 
} 
Ex.3 Fazer um prog. em c++ que leia o salário e o nome. O último dado que entrará 
tem o nome igual a João. Calcule e escreva: 
- o maior salário com o respectivo nome. 
#include <conio.h> 
#include <iostream.h> 
#include <string.h> 
#include <stdio.h> 
void main(void) 
 { 
 char no[25],aux[25]; 
 float sal,mas; 
 clrscr(); 
 mas=0; 
 do 
 { 
 cout<<“\n digite o nome e nome igual a joão para”; 
 gets(no); 
 cout<<“\n digite o salário: “; 
 cin>>sal; 
 
 44 
 if(sal>mas) 
 { 
 mas=sal; 
 strcpy(aux,no); // copia o conteúdo da string no na string aux. 
 } 
 clrscr(); 
 } 
 while(strcmpi(no,”joao”)); 
cout<<“\n mas = “<<mas<<“ nome e : “<<aux; 
cout<<“\n aperte qualquer tecla ”; 
getch(); 
return; 
} 
 
Obs: A função strcpy(s1,s2) copia o conteúdo da string s2 na string s1. 
 
 
14 - Comandos: 
 
 14.1 - break 
 
 O comando break causa a saída imediata do laço; o controle passa para a 
próxima instrução após o laço. Se a instrução break pertencer a uma estrutura de laços 
aninhados afetará somente os laços internos a ele. 
 
 Ex1) Fazer um programa em C+ + para calcular a soma dos 20 primeiros 
termos da série: 
 S = x - x2/3! + x4/5! - x6 /7! + . . . 
 onde: x é lido. 
Resolução: 
 
 45 
 
i = i + 2 
d = d * (i-1) * i 
e = e +2 
sinal = (-1)*sinal 
s = s + pow(x,e)*sinal/d 
 
#include <conio.h> 
#include <math.h > 
#include <iostream.h> 
void main (void) 
{ 
 int sinal,e,cont,i; 
 long d; 
 float s,x; 
 cont << "\ndigite X "; 
 cin >> x; 
 s=0; i=3; d=6; e=2; sinal = -1; 
 for (cont=1;cont<=19;cont++) 
 { 
 if (x<0) 
 break; 
 s = s + pow(x,e)*sinal/d; 
 i = i+2; 
 d = d*(i-1)*i; 
 sinal = (-1)*sinal; 
 e = e + 2; 
 } 
 cout << "\nO valor de X é = "<<(s+x); 
 cout <<"\n Aperte qualquer tecla "; 
 
 46 
 getch( ); 
 return; 
} 
 
 14.2 - Continue 
 
 Continue faz com que o controle do programa avalie imediatamente a 
expressão de teste e depois continua o processo do laço. 
 
exemplo: imprima os caracteres diferentes dos dígitos. 
#include <iostream.h> 
#include <conio.h> 
void main( ) 
{ 
 char ch; 
 while ((ch=getch( ))!='x') 
 { 
 if (ch>='0' && ch <='9') 
 continue; 
 cout << ch; 
 } 
 cout<<"\n Aperte qualquer tecla"; 
 getch( ); 
 return; 
} 
 
 14.3 - switch 
 
 switch permite selecionar uma entre várias ações alternativas. 
 
 
 47 
 
 
 
 Sintaxe: 
 
 switch (variável seletora) 
 { 
 case constante1 : instrução; 
 instrução; 
 break; 
 case constante2 : instrução; 
 instrução; 
 break; 
 default : instrução; 
 instrução; 
 } 
 
 onde: variável seletora é do tipo enumerável (inteira ou char). 
 
 Ex1) Fazer um programa que leia o canal e o número de pessoas que estão 
assistindo. O último dado que não entrará tem canal igual a 0 (zero). Calcule e escreva: 
 
 - As porcentagens de audiência dos principais canais de televisão. 
 
 dados: { canal, npas } 
 p4 = n4*100/tot 
 . 
 . 
 . 
 p12 = n12*100/tot 
 
 48 
 
 
#include <conio.h> 
#include <iostream.h> 
 
void main(void) 
{ 
 long tot,n4,n5,n6,n7,n12; 
 int canal,npas; 
 float p4,p5,p6,p7,p12; 
 
 n4=0; n5=0; n6=0; n7=0; n12=0; 
 cout<<"\n Digite o canal "; 
 cin>>canal; 
 
 while (canal!=0) 
 { 
 cout<<"\nDigite o numero de pessoas"; 
 cin >> npas; 
 switch(canal) 
 { 
 case 4 : n4=n4+npas; 
 break; 
 case 5 : n5=n5+npas; 
 break; 
 case 6 : n6=n6+npas; 
 break; 
 case 7 : n7=n7+npas; 
 break; 
 case 12 : n12=n12+npas; 
 
 49 
 break; 
 default : cout<<"\nDigitou o canal errado "; 
 } 
 clrscr(); 
 cout<<"\nDigite outro canal e canal = 0 para "; 
 cin>>canal; 
 } 
 tot=n4+n5+n6+n7+n12; 
 if (tot!=0) 
 { 
 p4 = n4*100/tot; 
 . 
 . 
 . 
 p12 = n12*100/tot; 
 cout<<"\np4 = "<<p4<< . . . <<"p12 = "<<p12; 
 } 
 cout<<"\n Aperte qualquer tecla "; 
 getch( ); 
 return; 
} 
 
 
 50 
 
 
UNIDADE - II 
 
 1.0 - Matrizes 
 
 Matriz é um tipo de dado em C+ + usado para representar uma coleção de 
variáveis de mesmo tipo. 
 
 1.1 - Matriz Unidimensional 
 
 É um conjunto de dados do mesmo tipo, referenciados por um único nome, 
onde cada elemento é referenciado por um único índice. 
 
 1.1.1 - Declaração de variável 
 
 tipo nome-da-variável[n]; 
 onde: n é o número de elementos. 
 
 Ex1) Fazer um programa que leia 10 notas. Calcule e escreva: 
 - A média das notas; 
 
#include <conio.h> 
#include <iostream.h> 
void main(void) 
{ 
 int nota[10],i; 
 float media; 
 media = 0; 
 for(i=0;i<10;i++) 
 
 51{ 
 cout<<"\nDigite a nota "<<(i+1)<<": "; 
 cin>>nota[i]; 
 media=media+nota[i]; 
 clrscr( ); 
 } 
 cout<<"\nA media é = "<<(media/10); 
 cout<<"\n Aperte qualquer tecla"; 
 getch( ); 
 return; 
} 
 
 Ex2) Fazer um programa em C+ + que leia uma variável composta contendo n 
(n<=100) elementos inteiro, onde n é lido. 
 
 Calcule e escreva: 
 - O maior elemento par e indique a posição; 
 - Uma 2ª. variável composta contendo os elementos divisíveis por 3. 
 
 
#include <iostream.h> 
#include <conio.h> 
#include <math.h> 
void main(void) 
{ 
 int a[100],i,b[100],map,p,j,n; 
 map = 0; p=0; j =0; 
 cout<<"\nDigite o numero de elementos n<=100"; 
 cin>>n; 
 for (i=0;i<n;i++) 
 
 52 
 { 
 cout<<"\nDigite um numero inteiro "<<(i+1)<<" : "; 
 cin>>a[i]; 
 if (a[i]>map && a[i]%2= =0) 
 { 
 map=a[i]; 
 p=i; 
 } 
 if (a[i]%3= =0) 
 { 
 b[j]=a[i]; 
 j++; 
 } 
 clrscr( ); 
 } 
 for(i=0;i<j;i++) 
 cout<<"\nOs elementos de B são :"<<b[i]; 
 cout<<"\nO maior elemento par = "<<map <<"p = "<<p; 
 cout<<"\n Aperte qualquer tecla"; 
 getch( ); 
 return; 
 
} 
 
 1.2 - Matrizes multidimensionais 
 
 São as que necessitam de mais de um índice para individualizar um elemento 
no conjunto de dados. 
 
 1.2.1 - Declaração de variáveis 
 
 53 
 
 tipo nome-da-variável [nl] [nc]; 
 
 onde: 
 - nl : é o número de linhas 
 - nc : é o número de colunas 
 
 
 Ex1) Fazer um programa que leia uma matriz A3 x 3 de elementos numéricos. 
Calcule e escreva: 
 - A média dos elementos 
 
#include <iostream.h> 
#include <conio.h> 
 
void main(void) 
{ 
 float a[3][3], med; 
 int i,j; 
 med=0; 
 for(i=0;i<3;i++) 
 for(j=0;j<3;j++) 
 { 
 cout<<"\nDigite um valor "<<i<<" "<<j; 
 cin>>a[i][j]; 
 med=med+a[i][j]; 
 clrscr( ); 
 } 
 cout<<"\nA média é = "<<(med/9); 
 cout<<"\n Aperte qualquer tecla"; 
 
 54 
 getch( ); 
 return; 
} 
 
 Ex2) Fazer um programa que leia uma matriz Am x n (m<=20, n<=25) onde m 
e n são lidos. Calcule e escreva: 
 - a matriz transposta de A 
 
#include <iostream.h> 
#include <conio.h> 
 
void main(void) 
{ 
 float a[20][25], b[25][20]; 
 int i,j,m,n; 
 cout<<"\nDigite a ordem (m<=20, n<=25) "; 
 cin>>m >>n; 
 for (i=0;i<m;i++) 
 for (j=0;j<n;j++) 
 { 
 cout<<"\nDigite um valor : "<<i<<" "<<j; 
 cin>>a[i][j]; 
 b[j][i]=a[i][j]; 
 clrscr( ); 
 } 
 
 for (i=0;i<n;i++) 
 for(j=0;j<m;j++) 
 cout<<"\nA matriz é : "<<b[i][j]; 
 cout<<"\nAperte enter "; 
 
 55 
 getch( ); 
 return; 
} 
 
 
 56 
 
 
UNIDADE - III 
 
 1.0 - Funções 
 
 Uma função é um conjunto de instruções desenhadas para cumprir uma tarefa 
particular e agrupadas numa unidade com um nome para referenciá-la. 
 
 1.1 - Chamando uma função 
 
 É o meio pelo qual solicitamos que o programa desvie o controle e passe para 
a função, executar suas instruções e depois volte à instrução seguinte a da chamada da 
função. 
 
 1.2 - Funções simples 
 
 Exemplo: converter a temperatura de graus Fahrenheit para Celsius 
 
 #include <conio.h> 
 #include <iostream.h> 
 #include <iomanip.h> 
 
 int Celsius (int f) 
 { 
 int c; 
 c=(f-32)*5/9; 
 return c; 
 } 
 
 
 57 
 void main(void) 
 { 
 int c,f; 
 cout<<"\nDigite a temperatura em graus Fahrenheit "; 
 cin>>f; 
 c=Celsius(f); 
 cout<<"\n Celsius = "<<c; 
 cout<<"\n Aperte qualquer tecla"; 
 getch( ); 
 return; 
 } 
 
 58 
 
 1.3 - Protótipo de funções 
 
 A declaração de uma função é chamada protótipo e é uma instrução, geralmente 
colocada no início do programa, que estabelece o tipo da função e os argumentos que ela 
recebe. 
 
 O protótipo de uma função deve preceder a sua definição e a sua chamada. 
 
 
 Ex.: 1 - int Celsius (int fa); // protótipo 
 2 - int Celsius (int); // protótipo 
 
 1.4 - Tipos de funções 
 
 O tipo de uma função é determinado pelo valor que ela retorna via comando 
return e não pelo tipo de argumentos que ela recebe. 
 
 
 
 1.5 - O comando return 
 
 Termina a execução da função e retorna o controle para a instrução seguinte 
do código de chamada. Se após a palavra return houver uma expressão, o valor da expressão 
é retornado à função que chama. 
 
 A sintaxe de uma instrução return tem uma das 3 formas: 
 return; 
 return expressão; 
 return (expressão); 
 
 59 
 
 Ex.: int Celsius (int f) 
 { 
 return (f-32)*5/9; 
 } 
 
 Obs.: Não é permitido o retorno de mais de um valor por meio do comando 
return. 
 
 1.6 - Definição da função 
 
 Tipo nome (declaração dos parâmetros) 
 { 
 instruções; 
 } 
 
 1.7 - Parâmetros da função 
 
 São as informações transmitidas para a função. 
 A função deve declarar essas informações entre parênteses, no cabeçalho de 
sua definição. 
 Ex: int Celsius (int f) 
 { 
 int c; // c é uma variável local 
 c=(f-32)*5/9; 
 return c; 
 } 
 
 
 
 
 60 
 
 1.8 - Passagem por valor 
 
 Sua declaração indica que o valor enviado será armazenado na variável 
indicada e é criada quando a função inicia a sua execução e destruída quando a função 
termina. 
 
 Exemplo1: Fazer um programa que leia uma matriz AM*N 
(M<=20,N<=10). Onde M e N são lidos. Calcule e escreva: a matriz transposta de A. 
 
#include <conio.h> 
#include <iostream.h> 
void matriz(int m, int n) 
 { 
 float a[20][10], at[10][20]; 
 int i,j; 
 for (i=0;i<m;i++) 
 for (j=0;j<n;j++) 
 { 
 cout<<"\n Digite um elemento "<<i<<" "<<j; 
 cin>>a[i][j]; 
 at[j][i]=a[i][j]; 
 clrscr( ); 
 } 
 for (i=0;i<n;i++) 
 for(j=0;j<m;j++) 
 cout<<"\n at["<<i<<" "<<j<<"] = "<<at[i][j]; 
 return: 
 } 
void main(void) 
 
 61 
 { 
 int m,n; 
 cout<<"\nDigite a ordem, M<=20 e N<=10 "; 
 cin>>m>>n; 
 matriz(m,n); 
 cout<<"\nAperte enter "; 
 getch( ); 
 return; 
 } 
 
Exemplo2: 1. Fazer uma função que calcule a soma da série abaixo: 
 2 7 8 13 14 19 . . . 
 2. Fazer um programa que leia o número de termos da série. Calcule e 
escreva a soma dos n primeiros termos da série. 
 
#include <conio.h> 
#include <iostream.h> 
long soma(int n) 
 { 
long so,cont,nu; 
so=0; nu=2; 
for (cont=1;cont<=n;cont++) 
 if (nu % 2 = =0) 
 { 
 so=so+nu; 
 nu=nu+5; 
 } 
 else { 
 so=so+nu; 
 nu=nu+1; 
 
 62 
 } 
return so; 
} 
void main(void) 
 { 
 int n; 
 long so; 
 cout<<“\n digite o número de termos da série”; 
 cin>>n; 
 so=soma(n); 
 cout<<“\n a soma da série é : “<<so; 
 cout<<“\n aperte qualquer tecla”; 
 getch(); 
 return; 
 } 
 
 
 63 
1.9 - Passando vários argumentos 
 
 Ex: Função que desenha retângulos 
 
 #include <iostream.h> 
 #include <conio.h> 
 
 void retangulo(int l, int alt) 
 { 
 int i,j;l=l/2; 
 alt=alt/4; 
 for(i=1;i<=alt;i++) 
 { 
 cout<<"\t\t"; 
 for(j=1;j<=l;j++) 
 cout<<'\XDB'; 
 cout<<'\n'; 
 } 
 } 
 
 void main(void) 
 { 
 cout<<"\nSala\n"; 
 retangulo(22,12); 
 cout<<'\nCozinha\n"; 
 retangulo(16,16); 
 cout<<"\nBanheiro\n"; 
 retangulo(6,8); 
 cout<<"\nQuarto\n"; 
 
 64 
 retangulo(12,12); 
 cout<<"\nAperte enter"; 
 getch( ); 
 return; 
 } 
 
 
 
 
 
 
 1.10 - O operador unário de referência: & 
 
 O operador de referência cria outro nome para uma variável já criada. 
 
 Ex.: int n; 
 int& n1 = n; 
 
 onde: n1 é o outro nome para n. A operação em qualquer dos nomes tem 
o mesmo resultado. 
 Uma referência não é uma cópia da variável a que se refere. É a mesma 
variável sob nomes diferentes. 
 
 Ex.: int n; 
 int& n1=n; 
 n=5; 
 cout<<n1; 
 n1=8; 
 cout<<n; 
 
 
 65 
  saídas: 5 e 8 
 
Obs: O operador unário &, quando usado na criação de referência, faz parte do tipo: 
 
 int& é um tipo de dado. 
 
 Toda referência deve obrigatoriamente ser inicializada. 
 
 int n; 
 int& n1; //errado 
 int& n1=n; // certo 
 
 
 1.11 - Passagem por referência 
 
 A principal vantagem da passagem por referência é a de que a função pode 
acessar as variáveis da função que chamou. Este mecanismo, possibilita que uma função 
retorne mais de um valor para a função que chama. 
 
 Exemplo: Mostra passagem de argumentos por referência 
 
#include <conio.h> 
#include <iostream.h> 
void reajusta (float& p, float& r ) // reajusta o preço em 20% 
 { 
 r=p*0.2; 
 p=p*1.2; 
 } 
 
 void main(void) 
 
 66 
 { 
 float preco,valreaj; 
 do 
 { 
 cout<<"\n Entre com o preço "; 
 cin>preco; 
 reajusta(preco,valreaj); 
 cout<<"\n Preco novo = "<<preco; 
 cout<<"\n Valreaj = "<<valreaj; 
 } 
 while (preco !=0); 
 cout<<"\n Aperte qualquer tecla"; 
 getch( ); 
 } 
 
 Ex.2 
 // ordena uma lista de 3 números 
 #include <conio.h> 
 #include <iostream.h> 
 void troca(float& n, float& m) 
 { 
 float aux; 
 aux=n; 
 n=m; 
 m=aux; 
 } 
 void main(void) 
 { 
 float n1,n2,n3; 
 cout<<"\nDigite 3 números "; 
 
 67 
 cin>>n1>>n2>>n3; 
 if(n1>n2) 
 troca(n1,n2); 
 if(n1>n3) 
 troca(n1,n3); 
 if(n2>n3) 
 troca(n2,n3); 
 cout<<"\nn1 = "<<n1<<" n2 = "<<n2<<" n3 = "<<n3; 
 cout<<"\n Aperte qualquer tecla"; 
 getch( ); 
 } 
 
 1.12 - Referências Constantes 
 
 Você pode combinar a palavra chave const com a declaração de uma 
referência para uma variável. 
 
 Ex.: int n = 456; 
 const int &n1 = n; 
 
 Estas declarações fazem de n1 um nome "read-only" para n. Você não poderá 
fazer nenhuma modificação em n1, somente em n. 
 
 1.13 - Classes de armazenamento 
 
 São quatro as classes de armazenamento em C ++: 
 
 1 - auto - automáticas (default) 
 2 - extern - externas 
 3 - static - estáticas 
 
 68 
 4 - register - em registradores 
 
 1) Classe auto 
 Podem ser acessadas somente pelas instruções do mesmo bloco e 
escritas após a sua declaração. 
 Quando uma variável automática é criada, o programa não a inicializa 
com nenhum valor específico. Variáveis automáticas conterão um valor inicial aleatório, 
chamado " lixo ". 
 
 2) Classe extern 
 São declaradas fora de qualquer função. O acesso a elas é permitido a 
todas as funções definidas após a sua declaração, e elas existirão enquanto o programa 
estiver sendo executado. 
 
 Ex.: 
 #include <conio.h> 
 #include <iostream.h> 
 int i; // externa 
 int j=234; // externa 
 
 void func( ) 
 { 
 i=25; j=48; 
 } 
 
 void main(void) 
 { 
 cout<<"\n i = "<<i<<"j = "<<j; 
 func( ); 
 cout<<"\n i = "<<i<<"j = "<<j; 
 
 69 
 cout<<"\nAperte enter "; 
 getch( ); 
 return; 
 } 
 
  saída: i = 0 j = 234 
 i = 25 j = 48 
 
 1.14 - O Operador de escopo : : 
 
 Em C ++, as variáveis automáticas têm precedência sobre variáveis externas. 
Você pode solicitar ao compilador que utilize a variável externa em vez da automática 
colocando o operador : : antes do nome da variável. 
 
 Ex.: 
 #include <iostream.h> 
 #include <conio.h> 
 
 int i; // inicializa com zero 
 int j=234; // inicializa com 234 
 
 void main( ) 
 { 
 int i=5, j=10; // variáveis automáticas 
 cout<<: : i<<: : j<<"\n"; // externas 
 cout<<i<<j<<"\n"; 
 cout<<"\n Aperte qualquer tecla"; 
 getch( ); 
 } 
 
 
 70 
 1.15 - Funções recursivas 
 
 Uma função é dita recursiva se for definida em termos dela mesma. Isto é, 
uma função é recursiva quando dentro dela está presente uma instrução de chamada a ela 
própria. 
 
 Ex: 1 - Escrever uma função que calcula o fatorial de um número. 
 
 #include <conio.h> 
 #include <iostream.h> 
 long fatorial (int n) 
 { 
 if (n<=1) 
 return (1); 
 else return (n*fatorial(n-1)); 
 } 
 void main(void) 
 { 
 int n; 
 cout<<"\nDigite um numero inteiro"; 
 cin>>n; 
 cout<<"\nFat = "<<fatorrial(n); 
 cout<<"\nAperte enter"; 
 getch( ); 
 return; 
 } 
 Quando o programa for executado a função fatorial será acessada 
repetidamente, uma vem em main e (n-1) vezes dentro dela mesma apesar do usuário não se 
preocupar com isso. Quando um programa recursivo é executado, as chamadas das funções 
recursivas não são executadas imediatamente. Elas são colocadas em uma pilha (stack) até 
 
 71 
que a condição de término da recursão seja encontrada. As chamadas da função são 
executadas, então, em ordem inversa, à medida que forem retiradas (popped off) da pilha. 
Quando uma expressão fatorial for avaliada recursivamente, as chamadas de função serão 
executadas da seguinte ordem: 
 
 n! = n*(n-1)! 
 (n-1)! = (n-1)*(n-2)! 
 (n-2)! = (n-2)*(n-3)! 
 
 2! = 2*1! 
 
 Os valores serão então devolvidos na seguinte ordem: 
 
 1! = 1 
 2! = 2*1! = 2*1 = 2 
 3! = 3*2! = 3*2 = 6 
 4! = 4*3! = 4*6 = 24 
 
 Ex.2 - Imprime uma frase de ordem inversa a que foi lida. 
 
 #include <iostream.h> 
 #include <conio.h> 
 void invert( ) 
 { 
 char ch; 
 if ((ch=getche( ) )!= '\r') 
 invert( ); 
 cout<<ch; 
 } 
 
 
 72 
 void main(void) 
 { 
 cout<<"\n"; 
 inverte( ); 
 cout<<"\n Aperte qualquer tecla"; 
 getch( ); 
 return; 
 } 
 
1.16 - O conjunto das diretivas mais comuns reconhecidas pelo pré-processador é o 
seguinte: 
 
 1 - #define 
 2 - #undef 
 3 - #include 
 4 - #if 
 5 - #ifdef 
 6 - #ifndef 
 7 - #else 
 8 - #elif 
 9 - #endif 
 10 - #error 
 
 1.16.1 - #define é usada para definir constantes simbólicas com nomes 
apropriados 
 
 Ex.: #define PI 3.14 
 
 1.16.2 - #undef remove a mais recente definição criada com #define 
 
 
 73 
 1.16.3 - #include causa a inclusão de outro arquivo em nosso programa 
fonte. 
 
 1.16.4 - #error provocauma mensagem de erro do compilador em tempo de 
compilação. 
 
 
 
 
 
 
UNIDADE - IV 
 
1.0 - Estruturas 
 
 Há cinco tipos de dados simples que estão pré-definidos no compilador e que 
nos já conhecemos e já utilizamos. São eles: char, int, float, double e void. 
 Estruturas são tipos de variáveis que agrupam dados geralmente desiguais. Os 
itens de dados de uma estrutura são chamados membros. 
 
 1.1 - definindo a estrutura 
 
 struct nome-do-tipo 
 { 
 membros 
 }; 
 
 onde: struct indica que um novo tipo de dado está sendo definido. 
 
 Ex.: struct aluno 
 
 74 
 { 
 int idade; 
 float altura; 
 char sexo, nome[25]; 
 }; 
 
 1.2 - Acessando os membros da estrutura. Seus membros podem ser 
acessados por meio do operador ponto. 
 
 nome-da-estrutura.membro 
 
 Ex.: aluno.idade 
 
 1.3 - Combinando declarações 
 
 struct 
 { 
 membros; 
 } nome-das-variáveis; 
 
 75 
 
 Ex.: struct 
 { 
 int nmat; 
 float nota[3]; 
 float media; 
 } Ana, Jose, joão; // declaração de diversas variáveis 
 
 
 1.4 - Inicializando estruturas 
 
 É semelhante à inicialização de uma matriz 
 
 Ex.: struct data 
 { 
 int dia; 
 char mes[10]; 
 int ano; 
 }; 
 
 data natal = {25,”dezembro”,1.994}, 
 aniversario={30,”julho”,1.978}; 
 
 Obs.: As variáveis estão sendo inicializada na mesma instrução de suas 
declarações. 
 
 1.5 - Operações entre estruturas 
 
 struct venda 
 { 
 
 76 
 int pecas; 
 float preco; 
 }; 
 
 venda a={20,110.0}, b= {3,16.5}, total; 
 
 Operações simples como a soma não está definida para tipos criados 
com a palavra struct. A soma deve ser efetuada membro a membro: 
 
 total.pecas=a.pecas+b.pecas; 
 total.preco=a.preco+b.preco; 
 
 1.6 - Estruturas aninhadas 
 
 exemplo: 
 
 //mostra estruturas aninhadas 
 #include <conio.h> 
 #include <iostream.h> 
 
 struct data 
 { 
 int dia; 
 char mes[10]; 
 int ano; 
 }; 
 
 struct venda 
 { 
 int pecas; 
 
 77 
 float preco; 
 data diavenda; 
 }; 
 
 void main( ) 
 { 
 venda a={20,110.0,{7,”novembro”,1.993}}; 
 cout<<“\npecas: “<<a.pecas; 
 cout<<“\npreco: “<<a.preco; 
 cout<<“\ndata: “<<a.diavenda.dia<<“de”<<a.diavenda.ano; 
 getch( ); 
 return; 
 } 
 
 Eis a saída: 
 
 pecas: 20 
 preco: 110 
 data: 7 de novembro de 1.993. 
 
 1.7 - Passando estruturas para funções. 
 
 As estruturas podem ser passadas como argumentos de funções de 
mesma forma que variáveis simples. 
 
 Exemplo: 
 // mostra passagem de estruturas para funções por valor. 
 
 #include <iostream.h> 
 #include <conio.h> 
 
 78 
 
 struct venda 
 { 
 int pecas; 
 float preco; 
 }; 
 
 void listavenda (venda c, venda d) 
 { 
 cout<<“\nVenda total = “; 
 cout<<“\nTotal de peças: “<<(c.pecas+d.pecas); 
 cout<<“\nPreco total: “<<(c.preço+d.preco); 
 getch( ); 
 } 
 struct data 
 { 
 int dia; 
 char mes[10]; 
 int ano; 
 }; 
 
 struct venda 
 { 
 int pecas; 
 float preco; 
 data diavenda; 
 }; 
 
 void main( ) 
 { 
 
 79 
 venda a={20,110.0,{7,”novembro”,1,993}}; 
 cout<<“\npecas: “<<a.pecas; 
 cout<<“\nprecos: “<<a.preco; 
 cout<<“\ndata: “<<a.diavenda.dia<<“de”<<a.diavenda.ano; 
 getch( ); 
 return; 
 } 
 
 1.8 - Matrizes de Estruturas 
 
 É um conjunto de registros referenciáveis por um mesmo nome e 
individualizados por índices. 
 
 1.8.1 - Declarando a matriz de estruturas 
 
 O processo de declaração de uma matriz de estruturas é perfeitamente 
análogo à declaração de qualquer outro tipo de matriz. 
 A instrução: vendas[50]; 
 Declara vendas como sendo uma matriz de 50 elementos, cada 
elemento da matriz é uma estrutura do tipo venda. Então venda[0] é a primeira estrutura do 
tipo venda, veda[1] é a segunda estrutura do tipo venda e assim por diante. 
 
Exs.: 1 - Declara a seguinte estrutura de dados. 
 
 contas cliente 
0 
1 nome 
2 r
ua 
n
úmero 
c
pf 
3 saldo 
 
 80 
4 
5 
struct cliente 
 { 
 char nome[25]; 
 char rua[40]; 
 int numero; 
 char cpf[14]; 
 float saldo; 
 }; 
cliente contas[6]; 
 
2.0 - Dada à tabela abaixo 
 
 C
ódigo 
Nome 
0 10
00 
Alfaiate 
1 10
20 
Analista 
2 10
30 
Vended
or 
. 
. 
. 
 
9
9 
10
99 
Médico 
 
 
 
 81 
 Fazer um programa que, dados 500 códigos de profissão, emita o nome das 
profissões correspondentes. A tabela acima também deve ser lida do dispositivo de entrada. 
 
 Estrutura de dados 
 
0 
1 
2 c
ódigo 
n
ome 
3 
. 
. 
. 
 
9
9 
 
 
#include <conio.h> 
#include <iostream.h> 
#include <string.h> 
#include <stdio.h> 
void main(void) 
 { 
 struct tabela 
 { 
 char no[25]; 
 long codigo; 
 }; 
 
 tabela tab[100]; 
 int i,k; 
 
 82 
 long codigodesejado; 
 clrscr( ); 
 for (i=0;i<=99;i++) 
 { 
 cout<<“\ndigite o nome”<<i; 
 gets(tab[i].no); 
 cout<<“\ndigite o código”<<i; 
 cin>>tab[i].codigo; 
 clrscr( ); 
 } 
 
 for (k=1;k<=500;k++) 
 { 
 cout<<“\nDigite o codigo desejado”; 
 cin>>codigodesejado; 
 i=0; 
 while (tab[i].codigo != codigodesejado && i<99) 
 i++; 
 if (tab[i].codigo = = codigodesejado) 
 cout<<“\nCodigo”<<codigodesejado<<tab[i].no; 
 else cout<<“\nInvalido”<<codigodesejado; 
 } 
 cout<<‘\nAperte qualquer tecla”; 
 getch( ); 
 return; 
 } 
 
3 - Em certo município vários proprietários de imóveis estão em atraso com o 
pagamento do imposto predial. Escrever um programa que calcule e escreva o valor da multa 
a ser paga por estes proprietários considerando que: 
 
 83 
 - Os dados de cada imóvel: identificação (literal), valor do imposto e número de 
meses em atraso, estão à disposição numa unidade de entrada; 
 - As multas devem ser calculadas a partir do valor do imposto e de acordo com a 
seguinte tabela. 
 
Valor do 
imposto 
% por mês em 
atraso 
até R$ 5000 1 
de 5000 a 
18000 
2 
de 180001 a 
50000 
4 
de 50001 a 
120000 
7 
acima de 
120000 
10 
 
 - O último registro lido, que não deve ser considerado, contém identificação do 
imóvel igual a vazio. 
 
 - Na saída deverão ser impressos: identificação do imóvel, valor do imposto, 
meses em atraso e a multa a ser paga. 
 
 As estruturas de dados a serem adotadas para a solução do problema são: 
 
Limites 
de até perce
ntual 
0 5.000 1 
 
 84 
5.001 18.00
0 
2 
18.001 50.00
0 
4 
50.001 120.0
00 
7 
120.001 10 
 
 Para os dados de cada imóvel, será adotado o seguinte registro (variável 
composta heterogênea) 
 
 
identifi
c 
impo
sto 
mese
sat 
 
 literal numérico numérico 
 
#include <conio.h> 
#include <string.h> 
#include <stdio.h> 
#include <iostream.h>void main(void) 
{ 
 float tab[5][3]; 
 struct imóvel 
 { 
 char ident[8]; 
 float imposto; 
 int meseat; 
 
 85 
 }; 
 
 int i,j; 
 float multa; 
 clrscr( ); 
 cout<<“\nLeitura da tabela”; 
 for (i=0;i<=4;i++) 
 for (j=0;j<=2;j++) 
 { 
 cout<<“\nDigite um valor “<<i<<“ “<<j; 
 cin>>tab[i][j]; 
 clrscr( ): 
 } 
 cout<<‘\nDigite a identificação”; 
 gets(imovel.ident); 
 while(strscmpi(imovel.ident, “ “)) 
 { 
 cout<<“\nDigite o imposto”; 
 cin>>imovel.imposto; 
 cout<<“\nDigite o mes”; 
 cin>>imovel.meseat; 
 i=4; 
 while (imovel.imposto<tabe[i][0] && i>=0) 
 i=i-1; 
 if(imovel.imposto>=tab[i,][1] 
 { 
 multa=tab[i][2]*(imovel*imposto)*(imovel*meseat/100); 
 cout<<“\nIdent = “<<imovel.ident; 
 cout<<“\nImposto”<<imovel.imposto; 
 cout<<“\nMulta”<<multa; 
 
 86 
 } 
 cout<<“\nDigite a identificação”; 
 gets(imovel.ident); 
 } 
 cout<<‘\nAperte qualquer tecla”; 
 getch( ); 
 return; 
} 
1.9 Arquivos 
 
1.9.1- As classes iostream: 
 
 As classes istream e ostream são derivadas de ios e são dedicadas a leitura e 
impressão, respectivamente. 
 A classe istream contém funções como get(), getline(), read(), além de outras. 
Contém ainda a sobrecarga do operador de extração >>. 
 A classe ostream contém funções como put(), write(), além de outras. Contém a 
sobrecarga do operador de inserção <<. 
 
Ex: 
 
Gravando linha a linha em arquivos em discos. 
 
// Cria um arquivo e grava nele uma string por vez. 
#include <fstream.h> // diretiva para as funções de arquivos. 
#include<iostream.h> 
void main() 
 { 
 ofstream fout(“teste.txt”); //cria arquivo para gravação em modo texto 
 fout<<“\n Um grande antídoto contra o egoismo e a generosidade”; 
 
 87 
 fout<<“\n Dê mesmo que isso requeira de você um esforço.”; 
 } 
 
Obs: inicializamos este objeto com o nome do arquivo teste.txt. Esta inicialização 
associa o objeto fout ao arquivo em disco teste.txt para gravação. 
 
Ex2: Lendo uma linha por vez em arquivos em disco. 
 
Este exemplo pelo programa teste.txt criado pelo programa anterior lê uma string por 
vez. 
 
// Lê strings de arquivo 
#include <fstream.h> 
#include <conio.h> 
#include <iostream.h> 
void main() 
 { 
 const int max=80; 
char buff[max]; 
ifstream fin(“teste.txt”); //cria arquivo p/leitura em modo texto 
while(fin) // enquanto nao termina o arquivo 
 { 
 fin.getline(buff,max); // Lê linha de texto 
 cout<<buff<<‘\n’; 
 } 
cout<<“\n aperte enter p/continuar”; 
getch(); 
return; 
} 
 
 
 88 
No exemplo, getline() lê caracteres enquanto não encontrar o caracter ‘\n’ e coloca os 
caracteres lidos no buffer especificado como argumento. O tamanho máximo do buffer é 
informado no segundo argumento. O conteúdo do buffer é impresso após cada leitura. 
 
1.9.2- Detectando o Fim-de-Arquivo. 
 
 O objeto fin terá o valor zero se o sistema operacional enviar ao programa o sinal 
de fim-de-arquivo e um valor não- zero caso contrário. 
 
 Exemplo: Podemos verificar o fim de arquivo ao mesmo tempo em que lemos uma 
linha.Esta é uma forma mais composta. 
 
#include <fstream.h> 
#include <conio.h> 
#include <iostream.h> 
void main() 
 { 
const int max=80; 
char buff[max]; 
ifstream fin(“teste.txt”); // cria arquivo para leitura em modo texto. 
while(fin.getline(buff,max)) // enquanto nao eof 
 cout<<buff<<‘\n’; 
cout<<“\n aperte enter”; 
getch(); 
return; 
} 
 
1.9.3- Lendo e gravando um caracter por vez no arquivo. 
 
 
 89 
 Para trabalhar com um único caracter por vez, usamos as funções put() e get(), 
membros das classes ostream e istream respectivamente. 
 
Ex: 
// Grava um caracter por vez num arquivo 
#include <fstream.h> 
#include <iostream.h> 
void main() 
 { 
 ofstream fout(“teste1.txt”); 
 char ch; 
 while(cin.get(ch)) // Lê um caracter do teclado 
 fout.put(ch); 
 } 
 
Obs:1. O laço while verifica se o caractere que indica fim-de-arquivo foi digitado no 
teclado. Este caractere tem código ´\x1a’ e é inserido pressionando-se tecla ctrl-z. 
 2. A instrução fout.put(ch) grava o caractere contido em ch no arquivo associado 
à fout. 
 
 Ex: Lê um caractere por vez de um arquivo. 
#include <conio.h> 
#include <iostream.h> 
#include <fstream.h> 
void main() 
 { 
 ifstream fin(“teste1.txt”); 
 char ch; 
 while (fin.get(ch)) // Lê um caractere do arquivo 
 cout<<ch; 
 
 90 
 cout<<“\n aperte enter”; 
 getch(); 
return; 
} 
 
1.9.4- A função open() 
 
 Tanto o construtor como a função open() aceitam a inclusão de um segundo 
argumento indicando o modo de abertura do arquivo. Este modo é definido por bits de um 
byte, onde cada um especifica certo aspecto de abertura do arquivo. 
 
 A lista de modos é definida na classe ios por meio do tipo enum open-mode. 
Modos Descrição 
ios::ou abre para gravação 
ios::ate abre e posiciona no fim do 
arquivo.Este modo trabalha com leitura e 
gravação. 
ios::in abre para leitura 
ios::app grava a partir do fim do arquivo 
ios::trunc abre e apaga todo o conteúdo do 
arquivo 
ios::nocreate erro de abertura se o arquivo não 
existir. 
ios::noreplace erro de abertura se o arquivo existir 
ios::binary abre em binário(default é texto). 
 
1.9.5-Gravando Objetos. 
 
 As funções apropriadas para o processo de gravação e leitura de objetos são as 
funções write() e read(). 
 
 91 
 
Exemplo: Para mostrar o seu uso, primeiramente criaremos um programa para gravar 
registros de livros de uma biblioteca. 
 
// Grava objetos em disco. 
#include <fstream.h> 
#include<iostream.h> 
#include <stdio.h> 
#include <conio.h> 
class livro 
 { 
 private : 
 char titulo[50]; 
 char autor[50]; 
 int numreg; 
 double preco; 
 public : 
 void novonome(); 
 }; 
void livro::novonome() 
 { 
 cout<<“\n digite titulo”; 
 gets(titulo); 
 cout<<“\n digite o autor”; 
 gets(autor); 
 cout<<“\n digite o numero do registro”; 
 cin>>numreg; 
 cout<<“\n digite o preco”; 
 cin>>preco; 
 clrscr(); 
 
 92 
 } 
void main() 
 { 
 ofstream fout(“lista.dat”); 
 livro li; 
 do 
 { 
 li.novonome(); 
 fout.write((char * )&li,sizeof(livro)); 
 cout<<“\n mais um livro (s/n)?”; 
 } 
 while(getche()!=‘n’); 
} 
 
onde: - A função membro novonome() é chamada das informações dos registros. É 
gravado no arquivo lista.dat por meio da função write(). 
 
 - A função write() recebe 2 argumentos:- o primeiro é o endereço do objeto a 
ser gravado; 
 - o segundo o tamanho do objeto deve ser convertido para um ponteiro char. 
 
1.9.6- Lendo Objetos 
 
 Para ler os objetos gravados pelo programa anterior, usaremos a função read(). 
 
Ex: Lê objetos do disco. 
 
#include <fstream.h> 
#include <stdio.h> 
#include <conio.h> 
 
 93 
#include<iostream.h> 
class livro 
 { 
 private : 
 char titulo[50]; 
char autor[50]; 
int numreg; 
double preco; 
public : void print(); 
}; 
void livro::print() 
 {cout<<“\n titulo: “<<titulo; 
 cout<<“\n autor: “<<autor; 
 cout<<“\n no. reg :”<<numreg; 
 cout<<“\n preco: “<<preco; 
 } 
void main() 
 { 
 ifstream fin(“lista.dat”); 
 livro li; 
 clrscr(); 
 while(fin.read((char *)&li,sizeof(livro))) 
 li.print(); 
 cout<<“\n aperte qualquer tecla”; 
 getch(); 
 return; 
} 
 
 
 94 
onde: - A função read() é membro da classe istream e recebe 2 argumentos:- o 
primeiro é o endereço do objeto para onde irão os dados lidos; 
 - o segundo, tamanho do objeto deve ser convertido para um ponteiro char. 
 
1.9.7- Gravando e Lendo Objetos de um mesmo arquivo. 
 
 Ex: grava e lê objetos de disco. 
 
#include <fstream.h> 
#include <stdio.h> 
#include <conio.h> 
#include<iostream.h> 
class livro 
 { 
 private : 
 char titulo[50]; 
 char autor[50]; 
 int numreg; 
 double preco; 
 public : void novonome(); 
 void print(); 
 }; 
void livro::novonome() 
 { 
 cout<<“\n digite titulo”; 
 gets(titulo); 
 cout<<“\n digite o autor”; 
 gets(autor); 
 cout<<“\n digite o número do registro”; 
 cin>>numreg; 
 
 95 
 cout<<“\n digite o preco”; 
 cin>>preco; 
 clrscr(); 
 } 
void livro::print() 
 { 
cout<<“\n titulo: “<<titulo; 
cout<<“\ autor : “<<autor; 
cout<<“\nno. reg. : “<<numreg; 
cout<<“\n preco : “<<preco; 
} 
void main() 
{ 
fstream fio; // Cria objeto de leitura e gravação. 
livro li; // Cria objeto livro 
fio.open(“lista.dat”,ios::ate || ios::out || ios::in); 
do 
{ 
li.novonome(); 
fio.write((char *)&li,sizeof(livro)); 
cout<<“\n Mais um livro (s/n) ? “; 
 } 
while(getche()!=‘n’); 
fio.seekg(0); // Coloca o ponteiro no início do arquivo. 
cout<<“\n lista de livros do arquivo”; 
cout<<“\n ===================================“; 
while(fio.read((char * )&li,sizeof(livro))) 
 li.print(); 
cout<<“\n aperte enter”; 
getch(); 
 
 96 
return; 
} 
 
onde: - A instrução fstream fio cria um objeto para leitura e gravação. 
 - Na instrução fio.open(“lista.dat”,ios::ata | ios::out | ios::in) 
vários modos podem ser aplicados simultaneamente por meio do operador OR (||). 
 - Usamos “ate” para preservar os objetos que já existem no arquivo e 
acrescentar novos objetos ao final dele. Usamos “out” e “in” pois queremos executar as duas 
operações de gravação e de leitura. 
 - A instrução fio.seekg(0) modifica a posição corrente do arquivo para o seu 
início. 
 
1.9.8- As funções seekg(),tellg(),seekp() e tellp(). 
 
 Cada objeto stream está associado a dois valores inteiros chamados ponteiro de 
posição corrente de leitura e ponteiro de posição corrente de gravação. 
 A fonação seekg() permite movimentar a posição corrente de leitura do arquivo 
para uma posição escolhida. 
 A função seekp() executa a mesma tarefa para a posição corrente de gravação. 
 A função seekg() tem o seguinte protótipo: 
istream&seeg(long pos,sek-dir posição=ios::beg); 
 O primeiro argumento indica o deslocamento em bytes a partir da posição 
escolhida. Quando a função é chamada com um único argumento, a posição é assumida como 
sendo o início do arquivo (ios::beg). 
 O segundo argumento quando usado, deve ser um dos modos seguintes: 
ios::beg A partir do início do arquivo 
ios::cur A partir da posição corrente 
ios::end A partir do fim do arquivo. 
Como a leitura do nosso arquivo deve começar no seu início, queremos deslocar o 
byte a partir do início do arquivo. 
 
 97 
 A função tellg() tem o seguinte protótipo: 
 long tellg(); 
 Esta função retorna a posição corrente de leitura(em bytes), sempre a partir do 
início do arquivo. 
 
1.9.9- Calculando o número de registros do arquivo. 
 
Exemplo: O exemplo mostra o uso das funções seekg() e tellg(). 
#include <fstream.h> 
#include <iostream.h> 
#include <stdio.h> // para exit() 
#include <conio.h> 
class livro 
 { 
 private : 
 char titulo[50]; 
 char autor[50]; 
 int numreg; 
 double preco; 
 public : void novonome(); 
 void print(); 
 }; 
void livro::novonome() 
 { 
 cout<<“\n digite titulo”; 
 gets(titulo); 
 cout<<“\n digite autor”; 
 gets(autor); 
 cout<<“\n digite o número de registros”; 
 cin>>numreg; 
 
 98 
 cout<<“\n digite o preco”; 
 cin>>preco; 
 clrscr(); 
 } 
void livro::print() 
 { 
 cout<<“\n titulo: “<<titulo; 
 cout<<“\n autor: “<<autor; 
 cout<<”\n No. reg. :”<<numreg; 
 cout<<“\n preco : “<<preco; 
 } 
void main() 
 { 
ifstream fin; 
livro li; 
fin.seekg(0,ios::end); //aponta para fim do arquivo, deslocamento zero 
long nrec=(fin.tellg())/sizeof(livro); 
cout<<“\n numero de registros=“<<nrec; 
cout<<“\n insira o numero do registro:”; 
cin>>nrec; 
int posicao=(nrec-1)*sizeof(livro); 
fin.seekg(posicao); 
fin.red(char *)&li,sizeof(livro)); 
fin.seekg(posicao); 
fin.read((char *)&li,sizeof(livro)); 
li.print(); 
cout<<“\n aperte enter”; 
getch(); 
return; 
} 
 
 99 
 
A saída será : 
Numero de registros=3 
insira o número de registro: 1 
Titulo : Helena 
Autor : Machado de Assis 
No. Reg. : 102 
Preco : 70.50 
 
Observe que o usuário escolheu o registro 1 indicando o primeiro registro do arquivo, 
entretanto para o programa o primeiro registro é o de numero 0. Assim, na instrução: 
int posicao=(nrec-1)*sizeof(livro); 
usamos nrec-1 para corrigir o número do registro. 
 
 
 
 
 
 
 100 
1.10 Exemplos extras de arquivos. 
 
// ------------------------------ Programa inicial para uma agenda 
// 
// PUC - Minas - Departamento de Ciência da Computação - 02/96 
// 
// Programa para exercitar conceitos básicos sobre arquivos. 
// 
// 
// ------------------------------ Bibliotecas necessárias 
 
#include <conio.h> 
#include <ctype.h> 
#include <stdio.h> 
#include <string.h> 
#include <fstream.h> 
#include <iostream.h> 
 
// ------------------------------ Definicoes globais 
 
#define BOOLEAN int 
#define TRUE 1 
#define FALSE 0 
 
#define nl '\n' 
#define FDA '.' 
 
// ------------------------------ Biblioteca basica 
 
char GetOption(int X, int Y, char * Valida) // GetOption() 
{ 
 // objetivo : 
 // colher uma resposta do teclado, posicionando-a na tela 
 // nas coordenadas (X,Y) e verificando sua validade 
 // 
 // parâmetros : 
 
 101 
 // X - coluna (ate' 80) 
 // Y - linha (ate' 24) 
 // Valida - cadeia de caracteres com as opções validas 
 // 
 // definições locais 
 char C; // opção que será' lida do teclado 
 
 do 
 { 
 gotoxy(X,Y); clreol(); // posicionar e limpar ate' o fim da linha 
 gotoxy(X,Y); C=getche(); // posicionar, ler e ecoar o caractere 
 } 
 while(! memchr(Valida,C,strlen(Valida))); 
 return(toupper(C)); // voltar à maiúscula correspondente 
} 
 
void PutStr(int X, int Y, char * Str) // PutStr() 
{ 
 // objetivo : 
 // colocar uma mensagem na tela nas coordenadas (X,Y) 
 // 
 // parâmetros : 
 // X - coluna (ate' 80) 
 // Y - linha (ate' 24)

Outros materiais