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

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

Prof. Frederico Brito Fernandes Nivelamento de C: Tipos Estruturados de Dados CONTEÚDO (1) Estruturas (2) Typedef (3) Inicializando.

Apresentações semelhantes


Apresentação em tema: "Prof. Frederico Brito Fernandes Nivelamento de C: Tipos Estruturados de Dados CONTEÚDO (1) Estruturas (2) Typedef (3) Inicializando."— Transcrição da apresentação:

1 Prof. Frederico Brito Fernandes 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 Frederico Brito Fernandes 2 Estrutura, Pesquisa e Ordenação de Dados 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; Ex 1 : struct ePessoa{ char cpf[15]; char nome[30]; } p1,p2,p3; Declaração de variáveis é opcional (1) Estruturas

3 Frederico Brito Fernandes 3 Estrutura, Pesquisa e Ordenação de Dados Acesso aos elementos de uma estrutura Ex 2 : struct eEndereco{ char rua[50]; int rua; char bairro[20]; char cidade[20]; char sigla_estado[3]; long int cep; }; Ex 3 : 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? Mas como acessar os campos de c1, c2 e c3? (1) Estruturas

4 Frederico Brito Fernandes 4 Estrutura, Pesquisa e Ordenação de Dados Acesso ao elementos de uma estrutura Ex 2 : struct eEndereco{ char rua[50]; int rua; char bairro[20]; char cidade[20]; char sigla_estado[3]; long int cep; }; Ex 3 : 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? Mas como acessar os campos de c1, c2 e c3?variável.nomeDoCampo Ex: Ex: c1.idade = 22; scanf(%d,&c2.idade); if (c1.idade>c2.idade) printf(C1 eh mais velho); Mas como acessar o endereço de c3? Mas como acessar o endereço de c3? (1) Estruturas

5 Frederico Brito Fernandes 5 Estrutura, Pesquisa e Ordenação de Dados Acesso aos elementos de uma estrutura Ex 2 : struct eEndereco{ char rua[50]; int rua; char bairro[20]; char cidade[20]; char sigla_estado[3]; long int cep; }; Ex 3 : 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 elementos de c1, c2 e c3? Mas como acessar os elementos de c1, c2 e c3?variável.nomeDoCampo Ex: Ex: c1.idade = 22; scanf(%d,&c2.idade); if (c1.idade>c2.idade) printf(C1 eh mais velho); Mas como acessar o endereço de c3? Mas como acessar o endereço de c3?variável.nomeDaEstrutura.nomeDoCampo Ex: 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); (1) Estruturas

6 Frederico Brito Fernandes 6 Estrutura, Pesquisa e Ordenação de Dados 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( (x a -x b ) 2 + (y a -y b ) 2 ) Use a biblioteca math.h para usar a função para calcular a raiz quadrada do argumento: sqrt() (1) Estruturas

7 Frederico Brito Fernandes 7 Estrutura, Pesquisa e Ordenação de Dados Exemplo de programa Ex 4 : #include 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; }; pág 1 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 (1) Também é possível declarar variáveis assim: struct nomeDaEstrutura nomeDaVariavel (2) Porém, é muito chato usar a palavra struct o tempo inteiro para declarar variáveis (1) Estruturas

8 Frederico Brito Fernandes 8 Estrutura, Pesquisa e Ordenação de Dados Declarando tipos em C Objetivo –Declara novos tipos no seu programa Ex 1 : typedef int tInteiro; tInteiro i,j=0; Sintaxe: typedef antigoNome novoNome; Ex 2 : (simplificando uma estrutura) 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; 123 (2) Typedef

9 Frederico Brito Fernandes 9 Estrutura, Pesquisa e Ordenação de Dados Declarando tipos em C Objetivo –Declara novos tipos no seu programa Ex: typedef int tInteiro; tInteiro i,j=0; Sintaxe: typedef antigoNome novoNome; Ex 1 : (simplificando uma estrutura) 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; O nome da estrutura pode ainda ser retirado variável vira tipo O acesso às variáveis p1 e p2 é o mesmo nas três declarações: p1.idade = p2.idade; mais simples de declarar 123 (2) Typedef

10 Frederico Brito Fernandes 10 Estrutura, Pesquisa e Ordenação de Dados Para facilitar a depuração, inicialize valores... É possível inicializar valores nas variáveis estruturadas Ex 1 : #include 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);} (3) Inicializando valores

11 Frederico Brito Fernandes 11 Estrutura, Pesquisa e Ordenação de Dados 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 (4) Passagem de parâmetro

12 Frederico Brito Fernandes 12 Estrutura, Pesquisa e Ordenação de Dados 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 (4) Passagem de parâmetro

13 Frederico Brito Fernandes 13 Estrutura, Pesquisa e Ordenação de Dados 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 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} (5) Atribuição

14 Frederico Brito Fernandes 14 Estrutura, Pesquisa e Ordenação de Dados 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 Ex 1 : #include 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! (6) Vetor de estrutura

15 Frederico Brito Fernandes 15 Estrutura, Pesquisa e Ordenação de Dados Outro exemplo... Ex 2 : (programa que procura os casados no vetor) #include 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 (6) Vetor de estrutura

16 Frederico Brito Fernandes 16 Estrutura, Pesquisa e Ordenação de Dados 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] (6) Vetor de estrutura

17 Frederico Brito Fernandes 17 Estrutura, Pesquisa e Ordenação de Dados 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 #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 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(); } (7) Vetor de estrutura como parâmetro

18 Frederico Brito Fernandes 18 Estrutura, Pesquisa e Ordenação de Dados 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) * Retorno: nenhum * Saida: impressão na tela do CPF do nome procurado */ b) void imprimirCPF2(tPessoa vet[], char letraInicial); (7) Vetor de estrutura como parâmetro


Carregar ppt "Prof. Frederico Brito Fernandes Nivelamento de C: Tipos Estruturados de Dados CONTEÚDO (1) Estruturas (2) Typedef (3) Inicializando."

Apresentações semelhantes


Anúncios Google