Estrutura de Dados Tema 1: Introdução às Estruturas de Dados.
Informações
A Ciência da Computação trata das estratégias para organizar, manipular e utilizar informações. As informações são
gravadas na memória, usando a unidade básica chamada bit (binary digit)
Informações
Um bit é a menor porção de informação, assumindo dois possíveis valores: 0 ou 1. Os bits são utilizados
para representar na memória qualquer tipo de informação: inteiros, reais, negativos, caracteres, etc.
Representação interna das informações
Para inteiros não negativos: Sistema de numeração binária.
Exemplo: O número 18 da base decimal para a
binária é 000010010 18 | 2___ 0 9 | 2___ 1 4 | 2___ 0 2 | 2___ 0 1 | 2___ 1 0
Representação interna das informações
Para inteiros em geral (não negativos e negativos):
• notação de complemento de 1; • notação de
complemento de 2.
Representação interna das informações
Notação de complemento de 1: após a conversão do valor (sem sinal) para binário, determina-se o complemento de cada dígito para 1.
Ex: Conversão do número -18 (base decimal): 000010010
Representação interna das informações
Notação de complemento de 2: após a aplicação do método complemento de 1, soma-se 1 ao número resultante.
Ex: Conversão do número -18 (base decimal): 11101101
+ 1 11101110
Representação interna das informações
Para números reais: Notação de ponto flutuante. O número é decomposto em mantissa, base e expoente.
Ex: número 8,91 é: 891 / 100 = 891 * 10-2
mantissa base expoente
Representação interna das informações
Usando complemento de 2, temos: Mantissa (891) :0000000010000101 Expoente (-2):11111110
Assim: 8,91 =
Representação interna das informações
Para caracteres: sequência de bits para representar um caractere.
Atribui-se um valor para cada caractere. Exemplo : A tabela ASCII
atribui 65 (decimal) para o caractere A. Logo, sua representação binária é: 01000001
Representação interna das informações
A representação de uma cadeia de caracteres (String) é a sequencia da cadeia binária de cada caractere.
Exemplo: a codificação da cadeia ABC é: A = 01000001 B =01000010 C =01000011 Logo, ABC = 010000010100001001000011 Continuando Tema 1: Introdução às Estruturas de Dados.
Interpretação dos bits
Um conjunto de bits pode representar diferentes tipos de informação (inteiro não negativo, caractere, real, string, etc).
Para interpretar o significado de um conjunto de bits são utilizados os tipos de dados.
Tipos de dados
Os computadores possuem implementados alguns tipos de dados “nativos” para garantir a realização de ações básicas de armazenamento e processamento. Eles:
• definem quantidade necessária de bytes; • realizam operações
básicas sobre os dados; • armazenam valores na
memória.
Tipos de dados
• Representam método de interpretação do
conteúdo armazenado na memória do
computador. • São dependentes das
funções incorporadas no
hardware.
• Só são úteis se
fornecerem recursos para atender necessidades do usuário.
Tipos de Dados Abstratos - TDA Permite a definição de um número ilimitado de tipos dados. Pode ser implementado via hardware ou software.
Um TDA define as características de um dados, bem como as operações que poderão ser realizadas sobre os dados.
Exemplo de Tipo de Dados Abstratos TDA: Nota
Características:
valor máximo 10, valor mínimo 0, uma casa decimal.
Operações:
Gravar, mostrar, alterar, excluir, arredondar, e truncar.
Estruturas de Dados
Recursos de software que permitem a
implementação de Tipos de dados
abstratos. Em C, temos: •Vetores (uni e multidimensionais); •Estruturas (struct); •Uniões (union).
Vetores em C int x[10]; float y[3][5];
Permitem acessar uma posição diretamente para obter ou alterar o seu conteúdo (desde que se tenha os índices da posição desejada).
Estruturas de dados estáticas.
Estruturas em C (struct)
Conjunto de características que descrevem um mesmo elemento.
Uma struct define um novo tipo de dados, utilizando tipos nativos da linguagem ou outras structs.
Estruturas em C (struct)
Exemplo: struct que represente um tipo produto. struct produto { int codigo; char descricao[40]; float qtdade; float pvenda; float pcompra; };
União em C (union)
Permite definir dentro de uma struct diferentes elementos. Exemplo: struct livro { char autor[50]; char editora[40]; int anoPublicacao; int tipo; union { struct { int serie; char disciplina[20]; } didatico; struct { char estilo[30]; } literatura; } } cadastro;
Agora é sua Vez Tema 1: Introdução às Estruturas de Dados.
Convertendo um número inteiro não negativo
Converter o número 14 (base decimal) para um número binário sem sinal de 8 bits.
0 0 0 0 1 1 1 0
Convertendo um número inteiro negativo (complemento de 1)
Converter o número -14 (base decimal) para um número binário de 8 bits
0 0 0 0 1 1 1 0 1 1 1 1 0 0 0 1
Convertendo um número real em notação de ponto flutuante
Converter o número -2,3 (base decimal) para um número binário de 24 bits. (2,3 = 23 * 10-1) Base = 10
Mantissa = 23 Expoente = -1
Mantissa = 23 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 11 1 1 1 1 1 1 1 1 0 1 0 1 0 0 11 1 1 1 1 1 1 1 1 0 1 0 1 0 1 Expoente: -1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 0 1 0 1 0 111 1 1 1 1 1 1
Criar um TDA que represente um Aluno
• Características: nome, endereço, telefone, série
• Operações: Matricular; Transferir;
Emitir documentos;…
Crie uma função que receba um vetor de 30 posições de inteiros, determine e retorne o maior dos seus números. int maiorNumero(int num[]) {
int maior, i; maior = num[0];
for (i=1; i<30; i++) { if (num[i] > maior)
maior = num[i]; }
Criar uma função que receba um vetor de 10 posições de struct produto. Determine e mostre o lucro gerado por cada produto.
... struct produto { int codigo; char descricao[40]; float qtdade; float pvenda; float pcompra; }; ...
void calculaLucro(struct produto prod[]) { int i;
float l;
for (i=0; i<10; i++) {
l = prod[i].pvenda – prod[i].pcompra; printf(“\n\nProduto:%s”, prod[i].descricao); printf (“\nLucro gerado: %f“ + l); } }
Crie uma função que receba uma matriz quadrada (bidimensional), determine e retorne a soma dos elementos da diagonal principal. int somaDiagonal(float mat[][4]) {
float soma = 0, i; for (i=0; i<4; i++) {
soma += mat[i][i]; }
return soma; }
Finalizando
Tema 1: Introdução às Estruturas de Dados
Informações
• Referem-se às necessidades do usuário; • São armazenadas na memória do computador; • São gravadas em
binário, usando diferentes métodos de conversão;
• Precisam ser tratadas e recuperadas sempre que necessário.
Tipos de dados
• Determinam a quantidade de bits necessários para representar uma informação.
• Determinam
procedimentos corretos para tratar e recuperar informações;
• Os computadores possuem vários tipos de dados “nativos”.
Tipos de dados abstratos
• Permitem representar ilimitados tipos de dados;
• Definem as características da informação e as formas de tratá-la e recuperá-la;
• Representam um conceito, independente de
implementação;
• Podem ser implementados através de hardware e de
software.
Tipos de Dados em C • Número real → float y;
• Número real de dupla precisão → double z; • Número inteiro → int w;
• Caractere→ char letra; • Numero inteiro sem
sinal → unsigned int a; ...
Estrutura de Dados
• Permitem a implementação de TDA através de software;
• Determina a utilização de memória (alocação, liberação e acesso);
• Determina o tratamento dado à informação (operações).
Estruturas de Dados em C
• Vetor unidimensional → char nome[30]; • Vetor multidimensional → char [5][30];
int x[4][8][3]; • Estrutura → struct
• União → union
Conclusões
• Tipo de dados é imprescindível para manipulação da informação;
• TDA é uma definição teórica;
• TDA podem ser implementados em hardware ou software;
• Estrutura de dados trata da implementação por
software de diferentes TDAs;
•Estrutura de Dados é o foco desta disciplina.