Tipos Estruturados
Paulo Cesar Lopes Email: paulo_cesar_lopes@yahoo.com
• Bibliografia • Tipos Estruturados – Conceitos e Características – Os Registros e os Arquivos • Registros – Conceito e Características – Vantagens e Benefícios. – Um exemplo simples
– Sintaxe e definição (Portugol e C/C++)
– Definição e Manipulação
– Conjunto de Registros
– Registro de Registro
– Exercícios
Bibliografia
• MANZANO, José Augusto N. G.; OLIVEIRA, Jayr Figueiredo. Algoritmos: lógica para desenvolvimento de programação de computadores. 17.ed. São Paulo: Érica, 2005.
• ASCENCIO, Ana Fernanda Gomes; VENERUCHI, Edilene Aparecida.
Fundamentos de programação de computadores: algoritmos, C/C++ e C/C++.
São Paulo: Prentice Hall, 2002.
• FERRARI, Fabricio; CECHINEL, Cristian; Apostila de Introdução a Algoritmos e Estrutura de Dados. Universidade Federal do Pampa. Disponível em
http://www.dcc.ufam.edu.br/david/dmdocuments/Introducao-a-algoritmos.pdf
• FORBELLONE, A. L.. Lógica de Programação 3ª ed. São Paulo: Prentice Hall, 2005.
• Apontamentos das aulas de Introdução a Linguagem C/C++ do Colégio São Gonçalo. Disponível em
http://www.csgnet.org/documentosONLINE/apontamentos/C/C++/C/C++2_p4.pdf Referências
Tipos Estruturados
CONCEITO
As estruturas de dados estruturados possuem as seguintes características:
Os tipos estruturados permitem fazer por meio de uma simples referência a manipulação de um conjunto de informações (um único identificador).
Existem dois tipos estruturados:
1.os homogêneos que são um conjunto de informações de um mesmo tipo, como os vetores em VISUALG, e em C/C++ os arrays unidimensional e
multidimensional;
2.os heterogêneos que são conjuntos de variáveis não necessariamente de um mesmo tipo, tais como: registros(structs) e arquivos (files) no C/C++.
Registros
CONCEITO
São estruturas de dados heterogêneas e evidentemente compostas, que agregam estruturas de dados mais simples e com as seguintes
características:
•É sempre composto por campos
•Contém um número fixo e determinado de campos
•Cada campo funciona como uma variável mais simples e primitiva;
•Os campos formam estruturas chamadas de REGISTROS que podem ser
manipulados sem a especificação individual dos campos para algumas operações, ou quando necessário permite a manipulação de um determinado campo.
•Os registros podem ser agregados em estruturas mais complexas chamadas de
vetores de registros (acessados por meio de listas ou filas) e arquivos.
Registros
CONCEITO
A utilização dos registros:
•Facilita na arquitetura dos dados e na elaboração de algoritmos mais complexos
que serão implementados em uma linguagem que suporte tais estruturas.
•Permite a associação de campos de diferentes tipos mais simples;
•Permite a associação de variáveis que possuam algum tipo de vínculo lógico; •Facilita no armazenamento de dados em diferentes dispositivos de
armazenamento;
•Facilita na implementação de estruturas dinâmicas em memória principal RAM; •Facilita os processos e procedimentos para acessar dados/ informações
complexas.
Registros
As informações de um aluno dentro da Universidade/Faculdade:
•Matrícula •Nome •Pai e Mãe •CPF •CI •Nascimento •Naturalidade •Endereço
•Instituição Ensino Médio •Data de Matrícula
•Desempenho Acadêmico
Registros
Tipo Id do Registro = Registro
Tipo primitivo Fim registro
Id do Campo
1
1 : : ;
Definição: tipo Ficha = registro
nome: string matricula: inteiro nota1: real nota2: real fimregistro Sintaxe e Definição
Registros Definição e Manipulação Definição e Manipulação
Var i, j : inteiro
aluno : ficha
Em algum momento podemos precisar de todas as informações contidas em um registro, e outras apenas a informação contida em apenas um campo do registro. Manipulação Genérica todo o registro: leia(aluno) escreva(aluno) Manipulação Específica apenas um campo: leia(aluno.nota1) escreva(aluno.nota1)
Registros Definição e Manipulação Definição e Manipulação
Os registros também podem conter tipos compostos homogêneos e heterogêneos.
Definição: tipo Ficha = registro
nome: string matricula: inteiro
notas: vetor[1..2] de real fimregistro
Registros Definição e Manipulação Definição e Manipulação
Var i, j : inteiro
aluno : ficha
Manipulação Específica
Estrutura condicional considerando apenas um campo:
se aluno.nota[1] >= 6 então
escreva(“Nota acima da média”) fimse
Manipulação Específica
Estrutura Vetorial Bidimensional:
se aluno.pagamento[1,11] = verdadeiro então
escreva(“Pagamento da 11º. Mensalidade OK”) fimse
#include <stdio.h> #include <stdlib.h> #include <string.h> main() {
struct ALUNOS { // Definição de um registro. char NOME[30];
int MATRI;
char ENDER[50]; }; // FIM REGISTRO
// Inicializando todos os campos do registro.
struct ALUNOS Aluno = {"PC",1000,"R. MILIONARIOS, 200 apt 301"};
REGISTROS EM C
printf("Nome do aluno: %s \n",Aluno.NOME); // Apresentando o registro printf("Matricula: %d \n",Aluno.MATRI);
printf("Endereço: %s \n",Aluno.ENDER);
strcpy(Aluno.NOME, "Paulo Cesar"); // Substituindo cada campo campo Aluno.MATRI = 2000;
strcpy(Aluno.ENDER, "R. BILIONARIOS, 2000000 "); printf("Nome do aluno: %s \n",Aluno.NOME);
printf("Matricula: %d \n",Aluno.MATRI); printf("Endereço: %s \n",Aluno.ENDER); system("pause");
Conjunto de Registros Definição e Manipulação
Definição: tipo Ficha = registro
nome: string matricula: inteiro
notas: vetor[1..2] de real fimregistro
Um vetor de registros.
Var i, j : inteiro
#include <stdio.h> #include <stdlib.h> #include <string.h> main() {
struct ALUNOS { // Registro Alunos char NOME[30];
int MATRI; int N1; int N2;
}; // Fim registro Alunos
struct ALUNOS Aluno[3]; // Vetor de Registro
VETOR de REGISTROS EM C
printf("\n Nome do aluno: \n"); // Preenche o registro
gets(Aluno[1].NOME); // Preenche Nome - Posição 1 do Vetor printf("\n Matricula: \n");
scanf("%d",&Aluno[1].MATRI);
printf("\n Entre com a 1.o NOTA \n"); scanf("%d",&Aluno[1].N1);
printf("\n Entre com a 2.o NOTA \n"); scanf("%d",&Aluno[1].N2);
printf("Nome do aluno: %s \n",Aluno[1].NOME); // Apresenta printf("Matricula: %d \n",Aluno[1].MATRI); // posição 1
printf("NOTA1: %d \n",Aluno[1].N1); // do vetor.
printf("NOTA2: %d \n",Aluno[1].N2); // Primeiro registro system("pause");
Registros de Registros Definição e Manipulação
Ex: Escreva(´Estado: ´, cadastro.ende.rua);
Os registros também podem conter registros.
Definição: tipo ENDER = registro
Rua:string Num:inteiro fimregistro
tipo Ficha = registro
nome: string matricula: inteiro
notas: vetor[1..2] de real Ende : ENDER
fimregistro
Var i, j : inteiro
#include <stdio.h> #include <stdlib.h> #include <string.h> main() { struct ALUNOS { char NOME[30]; int MATRI; struct NOTAS { int N1; int N2; } N; };
struct ALUNOS Aluno[3];
REGISTROS de REGISTROS EM C
printf("\n Nome do aluno: \n"); // Preenche o registro
gets(Aluno[1].NOME); // Preenche Nome - Posição 1 do Vetor printf("\n Matricula: \n");
scanf("%d",&Aluno[1].MATRI);
printf("\n Entre com a 1.o NOTA \n"); scanf("%d",&Aluno[1].N.N1);
printf("\n Entre com a 2.o NOTA \n"); scanf("%d",&Aluno[1].N.N2);
printf("Nome do aluno: %s \n",Aluno[1].NOME); // Apresenta printf("Matricula: %d \n",Aluno[1].MATRI); // posição 1
printf("NOTA1: %d \n",Aluno[1].N.N1); // do vetor.
printf("NOTA2: %d \n",Aluno[1].N.N2); // Primeiro registro system("pause");
#include <stdio.h> #include <stdlib.h> #include <string.h> main() { struct ALUNOS { char NOME[30]; int MATRI; struct NOTAS { int N1; int N2; } N; };
struct ALUNOS Aluno[3];
TRABALHO PRÁTICO
printf("\n Nome do aluno: \n"); // Preenche o registro
gets(Aluno[1].NOME); // Preenche Nome - Posição 1 do Vetor printf("\n Matricula: \n");
scanf("%d",&Aluno[1].MATRI);
printf("\n Entre com a 1.o NOTA \n"); scanf("%d",&Aluno[1].N.N1);
printf("\n Entre com a 2.o NOTA \n"); scanf("%d",&Aluno[1].N.N2);
printf("Nome do aluno: %s \n",Aluno[1].NOME); // Apresenta printf("Matricula: %d \n",Aluno[1].MATRI); // posição 1
printf("NOTA1: %d \n",Aluno[1].N.N1); // do vetor.
printf("NOTA2: %d \n",Aluno[1].N.N2); // Primeiro registro system("pause");
Dúvidas e Comentários