Desenvolva um TAD para um esfera. Inclua as funções de inicializações necessárias e as operações que retornem seu raio, a sua área e o seu volume.

Passo 1

Enunciado: precisamos criar um TAD que represente uma esfera, permitindo inicializar seu raio e obter seu raio, sua área de superfície e seu volume. O conteúdo envolvido é definição de Tipo Abstrato de Dados (TAD), encapsulamento e aplicação das fórmulas geométricas: área=4pi r^2á e volume=tfrac43pi r^3.

Passo 2

Escolha de linguagem e encapsulamento: vamos usar C e definir um tipo opaco sphere_t em sphere.h, deixando a estrutura interna definida apenas em sphere.c para garantir o encapsulamento.
Interface em sphere.h: declaramos o tipo opaco e as funções públicas. Precisamos de: criação (sphere_create), destruição (sphere_destroy), acessor de raio (sphere_get_radius), cálculo de área (sphere_get_area) e cálculo de volume (sphere_get_volume).

Passo 3

Implementação em sphere.c: definimos struct sphere_t { double radius; };. Em sphere_create(double radius), validamos radius >= 0, alocamos memória e armazenamos o valor. Em sphere_destroy, liberamos essa memória.
Função de acesso ao raio: double sphere_get_radius(const sphere_t *s) retorna s->radius (ou um valor de erro se s == NULL).

Passo 4

Cálculo da área: usamos a fórmula
área = 4pi r^2á
em double sphere_get_area(const sphere_t *s), obtendo primeiro o raio e depois aplicando a expressão.

Passo 5

Cálculo do volume: usamos a fórmula
volume = 43pi r^3
em double sphere_get_volume(const sphere_t *s), obtendo raio e aplicando a expressão.

Passo 6

Com essas definições, o TAD está completo: o usuário pode criar uma esfera, consultar seu raio, área e volume, e depois destruir o objeto.

Resposta

// sphere.h
#ifndef SPHERE_H
#define SPHERE_H
typedef struct sphere_t sphere_t;
// Cria uma esfera com dado raio (retorna NULL se raio < 0 ou falha de alocação)
sphere_t *sphere_create(double radius);
// Destrói a esfera
void sphere_destroy(sphere_t *s);
// Retorna o raio da esfera (retorna valor negativo se s for NULL)
double sphere_get_radius(const sphere_t *s);
// Retorna a área de superfície da esfera
double sphere_get_area(const sphere_t *s);
// Retorna o volume da esfera
double sphere_get_volume(const sphere_t *s);
#endif // SPHERE_H
// sphere.c
#include <stdlib.h>
#include <math.h>
#include “sphere.h”
struct sphere_t {
double radius;
};
sphere_t *sphere_create(double radius) {
if (radius < 0) return NULL;
sphere_t *s = malloc(sizeof(sphere_t));
if (!s) return NULL;
s->radius = radius;
return s;
}
void sphere_destroy(sphere_t *s) {
free(s);
}
double sphere_get_radius(const sphere_t *s) {
if (!s) return -1.0;
return s->radius;
}
double sphere_get_area(const sphere_t *s) {
double r = sphere_get_radius(s);
return 4.0 * M_PI * r * r;
}
double sphere_get_volume(const sphere_t *s) {
double r = sphere_get_radius(s);
return (4.0/3.0) * M_PI * r * r * r;
}

Exercícios relacionados