Desenvolva um TAD para um cilindro. Inclua as funções de inicializações necessárias e as operações que retornem sua altura e raio, a sua área e o seu volume.
Passo 1
O enunciado pede para criarmos um TAD (Tipo Abstrato de Dados) para representar um cilindro, fornecendo funções de inicialização e operações que retornem o raio, a altura, a área e o volume do cilindro. Na matéria de programação estruturada (por exemplo em C), vamos precisar definir uma estrutura para armazenar os atributos e depois implementar as funções que operam sobre ela.
Passo 2
Um TAD em C pode ser implementado usando uma struct para manter o encapsulamento dos dados (raio e altura) e um conjunto de funções que operam sobre essa struct, simulando métodos.
Passo 3
Primeiro, definimos a struct que representa o cilindro e uma função de inicialização que recebe o raio e a altura, armazenando-os em uma instância de Cylinder.
Em seguida, criamos as funções de acesso (getters) para o raio e a altura, que simplesmente retornam os valores armazenados na struct.
Em seguida, criamos as funções de acesso (getters) para o raio e a altura, que simplesmente retornam os valores armazenados na struct.
Passo 4
Para a área do cilindro, usamos a fórmula
onde a primeira parcela é a área lateral e a segunda parcela é a área das duas bases.
Passo 5
Para o volume do cilindro, usamos a fórmula
que é o produto da área da base pelo comprimento (altura).
Passo 6
Por fim, reunimos tudo num único bloco de código em C, apresentando o TAD completo com as funções de inicialização, getters, area e volume.
Resposta
// TAD Cilindro em C
#include <math.h>
#include <math.h>
// Definição do tipo abstrato “Cylinder”
typedef struct {
double radius;
double height;
} Cylinder;
typedef struct {
double radius;
double height;
} Cylinder;
// Inicializa um cilindro com raio r e altura h
typedef struct Cylinder Cylinder;
typedef struct Cylinder Cylinder;
Cylinder cylinder_init(double r, double h) {
Cylinder c;
c.radius = r;
c.height = h;
return c;
}
Cylinder c;
c.radius = r;
c.height = h;
return c;
}
// Retorna o raio do cilindro
double cylinder_get_radius(const Cylinder *c) {
return c->radius;
}
double cylinder_get_radius(const Cylinder *c) {
return c->radius;
}
// Retorna a altura do cilindro
double cylinder_get_height(const Cylinder *c) {
return c->height;
}
double cylinder_get_height(const Cylinder *c) {
return c->height;
}
// Calcula a área total do cilindro
// Área = 2πrh + 2πr²
double cylinder_area(const Cylinder *c) {
return 2.0 * M_PI * c->radius * c->height
+ 2.0 * M_PI * c->radius * c->radius;
}
// Área = 2πrh + 2πr²
double cylinder_area(const Cylinder *c) {
return 2.0 * M_PI * c->radius * c->height
+ 2.0 * M_PI * c->radius * c->radius;
}
// Calcula o volume do cilindro
// Volume = πr²h
double cylinder_volume(const Cylinder *c) {
return M_PI * c->radius * c->radius * c->height;
}
// Volume = πr²h
double cylinder_volume(const Cylinder *c) {
return M_PI * c->radius * c->radius * c->height;
}