Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - jhonsc

#1
Buenas, ¿alguien me dice si se puede obtener más precisión que la de long double en C? Lo pregunto por que estoy haciendo un programa que me calcule pi (sin un número de cifras definido, hasta que lo cierre) y ¡long double se queda corto para pi!  :xD
#2
Programación C/C++ / Re: Duda stdarg.h en C
2 Febrero 2012, 16:30 PM
Ok! ya lo consegui! Gracias!!! Y eso.... soy demasiado impaciente, quiero aprender mucho, pero tengo poco tiempo xD. Gracias de nuevo.
#3
Programación C/C++ / Re: Duda stdarg.h en C
1 Febrero 2012, 18:17 PM
Muchas gracias. Pero como puedo pasar caracteres en vez de números, por ejemplo:
fn('a','b','c');
?¿?¿
#4
Programación C/C++ / Re: Duda stdarg.h en C
31 Enero 2012, 20:56 PM
Hola, lo que quiero hacer es un mini kernel. Me funciona y todo (al nivel que escribe algo y punto). En la función printf necesito que me recoja, el texto, el color, y las variables. Por ejemplo, la llamaría así: int c=32; printf("Intento patético de kernel.\nLa variable c es %d\n","red",c);
Ya tengo el printf pero o solo consigo elegir color, o solo coger variables. Cuando intento los dos a la vez, ERROR.
Si sirve de algo, este es mi stdarg.h :

#ifndef _STDARG_H
#define _STDARG_H

typedef char *va_list;
#define __va_rounded_size(TYPE)  \
 (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))

#ifndef __sparc__
#define va_start(AP, LASTARG) \
(AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG)))
#else
#define va_start(AP, LASTARG) \
(__builtin_saveregs (), \
 AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG)))
#endif

void va_end (va_list);
#define va_end(AP)

#define va_arg(AP, TYPE) \
(AP += __va_rounded_size (TYPE), \
 *((TYPE *) (AP - __va_rounded_size (TYPE))))

#endif /* _STDARG_H */

Y el printf tendría esta forma (solo es parte):

int printf(char *text, char *color, ...)

Ah y me equivoqué antes y puse "main" en vez de "printf", lo siento, pero ya dije que no tenía el código y me lié escribiendolo.
#5
Programación C/C++ / Duda stdarg.h en C
31 Enero 2012, 16:32 PM
Buenas (de nuevo). Estoy intentando que un programa me coja unos argumentos fijos y luego, me pueda recoger un número indefinido de argumentos. He oído que sería:

#include <stdarg.h>
int printf(char *text, char *color, ...) //Esto es lo que he oído.
{
/*
Aquí iría lo que no tengo ni idea. Si no pongo la de color consigo que me  coja la variable
texto, pero las "no obligatorias" me las deforma. Son unos int. Por ejemplo, pongo 32 y
me sale 1034..., en fín, que se equivoca. Si pongo la de color... ni se ejecuta.
*/
return 0;
}

Siento no ponerles el código completo, pero no tengo acceso a él en este momento.
#6
Buenas, me podrían decir si se puede usar la biblioteca estándar de C fuera del sistema operativo. No se si me explico bien. Por ejemplo, utilizar printf() cuando creas un nuevo SO, pudiendo utilizar stdio.h y no tener que crear tus librerías, que la función printf() se pueda usar fuera del SO, sin cargar linux, o windows o lo que uses. Evidentemente no me propongo crear ningún SO, es simplemente por la curiosidad, que me está matando.
Perdonad mi ignorancia, pero tengo 14 años y no se mucho de C y menos de sistemas operativos.
#7
Muchísimas gracias de nuevo.
#8
Ya lo hice y me salió lo siguiente: (este es otro ejemplo, pero el error al utilizar atof es el mismo que con el código completo, lo hago para ahorrar espacio)

#include <stdio.h>
#include <string.h>
main(int argc, char *argv[])
{
double n1, n2, n3;
n1=atof(argv[1]);
n2=atof(argv[2]);
n3=atof(argv[3]);
printf("La variable n1= %f\nLa variable n2= %f\nLa variable n3= %f\n", n1, n2, n3 );
return 0;
}

Salida:


$ ./pam 3 4 5
La variable n1= 524288.000000
La variable n2= 0.000000
La variable n3= 262144.000000
$

Como ven, me cambia los números.
#9
Siento salir ahora con otra duda, pero, si quiero sumar dos decimales, y que el resultado se decimal que hago?¿ Esto es lo que llevo:

#include <stdio.h>
#include <string.h>

main(int argc, char *argv[])
{
float n1, n2, resultado;
n1=atoi(argv[1]);
n2=atoi(argv[2]);
resultado = n1 + n2;
printf("El resultado de sumar %f y %f es: %f\n", n1, n2, resultado);
salir();
}

int salir()
{
return 0;
}

El resultado es esta:

$ ./pam 3.5 + 3.4
El resultado de sumar 3.000000 y 3.000000 es: 6.000000
$

Cuando lo que espero es que me salga es:

$ ./pam 3.5 + 3.4
El resultado de sumar 3.500000 y 3.400000 es: 6.900000
$
#10
No me lo tomo a mal para nada, tranquilo. Gracias por la ayuda!