Hola gracias por leer el post. Estoy haciendo una "calculadora", cuando quiero hallar logaritmos indico la base del logaritmo, quiero que si se pulsa la letra e (de logaritmo neperiano) me cargue el valor: base= 2.718281;
El problema que tengo es que no se como declarar la variable base porque si la declaro como número no me va a cargar la letra e y si la declaro como char no me admite números :huh:
Gracias.
Salu2.
_____Fox_Neo____
Mmmmm tendrias que poner el codigo, para que sepamos como lo quieres implementar y podamos ayudarte
Salu10.
Pues pon una condicion de que cuando le pidas la base, sea e o n. Declaras un char y lo lees, si es base e, le insertas el neperiano, si es n, les pides que te inserte el valor de la base.
En pseudo.
var
c: caracter;
i: entero;
base: real;
fvar
leer_caracter(c);
si c = "e" entonces base := 2.718281;
sino entonces
leer_entero(i)
base := (real) i;
fsi
Gracias por las respuestas.Cita de: M3LiNdR1 en 8 Junio 2010, 17:52 PM
Pues pon una condicion de que cuando le pidas la base, sea e o n. Declaras un char y lo lees, si es base e, le insertas el neperiano, si es n, les pides que te inserte el valor de la base.
En pseudo.
var
c: caracter;
i: entero;
base: real;
fvar
leer_caracter(c);
si c = "e" entonces base := 2.718281;
sino entonces
leer_entero(i)
base := (real) i;
fsi
Ya se por donde vas pero creo que no me has entendido bien según tu sería así: float base,exponente,argumento;
char base2;
cin>>base;
cin>>base2;
if(base2=='e')
{
base=2.718281;
}
El problema de esto es que tienes que introducir dos datos y aparte de saber que primero tienes que introducir una letra y después un númeno ya había pensado en esto pero me pareció una verdadera chapuza :¬¬
El dódigo:
case('l'):
cout<<"\ncalculo de logaritmos"<<endl;
cout<<"\nintroduce la base del logaritmo"<<endl;
float base,exponente,argumento;
cin>>base;
cout<<"\nintroduce el argumento"<<endl;
cin>>argumento;
exponente=(log(argumento))/(log(base));
cout<<"\nEl logaritmo de "<<argumento<<" de base "<<base<<"es "<<exponente<<endl;
cout<<"\nQuieres guardar el resultado en la memoria?"<<endl;
cin>>preg;
A ver cuando te pida la base que puedas introducir una letra o un número pero para ello tienes que declarar antes la variable en donde se va a cargar ese valor.
Una pregunta ¿Los strings admiten numeros?? si es así ¿Se podría declarar un string y que después lo lea y dependiendo de si lee la letra 'e' o un numero se pueda cargar el valor en una variable o en otra??
Gracias por las respuestas ;);
Si, admiten. Si lo quieres hacer con caracteres basta con leer un string y luego convertís los datos que necesitas descartando los que no.
Saludos
Te dejo una idea de codigo, pero en C, espero que te sirva...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main( void )
{
char *basec;
double base;
basec = malloc( 10 * sizeof( char ) );
printf( "Ingresar base: " );
basec = fgets( basec, 10, stdin );
if ( !strncmp( basec, "e", 1 ) )
base = 2.718281;
else
base = atof( basec );
printf( "%f\n", base );
free( basec );
return 0;
}
Salu10.
Cita de: Littlehorse en 8 Junio 2010, 18:36 PM
Si, admiten. Si lo quieres hacer con caracteres basta con leer un string y luego convertís los datos que necesitas descartando los que no.
Saludos
Gracias por la respuesta Littlehorse ¿Por curiosidad se puede hacer de otra manera sin usar strings?
Nicolas_cof gracias por el código, aunque no se como funcionan los strings todavía, creo que ya es hora de aprender algo sobre strings. :D
Gracias.Salu2.
Haber puede haber muchas formas, el tema es que la mayoría van a ser algo "chapuzas" como mencionaste. Lo bueno de utilizar cadenas (sea char* o string) es que ganas una flexibilidad que no podes obtener de otra forma, es decir, el input puede ser muy variado, incluso con operaciones u otro tipo de expresiones. Ese es el principal atributo de las cadenas en casos como estos.
Obviamente, el trabajo extra radica en validar y convertir los datos, pero es el precio que hay que pagar por hacer una entrada de datos mas segura.
Si nunca trabajaste con cadenas, te recomiendo que primeras veas las de tipo char, luego puedes ver las del tipo string.
El ejemplo que te puso Nico te sirve perfectamente, solo tienes que modificar los headers por las declaraciones correspondientes en C++ y reemplazar las llamadas de malloc y free por new y delete.
Saludos!
Ok muchas gracias por los consejos buscaré también por el foro haber lo que encuentro.
Salu2.
Si lo haces con strings, tendras que pasar los caracteres a enteros.
¡Buenas!
Si quieres calcular el logaritmo neperiano (base e) de cualquier numero, tienes en math.h (cmath si programas en C++) la funcion log, para base decimal tienes log10, y para cualquier otra base:
logab = logcb / logca
Para cuales quiera a,b,c reales a,b,c>0 y a,c!=1,0 (creo que estos son los valores para los que existe, aunque tampoco es que haya meditado mucho el tema de las bases...)
¡Saludos!
PD: Tambien podrias trabajar con base a negativa, pero esto te obligaria a utilizar numeros complejos, y me parece complicar mucho las cosas...
¡Saludos!
Esto... ejem... No habia prestado suficiente atencion...
La solucion, como bien te han indicado, es utilizar cadenas y las funciones que las manipulan.
¡Saludos!