Академический Документы
Профессиональный Документы
Культура Документы
Volume 3
Recife, 2009
Universidade Federal Rural de Pernambuco
Apresentação.........................................................................................5
Considerações Finais........................................................................103
Conhecendo a Autora........................................................................104
Apresentação
Caro(a) cursista,
Neste livro, nós vamos aprender novas formas de armazenar nossos dados. Com os
vetores e registros, poderemos manusear um volume maior de dados, de forma facilitada.
Outro assunto muito importante que será abordado neste volume é o armazenamento de
dados em arquivos. Atualmente, ao terminar a execução do programa, todos os dados
que foram digitados são perdidos. Com o armazenamento de dados em arquivos, isto
não acontece. Assim, iremos desenvolver programas com operações como: cadastro de
elementos, remoção, alteração, consultas, listagens, etc.
Bons estudos!
Conhecendo o Volume 3
» Definição de vetores;
» Definição de registros;
» Vetor de registro;
» Definição de arquivos;
6
Programação I
» Ponteiros;
7
Programação I
Capítulo 1 – Armazenamento de
Dados em Vetores
8
Programação I
0 1 2 3 4
Sintaxe
tipo identificador[tamanho];
9
Programação I
onde:
1 int idade[100];
2 float nota[25];
3 char nome[80];
10
Programação I
Exemplo 1.2:
Declaração de vetor usando uma constante no local do tamanho do vetor.
1 #define TAMANHO 30
2 int valor[TAMANHO];
Sintaxe
identificador[indice]
onde:
11
Programação I
2 int x;
3 x = 3;
4 valor[1] = 6.6;
5 valor[x] = 9.9
6 valor[x+2] = 10.0;
0 1 2 3 4 5 6 7 8 9
Viram como é fácil trabalhar com vetor? Em uma única linha, nós
criamos um conjunto de variáveis, do tamanho da nossa necessidade.
Posteriormente, acessamos cada uma destas variáveis utilizando o
nome do vetor e o índice da variável.
12
Programação I
Sintaxe
Onde:
idade 12 30 14 7 13 15 6
0 1 2 3 4 5 6
13
Programação I
vogal a e i o u
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
14
Programação I
2 ou
3 int valor[3];
4 valor[0] = 7;
5 valor[1] = 4;
6 valor[2] = 20;
Vamos ver como tratar cada uma das situações? Quando nós
sabemos quantos elementos o usuário vai digitar, poderemos usar
uma estrutura de repetição como o for, que irá repetir a leitura dos
elementos, na quantidade definida. Vamos ver o Programa Completo
1.1 a seguir: o usuário precisa armazenar 5 elementos em um vetor
de inteiros, chamado valor.
15
Programação I
1 main()
2 {
3 int valor[5];
4 int i;
8 scanf(“%d”,&valor[i]);
9 }
10 getche();
11 }
» Linha 5: printf para que o usuário saiba que será feito o cadastro
dos elementos no vetor.
16
Programação I
» Linha 10: comando getche que faz com que a tela de execução
do programa fique aberta, e assim podemos ver o resultado do
programa.
17
Programação I
i i+1 valor
0 1 10
0 1 2 3 4
10 15
1 2
0 1 2 3 4
2 3 10 15 9
0 1 2 3 4
10 15 9 6
3 4
0 1 2 3 4
4 5 10 15 9 6 12
0 1 2 3 4
18
Programação I
1 main()
2 { int valor[5];
3 int q, continuar;
4 q=0;
6 do
8 scanf(“%d”,&valor[q]);
9 q++;
11 scanf(“%d”, &continuar);
13 }
» Linha 5: printf para que o usuário saiba que será feito o cadastro
19
Programação I
20
Programação I
q q+1 valor
12
0 1
0 1 2 3 4
12 15
1 2
0 1 2 3 4
2 3 12 15 18
0 1 2 3 4
21
Programação I
1 main()
2 { int valor[5];
3 int q, continuar, i;
4 q=0;
6 do
8 scanf(“%d”,&valor[q]);
9 q++;
11 scanf(“%d”, &continuar);
15 printf(“ %d “,valor[i]);
16 getche();
17 }
22
Programação I
23
Programação I
1 main()
2 { int mat[10];
3 float nota[10];
4 int q, i, continuar;
6 soma = 0;
7 q=0;
8 do
9 { system(“cls”);
24
Programação I
12 printf(“\nMatricula: “);
13 scanf(“%d”,&mat[q]);
14 printf(“\nNota: “);
15 scanf(“%f”,¬a[q]);
17 q++;
18 printf(“\n\nCadastrar outro(1-sim/2-nao)?
“);
19 scanf(“%d”, &continuar);
21 media = soma/q;
22 system(“cls”);
27 { if (nota[i]>media)
28 printf(“%d \n”,mat[i]);
29 }
31 getche();
32 }
25
Programação I
26
Programação I
Figura 1.13: Tela de Execução do Programa Completo 1.4 – Apresentação dos Resultados
27
Programação I
Sintaxe
//corpo da função
Onde:
28
Programação I
Sintaxe
nome_da_função(nome_do_vetor);
Onde:
Exemplo 1.6:
declaração e chamada de uma função que tem um vetor como parâmetro
2 {
3 //corpo da função
4 }
6 main()
8 float n;
9 ...
11 ...
12 }
29
Programação I
A 1 4 7 2 9
0 1 2 3 4
B 3 5 11 4 8
0 1 2 3 4
Soma 4 9 18 6 17
0 1 2 3 4
V 1 4 7 2 9
0 1 2 3 4
30
Programação I
A 1 4 7 2 12
0 1 2 3 4
B 3 5 11 4 15
0 1 2 3 4
Resultante 1 3 4 5 7 11 2 4 12 15
0 1 2 3 4 5 6 7 8 9
V 14 13 7 22 9
0 1 2 3 4
V 14 13 7 22 9
0 1 2 3 4
31
Programação I
V 9 22 7 13 14
0 1 2 3 4
A 1 4 7 2 12
0 1 2 3 4
B 3 4 2 14 25
0 1 2 3 4
interseccao 4 2
0 1 2 3 4
A 1 4 7 2 12
0 1 2 3 4
B 3 4 2 14 25
0 1 2 3 4
Diferenca 1 7 12
0 1 2 3 4
32
Programação I
A 1 4 7 2 12
0 1 2 3 4
B 3 4 2 14 25
0 1 2 3 4
União 1 4 7 2 12 3 14 25
0 1 2 3 4 5 6 7 8 9
V 1 4 7 1 2 1 4 25 3 7
0 1 2 3 4 5 6 7 8 9
Conheça Mais
33
Programação I
Vamos Revisar?
34
Programação I
Capítulo 2 – Armazenamento de
Dados em Registros
35
Programação I
Boletim de Notas
Matricula...: 12345
Nome........: Michel
Disciplina..: Matemática
Média........: 10.0
Situação....: Aprovado
36
Programação I
Sintaxe
} nome_do_tipo;
Onde:
Sintaxe
nome_do_tipo nome_do_registro;
Onde:
37
Programação I
3 float media;
4 } Tipo_Aluno;
5 Tipo_Aluno aluno;
38
Programação I
matricula
nome
disciplina
situacao
media
aluno
Sintaxe
nome_do_registro.campo
Onde:
39
Programação I
1 aluno.matricula = 12345;
2 scanf(“%f”, &aluno.media);
3 gets(aluno.nome);
40
Programação I
3 float media;
4 }Tipo_Aluno;
5 Tipo_Aluno alunos[50];
0 1 ... 48 49
41
Programação I
Sintaxe
nome_do_vetor[indice].campo
Onde:
1 alunos[2].media = 7.5;
2 alunos[3].matricula = 12345;
3 gets(alunos[0].nome);
4 scanf(“%d”,&alunos[2].matricula);
42
Programação I
Colégio Legal
Cadastro de Aluno
Matricula..:
Nome.......:
Serie(1-4):
Irmao na escola (1-sim/0-nao):
43
Programação I
Colégio Legal
Relatório Geral
xx xxxxx x x xx.xx
xx xxxxx x x xx.xx
xx xxxxx x x xx.xx
xx xxxxx x x xx.xx
xx xxxxx x x xx.xx
44
Programação I
1 #include <stdio.h>
2 main()
4 char nome[20];
5 float mens;
6 } Tipo_Aluno;
7 Tipo_Aluno alunos[20];
9 qa =0;
10 do
11 { system(“cls”);
12 printf(“Colegio Legal\n”);
13 printf(“\n\nCadastro de Alunos\n\n”);
14 printf(“\nMatricula.: “);
15 scanf(“%d”,&alunos[qa].mat);
16 printf(“\nNome......: “);
17 fflush(stdin);
18 gets(alunos[qa].nome);
19 printf(“\nSerie(1-4): “);
20 scanf(“%d”,&alunos[qa].serie);
21 printf(“\nIrmao na escola(1-sim/0-nao):
“);
22 scanf(“%d”,&alunos[qa].irmao);
23 switch(alunos[qa].serie)
24 { case 1: alunos[qa].mens = 110; break;
28 }
45
Programação I
29 if (alunos[qa].irmao == 1)
30 alunos[qa].mens = alunos[qa].mens*0.8;
31 qa++;
33 scanf(“%d”,&resp);
35 system(“cls”);
36 printf(“Colegio Legal\n”);
37 printf(“\n\nRelatorio Geral\n”);
38 printf(“\n________________________________”);
40 printf(“\n________________________________”);
43 printf(“\n_______________________________”);
45 getche();
46 }
46
Programação I
47
Programação I
48
Programação I
» Linha 38: printf para passar uma linha na tela. Esta linha vai
delimitar o cabeçalho da tabela.
49
Programação I
50
Programação I
» Linha 40: printf para passar uma linha na tela. Esta linha vai
delimitar o cabeçalho da tabela.
» Linha 41: for para visitar cada uma das posições do vetor e
apresentar os dados dos alunos. A variável de controle do for,
o i, vai variar de 0 até a ultima posição ocupada do vetor. A
variável que tem esta informação é o qa.
» Linha 42: este printf é que vai fazer a montagem das linhas
da tabela, apresentado os dados dos alunos que estão
armazenados no vetor de registro. Este printf também tem
macetes, pois está relacionado com o printf da linha 39. Vamos
lá! Lembram que fizemos a contagem para saber a largura
de cada coluna da tabela? Vamos precisar desta informação
agora.
51
Programação I
linha 42.
» Linha 43: printf para passar uma linha na tela. Esta linha vai
fechar a tabela.
» Linha 44: printf que informa que o usuário deve teclar enter
para sair.
52
Programação I
53
Programação I
1 R$ 170 R$ 50
2 R$ 350 R$ 60
3 R$ 370 R$ 75
Total da Viagem:
dias*diáriahotel + dias*diariacarro(se o cliente for alugar carro)
Cadastro de Cliente
Codigo:
Nome:
Roteiro (1-Brasil, 2-EUA, 3-África):
Tipo de Quarto (1- Standard, 2-Luxo):
Alugar Carro (1-sim/0-nao)?
Quantidade de Dias:
Relatório Geral
xx xxxxx x x x xx xx.xx
xx xxxxx x x x xx xx.xx
xx xxxxx x x x xx xx.xx
54
Programação I
1 R$ 2500
2 R$ 1700
Empresa Legal
Cadastro de Funcionario
Matricula:
Nome:
Cargo(1-Analista de Sistemas, 2- programador):
Sexo(1-mas/2-fem):
Anos de experiência:
Quantidade de filhos:
55
Programação I
Empresa Legal
Listagem Geral
xx xxxxx x x xx x xxx.xx
xx xxxxx x x xx x xxx.xx
xx xxxxx x x xx x xxx.xx
xx xxxxx x x xx x xxx.xx
Dia 1.30
Noite 1.60
Fixo 1.25
Empresarial 1.10
56
Programação I
Ligue Mais
Cadastro de Cliente
Código:
Nome:
Sexo(1-fem/2-mas):
Quantidade de Ligações:
Plano(1-Dia/2-Noite/3-Fixo/4-Empresarial):
Ligue Mais
Listagem Geral
xx xxxxx x xx x xxx.xx
xx xxxxx x xx x xxx.xx
xx xxxxx x xx x xxx.xx
xx xxxxx x xx x xxx.xx
Universidade Legal
Cadastro de aluno
Matricula:
Nome:
Nota 1:
Nota 2:
Nota 3:
Cadastraroutro (1-sim/0-nao)?
57
Programação I
Universidade Legal
Relatório Geral
Ex: um polo com 150 alunos, com 15 tutores, que tem laboratório
de informática, mas não tem laboratório de ciências: Verba = 100 x
150 + 500 x 15 + 17000 = 15000 + 7500 + 17000 = 39500.
58
Programação I
Ministério da Educação
Cadastro de Polo
Codigo:
Cidade:
Quantidade de alunos:
Quantidade de tutores:
Tem lab. de informatica (1-sim/0-nao)?
Tem lab. de ciencias (1-sim/0-nao)?
Ministério da Educação
Listagem Geral
Conheça Mais
Vamos Revisar?
59
Programação I
capítulo. Vale a pena dar uma lida para verificar como está o nosso
aprendizado. Observem o resumo a seguir:
60
Programação I
Capítulo 3 – Armazenamento de
Dados em Arquivos
61
Programação I
3.1.2 Ponteiros
62
Programação I
Sintaxe
tipo *nome_do_ponteiro;
Onde:
1 FILE *p aluno;
2 FILE *p produto;
63
Programação I
64
Programação I
Sintaxe
ponteiro_arquivo = fopen(“nome_do_arquivo”,
“modo_de_abertura”);
Onde:
65
Programação I
Modo Significado
4 if (pprofessor == NULL)
66
Programação I
Sintaxe
fclose(ponteiro_arquivo);
Onde:
1 fclose(palunos);
2 fclose(pprofessores);
67
Programação I
Sintaxe
ponteiro_arquivo);
Onde:
68
Programação I
3 } TAluno
5 TAluno aluno;
6 FILE *paluno;
69
Programação I
Agora que já sabemos como fazer para ler um registro que está
armazenado no arquivo, vamos aprender a gravar um registro no
arquivo.
70
Programação I
Sintaxe
ponteiro_arquivo);
Onde:
71
Programação I
3 } TAluno
5 TAluno aluno;
6 FILE *paluno;
Sintaxe
fseek(ponteiro_arquivo,numero_de_bytes, origem);
72
Programação I
Onde:
Origem Significado
1 fseek(paluno, 0,SEEK_END);
73
Programação I
Figura 3.6: Posição do leitor após a execução dos fseek do exemplo 3.6
Sintaxe
rewind(ponteiro_arquivo);
Onde:
1 rewind(paluno);
74
Programação I
Sintaxe
int feof(ponteiro_arquivo);
Onde:
1 while (feof(paluno)==0)
Sintaxe
remove(“nome_do_arquivo”);
Onde:
75
Programação I
1 remove(“alunos.bin”);
Sintaxe
rename(“nome_do_arquivo”, “novo_nome_do_arquivo”);
Onde:
1 rename(“alunos.bin”, “alunos_temp.bin”);
76
Programação I
1 #include <stdio.h>
4 char nome[20];
5 float med;
6 } TAluno;
8 FILE *paluno;
10
11 void linha()
12 { int i;
14 printf(“_”);
15 }
16
77
Programação I
17 void cabec()
18 { system(“cls”);
20 linha();
21 }
22
23 void abre_arquivo()
25 if (paluno == NULL)
27 }
78
Programação I
79
Programação I
28 void inserir()
29 { int resp;
30 do { cabec();
32 printf(“\nMatricula: “);
33 scanf(“%d”, &aluno_aux.mat);
34 printf(“\nNome.....: “);
35 fflush(stdin);
36 gets(aluno_aux.nome);
37 printf(“\nMedia....: “);
38 scanf(“%f”, &aluno_aux.med);
39 fseek(paluno, 0, SEEK_END);
40 fwrite(&aluno_aux, sizeof(TAluno), 1,
paluno);
43 scanf(“%d”, &resp);
45 }
80
Programação I
novo cadastro.
» Linha 31: printf que informa o que esta tela faz – cadastro de
alunos.
» Linha 41: printf para informar que o aluno foi cadastrado com
sucesso.
81
Programação I
47 { int p;
48 p = 0;
49 rewind(paluno);
51 while (feof(paluno)==0)
52 { if (aluno_aux.mat == matp)
53 return p;
54 else
55 { fread(&aluno_aux, sizeof(TAluno), 1,
paluno);
56 p++;
82
Programação I
57 }
58 }
59 return -1;
60 }
61
65 printf(“\n\n”);
66 linha();
68 linha();
70 aluno_aux.nome, aluno_aux.med);
71 linha();
72 }
83
Programação I
84
Programação I
73 void consultar()
75 do{ cabec();
76 printf(“\n\nConsultar Aluno\n\n\n”);
78 scanf(“%d”, &matcon);
79 posicao = procura(matcon);
80 if (posicao == -1)
82 else
83 mostre(posicao);
85 scanf(“%d”, &resp);
87 }
» Linha 76: printf que informa o que esta tela faz – consultar
aluno.
85
Programação I
86
Programação I
88 void remover()
90 aluno_nulo.mat = 0;
91 aluno_nulo.med = 0;
92 do{ cabec();
93 printf(“\n\nRemover aluno\n\n\n”);
94 printf(“Matricula: “);
95 scanf(“%d”, &matrem);
96 posicao = procura(matrem);
97 if (posicao == -1)
99 else
100 { mostre(posicao);
103 if (conf == 1)
104 { f s e e k ( p a l u n o , p o s i c a o * s i z e o f
(TAluno),SEEK_SET);
105 f w r i t e ( & a l u n o _ n u l o ,
sizeof(TAluno), 1, paluno);
107 }
87
Programação I
108 else
110 }
114 }
» Linha 93: printf que informa o que esta tela faz – remover
aluno.
88
Programação I
89
Programação I
117 do { cabec();
124 else
125 { mostre(posicao);
128 if (conf == 1)
132 fseek(paluno,posicao*sizeof(TAluno),
SEEK_SET);
133 fwrite(&aluno_aux,sizeof(TAluno), 1,
paluno);
134 mostre(posicao);
136 }
137 else
90
Programação I
139 }
143 }
» Linha 118: printf que informa o que esta tela faz – alterar média
do aluno.
91
Programação I
92
Programação I
145 { cabec();
147 linha();
149 linha();
150 rewind(paluno);
153 { if (aluno_aux.mat != 0)
157 }
158 linha();
160 getche();
161 }
» Linha 146: printf que informa o que esta tela faz – listagem
geral.
93
Programação I
94
Programação I
162 main()
164 abre_arquivo();
173 linha();
176 switch(op)
185 break;
95
Programação I
186 }
188 }
96
Programação I
Tela de Menu
Shopping Center
Opções:
1 .Cadastrar loja
2. Consultar loja
3. Listagem de todas as lojas
0. Sair
Cadastro
Shopping Center
Cadastro de Loja
Código:
Nome:
Área:
Tipo(1-Confecções, 2-Alimentação, 3-Livros, 4- Serviços):
Consulta
Shopping Center
Consultar Loja
97
Programação I
Relatório Geral
Shopping Center
Listagem Geral
1 R$ 50
2 R$ 65
3 R$ 80
4 R$ 95
Tela Principal
Opções:
1- Cadastrar roteiro
2- Consultar roteiro
3- Listagem de todos os roteiros
4- Simular viagem
0- Sair
98
Programação I
Tela de Cadastro
Cadastrar Roteiro
Código:
País(1-Brasil, 2-Espanha, -3-Italia):
Cidade:
Diária de Hotel: R$
Diária Aluguel de Carro: R$
Inserir outro(1-sim,2-não)?
Consultar Roteiro
99
Programação I
Simular Viagem
Código do roteiro:
Quantidade de dias:
Alugar carro(1-sim, 2-não)?
Observações:
Conheça Mais
100
Programação I
Vamos revisar?
Vamos fazer uma revisão do assunto que foi visto neste capítulo,
lendo o resumo a seguir:
101
Programação I
Referências
102
Programação I
Considerações Finais
103
Programação I
Conhecendo a Autora
104