Escolar Documentos
Profissional Documentos
Cultura Documentos
Unidade I
1.0 Itens fundamentais......................................................................pg8
1.1
Dados
Numricos.........................................................................pg-8
1.2
Dado
literal...................................................................................pg-8
2.0
Varivel.........................................................................................pg-8
2.1
Formao
de
Identificadores........................................................pg-9
2.2
Declarao
de
variveis.................................................................pg-9
2.3
Modificadores
de
tipos
oferecidos
por
c+
+...................................pg-9
3.0
Operadores.....................................................................................pg-10
3.1
Operadores
de
atribuio...............................................................pg-10
3.2
Operadores
aritmticos...................................................................pg-10
4.0
Funes
de
entrada
sada..............................................................pg-11
4.1
Entrada.............................................................................................pg-11
3
4.2
Sada..................................................................................................pg-11
5.0
Manipuladores
de
tamanho
de
campos
na
impresso.....................pg-12
6.0
Funes
aritmticas..........................................................................pg-14
7.0
Operadores
relacionais.....................................................................pg-14
8.0
manipuladores
de
bases
numricas..................................................pg-17
9.0
Imprimindo
caracteres
grficos.......................................................pg-17
10.0
Cdigos
Especiais............................................................................pg-18
11.0Comentrios.....................................................................................
pg-18
12
Estruturas
condicionais.....................................................................pg-19
13.0
Estruturas
de
repeties.................................................................pg-22
13.1
Estrutura
For..................................................................................pg-22
13.2
Estrutura
While..............................................................................pg-23
13.3
Estrutura
While.......................................................................pg-25
14.0
Commandos:......................................................................................pg-28
Do-
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
Funes.............................................................................................pg-34
1.1Chamando
um
funo........................................................................pg-35
1.2
Funes
simples................................................................................pg-35
1.3
Prottipo
funes..........................................................................pg-35
de
1.4
Tipos
de
funes................................................................................pg-36
1.5
comando
Return............................................................................pg-36
1.6
Definio
da
funo...........................................................................pg-36
1.7
Parmetros
da
funo.......................................................................pg-36
1.8
Passagem
por
valor...........................................................................pg-37
1.9
Passagem
vrios
argumentos............................................................pg-38
1.10
operador
unrio
de
referncia:&...............................................pg-39
1.11
Passagem
por
referncia.................................................................pg-40
1.12
Referncia
constantes.....................................................................pg-41
1.13
Classes
de
argumentos....................................................................pg-41
1.14
operador
de
escopo.....................................................................pg-42
1.15
Funes
recursivas.........................................................................pg-43
Unidade IV
1.0
Estruturas.......................................................................................pg-45
1.1
Definindo
estrutura......................................................................pg-45
1.2
Acessando
os
membros
da
estrutura...............................................pg-46
1.3
Combinando
declaraes..................................................................pg-46
1.4
Inicializando
estruturas....................................................................pg-46
1.5
Operaes
entre
estruturas..............................................................pg-46
1.6
Estruturas
aninhadas........................................................................pg-47
1.7
Passando
estruturas
para
funes....................................................pg-47
1.8
Matrizes
de
estruturas......................................................................pg-48
1.8.1declarando
matriz
de
estruturas..................................................pg-49
1.9.0
Arquivos.........................................................................................pg-53
1.9.1
Classes
iostream.............................................................................pg-53
1.9.2
Detectando
fim
arquivo..........................................................pg-54
1.9.3- Lendo e gravando um caracter por vez no arquivo.
de
1.9.4
funo
Open().............................................................................pg-55
1.9.5
Gravando
Objetos..........................................................................pg-55
1.9.6
Lendo
Objetos................................................................................pg-57
1.9.7
Gravando
lendo
objetos
de
um
mesmo
arquivo.........................pg-57
1.9.8
As
funes
seekg(),
tellg(0,
seekp()
tellp()...................................pg-59
1.9.9
Calculando
nmero
de
registros
do
arquivo..............................pg-59
1.10
Exemplos
adicionais
de
arquivos...................................................pg-62
Unidade V
1.0
Ponteiros............................................................................................pg-69
1.1
Por
que
os
ponteiros
so
usados.......................................................pg-69
1.2
Ponteiros
variveis............................................................................pg-70
1.3
Endereos
de
memria......................................................................pg-70
1.4
Operador
de
endereos.....................................................................pg-70
1.5
Passando
argumentos
ponteiros.......................pg-71
8
por
referncia
com
1.6
variveis
que
armazena
endereos...................................................pg-72
1.7
operador
indireto..........................................................................pg-72
1.8
Passando
endereos
para
funo...................................................pg-72
1.9
Ponteiros
sem
funes.......................................................................pg-72
1.10
Ponteiros
variveis
apontadas.....................................................pg-73
1.11
atribuio.........................................................................................pg-73
1.12
Operao
indireta...........................................................................pg-73
1.13
Trazendo
endereo
do
ponteiro...................................................pg-74
1.14
Incremento
em
ponteiro..................................................................pg-74
1.15
Ponteiro
no
lugar
de
matrizes.........................................................pg-74
1.16
Ponteiros
constantes
ponteiros
variveis.....................................pg-74
1.17
Passando
matrizes
como
argumento
para
funes........................pg-75
1.18
Precedncia.....................................................................................pg-76
1.19
Ponteiros
strings...........................................................................pg-76
9
1.20
Matrizes
de
ponteiros......................................................................pg-77
1.21
rea
de
alocao
dinmica:
Heap.................................................pg-77
1.22
Retornado
ponteiro
This..............................................................pg-79
1.23
dimensionando
matrizes
execuo...........................pg-79
10
em
tempo
de
LINGUAGEM C++
UNIDADE - I
1.0 - Itens Fundamentais
1.1 - Dados Numricos
representado pelo sistema decimal ingls.
Obs.: A separao da parte inteira da fracionria feita pelo ponto decimal.
Ex.:
0.19
0.298
I . FF E n
expoente
potncia de dez
parte fracionria
ponto decimal
parte inteira
Ex.:
a) 2.98E3
= 2,98 X 103
b) 0.45E-4
= 0,45 X 10-4
a) " 2040"
11
b) " "
c) " No Fume"
2.0 - Varivel
o endereo de memria (RAM) reservado para armazenar certo tipo de
dado.
Obs.: RAM - Memria dinmica de acesso aleatrio a leitura e escrita e
voltil.
12
Ex.:
1
0
n
ota
1
00
exo
2.1 - Formao de identificadores formada por apenas uma letra ou ento
uma letra seguido de letras e dgitos nunca smbolos especiais.
Obs.: A letra maiscula diferente de letra minscula.
Ex.:
1) funcao
3) media
2) d
4) m200
int x,y;
float med;
Tabela de tipos
13
Tipo
int
char
float
double
Bytes
2
1
4
8
void
Escala
-32768 a 32767
-128 a 127
3.4E-38 a 3.4E38
1.7E-308
a
1.7E308
Nenhum valor
Bytes
1
2
2
4
unsigned long
long double
4
10
Escala
0 a 255
0 a 65535
-32768 a 32767
-2147483648
2147483647
0 a 42949667295
3.4E-4932
1.1E+4932
Obs.:
int tem sempre o tamanho da palavra da mquina, 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.
14
1) x = 200;
2) y = 5;
soma
subtrao
multiplicao
diviso
resto da diviso de 2 nmeros inteiros
Prioridade
Prioridade
1.
2.
operadores
*, /, %
+, 15
Ex: 1. x+y;
2. x-y;
3. 2*nota + 10;
4. tot/k - 40;
5. y=9 % 4;
4.0 - Funes de entrada e sada
Funes:
i) cin >> nome-da-varivel >> nome-da varivel >> . . .
Transfere os dados externos via teclado para as variveis especificadas.
Obs.: >> significa OPERADOR DE EXTRAO
Ex.: cin >> anos;
Cuidado os dados so separados de uma varivel para outra atravs do
espao em branco.
Ex.: cin >> anos >> altura
Tela
26 1.70
anos
26
altura
1.70
Tela
nome
a
A
n
n
a
a
u
u
l
l
a
a
ch = getche( );
ch = getch( );
Tela
A
ch
4.2 - Sada
cout << identificador << . . .
Onde: Identificadores so os nomes das variveis e/ou mensagem.
<< operador de insero.
Exibe na tela o contedo de variveis e/ou mensagens.
Obs: A mensagem vem entre aspas duplas.
Ex.: cout <<"A sua idade : " << id;
Tela
id 18
A sua idade : 18
17
18
{
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 (.).
- 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;
.
.
19
.
.
}
Ex.: Tamanho de campos com cadeias de caracteres
.
.
.
{
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( );
20
return;
}
6.0 - Funes Aritmticas
1) sin(x)
2) cos(x)
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) < =
(negao)
21
&&
(conjuno)
||
(disjuno)
Y
0
1
0
1
Z
0
0
0
1
Y
0
1
0
1
Z
0
1
1
1
4) / =
2) - =
5) % =
3) * =
22
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
1) x = x + 1; // adiciona 1 a x
2) + + x;
// adiciona 1 a x
3) x + +;
// adiciona 1 a x
n = 5;
x = + + n;
cout << "\n N= " << n <<" X = "<< x;
A sada ser
N = 6;
X=6
23
Ex.:
n = 5; x = n++;
cout << "\n N = "<< n <<" X = "<< x;
A sada ser
N = 6;
3)
X=5
incremento.
7.6 - Operador condicional ternrio: ? :
Sintaxe:
exp1 ? exp2 : exp3;
A exp1 avaliada, se for verdadeira a exp2 executada; caso contrrio, se a
exp1 for falsa a exp3 executada.
Ex1.: max = (a > b) ? a: b;
A varivel max receber o maior valor.
Ex2.: abs = (x > 0) ? x : -x;
Ex3.: cout << ( (x % 2) ? "Impar " : "Par");
// Calcula a mdia aritmtica de 4 notas
#include <iostream.h>
main( )
{
24
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;
cout << "\n Falso "<<falso;
}
#include <iostream.h>
main( )
25
{
cout << "\n"<<(4+1<3);
cout << "\n"<<(2<1+3);
}
41
101
65
26
adicionais, com cdigos de 128 a 255, que consistem em smbolos de lnguas estrangeiras e
caracteres grficos
A forma de representar um caractere de cdigo 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 - Cdigos especiais
Cdigos Especiais
\n
\t
\b
\f
\a
\r
\\
\0
\'
\"
\xdd
Significado
Nova linha
Tab
Retrocesso
Salta pgina de formulrio
Beep - toca o alto falante
CR - Cursor para o inicio da linha
\ - Barra invertida
Null - zero
' - Aspa simples
" - Aspa dupla
Representao hexadecimal
27
11 - Comentrios
Podem ser colocadas em qualquer lugar do programa e so tratados pelo
compilador como espaos em branco e vem entre /*
............................. */
ento // ..................
obs.:
// s uma linha
Ex.:
#include <iostream.h> // diretiva do pr-processador
#include <conio.h> // necessrio p/ o getche( )
// incio do programa
main( )
{
char ch; /* declarao de varivel */
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 instruo
if (expresso de teste)
instruo;
Ex1.:
if (a = = b)
28
ou
x = x + 1;
Ex2.:
if (a>b+c | | a>20)
y = y + 2;
2) Mais de uma instruo
if (expresso de teste)
{
instruo;
instruo;
}
Ex1.:
if (ch = = '0')
{
cout<<"\n Zero detectado";
cont = cont+1;
}
12.2 - Estrutura condicional composta
1) S uma instruo:
if (expresso de teste)
instruo a;
else instruo b;
Ex1.:
if (a > 10)
k = k+2;
29
else y = y+3;
{
instruo1b;
...
instruo nb;
}
Ex2.:
if (sexo = ='f')
{
nm = nm + 1;
k = k+i;
}
else {
nh = nh +1;
y = y+i;
}
Ex:
30
#include <conio.h>
#include <math.h>
#include <iostream.h
void main(void)
{
float x1,x2,a,b,c,d;
31
#include <conio.h>
#include <iostream.h>
#include <math.h>
void main(void)
{
int x,y,z;
cout<<"\nDigite os lados do tringulo ";
cin >> x >> y >> z;
if (x<y+z && y<x+z && z<x+y)
if (x = = y && x = = z)
cout<<"\n Tringulo eqiltero ";
else if (x = = y | | x = = z | | y = = z)
32
33
Ex.:
Dados: alt
sexo
10 pessoas (np)
#include <stdio.h>
me = alt;
aux2 = sexo;
}
clrscr( );
}
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 instruo:
i) while (expresso de teste)
instruo;
2- mais de uma instruo:
ii) while (expresso de teste)
{
instruo;
instruo;
}
Obs.:
i) O lao while apropriado em situaes em que o lao pode ser terminado
inesperadamente, por condies desenvolvidas dentro do lao.
ii) while executa as instrues enquanto a expresso de teste for verdadeira.
35
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)
{
idm = sid/np;
36
37
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 lao;
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 funo strcmpi(s1,s2) compara duas strings, se forem diferentes
verdadeiro(1); caso contrrio falso(0).
38
39
} 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 nmero de anos necessrios
para que a populao de A seja maior ou igual de B. Sabendo que a populao de A
90000000 milhes 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
{
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( );
40
return;
}
Ex.3 Fazer um prog. em c++ que leia o salrio e o nome. O ltimo dado que entrar
tem o nome igual a Joo. Calcule e escreva:
- o maior salrio 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 joo para;
gets(no);
cout<<\n digite o salrio: ;
cin>>sal;
if(sal>mas)
{
mas=sal;
strcpy(aux,no); // copia o contedo da string no na string aux.
}
clrscr();
}
while(strcmpi(no,joao));
cout<<\n mas = <<mas<< nome e : <<aux;
cout<<\n aperte qualquer tecla ;
getch();
41
return;
}
Obs: A funo strcpy(s1,s2) copia o contedo da string s2 na string s1.
14 - Comandos:
14.1 - break
O comando break causa a sada imediata do lao; o controle passa para a
prxima instruo aps o lao. Se a instruo break pertencer a uma estrutura de laos
aninhados afetar somente os laos internos a ele.
Ex1) Fazer um programa em C+ + para calcular a soma dos 20 primeiros
termos da srie:
42
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 ";
getch( );
return;
}
14.2 - Continue
Continue faz com que o controle do programa avalie imediatamente a
expresso de teste e depois continua o processo do lao.
exemplo: imprima os caracteres diferentes dos dgitos.
#include <iostream.h>
#include <conio.h>
void main( )
{
char ch;
43
Sintaxe:
switch (varivel seletora)
{
case constante1 :
instruo;
instruo;
break;
case constante2 :
instruo;
instruo;
break;
default : instruo;
instruo;
}
44
#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;
45
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;
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;
}
46
47
UNIDADE - II
1.0 - Matrizes
Matriz um tipo de dado em C+ + usado para representar uma coleo de
variveis 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 - Declarao de varivel
tipo nome-da-varivel[n];
onde: n o nmero de elementos.
Ex1) Fazer um programa que leia 10 notas. Calcule e escreva:
- A mdia 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++)
{
cout<<"\nDigite a nota "<<(i+1)<<": ";
48
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 varivel composta contendo
n (n<=100) elementos inteiro, onde n lido.
Calcule e escreva:
- O maior elemento par e indique a posio;
- Uma 2. varivel composta contendo os elementos divisveis 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++)
{
cout<<"\nDigite um numero inteiro "<<(i+1)<<" : ";
cin>>a[i];
if (a[i]>map && a[i]%2= =0)
49
{
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 so :"<<b[i];
cout<<"\nO maior elemento par = "<<map <<"p = "<<p;
cout<<"\n Aperte qualquer tecla";
getch( );
return;
}
1.2 - Matrizes multidimensionais
So as que necessitam de mais de um ndice para individualizar um elemento
no conjunto de dados.
1.2.1 - Declarao de variveis
tipo nome-da-varivel [nl] [nc];
onde:
- nl : o nmero de linhas
- nc : o nmero de colunas
50
51
#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 ";
getch( );
return;
}
UNIDADE - III
1.0 - Funes
Uma funo um conjunto de instrues desenhadas para cumprir uma
tarefa particular e agrupadas numa unidade com um nome para referenci-la.
52
53
54
// prottipo
return;
return expresso;
return (expresso);
55
{
return (f-32)*5/9;
}
Obs.: No permitido o retorno de mais de um valor por meio do comando
return.
1.6 - Definio da funo
Tipo nome (declarao dos parmetros)
{
instrues;
}
1.7 - Parmetros da funo
So as informaes transmitidas para a funo.
A funo deve declarar essas informaes entre parnteses, no cabealho de
sua definio.
Ex: int Celsius (int f)
{
int c;
c=(f-32)*5/9;
return c;
}
56
57
8 13 14 19 . . .
58
59
60
getch( );
return;
}
int n;
int& n1=n;
n=5;
cout<<n1;
n1=8;
cout<<n;
sadas:
5 e 8
Obs: O operador unrio &, quando usado na criao de referncia, faz parte do tipo:
61
62
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 nmeros
#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 nmeros ";
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;
63
64
65
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;
cout<<"\nAperte enter ";
getch( );
return;
}
sada:
i=0
j = 234
i = 25
j = 48
66
#include <iostream.h>
#include <conio.h>
int i;
int j=234;
void main( )
{
int i=5, j=10; // variveis automticas
cout<<: : i<<: : j<<"\n"; // externas
cout<<i<<j<<"\n";
cout<<"\n Aperte qualquer tecla";
getch( );
}
1.15 - Funes recursivas
Uma funo dita recursiva se for definida em termos dela mesma. Isto ,
uma funo recursiva quando dentro dela est presente uma instruo de chamada a ela
prpria.
Ex: 1 - Escrever uma funo que calcula o fatorial de um nmero.
#include <conio.h>
#include <iostream.h>
long fatorial (int n)
{
if (n<=1)
return (1);
else return (n*fatorial(n-1));
}
void main(void)
67
{
int n;
cout<<"\nDigite um numero inteiro";
cin>>n;
cout<<"\nFat = "<<fatorrial(n);
cout<<"\nAperte enter";
getch( );
return;
}
Quando o programa for executado a funo fatorial ser acessada
repetidamente, uma vem em main e (n-1) vezes dentro dela mesma apesar do usurio no se
preocupar com isso. Quando um programa recursivo executado, as chamadas das
funes recursivas no so executadas imediatamente. Elas so colocadas em uma pilha
(stack) at que a condio de trmino da recurso seja encontrada. As chamadas da funo
so executadas, ento, em ordem inversa, medida que forem retiradas (popped off) da
pilha. Quando uma expresso fatorial for avaliada recursivamente, as chamadas de funo
sero 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 sero ento 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.
68
#include <iostream.h>
#include <conio.h>
void invert( )
{
char ch;
if ((ch=getche( ) )!= '\r')
invert( );
cout<<ch;
}
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
69
10 - #error
1.16.1
apropriados
Ex.: #define PI 3.14
1.16.2 - #undef remove a mais recente definio criada com #define
1.16.3 - #include causa a incluso de outro arquivo em nosso programa
fonte.
1.16.4 - #error provoca uma mensagem de erro do compilador em tempo de
compilao.
UNIDADE - IV
1.0 - Estruturas
H cinco tipos de dados simples que esto pr-definidos no compilador e que
nos j conhecemos e j utilizamos. So eles: char, int, float, double e void.
Estruturas so tipos de variveis que agrupam dados geralmente desiguais.
Os itens de dados de uma estrutura so chamados membros.
1.1 - definindo a estrutura
struct nome-do-tipo
70
{
membros
};
onde: struct indica que um novo tipo de dado est sendo definido.
Ex.:
struct aluno
{
int idade;
float altura;
char sexo, nome[25];
};
Ex.: aluno.idade
1.3 - Combinando declaraes
struct
{
membros;
} nome-das-variveis;
71
Ex.: struct
{
int nmat;
float nota[3];
float media;
} Ana, Jose, joo; // declarao de diversas variveis
72
};
venda a={20,110.0}, b= {3,16.5}, total;
Operaes simples como a soma no 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;
float preco;
data diavenda;
};
73
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 sada:
pecas: 20
preco: 110
data: 7 de novembro de 1.993.
1.7 - Passando estruturas para funes.
As estruturas podem ser passadas como argumentos de funes de
mesma forma que variveis simples.
Exemplo:
// mostra passagem de estruturas para funes por valor.
#include <iostream.h>
#include <conio.h>
struct venda
{
int pecas;
float preco;
};
74
75
cliente
0
1
2
nome
r
ua
3
4
5
n
mero
saldo
c
pf
struct cliente
{
char nome[25];
char rua[40];
int numero;
char cpf[14];
float saldo;
};
cliente contas[6];
76
Nome
10
Alfaiate
10
Analista
10
Vendedo
digo
0
00
1
20
2
30
.
.
.
9
9
10
Mdico
99
Fazer um programa que, dados 500 cdigos de profisso, emita o nome das
profisses correspondentes. A tabela acima tambm 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>
77
#include <stdio.h>
void main(void)
{
struct tabela
{
char no[25];
long codigo;
};
tabela tab[100];
int i,k;
long codigodesejado;
clrscr( );
for (i=0;i<=99;i++)
{
cout<<\ndigite o nome<<i;
gets(tab[i].no);
cout<<\ndigite o cdigo<<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;
78
}
cout<<\nAperte qualquer tecla;
getch( );
return;
}
3 - Em certo municpio vrios proprietrios de imveis esto em atraso com o
pagamento do imposto predial. Escrever um programa que calcule e escreva o valor da
multa a ser paga por estes proprietrios considerando que:
- Os dados de cada imvel: identificao (literal), valor do imposto e nmero de
meses em atraso, esto disposio numa unidade de entrada;
- As multas devem ser calculadas a partir do valor do imposto e de acordo com a
seguinte tabela.
Valor
do
% por ms em
imposto
atraso
at R$ 5000
1
de 5000 a
2
18000
de 180001 a
de
de
10
50000
50001
120000
acima
120000
79
Limites
de
at
0
5.001
5.000
18.00
1
2
50.00
120.0
perce
ntual
0
18.001
0
50.001
00
120.001
10
identifi
c
impo
sto
literal
meses
at
numrico
numrico
#include <conio.h>
#include <string.h>
#include <stdio.h>
#include <iostream.h>
void main(void)
{
float tab[5][3];
struct imvel
{
char ident[8];
float imposto;
int meseat;
};
80
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 identificao;
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;
}
cout<<\nDigite a identificao;
gets(imovel.ident);
81
}
cout<<\nAperte qualquer tecla;
getch( );
return;
}
82
1.9 Arquivos
1.9.1- As classes iostream:
As classes istream e ostream so derivadas de ios e so dedicadas a leitura e
impresso, respectivamente.
A classe istream contm funes como get(), getline(), read(), alm de outras.
Contm ainda a sobrecarga do operador de extrao >>.
A classe ostream contm funes como put(), write(), alm de outras. Contm a
sobrecarga do operador de insero <<.
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 funes de arquivos.
void main()
{
ofstream fout(teste.txt); //cria arquivo para gravao em modo texto
fout<<\n Um grande antdoto contra o egoismo e a generosidade;
fout<<\n D mesmo que isso requeira de voc um esforo.;
}
Obs: inicializamos este objeto com o nome do arquivo teste.txt. Esta inicializao
associa o objeto fout ao arquivo em disco teste.txt para gravao.
Ex2: Lendo uma linha por vez em arquivos em disco.
83
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>
void main()
{
const int max=80;
char buff[max];
ifstream fin(teste.txt); //cria arquivo p/leitura em modo testo
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;
}
No exemplo, getline() l caracteres enquanto no encontrar o caracter \n e coloca
os caracteres lidos no buffer especificado como argumento. O tamanho mximo do buffer
informado no segundo argumento. O contedo do buffer impresso aps 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 no- zero caso contrrio.
Exemplo: Podemos verificar o fim de arquivo ao mesmo tempo em que lemos uma
linha.Esta uma forma mais composta.
84
#include <fstream.h>
#include <conio.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.
Para trabalhar com um nico caracter por vez, usamos as funes put() e get(),
membros das classes ostream e istream respectivamente.
Ex:
// Grava um caracter por vez num arquivo
#include <fstream.h>
void main()
{
ofstream fout(teste1.txt);
char ch;
while(cin.get(ch)) // L um caracter do teclado
fout.put(ch);
}
Obs:1. O lao while verifica se o caractere que indica fim-de-arquivo foi digitado no
teclado. Este caractere tem cdigo \x1a e inserido pressionando-se tecla ctrl-z.
85
Descrio
abre para gravao
abre e posiciona
no
fim
do
gravao.
abre para leitura
grava a partir do fim do arquivo
abre e apaga todo o contedo do
ios::nocreate
arquivo
erro de abertura se o arquivo no
86
existir.
ios::noreplace
ios::binary
1.9.5-Gravando Objetos.
As funes apropriadas para o processo de gravao e leitura de objetos so as
funes write() e read().
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 <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;
87
cin>>numreg;
cout<<\n digite o preco;
cin>>preco;
clrscr();
}
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 funo membro novonome() chamada das informaes dos registros.
gravado no arquivo lista.dat por meio da funo write().
- A funo write() recebe 2 argumentos:- o primeiro o endereo 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 funo read().
Ex: L objetos do disco.
#include <fstream.h>
88
#include <stdio.h>
#include <conio.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;
}
onde: - A funo read() membro da classe istream e recebe 2 argumentos:- o
primeiro o endereo do objeto para onde iro os dados lidos;
89
90
{
cout<<\n titulo: <<titulo;
cout<<\ autor : <<autor;
cout<<\nno. reg. : <<numreg;
cout<<\n preco : <<preco;
}
void main()
{
fstream fio; // Cria objeto de leitura e gravao.
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 incio 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();
return;
}
onde: - A instruo fstream fio cria um objeto para leitura e gravao.
- Na instruo fio.open(lista.dat,ios::ata | ios::out | ios::in)
vrios modos podem ser aplicados simultaneamente por meio do operador OR (||).
91
92
#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 nmero de registros;
cin>>numreg;
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;
93
}
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;
}
A sada ser :
Numero de registros=3
insira o nmero de registro: 1
Titulo : Helena
Autor : Machado de Assis
No. Reg. : 102
Preco : 70.50
Observe que o usurio escolheu o registro 1 indicando o primeiro registro do
arquivo, entretanto para o programa o primeiro registro o de numero 0. Assim, na
instruo:
94
int posicao=(nrec-1)*sizeof(livro);
usamos nrec-1 para corrigir o nmero do registro.
95
#define FALSE
#define nl
#define FDA
'\n'
'.'
// GetOption()
{
// objetivo :
// colher uma resposta do teclado, posicionando-a na tela
// nas coordenadas (X,Y) e verificando sua validade
//
// parmetros :
// X
// Y
96
//
// definies locais
char C;
do
{
gotoxy(X,Y); clreol();
gotoxy(X,Y); C=getche();
}
while(! memchr(Valida,C,strlen(Valida)));
return(toupper(C));
}
void PutStr(int X, int Y, char * Str)
// PutStr()
{
// objetivo :
// colocar uma mensagem na tela nas coordenadas (X,Y)
//
// parmetros :
// X
// Y
// Str
//
gotoxy(X,Y); cout << Str;
return;
}
void Pausa()
// Pausa()
{
// objetivo :
// fazer uma pausa, esperando pela digitao de uma tecla
PutStr(1,24,"Digite <Enter> para continuar.");
getch();
return;
}
void Terminar()
// Terminar()
97
{
// objetivo :
// informar o termino do processamento
clrscr();
cout << "Terminar ...";
Pausa();
return;
}
BOOLEAN Existir (const char * Nome)
// Existir()
{
// objetivo
// verificar a existncia de um arquivo,
// cujo nome ser' passado como parmetro
//
// parmetros :
// Nome - nome externo do arquivo que se quer testar a existncia
//
return ((int) (fopen(Nome,"r")));
}
// ------------------------------ Definies de tipos globais
class Agendas
{
public:
typedef struct SData
// data completa
{
int Dia, Mes, Ano;
}
Datas;
// descrio do registro bsico
char Agenda[30];
char Pessoa[30];
char Endereo[60];
char Telefone[13];
98
char Aniversario[10];
Agendas(const char * Nome);
// construtor padro
void Ler(void);
void Mostrar(void);
void Criar();
void Listar();
void Procurar();
void Acrescentar();
};
// ------------------------------ Biblioteca especifica
void Agendas::Agendas(const char * Nome)
// construtor padro
{
// objetivo :
// designar um nome externo `a agenda
//
strcpy(Agenda, Nome);
return;
}
void Agendas::Ler(void)
// GetReg()
{
// objetivo :
// ler do teclado os campos do registro de uma pessoa
//
clrscr();
PutStr(1, 2, "Ler os dados de uma pessoa : ");
PutStr(1, 4, "Nome
: "); gets(Pessoa);
if(Pessoa[0] != '.')
{
PutStr(1, 5, "Endereco
PutStr(1, 6, "Telefone
: "); gets(Endereco);
: "); gets(Telefone);
99
{
strcpy(Endereco , "");
strcpy(Telefone , "");
strcpy(Aniversario, "");
}
Pausa();
return;
}
void Agendas::Mostrar(void)
// PutReg()
{
// objetivo :
// mostrar na tela os campos do registro de uma pessoa
//
if(Pessoa[0] != '.')
{
clrscr();
PutStr(1, 2, "Mostrar os dados de uma pessoa : ");
PutStr(1, 4, "Nome
PutStr(1, 5, "Endereco
PutStr(1, 6, "Telefone
void Agendas::Criar(void)
// Criar()
{
// objetivo :
// criar um arquivo em disco,
// com o nome externo que receber como parmetro
//
// parmetros :
// Nome - nome externo do arquivo que se quer criar
100
//
// condies especiais :
// - se um arquivo de mesmo nome j' existir,
// ser' dada opo de nao altera'-lo;
// - se o arquivo nao existir, nao haver' problemas
char
Opo = 'S';
long
N=-1;
ofstream Txt(Agenda);
clrscr();
if(Existir(Agenda))
{
PutStr(1,3, "Agenda j\' existe\n\n");
PutStr(1,5, "Quer apagar e comear outra [S,N] ? ");
Opcao = GetOption(36,5,"SNsn");
if(Opcao == 'S')
{
cout << "Os dados atuais sero apagados.";
}
else
{
cout << "Os dados atuais sero mantidos.";
}
}
if(Opcao == 'S')
{
cout << "Criar ...";
do
{
Ler();
Txt << Pessoa
Txt << Endereco
Txt << Telefone
Txt << Aniversario
N++;
101
while(Pessoa[0] != FDA);
clrscr();
PutStr(1, 2, "Agenda criada.\n");
cout << N << " registros gravados.\n";
}
Pausa();
return;
}
void Agendas::Listar(void)
// Listar()
{
// objetivo :
// mostrar os contedos de cada registro um arquivo,
// cujo nome ser' passado como parmetro
//
// parmetros :
// Nome - nome externo do arquivo que se quer mostrar o contedo
//
long
N=-1;
ifstream Txt(Agenda);
clrscr();
cout << "Listar ...";
if(Existir(Agenda))
{
cout << "Listando ...";
do
{
Txt.getline(Pessoa
,30);
// lendo
Txt.getline(Endereco ,60);
Txt.getline(Telefone ,13);
Txt.getline(Aniversario,10);
N++;
Mostrar();
// contando
// mostrando
}
while(Pessoa[0] != FDA);
clrscr();
PutStr(1, 2, "Termino da leitura.");
cout << nl << N << " registros lidos.\n";
102
getch();
}
else
{
PutStr(1,3, "Erro : Agenda nao existe. \n\n");
}
Pausa();
return;
}
void Agendas::Procurar(void)
// Procurar()
{
// objetivo :
// procurar no arquivo,
// cujo nome ser' passado como parmetro,
// pelo registro que contenha um determinado nome de pessoa
//
// parmetros :
// Nome - nome externo do arquivo onde se quer procurar um registro
//
long
N=1,P;
char
Opo;
char
Procurado[30];
fstream Txt;
BOOLEAN Achar=FALSE;
clrscr();
cout << "Procurar ...\n\n";
cout << "Digite o nome a ser procurado : ";
gets (Procurado);
strcpy(Pessoa, Empty);
Txt.open(Agenda, ios::in | ios::out);
while(Pessoa[0] != FDA && ! Achar)
{
Txt.getline(Pessoa
,30);
// lendo
Txt.getline(Endereco ,60);
Txt.getline(Telefone ,13);
Txt.getline(Aniversario,10);
103
if(strcmp(Pessoa, Procurado) == 0)
Achar = TRUE;
else
{
N++;
// contando
P = Txt.tellg();
}
}
if(Achar)
{
Mostrar();
// mostrando
Txt.seekg(P, ios::beg);
Txt << Pessoa
Txt << Endereco
Txt << Telefone
Txt << Aniversario
// determinar a posio
<< nl;
// gravar um novo
<< nl;
<< nl;
<< nl;
}
}
else
{
cout << "Registro nao encontrado. \n";
}
clrscr();
PutStr(1, 2, "Termino da procura.");
cout << nl << N << " registros lidos.\n";
// realizada a procura
Pausa();
return;
}
void Agendas::Acrescentar(void)
// Acrescentar()
{
// objetivo :
104
N=-1;
char
S[80];
fstream Txt;
clrscr();
cout << "Acrescentar ...\n\n";
Txt.open(Agenda, ios::ate | ios::out);
Txt.seekg(-3, ios::end);
do
{
Ler();
Txt << Pessoa
Txt << Endereco
Txt << Telefone
<< nl;
N++;
}
while(Pessoa[0] != FDA);
clrscr();
PutStr(1, 2, "Agenda alterada.\n");
cout << N << " registros novos gravados.\n";
Pausa();
return;
}
void Menu()
// Menu()
{
// objetivo :
// mostrar as opes bsicas do programa,
// e receber a escolha da funo desejada pelo usurio
char
Opo;
105
106
void main(void)
{
Menu();
return;
}
5 - UNIDADE V
1- Ponteiros
um endereo de memria. Seu valor indica onde uma varivel est armazenada. Um ponteiro
proporciona um modo de acesso a uma varivel sem referenci-la diretamente.
1-1 Por que os ponteiros so usados?
Os ponteiros so usados em situaes em que o uso de uma varivel difcil ou indesejvel.
Algumas razes para o uso de ponteiros so:
criar estruturas de dados complexos, como listas encadeadas e rvore binrias, onde um
107
108
Obs.: 1.O operador << imprime endereos hexadecimal, precedidos pelo prefixo 0x.
2. O operador de endereo(&) s pode ser usado com nomes de variveis.
Exs: .1- &(i+1) ; // errado
2- &5 ;
// errado
109
}
void main()
{
float preco,valoreaj;
do
{
cout<<\n digite o preco;
cin>>preco;
reajusta(&preco, &valoreaj);
cout<<\n preco novo <<preco;
cout<<\n aumento =<<valoreaj;
}
while(preco!=0.0);
cout<<\n aperte enter;
getch();
return;
}
110
111
cout<<\naperte enter:
getch();
return;
}
Eis a sada:
&x= 0xfff4
x=4
&y= 0xfff2
x=7
112
return;
}
Observao: A instruo y=*p; indica o valor da varivel apontada.
1-11 Atribuio
Um endereo pode ser atribudo a um ponteiro.
Exemplo:
px=&x; //Atribumos o endereo de x a px
py=&y;
1-12 Operao Indireta
O operador indireto (*) precedendo o nome do ponteiro resulta no valor da
varivel apontada.
1-13 Trazendo o endereo do ponteiro.
Como as variveis, os ponteiros tem um endereo e um valor. O ponteiro (&)
precedendo o nome do ponteiro resulta na posio de memria onde o ponteiro est
localizado.
O nome do ponteiro indica o valor contido nele, isto , o endereo para o
qual ele aponta( o endereo da varivel apontada).
1-14 Incremento em ponteiro.
Incrementar um ponteiro acarreta sua movimentao para o prximo tipo
apontado; isto , se px for um ponteiro para uma varivel int, depois de executar a instruo
px++ o valor de px ser incrementado de um int(dois bytes). Cada vez que px
113
incrementado, apontar para o prximo int da memria. A mesma idia verdadeira para
decrementar.
1-15 Ponteiro no lugar de matrizes.
Exemplo: Imprimir os valores dos elementos de uma matriz.
#include <conio.h>
#include <iostream.h>
void main()
{
int m[5]={92,81,70,69,58};
int i;
for(i=0;i<5:i++)
cout<<\n <<*(m+i);
cout<<\n aperte enter;
getch();
return;
}
Onde: *(m+i) tem o mesmo valor de m[i]. Voc j sabe que m um ponteiro int e
aponta para m[0], conhecendo tambm a aritmtica com ponteiros. se somarmos 1 a m,
obtemos o endereo de m[1], m+2 o endereo de m[2] e assim por diante.Em regra geral,
temos que: m+i equivalente a &m[i], portanto *(m+i) equivalente a m[i].
1-16 Ponteiros constantes e ponteiros variveis.
Na instruo cout<<\n<<*(m+i); no pode ser substituda pela instruo
cout\n<<*(m++); pois no podemos incrementar uma constante.
O nome de uma matriz um ponteiro constante e no pode ser alterado.
Um ponteiro varivel um lugar na memria que armazena um endereo. Um ponteiro
constante um endereo, uma simples referncia.
114
115
for(i=0;i<tamanho;i++)
m=m+*lista++;
return (m/tamanho);
}
void main(void)
{
const maxi=20;
int i,notas[maxi],m;
for(i=0;i<maxi;i++)
{
cout<<\n digite a nota :<<i;
cin>>*(notas+i);
if(*(notas+i)<0)
break;
clrscr();
}
m=media(notas,i);
cout<<\n media : <<media;
cout<<\n aperte enter;
getch();
return;
}
Obs: 1. Na instruo int *lista equivalente a original int lista[]
2. visto que o nome da matriz um endereo, no h necessidade de usar o
operador(&0 na instruo int m=media(notas,i).
1-18 Precedncia
O operador ponteiro e o de incremento tem a mesma precedncia> Os
operadores da mesma precedncia so resolvidos por associao.
116
117
118
119
str=new(char[strlen(s) + 1];
strcpy(str,s);
}
~string()
{
if(str)
delete str;
}
void print()
{
cout<<str;
}
};
void main()
{
string s= A vida uma longa estrada na qual
corremos contra o tempo;
strins s1;
cout<<\n;
s. print();
cout<<\n;
s1. print();
}
sada:
A vida uma longa estrada na qual corremos contra o tempo.
Onde: A instruo str = new char[ strlen(s) +1 ];
retorna um ponteiro p/ um bloco de memria do tamanho exato p/ armazenar a
cadeia s mais o \a. strcpy() copia a cadeia s p/ a nova memria reservada, apontada por str.
st = new char reserva um nico byte de memria.
se no houver memria suficiente o operador new devolver um ponteiro
com o valor zero (NULL).
120
~ string ()
{
if (str)
delete str;
}
Verifica se a memria foi alocada por new antes de liberar; caso contrrio aponte
para endereo zero.
A funo testa se o endereo do objeto o mesmo do contido no ponteiro this.
1-22 Retornando o ponteiro this
Retorna um valor de uma funo membro ou de uma funo que sobrecarrega um
operador.
Exemplo:
string & operator = (const string & s )
{
if (&s = = this)
return * this;
int tamanho = strlen ( s.str );
delete str;
str = new char [ tamanho +1 ];
strcpy (str, s.str);
return;
}
1-23 Dimensionando matrizes em tempo de execuo
Exemplo:
# include <iostream.h>
# include <conio.h>
int media (int *lista, int tamanho)
{
int m, i;
121
122
EXERCCIOS PROPOSTOS
123
124
matrcula;
nome do empregado;
nmero de dependentes;
DE
isento
5%
8%
10%
INSS:
8%
9%
10%
DESCONTO
75,00.
RENDA:
CONVNIO
125
Alquota
isento
5%
15000,00
de
15000,00
10%
30000,00
de
30000,00
15%
50000,00
acima de 50000,00
20%
Obs.: a ltima pessoa que no entrar nos clculos tem CPF igual a 0 (zero).
13 - Elabore um programa para ler do teclado um nmero inteiro e positivo n e um
nmero real x, calcular e escrever a soma dos n prime rios termos da serie:
0
12
15
126
50
127
24
23
22
129
Varivel Composta
1 - Fazer um programa que:
- Leia 100 valores numricos e armazene numa varivel composta
unidimensional A;
- Calcule e escreva:
100
5
6
7
7
.
..
8
8
3
100
130
a temperatura mdia;
mdia.
4 - Fazer um programa que:
a) leia uma frase de 80 caracteres, incluindo brancos;
b) conte quantos brancos existem na frase;
c) conte quantas vezes letra aparece;
d) conte quantas vezes ocorre um mesmo par de letras na frase e quais so
elas
e) imprima o que foi calculado nos itens b, c e d.
5 - Fazer um programa que:
a) leia o valor de N (N < = 1000) e os n valores de uma varivel A composta
de valores numricos, ordenados de forma crescente;
b) determine e imprima para cada nmero que se repete no conjunto
quantidade de vezes que ele aparece repetido;
c) elimine os elementos repetidos formando um novo conjunto;
d) imprima o conjunto obtido no item C.
6 - Dado um conjunto de 100 valores numricos disponveis num meio de
entrada qualquer, fazer um a programa para armazen-los numa varivel composta B,
calcular e imprimir o valor do somatrio dado a seguir:
Exemplo:
B
2
10
1
60
1
.
..
3
3
9
7
3
131
100
S = (210-97) + (160-33) + . . .
7 - Fazer um programa que:
- leia o valor de M (M < = 30) e os M valores de uma varivel composta A;
- leia o valor de N (N < = 20) e os N valores de uma varivel composta B;
- determine o conjunto C=A B (unio de A com B), onde C no dever
conter elementos repetidos (A e B no contm elementos repetidos);
- escreva os elementos contidos em A, B e C.
7 - Seja
P = anxn + an-1xn-1 + an-2xn-2 + . . . + a1x + a0
Escrever um programa que:
- leia o valor de n, sendo n < = 20;
- leia os coeficientes ai, i = 0,1,2, . . ., n;
- calcule o valor de p para 10 valores de x, lidos em cartes;
- escreva o valor de x e o valor de p correspondente.
8 - Fazer um programa que:
a) leia um conjunto de valores inteiros correspondentes a 80 notas dos alunos
de uma turma, notas estas que variam de 0 a 10;
b) calcule a freqncia absoluta e a freqncia relativa de cada nota;
c) imprima uma tabela contendo os valores das notas (de 0 a 10) e suas
respectivas freqncias absoluta e relativa;
Obs.: 1 - freqncia absoluta de uma nota e o nmero de vezes que ela aparece no
conjunto de dados;
2 - freqncia relativa a freqncia absoluta dividida pelo numero total de
dados.
132
9 - Uma grande firma deseja saber quais os trs empregados mais recentes. Fazer
um programa para ler um nmero indeterminado de cartes no mximo de 300, contendo o
numero do empregado e o nmero de meses de trabalho deste empregado e escrever os trs
mais recentes.
10 - Fazer um programa que:
- leia uma varivel composta A com 30 valores numricos;
- leia outra varivel composta B com 30 valores numricos;
- leia o valor de X;
- verifique qual elemento de A que igual a X;
- escreva o elemento de B de posio correspondente a do elemento de A
igual a X;
11 -Dados as variveis compostas A e B abaixo:
A
2 5 7
5 1 6
9
9
B
0 2 3
2 6 8
7
9
133
- a matriz transposta de A.
14 - Fazer um prog. que leia uma matriz numrica Am*n(m<=20,n<=10). Onde m e
n so lidos. Calcule e escreva uma matriz modificada B(m*n+1), sendo que os elementos de
(n+1)-s ima coluna so formados com o produto dos elementos da mesma linha.
Exemplo:
A
2
4
3
5
B
2 3
4 5
6
2
0
15 - Fazer um prog. em c++ que leia uma matriz inteira Am*m(m<=30). onde m
s
exo
134
ficha
insc
rio
n
ome
hora
normais
h.
extras
Fazer um prog. que processe a tabela e emita para cada funcionrio, seu
contracheque, cujo formato dado a seguir:
nmero de inscrio:
nome:
135
136
137