Calcular puntos en un cuadrante de circunferencia.
El ejercicio o práctica de programación en lenguaje c que se plantea es el siguiente:
Realizar un algoritmo que visualice e indique la cantidad de puntos que se encuentran situados dentro de un circulo
con centro 0,0 en el cuadrante 1. Se amplia el ejercicio o práctica de forma que los puntos sean generados al azar en una matriz de puntos, una vez generados los puntos, calcular cuales están dentro del circulo, visualizar su angulo y el cuadrante al que pertenecen.
En la practica se han utilizado estructuras de datos, bucles, matrices, generación de números aleatorios, condicionales, etc.
Una posible solución al ejercicio puede ser la siguiente:
/*
El ejercicio o práctica de programación en lenguaje c
que se plantea es el siguiente:
Realizar un algoritmo que visualice e indique la cantidad
de puntos que se encuentran situados dentro de un circulo
con centro 0,0 en el cuadrante 1.
Se amplia el ejercicio o práctica de forma que los puntos
sean generados aleatoriamente en una matriz de puntos, una
vez generados los puntos, calcular cuales están dentro del
circulo, visualizar su angulo y el cuadrante al que pertenecen.
*/
// Definición de las librerías a utilizar
#include <stdio.h>
#include <stdlib.h>
// Inclusión de la librería de tiempo para
// el calculo posterior de un numero aleatorio
#include <time.h>
// Inclusión de la librería de matemáticas para
// realizar los cálculos mas cómodamente
#include <math.h>
// Definición de la estructura punto
typedef struct p {
int x;
int y;
} Punto;
// Definición del numero máximo de puntos a evaluar
#define MAX 20
#define M_PI 3.14159265358979323846
int main()
{
// Variables auxiliares a utilizar
int radio = 0;
int contador = 0;
int incremento = 0;
int vinicio = 0;
int vfinal = 0;
float x = 0;
float y = 0;
int signo = 0;
float angulo;
int cuadrante = 0;
int cuantos_cuadrante_uno = 0;
// Creación de la matriz de puntos
Punto matrizPuntos[MAX];
// Solicitar el radio del circulo
printf("Radio: ");
scanf("%d",&radio);
// Rellenar la matriz de puntos de forma aleatoria
// para ello utilizamos la función rand para generar
// los valores de los puntos, esta funcion esta incluida
// en la librería estándar
// se establece el inicio de la creación de los números
// aleatorios de forma que no se repitan las secuencias
// para ello se utiliza la función srand indicando un valor
// cambiante como puede ser la hora actual que se consigue
// mediante la función time, solo se ha de especificar una
// vez esta orden.
srand(time(NULL));
// se calcula el incremento a aplicar a los puntos a generar
// de esta forma generaremos puntos dentro y fuera de la
// circunferencia
incremento = radio/2;
// se establece el numero de inicio y final de los valores
// aleatorios
vinicio = 0;
vfinal = radio+incremento;
// se utiliza un bucle para recorrer la matriz de puntos
// y asignar un valor aleatorio a cada uno de las coordenadas
for(contador=0; contador<MAX; contador++) {
matrizPuntos[contador].x = (rand()%(vinicio+vfinal));
signo = rand()%2;
if(signo==0) matrizPuntos[contador].x = -matrizPuntos[contador].x;
matrizPuntos[contador].y = (rand()%(vinicio+vfinal));
signo = rand()%2;
if(signo==0) matrizPuntos[contador].y = -matrizPuntos[contador].y;
}
// se visualiza la matriz de puntos utilizando un bucle para
// recorrer la matriz y se realiza el calculo para comprobar
// si el punto se encuentra dentro de la circunferencia en caso
// de encontrarse dentro de ella se visualiza también un mensaje
for(contador=0; contador<MAX; contador++) {
printf("\n(%4d,%4d)",matrizPuntos[contador].x,matrizPuntos[contador].y);
// Comprobar si el punto se encuentra dentro de la circunferencia
x = matrizPuntos[contador].x;
y = matrizPuntos[contador].y;
// la forma más simple de comparación es preguntar si ambos valores
// x e y son inferiores al tamaño del radio
if(abs(x)<=radio && abs(y)<=radio){
// Si el punto esta incluido dentro del circulo
printf(" Si ");
// Se calcula su angulo
angulo = (180*acos(x/radio))/M_PI;
// Si x es 0 e y negativo se suma 180 grados
// ya que esta en cuadrante inferior
if(x==0 && y<0) angulo=angulo+180;
// Se divide el angulo entre 90 para obtener el cuadrante
cuadrante = (angulo/90)+1;
// Si esta en el primer cuadrante se utiliza un contador
if(cuadrante==1) cuantos_cuadrante_uno++;
// se visualiza angulo y cuadrante
printf(" %5.0f - %2d",angulo,cuadrante);
} else {
// si no esta incluido simplemente se visualiza no
printf(" No ");
}
}
// Se visualiza el total de puntos dentro del primer cuadrante
printf("El No. Total de puntos dentro del cuadrante 1 es : %d",cuantos_cuadrante_uno);
return 0;
}
Una vez realizada la compilación de la práctica con el compilador de C, y puesto en funcionamiento el programa, el resultado ha de ser similar al que se muestra a continuación.
Gracias por vuestra visita y ser fuertes que de esta salimos seguro!!!
Ah recordad!!!
if ( MeQuedoEnCasa == SoyResponsable ) {
printf("Lo Conseguiremos entre todos");
} else {
printf("Error 404 - Algo estas haciendo mal, piénsalo");
}