A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Nivelamento de C: Tipos Estruturados de Dados

Apresentações semelhantes


Apresentação em tema: "Nivelamento de C: Tipos Estruturados de Dados"— Transcrição da apresentação:

1 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

2 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

3 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?

4 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”);

5 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= ; 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”);

6 (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()

7 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= ; 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= ; } pág 2 pág 1 (2) Porém, é muito chato usar a palavra struct o tempo inteiro para declarar variáveis

8 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;

9 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;

10 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 = {“ ”,“Fred”,’S’}; printf(“O %s tem o estado civil %c”, p1.nome,p1.estadoCivil); }

11 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 ( * 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

12 (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

13 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 = {“ ”,”Fred”,’S’}; p1 = p2; // nessa instrução, todos os campos de p2 são copiados nos campos de p1 }

14 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!

15 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] = { {“ ”,”Fred”,’S’}, {“ ”,”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

16 (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] = { {“ ”,”Fred”,’S’}, {“ ”,”Adail”,’C’} {“ ”,”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]

17 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>

18 (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);


Carregar ppt "Nivelamento de C: Tipos Estruturados de Dados"

Apresentações semelhantes


Anúncios Google