Code snips #2: Combinar C y Assembler (VC)
Tuesday, April 7th, 2009 Posted in Uncategorized | 1 Comment »Aca un ejemplo de como combinar C y Assembler. El compilador que use fue Visual C++. Se trata de una implementacion "rapida" de verificacion de primalidad. #include <stdio.h> #include <stdlib.h> #include <time.h> __inline int fsqrt(__int16 numero) { float x = (float)(numero); float xhalf = 0.5f * x; register int i = *(int*)&x; i = 0x5f3759d5 - (i >> 1); x = *(float*)&i; x = x*(1.5f - xhalf*x*x); return (__int8)(1/x); } __inline int esprimo(__int16 numero) { register __int8 resultado; register __int8 raiz = fsqrt(numero); __asm { mov ax, numero mov bl, 2 mov cx, ax mov dl, raiz cmp ax, 1 je noprimo cmp ax, 2 je primo div bl cmp ah, 0 je noprimo mov bl, 3 mov ax, cx ciclo: div bl cmp ah, 0 je noprimo add bl, 2 mov ax, cx cmp bl, dl jb ciclo jmp primo primo: mov resultado, 1 jmp fin noprimo: mov resultado, 0 fin: } return resultado; } int main(){ register __int16 numero = 1; register __int16 cont = 0; clock_t t_ini, t_fin; double diff; t_ini = clock(); while(numero < 500) { if(esprimo(numero) == 1) { cont++; } if(numero > 2) numero+=2; else numero++; } printf("Hay %d primos entre 1 y 500\n",cont); t_fin = clock(); diff = (double)(t_fin - t_ini); printf("%.16g ciclo(s) de reloj\n", diff); system("pause"); return 0; }
Code snips #1: Eliminar Archivo Definitivamente en C
Tuesday, April 7th, 2009 Posted in Uncategorized | No Comments »Eliminar un archivo definitivamente (es decir que no pueda ser recuperado) #include <stdio.h>#include <stdlib.h>int main(){ long tamArchivo; char * nomArchivo; FILE * archivo; long i; nomArchivo = "archivo.txt"; /* Nombre (si esta en misma carpeta) o ruta del archivo */ archivo = fopen(nomArchivo,"r+"); /* Abro el archivo para lectura/escritura */ fseek(archivo,0,SEEK_END); /* Recorro el archivo hasta el final */ tamArchivo = ftell(archivo); /* Almaceno la posicion actual en el archivo */ rewind(archivo); /* Regreso al principio del archivo */ for(i=0; i<tamArchivo; i++) /* Recorro cada posicion del archivo */ { fprintf(archivo,"%c",'0'); /* Imprimo un 0 en la posicion */ } fclose(archivo); /* Cierro el archivo */ remove(nomArchivo); /* Elimino el archivo */ return 0;}