Duda calcular radio círculo

Iniciado por welchu, 10 Febrero 2014, 11:27 AM

0 Miembros y 2 Visitantes están viendo este tema.

welchu

Hola, alguien me podría ayudar a hacer un programa que calcule el radio del círculo, según el área que haya metido el usuario?
Tengo esto empezado pero no se como seguir porque al llegar al cuadrado del radio no se como hacerlo. (Tiene que calcularse sin la librería math.h)

Gracias, un saludo!


/*Programa que el usuario da el area del circulo y calculamos el radio*/
#include <stdio.h>
int main()
{
    float area, radio, pi=3.1415, x;
   
    printf("Introduce el area del circulo: ");
    scanf("%f", &area);
   
    x=area/pi;
   

   
}

eferion

#1
Podrías optar por un algoritmo que vaya calculando la raiz cuadrada por aproximación y mediante un mecanismo de prueba y error.

1. Empiezas por un número... por ejemplo el 1
2. Ahora asignas un incremento... por ejemplo una unidad.
3. Coges el número y lo elevas al cuadrado
4. Si la potencia es menor que el área:
 4.1. incrementamos el número el valor de la variable "incremento"
 4.2. volvemos al paso 3
5. Si la potencia es mayor:
 5.1. restamos al número el valor de la variable "incremento"
 5.2. dividimos el incremento entre 10
 5.3. Si el incremento es menor a, por ejemplo 0.0001 damos por bueno el resultado y salimos
 5.4. sumamos al numero el valor de la variable "incremento"
 5.5. volvemos al paso 3.
6. Si la potencia es igual:
 6.1 Damos por bueno el resultado y salimos.

Lo de poner un tope de 0.0001 al incremento es por cuestiones de precisión.

Si PI lo has definido con 4 decimales, cualquier aproximación del radio que emplee más de 4 decimales va a estar mal.

También puedes optar por algoritmos más sofisticados y potentes... pero esos no se si los vas a entender y no creo que sean el objetivo de tu práctica.

PD.: No he puesto código porque espero que al menos te curres la tarea de codificar las instrucciones.

Gh057

Hola welchu, si la fórmula de cálculo de un área es A=pi * r^2  (en función del radio r) simplemente puedes reescribirla como A = pi * (r*r), declarando e indicando valores a ambas variables anteriormente, por lo cual ya no tendrías que usar la función pow. Saludos.
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

eferion

Cita de: Gh057 en 10 Febrero 2014, 12:28 PM
Hola welchu, si la fórmula de cálculo de un área es A=pi * r^2  (en función del radio r) simplemente puedes reescribirla como A = pi * (r*r), declarando e indicando valores a ambas variables anteriormente, por lo cual ya no tendrías que usar la función pow. Saludos.

No se si te has dado cuenta... pero el proceso a seguir es el inverso... recibe el área y tiene que calcular el radio.

welchu

No entiendo mucho lo que me ha dicho eferion, no puedo utilizar un algoritmo elevando porque utilizo el programa Dev c++. De momento tengo esto:

/*Programa que el usuario da el area del circulo y calculamos el radio*/
#include <stdio.h>
int main()
{
    float area, radio, pi=3.1415, x;
   
    printf("Introduce el area del circulo: ");
    scanf("%f", &area);
   
    x=area/pi;
   
    r*r=x;
   
    printf("El radio del circulo es %f", r);
   
    getchar();
    getchar();
    return 0;
}


Pero creo que está mal lo de x=r*r, no se como hacer ese paso para calcular el radio.

eferion

Dev C++ es un IDE, es decir, un entorno de desarrollo... solo sirve para facilitarte la tarea de programar... pero puedes hacer exactamente lo mismo con un editor de texto tipo block de notas. Con esto quiero decir que el IDE que uses es independiente del tipo de programa que quieras realizar... no te limita para nada.

Entendiendo por algoritmo una secuencia de pasos a seguir para conseguir un fin... tu propio main es un algoritmo... defectuoso en tu caso concreto pero un algoritmo al fin y al cabo.

Ahora, tocando el tema del área, podemos comentar lo siguiente (partiendo de la base de que son matemáticas básicas). Si tu sabes que el área de un círculo se calcula con la ecuación a = PI * r^2... entonces el radio es r = ( a / PI )^(1/2)... o lo que es lo mismo, la raiz cuadrada de a/PI.

En C los operadores de asignación funcionan de derecha a izquierda, es decir, se aplica en la parte izquierda el resultado de evaluar la parte derecha. Dicho con un ejemplo:


int a = 5;
int b = 4;
int c = a + b; // bien, c = 4 + 5 = 9
int d;
d * d = c; // mal... d * d = 9 ... el compilador no sabe resolver esto


Efectivamente, tu error está en la línea r*r=x... tú tienes que encontrar un r que verifique que r*r=x... y para encontrar ese valor yo te he propuesto un algoritmo que has de implementar... yo simplemente te he dado los pasos.

PD.: implementar un algoritmo significa escribir el código necesario para que el algoritmo cumpla su tarea.

Gh057

Hola eferion, luego que despeje la ecuación con lo que necesita... el tema que no tiene que utilizar la biblioteca math.h en donde figura la función pow. o bien se crea una nueva función de potenciación aparte para realizar el cálculo, o bien lo hace dentro del main... pi también tiene que definirla con un valor (por ejemplo 3.141519). El problema no está en como programarlo, sino de cómo plantear el algoritmo que le solucione su problema. Saludos.
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

eferion

Cita de: Gh057 en 10 Febrero 2014, 13:25 PM
Hola eferion, luego que despeje la ecuación con lo que necesita... el tema que no tiene que utilizar la biblioteca math.h en donde figura la función pow. o bien se crea una nueva función de potenciación aparte para realizar el cálculo, o bien lo hace dentro del main... pi también tiene que definirla con un valor (por ejemplo 3.141519). El problema no está en como programarlo, sino de cómo plantear el algoritmo que le solucione su problema. Saludos.

A ver, a no ser que se exprese mal... lo que tiene que hacer es calcular el radio a partir del área.

Partiendo de esa premisa... lo que necesita es la raiz cuadrada, no la potencia.

Lo vuelvo a repetir... si el área de un círculo se calcula con la fórmula a = PI*r^2... y la incógnita es el radio... la ecuación que permite calcular el radio es r = (a / PI)^(1/2)... o lo que es lo mismo, la raiz cuadrada de a/PI.

Como no puedes usar la función sqrt de math.h... tienes que programarla tú.

Con todo esto... una posible forma de calcular la raiz cuadrada la he expuesto en mi primera respuesta.

¿Tan mal me explico que tengo que repetir lo mismo 3 veces?

Gh057

hola eferion, como bien dices elevar r al cuadrado, o elevarlo a 1/2 (que es la raíz cuadrada de r), es lo mismo... sigue siendo una potenciación... lo que intenté decir es que lo veo al usuario welchu trabado por un problema matemático, mas bien que de implementación. Cuando tenga su algoritmo, el único requisito es no usar la biblioteca math.h, sino elaborar su propia función de potencia. Saludos.
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

welchu

Por lo que he entendido tengo que hacer primero un programa que calcule la potencia...no? e.e

Aquí esta:

#include <stdio.h>
int potencia(int base, int exponente)
{
    int resultado=1;
    int i;
   
    for(i=1; i<=exponente; i++)
       resultado *=base;
    return resultado;
}
int main()
{
    int num1, num2;
    printf("Introduzca la base: ");
    scanf("%d", &num1);
    printf("Introduzca el exponente: ");
    scanf("%d", &num2);
    printf("%d elevado a %d vale %d", num1, num2, potencia(num1,num2));
   
    getchar();
    getchar();
    return 0;
   
}

Ahora tengo que juntarlo con el otro?? A ver que pasa..