parte decimal

Iniciado por mapers, 4 Julio 2010, 08:59 AM

0 Miembros y 1 Visitante están viendo este tema.

mapers

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 (cpp) [Seleccionar]

#include <cstdlib>
#include <iostream>

int main()
{
    char cad[1000],cad1[1000];
    float num ,denom,x;
    int i,j=0,p;
    printf("TECLEA EL NUMERADOR  \n");
    scanf( "%x" ,&num);
    printf("TECLEA DENOMINADOR \n");
    scanf( "%x" ,&denom);
    x=num/denom;
    sprintf( cad, "%f",x);
    for(i=0;i<strlen(cad);i++)
    {
                   if(cad[i]=='.')
                   {
                    p=i;
                   
                    }
    }
    i=0;
    for(i=p+1;i<strlen(cad);i++)
    {
    cad1[j++]=cad[i];
    }
    i=0;
    for(i=0;i<strlen(cad1);i++)
    {
    printf( "%c",cad1);
    }
    printf( "\n");
     
    system("PAUSE");
}


nicolas_cof

#1
mapers, aca te dejo un codigo, te recomiendo que veas la documentacion sobre las funciones empleadas...

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

mapers

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

nicolas_cof

#3
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...

#include <cstring>
#include <cstdio>


para las funciones strlen() y sprintf()

y ademas tendrias que declarar el namespace std...

using namespace std;

Algunos errores en el codigo...

> En los printf...

printf( "%c", cad1 );

tendria que ser de esta forma...

printf( "%c", cad1[i] );

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

scanf( "%f" , &num );
...
scanf( "%f", &denom );


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

i = 0;
for ( i = p + 1; i < strlen( cad1 ) ; i++ )


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.

cbug

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!

do-while

¡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!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

nicolas_cof

Cita de: do-while en  4 Julio 2010, 18:23 PMSi 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()

...
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.