Desenvolva um TAD para um cubo. Inclua as funções de inicializações necessárias e as operações que retornem os tamanhos de cada lado, a sua área e o seu volume.
Passo 1
O enunciado pede para a gente criar um TAD (Tipo Abstrato de Dados) que represente um cubo, com funções de inicialização e operações para obter o tamanho do lado, a área e o volume. Para isso, vamos usar conceitos de encapsulamento em C e as fórmulas geométricas: área
e volume
.
Passo 2
Definimos a estrutura interna do TAD como um struct que guarda apenas o lado do cubo. Em C, podemos fazer isso em um arquivo de interface (cubo.h) com um tipo opaco.
No cabeçalho (cubo.h), declaramos o tipo opaco
No cabeçalho (cubo.h), declaramos o tipo opaco
Cubo
e as funções públicas: criação, destruição, acesso ao lado, cálculo de área e cálculo de volume.Passo 3
Em seguida, implementamos em cubo.c: a função
Implementamos
criaCubo
aloca memória dinamicamente e inicializa o lado, validando que ele seja positivo.Implementamos
getLado
retornando diretamente o atributo lado
do struct, mantendo encapsulamento.Passo 4
Para onde
é o lado armazenado.
calculaArea
, aplicamos a fórmula
Para usando o mesmo atributo do cubo.
calculaVolume
, aplicamos a fórmula
Passo 5
Finalmente, incluímos
destroiCubo
para liberar a memória alocada pela criação e evitar vazamentos.Resposta
// cubo.h
#ifndef CUBO_H
#define CUBO_H
#ifndef CUBO_H
#define CUBO_H
typedef struct Cubo Cubo;
// Cria um cubo com lado informado (> 0). Retorna ponteiro ou NULL em erro.
Cubo* criaCubo(float lado);
Cubo* criaCubo(float lado);
// Libera a memória do cubo
void destroiCubo(Cubo* c);
void destroiCubo(Cubo* c);
// Retorna o tamanho do lado do cubo
float getLado(const Cubo* c);
float getLado(const Cubo* c);
// Calcula a área total do cubo (A = 6 * a^2)
float calculaArea(const Cubo* c);
float calculaArea(const Cubo* c);
// Calcula o volume do cubo (V = a^3)
float calculaVolume(const Cubo* c);
float calculaVolume(const Cubo* c);
#endif // CUBO_H
// cubo.c
#include <stdlib.h>
#include “cubo.h”
#include <stdlib.h>
#include “cubo.h”
struct Cubo {
float lado;
};
float lado;
};
Cubo* criaCubo(float lado) {
if (lado <= 0.0f) return NULL; // lado inválido
Cubo* c = (Cubo*)malloc(sizeof(Cubo));
if (!c) return NULL; // falha na alocação
c->lado = lado;
return c;
}
if (lado <= 0.0f) return NULL; // lado inválido
Cubo* c = (Cubo*)malloc(sizeof(Cubo));
if (!c) return NULL; // falha na alocação
c->lado = lado;
return c;
}
void destroiCubo(Cubo* c) {
if © free©;
}
if © free©;
}
float getLado(const Cubo* c) {
if (!c) return 0.0f; // ou tratar erro
return c->lado;
}
if (!c) return 0.0f; // ou tratar erro
return c->lado;
}
float calculaArea(const Cubo* c) {
if (!c) return 0.0f;
float a = c->lado;
return 6.0f * a * a;
}
if (!c) return 0.0f;
float a = c->lado;
return 6.0f * a * a;
}
float calculaVolume(const Cubo* c) {
if (!c) return 0.0f;
float a = c->lado;
return a * a * a;
}
if (!c) return 0.0f;
float a = c->lado;
return a * a * a;
}