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

#11
La probaste al menos? Es C básico!

Cita de: -- KiLiaN -- en 27 Agosto 2012, 01:16 AMY no sería más fácil multiplicar por sí misma la variable y obtener así el cuadrado?

Pienzo lo mismo, para que quieres math.h si solo tienes que dividir y multiplicar dos números!

Te lo explico por partes:

// Si el resultado es cero abortamos la división
if(z == 0) // pero lo escribo asi if(!z)
return 0;
x = x/z; // pero lo escribo así x /= 2
x = x*x; // pero lo escribo asi x *= x

quedaría así

if(!z)
return 0;
x /= z;
x *= x;
return x;


Ahora el operador ternario

    a = (condicion)? (resultado_si): (resultado_no);
   
Si la condicion es verdadera, se asigna resultado_si, si es falsa se asigna resultado_no. Los paréntesis no son necesarios. Pero en nuestro caso tenemos dos operaciones para la ultima sentencia, así que la separamos con la coma

// si z vale 0 retornamos cero, en otro caso realizamos las dos operaciones...
// la expresión con comas tendra el valor de la última

resultado = (z == 0)? (0): (x /= z, x * x );

   return resultado;
   
Sintetizando nos queda así

    return !z? 0: (x /=z, x*x);
#12
Para utilizar una librería, no debes incluir todos los archivos de cabecera de las funciones que esta requiere internamente. No estas incluyendo windows.h para abrir sockets porque no los estas utilizando, no porque haya leído todo tu código fuente, sino porque asumo que lo has compilado antes de subir, el código compila correctamente, sino no lo subirías. Lo compilaste en Windows, por eso el include <windows.h>. Si estuvieras utilizando sockets en Windows deberías haber incluido el archivo de cabeceras para trabajar con ellos: winsock.h.

Probablemente sin "windows.h" no puedas compilar, pero lo aconsejable para compilar un cliente MySQL en Windows es que incluyas my_global.h, no windows.h directamente. http://dev.mysql.com/doc/refman/5.0/es/windows-client-compiling.html
#13
Cita de: MauroMasciar en 26 Agosto 2012, 23:27 PMPero que acaso g++ no es un compilador?

Exactamente a eso me referia!

Cita de: netco0m en 26 Agosto 2012, 23:35 PMgeneralmente programo con un compilador IDE llamado geany....

Geany es SOLO un IDE amigo, un buen IDE, valga la redundancia. De la página del autor http://www.geany.org: Geany is a text editor ... provide a small and fast IDE. No es un compilador.

Se me ocurrió que talvez no utilizabas compilador... luego de escribir tu código fuente lo transcribías al ensamblador y calculabas la posición de memoria de cada instrucción para determinar el destino de las instrucciones de salto, luego buscabas en la hoja de datos de tu micro el código de operación de cada nemónico y como se forman las instrucciones con parámetros, finalmente lo llevarías a un archivo binario con un editor haxadecimal. Si necesitabas enlace estático lo ponías al final y modificabas nuevamente los saltos. A enlaces dinámicos así como librerías grandes y recursos los esquivarías por conveniencia.
#14
El desensamblador del paquete NASM es muy bueno.

Buscas un desensamblador que regenere los fuentes en C? Si lo encuentras compártelo por favor!

Con NDASM obtendrás el código ASM del ejecutable, sin importar el lenguaje o compilador que haya utilizado su autor. Como sabrás, examinar este tipo de código es tedioso y lleva mucho tiempo, pero puedes auxiliarte con un editor hexadecimal (para intercalar paradas por ejemplo, si no posee crc) o herramientas que te permitan modificar los recursos de la aplicación (íconos, textos, etc.), así podrás correr el programa paso a paso mientras lo estudias.
#15
Muy buen aporte, como mencionas en español es escasa la información al respecto!
#16
Podrías hacerlo de este modo:

Código (cpp) [Seleccionar]
#include<stdio.h>

/* f(x,z) = (x/z)^2 */
float f(float x, float z)
{
return !z? 0: (x /=z, x*x);
}

int main()
{
printf("%f\n", f(20,4)); // salida: 25.00
printf("%f\n", f(24,2)); // salida: 144.00
return 0;
}
#17
Muy buen aporte!

Solo realizar esta aclaración: Dev-c++ no es un compilador, es un IDE, probablemente estes compilando con MinGW (podrías estar utilizando otro port como djgpp, o gcc sobre Linux, pero no lo creo en principio por el include <windows.h>... sin entrar en detalles, la explicación de porque la incluyes tampoco es correcta). Del sitio oficial: Bloodshed Dev-C++ is a full-featured Integrated Development Environment (IDE) for the C/C++ programming language.
#18
Estimado, lo escribo con ánimo de disipar la confusion.

No comprendo a que se refiere con manejar datos muy largos de MySQL con %c. El especificador de formato "%c" indica que el parámetro debe ser tratado como char, y la biblia del C (K&R 2.2, tipos y tamaños de datos) dice que el char tiene el tamaño de byte, por ende eso es lo máximo que podrás menejar con %c, o ¿Puedes citar alguna arquitectura para la cual se implementó un compilador C con tipos de datos char de más de 8 bits?

Por otra parte, C no puede manejar automaticamente los tipos datos DATE de MySQL. C trabaja con tipos de datos básicos. Demás esta esta aclaración, pero puede ser utilidad: En Unix y demás sistemas POSIX (probablemente en muchos otros sitemas no POSIX), time_t (tiene el mismo nombre en la libreria estándar del C) es un entero que representa la cantidad de segundos transcurridos desde la medianoche UTC del 1 de enero de 1970 sin contar los segundos itercalares (http://es.wikipedia.org/wiki/Segundo_intercalar). Por ejemplo, el viernes 13 de febrero de 2009, exactamente a las 23:31:30 (UTC), el tiempo Unix se igualó a '1234567890' (Google celebró este momento con el doodle: "date +%s"). El formato de fecha y hora de MySQL es una cadena que sigue cualquiera de estos esquemas: YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD, o YYMMDD. Puedes utilizar las funciones UNIX_TIMESTAMP() y FROM_UNIXTIME() para convertir entre valores TIMESTAMP de MySQL y los de Unix.

Utilizando tu ejemplo:

char fecha[20];
time_t now = time(NULL);
strftime(fecha, 20, "%Y-%m-%d %H:%M:%S", localtime(&now));
sprintf(consulta, "INSERT INTO nametable VALUES(%s)", fecha);
#19
Hola txenfsm, estuve ausente del foro por unos cuantos meses!
A esta altura espero que hayas solucionado tu problema, de no ser así, la expresión como la escribes sólo funcionara si las tres variables (nomb, id y fecha) son del tipo "const char *". Si fecha es del tipo "char" y la demás variables son "const char *" debería ser así:

sprintf(consulta, "INSERT INTO mitabla (nombre,dni,fecha) VALUES('%s','%s','%c')",nomb, id, fecha);
#20
En tu IF estas comparando con valida1, no deberías comparar con contrasena?
El operador de comparación es !=, tu escribes =!.
No necesitas en "\n" en scanf, con "%d" es suficiente, lo que haces es esperar un RETURN extra.
Modificando un poco tu codigo:

Código (cpp) [Seleccionar]
    do {
        printf("Ingrese su contraseña: ");
        scanf("%d", &contrasena);
if (contrasena == valida1)
break; // sale del while
if (contrasena == valida2)
break; // sale del while
printf("Su contraseña no es valida\n");
} while(1); // vuelve al inicio del bucle
    printf("Su codigo es valido!\n");