SlideShare uma empresa Scribd logo
1 de 21
Aula 1
Tipo Abstrato de Dados
David Menotti
Algoritmos e Estruturas de Dados I
DECOM – UFOP
© David Menotti Algoritmos e Estrutura de Dados I
Qual a diferença entre um
algoritmo e um programa?
© David Menotti Algoritmos e Estrutura de Dados I
Algoritmos e Estruturas de Dados
 Algoritmo:
 Sequência de ações executáveis para a solução
de um determinado tipo de problema
 Exemplo: “Receita de Bolo”
 Em geral, algoritmos trabalham sobre
Estruturas de Dados
 Conjunto de dados que representa uma
situação real
 Abstração da realidade
 Estruturas de Dados e Algoritmos estão
intimamente ligados
© David Menotti Algoritmos e Estrutura de Dados I
Representação dos Dados
 Os dados podem estar representados
(estruturados) de diferentes maneiras
 Normalmente, a escolha da representação é
determinada pelas operações que serão
utilizadas sobre eles
 Exemplo: números inteiros
 Representação por palitinhos: II + IIII = IIIIII
 Boa para pequenos números (operação simples)
 Representação decimal: 1278 + 321 = 1599
 Boa para números maiores (operação complexa)
© David Menotti Algoritmos e Estrutura de Dados I
Programas
 Um programa é uma formulação concreta de
um algoritmo abstrato, baseado em
representações de dados específicas
 Os programas são feitos em alguma
linguagem que pode ser entendida e seguida
pelo computador
 Linguagem de máquina
 Linguagem de alto nível (uso de compilador)
 Aqui vamos utilizar a Linguagem C
© David Menotti Algoritmos e Estrutura de Dados I
Linguagem C
 Criada no início da década de 70 para a
programação do sistema operacional Unix
 Uma das linguagens mais utilizadas no
mundo, e serviu como base para outras
como C++, C#, etc.
© David Menotti Algoritmos e Estrutura de Dados I
Exemplo
#include<stdio.h>
#define MAX 10
int LeInteiro() {
int num;
printf(“Digite um numero: ");
scanf("%d", &num);
printf("n");
return num;
}
int main() {
int v[10], cont, aux, i, soma;
float media;
cont = 0;
aux = LeInteiro();
while(aux >= 0) {
v[cont] = aux;
aux = LeInteiro();
cont++;
}
soma = 0;
for(i=0;i<cont;i++)
soma += v[i];
media = soma / (float) cont;
printf("resultado: %fn",media);
}
© David Menotti Algoritmos e Estrutura de Dados I
Tipos Abstratos de Dados (TADs)
 Agrupa a estrutura de dados juntamente com
as operações que podem ser feitas sobre
esses dados
 O TAD encapsula a estrutura de dados. Os
usuários do TAD só tem acesso a algumas
operações disponibilizadas sobre esses dados
 Usuário do TAD x Programador do TAD
 Usuário só “enxerga” a interface, não a
implementação
© David Menotti Algoritmos e Estrutura de Dados I
Tipos Abstratos de Dados (TADs)
 Dessa forma, o usuário pode abstrair da
implementação específica.
 Qualquer modificação nessa implementação
fica restrita ao TAD
 A escolha de uma representação específica é
fortemente influenciada pelas operações a
serem executadas
© David Menotti Algoritmos e Estrutura de Dados I
Exemplo: Lista de números inteiros
 Operações
 Faz Lista Vazia
 Insere número no começo da lista
 Remove de uma posição i
20 13 02 30
Implementação por Vetores:
void Insere(int x, Lista L) {
for(i=0;...) {...}
L[0] = x;
}
20 13 02 30
Implementação por Listas Encadeadas
void Insere(int x, Lista L) {
p = CriaNovaCelula(x);
L^.primeiro = p;
...
}
Programa usuário do TAD:
int main() {
Lista L;
int x;
x = 20;
FazListaVazia(L);
Insere(x,L);
...
}
© David Menotti Algoritmos e Estrutura de Dados I
Implementação de TADs
 Em linguagens orientadas por objeto (C++, Java) a
implementação é feita através de classes
 Em linguagens estruturadas (C, pascal) a
implementação é feita pela definição de tipos
juntamente com a implementação de funções
 Como vocês não viram o conceito de orientação por
objetos*, vamos utilizar os conceitos de C
(Typedef e Structs)
 Orientação por objetos (classes, etc) vai ser vista
em outras disciplinas (POO)
© David Menotti Algoritmos e Estrutura de Dados I
Estruturas (Structs) em C / C++
 Uma estrutura é uma coleção de uma ou mais
variáveis, possivelmente de tipos diferentes,
colocadas juntas sob um único nome para
manipulação conveniente
 Por exemplo, para representar um aluno são
necessárias as informações nome, matrícula, conceito
 Ao invés de criar três variáveis, é possível criar uma
única variável contendo três campos.
 Em C, usa-se a construção struct para representar
esse tipo de dado
© David Menotti Algoritmos e Estrutura de Dados I
Estruturas (Structs) em C / C++
#include<iostream>
#include<string>
using namespace std;
struct Aluno {
string nome;
int matricula;
char conceito;
};
main() {
struct Aluno al, aux;
al.nome = “Pedro”
al.matricula = 200712;
al.conceito = ‘A’;
aux = al;
cout << aux.nome
}
Pedro
200712 A
al:
Pedro
200712 A
aux:
© David Menotti Algoritmos e Estrutura de Dados I
Declaração de Tipos
 Para simplificar, uma estrutura ou mesmo
outros tipos de dados podem ser definidos
como um novo tipo
 Uso da construção typedef
typedef struct {
string nome;
int matricula;
char conceito;
} TipoAluno;
typedef int[10] Vetor;
int main() {
TipoAluno al;
Vetor v;
...
}
© David Menotti Algoritmos e Estrutura de Dados I
TADs em C
 Para implementar um Tipo Abstrato de Dados
em C, usa-se a definição de tipos juntamente
com a implementação de funções que agem
sobre aquele tipo
 Como boa regra de programação, evita-se
acessar o dado diretamente, fazendo o
acesso só através das funções
 Mas, diferentemente de C++ e Java, não há uma
forma de proibir o acesso.
© David Menotti Algoritmos e Estrutura de Dados I
 Uma boa técnica de programação é
implementar os TADs em arquivos separados
do programa principal
 Para isso geralmente separa-se a declaração
e a implementação do TAD em dois arquivos:
 NomeDoTAD.h : com a declaração
 NomeDoTAD.cpp : com a implementação
 O programa ou outros TADs que utilizam o seu
TAD devem dar um #include no arquivo .h
TADs em C
© David Menotti Algoritmos e Estrutura de Dados I
Exemplo
 Implemente um TAD ContaBancaria, com os
campos número e saldo onde os clientes
podem fazer as seguintes operações:
 Iniciar uma conta com um número e saldo inicial
 Depositar um valor
 Sacar um valor
 Imprimir o saldo
 Faça um pequeno programa para testar o
seu TAD
© David Menotti Algoritmos e Estrutura de Dados I
ContaBancaria.h
// definição do tipo
typedef struct {
int numero;
double saldo;
} ContaBancaria;
// cabeçalho das funções
void Inicializa (ContaBancaria&, int, double);
void Deposito (ContaBancaria&, double);
void Saque (ContaBancaria&, double);
void Imprime (ContaBancaria);
// obs: A passagem por referencia (&) só existe em
// c++. Em breve vamos ver como fazer em c
© David Menotti Algoritmos e Estrutura de Dados I
ContaBancaria.cpp
#include<stdio.h>
#include"Contabancaria.h"
void Inicializa(ContaBancaria &conta, int numero, double saldo)
{
conta.numero = numero;
conta.saldo = saldo;
}
void Deposito (ContaBancaria &conta, double valor) {
conta.saldo += valor;
}
void Saque (ContaBancaria &conta, double valor) {
conta.saldo -= valor;
}
void Imprime (ContaBancaria conta) {
printf("Numero: %dn", conta.numero);
printf("Saldo: %fn", conta.saldo);
}
© David Menotti Algoritmos e Estrutura de Dados I
Main.cpp
#include<stdio.h>
#include<stdlib.h>
#include "ContaBancaria.h"
int main (void)
{
ContaBancaria conta1;
Inicializa(conta1, 918556, 300.00);
printf("nAntes da movimentacao:n ");
Imprime(conta1);
Deposito(conta1, 50.00);
Saque(conta1, 70.00);
printf("nDepois da movimentacao:n ");
Imprime (conta1);
system("PAUSE");
return(0);
}
© David Menotti Algoritmos e Estrutura de Dados I
Exercício
 Implemente um TAD Número Complexo
 cada número possui os campos real e imaginário
 Implemente as operações:
 Atribui: atribui valores para os campos
 Imprime: imprime o número da forma “R + Ci”
 Copia: Copia o valor de um número para outro
 Soma: Soma dois números complexos
 EhReal: testa se um número é real
 Faça um pequeno programa para testar o
seu TAD

Mais conteúdo relacionado

Semelhante a TAD Número Complexo com operações básicas

Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Leinylson Fontinele
 
Estrutura de Dados - Aula de revisão de c na prática
Estrutura de Dados - Aula de revisão de c na práticaEstrutura de Dados - Aula de revisão de c na prática
Estrutura de Dados - Aula de revisão de c na práticaLeinylson Fontinele
 
Como funciona um banco de dados? (Worldwide Online TechDay 2010)
Como funciona um banco de dados? (Worldwide Online TechDay 2010)Como funciona um banco de dados? (Worldwide Online TechDay 2010)
Como funciona um banco de dados? (Worldwide Online TechDay 2010)Fabrício Catae
 
Conceitos Básicos Sobre Analise de Sistemas
Conceitos Básicos Sobre Analise de SistemasConceitos Básicos Sobre Analise de Sistemas
Conceitos Básicos Sobre Analise de SistemasClayton de Almeida Souza
 
Estrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesEstrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesLeinylson Fontinele
 
Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02thomasdacosta
 
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptxAula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptxaronoliveira3
 
Prova algoritmos
Prova algoritmosProva algoritmos
Prova algoritmospronatecvja
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem Capolllorj
 
6_TI2007-Desenv_SI_e_DFD_v2.5.pdf
6_TI2007-Desenv_SI_e_DFD_v2.5.pdf6_TI2007-Desenv_SI_e_DFD_v2.5.pdf
6_TI2007-Desenv_SI_e_DFD_v2.5.pdfFChico2
 
Apostila Access 2000.pdf
Apostila Access 2000.pdfApostila Access 2000.pdf
Apostila Access 2000.pdfssuser382e50
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologiaselliando dias
 

Semelhante a TAD Número Complexo com operações básicas (20)

Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
 
Estrutura de Dados - Aula de revisão de c na prática
Estrutura de Dados - Aula de revisão de c na práticaEstrutura de Dados - Aula de revisão de c na prática
Estrutura de Dados - Aula de revisão de c na prática
 
Módulo 10 auditoria de fórmulas em excel
Módulo 10   auditoria de fórmulas em excelMódulo 10   auditoria de fórmulas em excel
Módulo 10 auditoria de fórmulas em excel
 
Aula1
Aula1Aula1
Aula1
 
Como funciona um banco de dados? (Worldwide Online TechDay 2010)
Como funciona um banco de dados? (Worldwide Online TechDay 2010)Como funciona um banco de dados? (Worldwide Online TechDay 2010)
Como funciona um banco de dados? (Worldwide Online TechDay 2010)
 
Conceitos Básicos Sobre Analise de Sistemas
Conceitos Básicos Sobre Analise de SistemasConceitos Básicos Sobre Analise de Sistemas
Conceitos Básicos Sobre Analise de Sistemas
 
Estrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesEstrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e Funções
 
Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02
 
3 vetor.matriz
3 vetor.matriz3 vetor.matriz
3 vetor.matriz
 
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptxAula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
Aula02_Vars_Ident_Ent_Saida_Algoritmos.pptx
 
Desvendando os mistérios do Data Science
Desvendando os mistérios do Data ScienceDesvendando os mistérios do Data Science
Desvendando os mistérios do Data Science
 
Prova algoritmos
Prova algoritmosProva algoritmos
Prova algoritmos
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
6_TI2007-Desenv_SI_e_DFD_v2.5.pdf
6_TI2007-Desenv_SI_e_DFD_v2.5.pdf6_TI2007-Desenv_SI_e_DFD_v2.5.pdf
6_TI2007-Desenv_SI_e_DFD_v2.5.pdf
 
Apostila Access 2000.pdf
Apostila Access 2000.pdfApostila Access 2000.pdf
Apostila Access 2000.pdf
 
Access
AccessAccess
Access
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologias
 
Introdução à Estrutura de Dados
Introdução à Estrutura de DadosIntrodução à Estrutura de Dados
Introdução à Estrutura de Dados
 
FC-Logic
FC-LogicFC-Logic
FC-Logic
 
Cap07
Cap07Cap07
Cap07
 

Mais de TopsAvakinImvu

Acertando_umos_FUNCEFfinancaspessoais.ppt
Acertando_umos_FUNCEFfinancaspessoais.pptAcertando_umos_FUNCEFfinancaspessoais.ppt
Acertando_umos_FUNCEFfinancaspessoais.pptTopsAvakinImvu
 
amanhaeletrizaçaoporatritocontatoinduçao.pdf
amanhaeletrizaçaoporatritocontatoinduçao.pdfamanhaeletrizaçaoporatritocontatoinduçao.pdf
amanhaeletrizaçaoporatritocontatoinduçao.pdfTopsAvakinImvu
 
Escalas termométricas...CELSIUS,FAHRENHEIT E KELVIN
Escalas termométricas...CELSIUS,FAHRENHEIT E KELVINEscalas termométricas...CELSIUS,FAHRENHEIT E KELVIN
Escalas termométricas...CELSIUS,FAHRENHEIT E KELVINTopsAvakinImvu
 
Sistemas Lineares.pptx
Sistemas Lineares.pptxSistemas Lineares.pptx
Sistemas Lineares.pptxTopsAvakinImvu
 
Relações métricas no triângulo retângulo.pptx
Relações métricas no triângulo retângulo.pptxRelações métricas no triângulo retângulo.pptx
Relações métricas no triângulo retângulo.pptxTopsAvakinImvu
 
nascimento-vida-e-morte-de-estrelas.ppt
nascimento-vida-e-morte-de-estrelas.pptnascimento-vida-e-morte-de-estrelas.ppt
nascimento-vida-e-morte-de-estrelas.pptTopsAvakinImvu
 
fluxogramas-no-dia-a-dia4970.pptx
fluxogramas-no-dia-a-dia4970.pptxfluxogramas-no-dia-a-dia4970.pptx
fluxogramas-no-dia-a-dia4970.pptxTopsAvakinImvu
 
Implementacao de Algoritmos.ppt
 Implementacao de Algoritmos.ppt Implementacao de Algoritmos.ppt
Implementacao de Algoritmos.pptTopsAvakinImvu
 
Logica Matematica1.pdf
 Logica Matematica1.pdf Logica Matematica1.pdf
Logica Matematica1.pdfTopsAvakinImvu
 
retas paralelas transversais
retas paralelas transversaisretas paralelas transversais
retas paralelas transversaisTopsAvakinImvu
 

Mais de TopsAvakinImvu (13)

Acertando_umos_FUNCEFfinancaspessoais.ppt
Acertando_umos_FUNCEFfinancaspessoais.pptAcertando_umos_FUNCEFfinancaspessoais.ppt
Acertando_umos_FUNCEFfinancaspessoais.ppt
 
amanhaeletrizaçaoporatritocontatoinduçao.pdf
amanhaeletrizaçaoporatritocontatoinduçao.pdfamanhaeletrizaçaoporatritocontatoinduçao.pdf
amanhaeletrizaçaoporatritocontatoinduçao.pdf
 
Escalas termométricas...CELSIUS,FAHRENHEIT E KELVIN
Escalas termométricas...CELSIUS,FAHRENHEIT E KELVINEscalas termométricas...CELSIUS,FAHRENHEIT E KELVIN
Escalas termométricas...CELSIUS,FAHRENHEIT E KELVIN
 
Sistemas Lineares.pptx
Sistemas Lineares.pptxSistemas Lineares.pptx
Sistemas Lineares.pptx
 
Relações métricas no triângulo retângulo.pptx
Relações métricas no triângulo retângulo.pptxRelações métricas no triângulo retângulo.pptx
Relações métricas no triângulo retângulo.pptx
 
nascimento-vida-e-morte-de-estrelas.ppt
nascimento-vida-e-morte-de-estrelas.pptnascimento-vida-e-morte-de-estrelas.ppt
nascimento-vida-e-morte-de-estrelas.ppt
 
PROBABILIDADE.pptx
PROBABILIDADE.pptxPROBABILIDADE.pptx
PROBABILIDADE.pptx
 
fluxogramas-no-dia-a-dia4970.pptx
fluxogramas-no-dia-a-dia4970.pptxfluxogramas-no-dia-a-dia4970.pptx
fluxogramas-no-dia-a-dia4970.pptx
 
publicidade
publicidadepublicidade
publicidade
 
CINEMÁTICA.pptx
CINEMÁTICA.pptxCINEMÁTICA.pptx
CINEMÁTICA.pptx
 
Implementacao de Algoritmos.ppt
 Implementacao de Algoritmos.ppt Implementacao de Algoritmos.ppt
Implementacao de Algoritmos.ppt
 
Logica Matematica1.pdf
 Logica Matematica1.pdf Logica Matematica1.pdf
Logica Matematica1.pdf
 
retas paralelas transversais
retas paralelas transversaisretas paralelas transversais
retas paralelas transversais
 

TAD Número Complexo com operações básicas

  • 1. Aula 1 Tipo Abstrato de Dados David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
  • 2. © David Menotti Algoritmos e Estrutura de Dados I Qual a diferença entre um algoritmo e um programa?
  • 3. © David Menotti Algoritmos e Estrutura de Dados I Algoritmos e Estruturas de Dados  Algoritmo:  Sequência de ações executáveis para a solução de um determinado tipo de problema  Exemplo: “Receita de Bolo”  Em geral, algoritmos trabalham sobre Estruturas de Dados  Conjunto de dados que representa uma situação real  Abstração da realidade  Estruturas de Dados e Algoritmos estão intimamente ligados
  • 4. © David Menotti Algoritmos e Estrutura de Dados I Representação dos Dados  Os dados podem estar representados (estruturados) de diferentes maneiras  Normalmente, a escolha da representação é determinada pelas operações que serão utilizadas sobre eles  Exemplo: números inteiros  Representação por palitinhos: II + IIII = IIIIII  Boa para pequenos números (operação simples)  Representação decimal: 1278 + 321 = 1599  Boa para números maiores (operação complexa)
  • 5. © David Menotti Algoritmos e Estrutura de Dados I Programas  Um programa é uma formulação concreta de um algoritmo abstrato, baseado em representações de dados específicas  Os programas são feitos em alguma linguagem que pode ser entendida e seguida pelo computador  Linguagem de máquina  Linguagem de alto nível (uso de compilador)  Aqui vamos utilizar a Linguagem C
  • 6. © David Menotti Algoritmos e Estrutura de Dados I Linguagem C  Criada no início da década de 70 para a programação do sistema operacional Unix  Uma das linguagens mais utilizadas no mundo, e serviu como base para outras como C++, C#, etc.
  • 7. © David Menotti Algoritmos e Estrutura de Dados I Exemplo #include<stdio.h> #define MAX 10 int LeInteiro() { int num; printf(“Digite um numero: "); scanf("%d", &num); printf("n"); return num; } int main() { int v[10], cont, aux, i, soma; float media; cont = 0; aux = LeInteiro(); while(aux >= 0) { v[cont] = aux; aux = LeInteiro(); cont++; } soma = 0; for(i=0;i<cont;i++) soma += v[i]; media = soma / (float) cont; printf("resultado: %fn",media); }
  • 8. © David Menotti Algoritmos e Estrutura de Dados I Tipos Abstratos de Dados (TADs)  Agrupa a estrutura de dados juntamente com as operações que podem ser feitas sobre esses dados  O TAD encapsula a estrutura de dados. Os usuários do TAD só tem acesso a algumas operações disponibilizadas sobre esses dados  Usuário do TAD x Programador do TAD  Usuário só “enxerga” a interface, não a implementação
  • 9. © David Menotti Algoritmos e Estrutura de Dados I Tipos Abstratos de Dados (TADs)  Dessa forma, o usuário pode abstrair da implementação específica.  Qualquer modificação nessa implementação fica restrita ao TAD  A escolha de uma representação específica é fortemente influenciada pelas operações a serem executadas
  • 10. © David Menotti Algoritmos e Estrutura de Dados I Exemplo: Lista de números inteiros  Operações  Faz Lista Vazia  Insere número no começo da lista  Remove de uma posição i 20 13 02 30 Implementação por Vetores: void Insere(int x, Lista L) { for(i=0;...) {...} L[0] = x; } 20 13 02 30 Implementação por Listas Encadeadas void Insere(int x, Lista L) { p = CriaNovaCelula(x); L^.primeiro = p; ... } Programa usuário do TAD: int main() { Lista L; int x; x = 20; FazListaVazia(L); Insere(x,L); ... }
  • 11. © David Menotti Algoritmos e Estrutura de Dados I Implementação de TADs  Em linguagens orientadas por objeto (C++, Java) a implementação é feita através de classes  Em linguagens estruturadas (C, pascal) a implementação é feita pela definição de tipos juntamente com a implementação de funções  Como vocês não viram o conceito de orientação por objetos*, vamos utilizar os conceitos de C (Typedef e Structs)  Orientação por objetos (classes, etc) vai ser vista em outras disciplinas (POO)
  • 12. © David Menotti Algoritmos e Estrutura de Dados I Estruturas (Structs) em C / C++  Uma estrutura é uma coleção de uma ou mais variáveis, possivelmente de tipos diferentes, colocadas juntas sob um único nome para manipulação conveniente  Por exemplo, para representar um aluno são necessárias as informações nome, matrícula, conceito  Ao invés de criar três variáveis, é possível criar uma única variável contendo três campos.  Em C, usa-se a construção struct para representar esse tipo de dado
  • 13. © David Menotti Algoritmos e Estrutura de Dados I Estruturas (Structs) em C / C++ #include<iostream> #include<string> using namespace std; struct Aluno { string nome; int matricula; char conceito; }; main() { struct Aluno al, aux; al.nome = “Pedro” al.matricula = 200712; al.conceito = ‘A’; aux = al; cout << aux.nome } Pedro 200712 A al: Pedro 200712 A aux:
  • 14. © David Menotti Algoritmos e Estrutura de Dados I Declaração de Tipos  Para simplificar, uma estrutura ou mesmo outros tipos de dados podem ser definidos como um novo tipo  Uso da construção typedef typedef struct { string nome; int matricula; char conceito; } TipoAluno; typedef int[10] Vetor; int main() { TipoAluno al; Vetor v; ... }
  • 15. © David Menotti Algoritmos e Estrutura de Dados I TADs em C  Para implementar um Tipo Abstrato de Dados em C, usa-se a definição de tipos juntamente com a implementação de funções que agem sobre aquele tipo  Como boa regra de programação, evita-se acessar o dado diretamente, fazendo o acesso só através das funções  Mas, diferentemente de C++ e Java, não há uma forma de proibir o acesso.
  • 16. © David Menotti Algoritmos e Estrutura de Dados I  Uma boa técnica de programação é implementar os TADs em arquivos separados do programa principal  Para isso geralmente separa-se a declaração e a implementação do TAD em dois arquivos:  NomeDoTAD.h : com a declaração  NomeDoTAD.cpp : com a implementação  O programa ou outros TADs que utilizam o seu TAD devem dar um #include no arquivo .h TADs em C
  • 17. © David Menotti Algoritmos e Estrutura de Dados I Exemplo  Implemente um TAD ContaBancaria, com os campos número e saldo onde os clientes podem fazer as seguintes operações:  Iniciar uma conta com um número e saldo inicial  Depositar um valor  Sacar um valor  Imprimir o saldo  Faça um pequeno programa para testar o seu TAD
  • 18. © David Menotti Algoritmos e Estrutura de Dados I ContaBancaria.h // definição do tipo typedef struct { int numero; double saldo; } ContaBancaria; // cabeçalho das funções void Inicializa (ContaBancaria&, int, double); void Deposito (ContaBancaria&, double); void Saque (ContaBancaria&, double); void Imprime (ContaBancaria); // obs: A passagem por referencia (&) só existe em // c++. Em breve vamos ver como fazer em c
  • 19. © David Menotti Algoritmos e Estrutura de Dados I ContaBancaria.cpp #include<stdio.h> #include"Contabancaria.h" void Inicializa(ContaBancaria &conta, int numero, double saldo) { conta.numero = numero; conta.saldo = saldo; } void Deposito (ContaBancaria &conta, double valor) { conta.saldo += valor; } void Saque (ContaBancaria &conta, double valor) { conta.saldo -= valor; } void Imprime (ContaBancaria conta) { printf("Numero: %dn", conta.numero); printf("Saldo: %fn", conta.saldo); }
  • 20. © David Menotti Algoritmos e Estrutura de Dados I Main.cpp #include<stdio.h> #include<stdlib.h> #include "ContaBancaria.h" int main (void) { ContaBancaria conta1; Inicializa(conta1, 918556, 300.00); printf("nAntes da movimentacao:n "); Imprime(conta1); Deposito(conta1, 50.00); Saque(conta1, 70.00); printf("nDepois da movimentacao:n "); Imprime (conta1); system("PAUSE"); return(0); }
  • 21. © David Menotti Algoritmos e Estrutura de Dados I Exercício  Implemente um TAD Número Complexo  cada número possui os campos real e imaginário  Implemente as operações:  Atribui: atribui valores para os campos  Imprime: imprime o número da forma “R + Ci”  Copia: Copia o valor de um número para outro  Soma: Soma dois números complexos  EhReal: testa se um número é real  Faça um pequeno programa para testar o seu TAD