Nivelamento de C: Tipos Estruturados de Dados

Slides:



Advertisements
Apresentações semelhantes
Programação em Java Prof. Maurício Braga
Advertisements

Programação em Java Prof. Maurício Braga
Linguagem de Programação VI Tipos de Dados Compostos - structs
Construção de Algoritmos AULA 07
Construção de Algoritmos Professor: Aquiles Burlamaqui Construção de Algoritmos AULA 07 Aquiles Burlamaqui UERN
Nivelamento de C: Vetores e Strings
Nivelamento de C: Ponteiros e Alocação Dinâmica
Listas Encadeadas CONTEÚDO (1) Motivação (2) Definição (3) Operações
Listas encadeadas Prof. Rosana Palazon.
Listas duplamente encadeadas
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS MÉTODOS – UMA VISÃO MAIS APROFUNDADA Prof. Thiago Pereira Rique
Programação II Estruturas de Dados
Programação II Estruturas de Dados
Introdução à Programação
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
Linguagem de Programação 1
AULA – Linguagem C – Vetores, Ponteiros e Estruturas
LPG-I: Tipos Complexos - Estruturas
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Universidade Federal do Espírito Santo Programação II Estruturas Professora: Norminda Luiza.
Universidade de Brasília
LINGUAGEM C Centro Federal de Educação Tecnológica da Paraíba Coordenação de Informática Professor: Lafayette B. Melo.
Centro Integrado de Tecnologia da Informação
Estruturas de Dados Heterogêneas (struct)
Estruturas de Dados Homogêneas Unidimensionais – Vetores e Strings
Estruturas de Dados Heterogêneas (struct)
Ponteiros.
Escola Secundária c/ 3º CEB da Batalha
Classes e objetos P. O. O. Prof. Grace.
Apontadores ou Ponteiros
Vamos agora aprender a utilizar estruturas.
O Portal do Estudante de Computação
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
PROGRAMAÇÃO ESTRUTURADA II
Definição de Tipos Estruturas e Ponteiros
Construção de Algoritmos Professor: Aquiles Burlamaqui Construção de Algoritmos AULA 07 Aquiles Burlamaqui UERN
Construção de Algoritmos Professor: Aquiles Burlamaqui Construção de Algoritmos AULA 05 Aquiles Burlamaqui UERN
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Estrutura de Dados Avançada
Argumentos por valor Passagem de valor da variável indicada Não permite alteração de variável indicada Exemplo: int quadrado_de(int ); //protótipo int.
Tipos Estruturados de Dados
Seminário 1: Revisão de C
UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS
Prof. Ricardo Santos PONTEIROS
Computação Eletrônica
Introdução à linguagem C
Leandro Almeida  Parâmetros são utilizados em computação para possibilitar a construção de subprogramas genéricos.
Vetor Prof. Guilherme Baião S. Silva Adaptações:
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Introdução à Linguagem C
Estruturas de Dados Aula 7: Tipos Estruturados 23/04/2014.
 São utilizadas para dividir um código maior (mais complexo) em partes menores (mais simples).  Quando uma mesma tarefa é realizada várias vezes em um.
Aula prática 3 Aprofundando em Funções Parâmetros de uma função Uso do return Execução Variáveis Global, local e estática Monitoria de Introdução à.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Revisão Luis Antonio Tavares
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo IX Subprogramação e Recursividade.
PCI- Registros Profa. Mercedes Gonzales Márquez. Conceito Variáveis compostas heterogêneas (não homogêneas) Estruturas: variáveis que podem conter uma.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Programação Computacional Aula 9: Meu primeiro programa em C
Linguagem de Programação II
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Funções.
Estrutura de Dados STRUCTS Dilvan Moreira. Objetivos  Entender o que são e como usar:  Estrutura de Dados para a Linguagem C  Structs (Registros)
Estruturas Homogêneas - Vetores
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
DHD – Desenvolvimento em Hardware
Transcrição da apresentação:

Nivelamento de C: Tipos Estruturados de Dados CONTEÚDO (1) Estruturas (2) Typedef (3) Inicializando valores (4) Passagem de parâmetro (5) Atribuição (6) Vetor de estruturas (7) Vetor de estrutura como parâmetro

Para que servem as estruturas? Objetivo Agrupa elementos de tipos diferentes Ex: cliente(CPF,nome,dataNasc,endereço) Sintaxe: struct nome_do_tipo_da_estrutura { tipo_1 nome_1; tipo_2 nome_2; ... tipo_n nome_n; } variáveis_estrutura; Ex1: struct ePessoa{ char cpf[15]; char nome[30]; } p1,p2,p3; Declaração de variáveis é opcional

Acesso aos elementos de uma estrutura (1) Estruturas Acesso aos elementos de uma estrutura Ex2: struct eEndereco{ char rua[50]; int rua; char bairro[20]; char cidade[20]; char sigla_estado[3]; long int cep; }; Ex3: struct eCliente{ char idade; char nome[30]; struct eEndereco end; } c1,c2,c3; É possível usar uma estrutura dentro da outra Mas como acessar os campos de c1, c2 e c3?

Acesso ao elementos de uma estrutura (1) Estruturas Acesso ao elementos de uma estrutura Ex2: struct eEndereco{ char rua[50]; int rua; char bairro[20]; char cidade[20]; char sigla_estado[3]; long int cep; }; Ex3: struct eCliente{ char idade; char nome[30]; struct eEndereco end; } c1,c2,c3; Mas como acessar o endereço de c3? É possível usar uma estrutura dentro da outra Mas como acessar os campos de c1, c2 e c3? variável.nomeDoCampo Ex: c1.idade = 22; scanf(“%d”,&c2.idade); if (c1.idade>c2.idade) printf(“C1 eh mais velho”);

Acesso aos elementos de uma estrutura (1) Estruturas Acesso aos elementos de uma estrutura Ex2: struct eEndereco{ char rua[50]; int rua; char bairro[20]; char cidade[20]; char sigla_estado[3]; long int cep; }; Ex3: struct eCliente{ char idade; char nome[30]; struct eEndereco end; } c1,c2,c3; Mas como acessar o endereço de c3? variável.nomeDaEstrutura.nomeDoCampo Ex: c3.end.rua = 440; strcpy(c3.end.rua, “Av. Argemiro de Figueiredo”); strcpy(c3.end.sigla_estado, “PB”); cep=58043000; scanf(“%s”,&c3.end.bairro); É possível usar uma estrutura dentro da outra Mas como acessar os elementos de c1, c2 e c3? variável.nomeDoCampo Ex: c1.idade = 22; scanf(“%d”,&c2.idade); if (c1.idade>c2.idade) printf(“C1 eh mais velho”);

(1) Estruturas Auto-avaliação Faça um programa que define dois pontos a(float x, float y) e b(float x , float y) usando estruturas. Seu programa deverá ler as coordenadas de a e b, e imprimir na tela a distância entre esses dois pontos. Distância(a,b) = raizQuadrada( (xa-xb)2 + (ya-yb)2 ) Use a biblioteca math.h para usar a função para calcular a raiz quadrada do argumento: sqrt()

Ex4: Exemplo de programa (1) Estruturas Exemplo de programa (1) Também é possível declarar variáveis assim: struct nomeDaEstrutura nomeDaVariavel Ex4: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include <stdio.h> #include <string.h> struct eEndereco{ char rua[50]; int rua; char bairro[20]; char cidade[20]; char sigla_estado[3]; long int cep; }; struct eCliente{ char cpf[15]; char nome[30]; struct eEndereco endereco; 17 18 19 20 21 22 23 2425 26 main (void) { struct eCliente ficha, ficha2; strcpy (ficha.nome,"Luiz Osvaldo Silva"); ficha.telefone=4921234; strcpy (ficha.endereco.rua,"Rua do Hospício"); ficha.endereco.numero=10; strcpy (ficha.endereco.bairro,“Bessa"); strcpy (ficha.endereco.cidade,“João Pessoa"); strcpy (ficha.endereco.sigla_estado,“PB"); ficha.endereco.CEP=31340230; } pág 2 pág 1 (2) Porém, é muito chato usar a palavra struct o tempo inteiro para declarar variáveis

Declarando tipos em C Objetivo Sintaxe: (2) Typedef Declarando tipos em C Objetivo Declara novos tipos no seu programa Ex1: typedef int tInteiro; tInteiro i,j=0; Sintaxe: typedef antigoNome novoNome; Ex2: (simplificando uma estrutura) 1 2 3 struct ePessoa{ int idade; char nome[30]; }p1; struct ePessoa p2; typedef struct ePessoa{ int idade; char nome[30]; }tPessoa; tPessoa p1,p2; typedef struct { int idade; char nome[30]; }tPessoa; tPessoa p1,p2;

Declarando tipos em C Objetivo Sintaxe: (2) Typedef Declarando tipos em C Objetivo Declara novos tipos no seu programa Ex: typedef int tInteiro; tInteiro i,j=0; Sintaxe: typedef antigoNome novoNome; Ex1: (simplificando uma estrutura) O nome da estrutura pode ainda ser retirado 1 2 3 struct ePessoa{ int idade; char nome[30]; }p1; struct ePessoa p2; typedef struct ePessoa{ int idade; char nome[30]; }tPessoa; tPessoa p1,p2; typedef struct { int idade; char nome[30]; }tPessoa; tPessoa p1,p2; variável vira tipo mais simples de declarar O acesso às variáveis p1 e p2 é o mesmo nas três declarações: p1.idade = p2.idade;

Para facilitar a depuração, inicialize valores... (3) Inicializando valores Para facilitar a depuração, inicialize valores... É possível inicializar valores nas variáveis estruturadas Ex1: #include <stdio.h> typedef struct { char cpf[15]; char nome[30]; char estadoCivil; }tPessoa; main(){ tPessoa p1 = {“03043120412”,“Fred”,’S’}; printf(“O %s tem o estado civil %c”, p1.nome,p1.estadoCivil); }

Passagem de estruturas como parâmetro de função (4) Passagem de parâmetro Passagem de estruturas como parâmetro de função Objetivo Usar estruturas como parâmetro de função Ex: float area(tCirculo c); // cabeçalho de uma função que recebe // um tCirculo (que é um tipo estruturado) Ex: typedef struct { float raio; }tCirculo; int area(tCirculo c){ return (3.1416 * c.raio * c.raio); } main(){ tCirculo circulo = {2}; printf(“A area do meu circulo vale %.1f”,area(circulo)); %.1f, indica a impressão de uma casa decimal

(4) Passagem de parâmetro Auto-avaliação Adapte seu programa anterior (slide 8) para escrever uma função. Também re-escreva as estruturas dos pontos usando typedef. Em seguida escreva uma função que receba dois pontos a e b, e retorne a distância entre eles. float distancia(tPonto a, tPonto b); //seu protótipo

Atribuição de estruturas Objetivo Atribuir uma estrutura a outra é possível em C Os valores dos campos são copiados um-a-um Ex: #include <stdio.h> typedef struct { char cpf[15]; char nome[30]; char estadoCivil; }tPessoa; main(){ tPessoa p1, p2 = {“03043120412”,”Fred”,’S’}; p1 = p2; // nessa instrução, todos os campos de p2 são copiados nos campos de p1 }

Criando vetores de tipos estruturados de dados (6) Vetor de estrutura Criando vetores de tipos estruturados de dados Objetivo Criar um vetor com elementos de tipo estruturado Ex: tPessoa vetor[2]; // vetor com 2 elementos do tipo tCliente Ex1: #include <stdio.h> typedef struct { int idade; char nome[30]; char estadoCivil; }tPessoa; main(){ tPessoa vetor[2]; vetor[0].idade = 27; strcpy(vetor[0].nome, “Fred”); vetor[0].estadoCivil = ‘S’; vetor[1] = vetor[0]; // lembre-se que é possível fazer uma atribuição entre estruturas } // (veja slide anterior). Não estou atribuindo um vetor a outro!

Ex2: (programa que procura os casados no vetor) (6) Vetor de estrutura Outro exemplo... Ex2: (programa que procura os casados no vetor) #include <stdio.h> typedef struct { char cpf[15]; char nome[30]; char estadoCivil; }tPessoa; main(){ int i; tPessoa vetor[2] = { {“03043120412”,”Fred”,’S’}, {“02783819190”,”Fechine”,’C’} }; for (i=0;i<2;i++){ if (vetor[i].estadoCivil==‘C’) printf(“%s eh casado”, vetor[i].nome); } Veja como inicializar valores na declaração de vetores

(6) Vetor de estrutura Auto-avaliação Faça um programa que declare e inicialize um vetor de três pessoas. Seu programa deverá percorrer o vetor de pessoas, e imprimir na tela o CPF de Adail. typedef struct { char cpf[15]; char nome[30]; char estadoCivil; }tPessoa; tPessoa pessoas[3] = { {“03043120412”,”Fred”,’S’}, {“02934526234”,”Adail”,’C’} {“02783819190”,”Valneide”,’C’} }; Faça uma pequena modificação no programa anterior, e imprima na tela os CPF das pessoas que começam pela letra ‘F’ Dica: pessoas[i].nome representa a string do elemento de índice i. Lembre-se que uma string é um vetor de caracteres, logo para acessar o primeiro elemento dessa string, basta usar pessoas[i].nome[0]

Vetor de estrutura passado como parâmetro de uma função (7) Vetor de estrutura como parâmetro Vetor de estrutura passado como parâmetro de uma função Chegamos ao nosso objetivo final dessa aula: Passar como parâmetro de uma função, um vetor de elementos do tipo estruturado Ex: void imprimeMaisVelho(tPessoas vetor[]); Ex: (função que vai imprimir na tela o nome da pessoa mais velha) #include <stdio.h> #include <conio.h> #define N 3 typedef struct { int idade; char nome[30]; char estadoCivil; }tPessoa; void imprimeMaisVelho(tPessoa vetor[]){ int i, maior=0, indiceMaior=0; for (i=0;i<N;i++){ if (vetor[i].idade > maior) { indiceMaior = i; maior = vetor[i].idade; } printf("A pessoa mais velha eh %s", vetor[indiceMaior].nome); main(){ tPessoa pessoas[3] = { {27,"Fred",'S'}, {45,"Beltrano",'C'}, {32,"Cicrano",'C'} }; imprimeMaisVelho(pessoas); getch(); } <pág1> <pág2> <pág3>

(7) Vetor de estrutura como parâmetro Auto-avaliação Adapte seu programa anterior (slide 18) para escrever as funções abaixo: /********* IMPRIMIR CPF PROCURANDO NOME ***************** * Objetivo: Função que procura um nome dentro do vetor, se encontrado imprime o CPF na tela * Entrada: um vetor de pessoas (tPessoa vet[]) de tamanho N e o nome a ser procurado (char nome[]) * Retorno: nenhum * Saida: impressão na tela do CPF do nome procurado */ a) void imprimirCPF(tPessoa vet[], char nome[]); /********* IMPRIMIR CPF PROCURANDO A PRIMEIRA LETRA DO NOME ***************** * Objetivo: Função que procura um nome (começado por uma letra específica) dentro do vetor, se encontrado imprime o CPF na tela * Entrada: um vetor de pessoas (tPessoa vet[]) de tamanho N e a letra inicial da(s) pessoa(s) a ser(em) procurada(s) b) void imprimirCPF2(tPessoa vet[], char letraInicial);