Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mapers en 4 Julio 2010, 08:59 am



Título: parte decimal
Publicado por: mapers en 4 Julio 2010, 08:59 am
quisiera que me ayudaran a ver en donde esta mi error ...
ejemplo dar el numerador y denominador 7/3 ...sale 2.3333333333333333 pero me lo debe de guardar en la cad1 solo la parte decimal el 33333333333333333 pero no me lo guarda a que se deve ....
Código
  1. #include <cstdlib>
  2. #include <iostream>
  3.  
  4. int main()
  5. {
  6.    char cad[1000],cad1[1000];
  7.    float num ,denom,x;
  8.    int i,j=0,p;
  9.    printf("TECLEA EL NUMERADOR  \n");
  10.    scanf( "%x" ,&num);
  11.    printf("TECLEA DENOMINADOR \n");
  12.    scanf( "%x" ,&denom);
  13.    x=num/denom;
  14.    sprintf( cad, "%f",x);
  15.    for(i=0;i<strlen(cad);i++)
  16.    {
  17.                   if(cad[i]=='.')
  18.                   {
  19.                    p=i;
  20.  
  21.                    }
  22.    }
  23.    i=0;
  24.    for(i=p+1;i<strlen(cad);i++)
  25.    {
  26.    cad1[j++]=cad[i];
  27.    }
  28.    i=0;
  29.    for(i=0;i<strlen(cad1);i++)
  30.    {
  31.    printf( "%c",cad1);
  32.    }
  33.    printf( "\n");
  34.  
  35.    system("PAUSE");
  36. }
  37.  
  38.  


Título: Re: parte decimal
Publicado por: nicolas_cof en 4 Julio 2010, 09:23 am
mapers, aca te dejo un codigo, te recomiendo que veas la documentacion sobre las funciones empleadas...

Código:
#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

int main( void )
{
    char cad01[100], cad02[100], *tmp = NULL;
    double num, denom, x;
    int i;

    cout << "Numerador: ";
    cin >> num;
    cout << "Denominador: ";
    cin >> denom;
   
    x = num / denom;
   
    sprintf( cad01, "%f", x );

    tmp = strchr( cad01, '.' );

    for( i = 0; *(++tmp) != '\0'; ++i )
    {
        cad02[i] = *tmp;
    }
    cad02[i] = '\0';

    cout << "cad01: " << cad01 << " - cad02: " << cad02 << endl;

    return 0;
}

Salu10.


Título: Re: parte decimal
Publicado por: mapers en 4 Julio 2010, 09:30 am
pero dime porque mi codigo no muestra lo mismo no se supone que hace  igual  

me refiero a la hora de guardar en cad1

for(i=p+1;i<strlen(cad);i++)
    {
    cad1[j++]=cad;
    }
porque no lo guarda


Título: Re: parte decimal
Publicado por: nicolas_cof en 4 Julio 2010, 09:38 am
mapers, tenes algunos errores de concepto...

> Tendrias que decidirte si usar C++ o C, ya que estas haciendo una mezcla...

> En el caso que usaras C++ te estaria faltando incluir...

Código:
#include <cstring>
#include <cstdio>

para las funciones strlen() y sprintf()

y ademas tendrias que declarar el namespace std...

Código:
using namespace std;

Algunos errores en el codigo...

> En los printf...

Código:
printf( "%c", cad1 );

tendria que ser de esta forma...

Código:
printf( "%c", cad1[i] );

> En los scanf tenes que usar %f no %x, este ultimo concuerda con un entero hexadecimal sin signo

Código:
scanf( "%f" , &num );
...
scanf( "%f", &denom );

> Es redundante inicializar i = 0;, si despues le volves a asignar otro valor...

Código:
i = 0;
for ( i = p + 1; i < strlen( cad1 ) ; i++ )

Código:
i = 0;
for ( i = 0; i < strlen( cad1 ); i++ )

Te recomendaria leer un libro, porque tenes muchos conceptos flojos... ( no te lo tomes a mal, es un consejo )

https://foro.elhacker.net/programacion_cc/librospapers_cc-t296234.0.html

y ademas...

https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Salu10.


Título: Re: parte decimal
Publicado por: cbug en 4 Julio 2010, 14:38 pm
Mapers podrías leerte un libro de C/C++ cómo ya se te ha recomendado desde el año pasado... aprender a utilizar un depurador... y por supuesto... aprender a escribir... un saludo!


Título: Re: parte decimal
Publicado por: do-while en 4 Julio 2010, 18:23 pm
¡Buenas!

Otra de las razones por  las que no funciona tu codigo, es que no finalizas cad1.

Si vas a utilizar string.h, despues de tmp=strchr(cad,'.'); te ahorraras bastante trabajo con un strcpy(cad1,tmp+1);

¡Saludos!


Título: Re: parte decimal
Publicado por: nicolas_cof en 4 Julio 2010, 22:59 pm
Si vas a utilizar string.h, despues de tmp=strchr(cad,'.'); te ahorraras bastante trabajo con un strcpy(cad1,tmp+1);

Mmmmmm yo no recomendaria el uso de strcpy(), mas bien usaria strncpy()

Código:
...
tmp = strchr( cad01, '.' );
++tmp;
strncpy( cad02, tmp, strlen(tmp) + 1 );
...

Aca hay una explicacion del porque no usarla, asi me ahorro en escribir yo ;D

http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Salu10.