Definir o tipo ponto, para armazenar as coordenadas (float) de um ponto (
) no plano cartesiano. Definir o tipo retangulo, para armazenar a origem (ponto), a base (float) e a altura (float) de um retângulo. Considere que a origem de um retângulo seja o ponto correspondente ao canto inferior esquerdo do retângulo. Escrever as funções float area(retangulo r), que retorna a área do retangulo
, ponto destino(retangulo r), que retorna o destino do retângulo
, ou seja, o ponto
correspondente ao canto superior direito do retângulo, e retangulo maior(retangulo c[], int n), que retorna o retângulo do conjunto
(de tamanho
) que apresenta a maior diagonal, ou seja, a maior distância entre a origem e o destino do retângulo. Escrever a função main() para testar todas as funções do programa.
correspondente ao canto superior direito do retângulo, e retangulo maior(retangulo c[], int n), que retorna o retângulo do conjunto
Passo 1
A questão pede para definir em C os tipos ponto (com coordenadas x, y) e retangulo (com origem do tipo ponto, base e altura), além de implementar as funções area(), destino() e maior() (que escolhe o retângulo com a maior diagonal) e um main() para testar tudo.
Passo 2
Primeiro, vamos declarar o struct ponto com dois floats (x e y) e o struct retangulo contendo um ponto origem e dois floats (base e altura).
Implementar a função float area(retangulo r) que retorna simplesmente r.base * r.altura.
Implementar a função ponto destino(retangulo r) que computa o canto superior direito somando r.base a r.origem.x e r.altura a r.origem.y.
Implementar a função float area(retangulo r) que retorna simplesmente r.base * r.altura.
Implementar a função ponto destino(retangulo r) que computa o canto superior direito somando r.base a r.origem.x e r.altura a r.origem.y.
Passo 3
Implementar retangulo maior(retangulo c[], int n): percorrer o vetor c, calcular a diagonal de cada retângulo com sqrtf(base²+altura²), e retornar aquele de maior valor.
Passo 4
Escrever o main(): criar alguns retângulos de exemplo, usar printf para mostrar origem, base, altura, área e destino de cada um; depois chamar maior() e imprimir também o retângulo com maior diagonal e o valor dessa diagonal.
Resposta
#include <stdio.h>
#include <math.h>
#include <math.h>
typedef struct {
float x;
float y;
} ponto;
float x;
float y;
} ponto;
typedef struct {
ponto origem;
float base;
float altura;
} retangulo;
ponto origem;
float base;
float altura;
} retangulo;
float area(retangulo r) {
return r.base * r.altura;
}
return r.base * r.altura;
}
ponto destino(retangulo r) {
ponto d;
d.x = r.origem.x + r.base;
d.y = r.origem.y + r.altura;
return d;
}
ponto d;
d.x = r.origem.x + r.base;
d.y = r.origem.y + r.altura;
return d;
}
retangulo maior(retangulo c[], int n) {
int idx = 0;
float maxd = sqrtf(c[0].base * c[0].base + c[0].altura * c[0].altura);
for (int i = 1; i < n; i++) {
float d = sqrtf(c[i].base * c[i].base + c[i].altura * c[i].altura);
if (d > maxd) {
maxd = d;
idx = i;
}
}
return c[idx];
}
int idx = 0;
float maxd = sqrtf(c[0].base * c[0].base + c[0].altura * c[0].altura);
for (int i = 1; i < n; i++) {
float d = sqrtf(c[i].base * c[i].base + c[i].altura * c[i].altura);
if (d > maxd) {
maxd = d;
idx = i;
}
}
return c[idx];
}
int main() {
retangulo r1 = {{0.0f, 0.0f}, 3.0f, 4.0f};
retangulo r2 = {{1.0f, 2.0f}, 5.0f, 2.0f};
retangulo r3 = {{-1.0f, -1.0f}, 2.0f, 2.0f};
retangulo arr[] = {r1, r2, r3};
int n = sizeof(arr) / sizeof(arr[0]);
retangulo r1 = {{0.0f, 0.0f}, 3.0f, 4.0f};
retangulo r2 = {{1.0f, 2.0f}, 5.0f, 2.0f};
retangulo r3 = {{-1.0f, -1.0f}, 2.0f, 2.0f};
retangulo arr[] = {r1, r2, r3};
int n = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < n; i++) {
printf("Retângulo %d:\n", i+1);
printf(" Origem: (%.2f, %.2f)\n", arr[i].origem.x, arr[i].origem.y);
printf(" Base: %.2f, Altura: %.2f\n", arr[i].base, arr[i].altura);
printf(" Área: %.2f\n", area(arr[i]));
ponto d = destino(arr[i]);
printf(" Destino: (%.2f, %.2f)\n\n", d.x, d.y);
}
retangulo m = maior(arr, n);
ponto md = destino(m);
printf("Retângulo com maior diagonal:\n");
printf(" Origem: (%.2f, %.2f)\n", m.origem.x, m.origem.y);
printf(" Destino: (%.2f, %.2f)\n", md.x, md.y);
printf(" Diagonal: %.2f\n", sqrtf(m.base * m.base + m.altura * m.altura));
return 0;
}