Aula 06 Definição de Novos Tipos (structs, typedefs, e enumerações) Prof. Filipe Mutz 1
Estruturas (structs) Estruturas (structs) são usadas para criar novos tipos de dados pelo agrupamento de informações. struct <nome> <tipo> <nome>; <tipo> <nome>;... Sintaxe de definição de estruturas struct retangulo float altura; float largura; A partir daqui, variáveis podem ser do tipo retangulo. 2
Estruturas (structs) Structs devem ser definidas antes de serem usadas. Após a definição da estrutura, ela pode ser utilizada para criar quantas variáveis forem necessárias. Cada variável do novo tipo, tem seus próprios componentes. #include <stdio.h> struct retangulo float largura; float altura; ; float area; struct retangulo r; r.largura = 2; r.altura = 3; Ex.: Cada variável do tipo retângulo terá uma largura e uma altura. area_r = r.largura * r.altura; 3
#include <stdio.h> struct retangulo float largura; float altura; ; float area_r, area_s; (...) struct retangulo r; struct retangulo s; r.largura = 2; r.altura = 3; (...) printf("digite a largura: "); scanf("%f", &s.largura); printf("digite a altura: "); scanf("%f", &s.altura); area_r = r.largura * r.altura; area_s = s.largura * s.altura; printf("area de r: %f\n", area_r); printf("area de s: %f\n", area_s);
#include <stdio.h> (...) struct retangulo float largura; float altura; ; float calcular_area (struct retangulo r) return r.altura * r.largura; float area_r, area_s; struct retangulo r; struct retangulo s; (...) r.largura = 2; r.altura = 3; printf("digite a largura: "); scanf("%f", &s.largura); printf("digite a altura: "); scanf("%f", &s.altura); area_r = calcular_area(r); area_s = calcular_area(s); printf("area de r: %f\n", area_r); printf("area de s: %f\n", area_s);
Definindo Tipos - typedef Com o typedef nós dados um apelido para outros tipos em C. Serve para referir ao um determinado tipo em C por outro nome. typedef <tipo existente> <novo nome>; 6
#include <stdio.h> typedef int Idade; typedef <tipo existente> <novo nome>; Idade i = 26; int ano_nascimento = 2016 - i; printf("ano de nascimento: %d\n", ano_nascimento); 7
typedefs são muito úteis para simplificar o uso de estruturas. #include <stdio.h> struct Retangulo float x, y; ; struct Retangulo r; #include <stdio.h> struct Retangulo float x, y; ; typedef struct Retangulo Retangulo; Retangulo r; 8
typedefs são muito úteis para simplificar o uso de estruturas. #include <stdio.h> struct Retangulo float x, y; ; typedef struct Retangulo Retangulo; Retangulo r; #include <stdio.h> typedef struct float x, y; Retangulo ; Retangulo r; 9
Enumerações Enumerações são usadas para definir tipos cujos valores são qualitativos. enum <nome> enum Tamanho <Nome>, P, <Nome>, M,... G ; ; #include <stdio.h> #include <math.h> typedef enum P, M, G Tamanho ; Tamanho t = P; 10
#include <stdio.h> #include <math.h> typedef enum Janeiro, Fevereiro,... Dezembro Mes ; Mes m = Janeiro; 11
#include <stdio.h> #include <math.h> typedef enum Janeiro = 1, Fevereiro,... Dezembro Mes ; Os valores das enumerações são inteiros disfarçados! Mes m = Janeiro; printf( Mês: %d\n, (int) m); 12
Exercícios Defina o tipo Ponto2D com um componente x e um componente y. Crie funções para: criar um ponto e ler suas coordenadas; mostrar um ponto na tela; calcular a distancia entre dois pontos. Faça um programa que use estas funções para ler dois pontos, mostra-los na tela, e mostrar a distância euclidiana entre eles na tela. 13
Exercícios Defina o tipo SolucaoDeEq2oGrau com três componentes o valor de delta e os valores das duas raízes de uma equação de segundo grau. Faça uma função que receba os três coeficientes da equação e retorne uma variável do tipo SolucaoDeEq2oGrau. Faça um programa que leia os três coeficientes e mostre na tela os valores de delta e as raízes. Se o valor de delta for negativo, preencha as raízes com -1 e na função main mostre a mensagem Não existem raízes reais. 14