[C con Clase] alguien me puede ayudar?

German Ponce german.informatico en gmail.com
Jue Jun 7 21:54:37 CEST 2007


yo trate de hacer en el borland 3.1 y me resulto asi

#include <math.h>
#include <stdio.h>
#include <ctype.h>

void exponente(float x, float n);
int main()
{

  float x, n;
  char cont;
  do
  {
      printf ("ingresar el numero: ");
      scanf ("%f", &x);
      printf("ingresar el exponente: ");
      scanf("%f",&n);
      exponente(x,n);
      printf("\n calcula otra potencia?, s/n: ");
      scanf("%s",&cont);
    } while (toupper(cont)== 'S');
     //system("PAUSE");
  return 0;

}
void exponente(float x, float n)
{
      float aux;
      if (x==0 && n==0) printf("indeterminado");
      else if (x!=0 && n==0) printf("el resultado es 1");
             else if (x!=0 && n==1) printf("%f",x);
                    else
                        {
                         aux= n*log(x);
                         printf("%f",exp(aux));
                         }
}

El día 7/06/07, Steven Davidson <steven en conclase.net> escribió:
>
> Hola Fabio,
>
> El pasado 2007-06-07 10:44:45, fabio escribió:
>
> f> por favor alguien me puede decir porque se ejecuta una sola vez este
> programa, es decir el ciclo "do -while" no se ejecuta hasta que el usuario
> ingresa el "n" para no seguir calculando potencias. pasa que calcula una
> poencia, luego sale la pregunta de si quiero calcular mas pero a
> continuacion esta la leyenda de "apriete una tecla para continuar" que
> corresponde al system("pause") creo yo, y a apretar una tecla la pantalla de
> ejecucion se sierra inmediatamente. muchas gracias.
>
> Sergio te ha contestado correctamente a la razón del problema que estás
> teniendo. Quiero agregar a lo que ha dicho.
>
> Después de leer los números de coma flotante, 'x' y 'n', el búfer del
> teclado contiene el carácter de fin-de-línea, '\n', producido al presionar
> la tecla [ENTER]. Cuando llegamos a leer el siguiente carácter, 'cont', el
> programa se encuentra con que el búfer no está vacía, y por tanto no pide
> caracteres al usuario. Se extrae y se guarda este carácter en el búfer a la
> variable 'cont'.
>
> La solución es extraer este carácter de fin-de-línea para vaciar el búfer
> del teclado y así podemos forzar a 'scanf()' a pedir caracteres al usuario.
> Por ejemplo,
>
> scanf( "%f",&n );
> getchar();  /* Extraer '\n' */
> exponente( x, n );
> printf( "\n calcula otra potencia?, s/n: " );
> scanf( "%c", &cont);
>
> Obviamente, la solución anterior funcionará correctamente si el usuario no
> escribe más de un carácter para 'cont'. Si esto ocurre, entonces no
> conseguimos mucho con extraer el siguiente carácter. Para ello, sugiero
> crear una cadena de caracteres auxiliar para sacar cuantos caracteres
> podamos. Por ejemplo,
>
> char aux[1024]="";
> ...
> scanf( "%f",&n );
> fgets( aux, 1024, stdin );  /* Extraer 1024 caracteres */
> exponente( x, n );
> printf( "\n calcula otra potencia?, s/n: " );
> scanf( "%c", &cont);
>
> Bajo ciertas bibliotecas, como las de Borland y Microsoft, puedes usar
> 'fflush()' para canales (o streams, en inglés) de entrada. Por norma, esto
> no es posible, pero algunas bibliotecas extienden el comportamiento
> estándar. Puedes probar escribiendo:
>
> scanf( "%f",&n );
> fflush( stdin );  /* Extraer todos los caracteres en el búfer del
> teclado*/
> exponente( x, n );
> printf( "\n calcula otra potencia?, s/n: " );
> scanf( "%c", &cont);
>
>
> De paso, quiero matizar sobre el código que nos has enviado:
> 1. La función 'main()' debe retornar un número entero de tipo 'int'. Por
> lo tanto, la definición debe ser:
>
> int main()
> {
> ...
> }
>
> 2. Por convenio, 'main()' retorna 0 (cero) para indicar que el programa ha
> terminado correctamente. Esto es,
>
> int main()
> {
>   ...
>   return 0;
> }
>
> 3. No es un error escribir el prototipo de una función dentro de un ámbito
> local, como por ejemplo dentro de otra función. Sin embargo, esto no es lo
> típico. Si no tienes una buena razón para localizar la función, sugiero
> declararla globalmente.
>
> 4. Supongo que estás probando algo al implementar la función
> 'exponente()'; posiblemente una tarea para alguna clase. Sólo quiero hacerte
> saber que <math.h> contiene la función estándar 'pow()' que hace
> justamente esto: elevar un número a la potencia de otro.
>
>
> Espero haber aclarado las dudas.
>
> Steven
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>



-- 
(\_/) *̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡
*̡͌l̡*
(O.o) Geman Ponce
(> <) Http://german2006.pandela.net
        "Es mejor que te odien por quien eres a que te amen por quien no
eres."
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070607/b2abc35d/attachment.html>


Más información sobre la lista de distribución Cconclase