Guião laboratorial n.º 2 – exercício 1
1. Considere que necessita de armazenar informação sobre figuras geométricas num espaço com duas dimensões.
a) Crie tipos estruturados que lhe permitam representar um ponto e um retângulo.
b) Desenvolva uma função que inicialize uma estrutura do tipo retângulo. Toda a informação necessária deve ser fornecida pelo utilizador. A função devolve a estrutura inicializada.
c) Desenvolva uma função que devolva a área de uma estrutura do tipo retângulo passada como argumento;
d) Desenvolva uma função que verifique se uma estrutura do tipo retângulo passada como
argumento é um quadrado. Se for, a função deve devolver 1. Caso contrário, devolve 0.
e) Desenvolva uma função que receba, como argumentos, uma estrutura do tipo retângulo e um ponto e devolva 1 se o ponto estiver dentro do retângulo.
f) Desenvolva uma função que desloque um retângulo no plano. A função recebe três argumentos: um ponteiro para o retângulo o deslocar, o deslocamento ao longo do eixo xx e o deslocamento ao longo do eixo yy.
g) Declare uma tabela que permita armazenar 4 retângulos. A tabela deve ser uma variável local da função main(). Utilize a função desenvolvida na alínea b) para preencher todos os elementos da tabela.
h) Desenvolva uma função que verifique se numa tabela onde estejam armazenados vários retângulos existem dois que tenham a mesma área. A função recebe como argumentos o endereço do primeiro elemento da tabela e o número de elementos que esta contém. Como resultado, deve devolver o valor 1 se existirem dois retângulos com a mesma área (devolve 0 se todos os retângulos tiverem áreas diferentes).
#include <stdio.h> #include <stdlib.h> #define TAM 4 struct ponto{ int oX; int oY; }; typedef struct retangulo{ struct ponto n; int largura; int altura; } r1; struct retangulo r; struct ponto p; void iniciaR(){ scanf(" %d", &r.n.oX); scanf(" %d", &r.n.oY); scanf(" %d", &r.largura); scanf(" %d", &r.altura); }; void iniciaP(){ scanf(" %d", &p.oX); scanf(" %d", &p.oY); }; void verdados(){ printf("\nOrigemX: %d, OrigemY: %d, Largura: %d, Altura: %d\n", r.n.oX, r.n.oY, r.largura, r.altura); } void verdados2(){ printf("\nPonto OrigemX: %d, Ponto OrigemY: %d\n", p.oX, p.oY); } int verarea(struct retangulo k){ int area; area=k.altura*k.largura; return area; } int verificaQ(struct retangulo k){ if(k.altura==k.largura){ return 1; } else{ return 0; } } int verificaDentro(struct retangulo k, struct ponto pn){ if(pn.oX<(k.n.oX+k.largura) && pn.oY<(k.n.oY+k.altura) && pn.oX>=k.n.oX && pn.oY>=k.n.oY){ return 1; }else{ return 0; } } void deslocar(r1 *p, int ax, int ay){ printf("\no quadrado esta na origem em %d %d", p->n.oX, p->n.oY); p->n.oX = p->n.oX+ax; p->n.oY = p->n.oY+ay; printf("\no quadrado foi deslocado para %d %d", p->n.oX, p->n.oY); } //g void iniciaR2(struct rg *p, int d){ int i; for(i=0;i<d;i++){ scanf(" %d", &r.n.oX); scanf(" %d", &r.n.oY); scanf(" %d", &r.largura); scanf(" %d", &r.altura); } }; void verdados3(){ printf("\nOrigemX: %d, OrigemY: %d, Largura: %d, Altura: %d\n", r.n.oX, r.n.oY, r.largura, r.altura); } int main() { iniciaR(); verdados(); printf("A area tem o valor de: %d", verarea(r)); if(verificaQ(r)==1){ printf("\ne quadrado\n"); }else{ printf("\nnao e quadrado\n"); } iniciaP(); if(verificaDentro(r, p)==1){ printf("\nesta dentro\n"); }else{ printf("\nnao esta dentro\n"); } //f) int deslocaX=2; int deslocaY=2; deslocar(&r, deslocaX, deslocaY); //g) struct retangulo rG[TAM]; iniciaR2(rG, TAM); //verdados3(r1 tabela, TAM); return 0; } //incompleto
0 thoughts on “Guião laboratorial n.º 2 – exercício 1”