En una variable .....

Iniciado por Fox_Neo, 8 Junio 2010, 17:31 PM

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

Fox_Neo

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____

nicolas_cof

Mmmmm tendrias que poner el codigo, para que sepamos como lo quieres implementar y podamos ayudarte

Salu10.

M3LiNdR1

#2
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

Va baixar davant dels meus...ulls molt suaument...sense alterar la quietud de la nit,amb un somriure ple de confiança com sino se li escapes res...


C/C++ - Prolog - Java - PHP - Python - SQL - ASP.NET - C# - javascript

Fox_Neo

#3
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í:
Código (cpp) [Seleccionar]
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:

Código (cpp) [Seleccionar]
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 ;);




Littlehorse

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
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

nicolas_cof

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.

Fox_Neo

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.

Littlehorse

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!
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Fox_Neo

Ok muchas gracias por los consejos  buscaré también por el foro haber lo que encuentro.

Salu2.

M3LiNdR1

Si lo haces con strings, tendras que pasar los caracteres a enteros.
Va baixar davant dels meus...ulls molt suaument...sense alterar la quietud de la nit,amb un somriure ple de confiança com sino se li escapes res...


C/C++ - Prolog - Java - PHP - Python - SQL - ASP.NET - C# - javascript