Integer Sqrt
1 2 unsigned int sqrt(unsigned int n){ 3 unsigned int a; 4 for (a=0;n>=(2*a)+1;n-=(2*a++)+1); 5 return a; 6 }
DZone Snippets > jcongote > c
13457 users tagging and storing useful source code snippets
Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world
John Edgar Congote Calle http://jcongote.blogspot.com
1 2 unsigned int sqrt(unsigned int n){ 3 unsigned int a; 4 for (a=0;n>=(2*a)+1;n-=(2*a++)+1); 5 return a; 6 }
1 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 6 typedef struct _clase{ 7 int a; 8 void(*func[3])(struct _clase*); 9 } clase; 10 11 void clase_func1 (struct _clase *p){ 12 printf("Funcion 1: %i\n",p->a); 13 } 14 15 void clase_func2 (struct _clase *p){ 16 printf("Funcion 2: %i\n",p->a); 17 } 18 19 void clase_func3 (struct _clase *p){ 20 printf("Funcion 3: %i\n",p->a); 21 } 22 23 void holaMundo(){ 24 printf("Hola Mundo!\n"); 25 } 26 27 typedef void(*func) (void); 28 29 30 int main(int argc, char *argv[]) 31 { 32 func val; 33 clase c; 34 35 c.func[1]=&clase_func1; 36 c.func[2]=&clase_func2; 37 c.func[0]=&clase_func3; 38 39 val=&holaMundo; 40 val(); 41 c.a=1; 42 c.func[0](&c); 43 c.a=2; 44 c.func[1](&c); 45 c.a=3; 46 c.func[2](&c); 47 system("PAUSE"); 48 return 0; 49 } 50
1 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 void mostrar(int **a){ 6 int i,j; 7 for (i=0;i<10;i++){ 8 for (j=0;j<10;j++){ 9 printf("%i",a[i][j]); 10 } 11 printf("\n"); 12 } 13 14 }; 15 16 int main(){ 17 int i,j,**a; 18 a=(int**)malloc(10*sizeof(int*)); 19 20 for (i=0;i<10;i++){ 21 a[i]=(int*)malloc(10*sizeof(int)); 22 for (j=0;j<10;j++){ 23 a[i][j]=i; 24 } 25 } 26 mostrar(a); 27 getchar(); 28 return 0; 29 } 30
1 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <time.h> 5 6 7 int menu(){ 8 9 int select=0; 10 do{ 11 printf("Menu:\n"); 12 printf("1. Score\n"); 13 printf("2. Jugar\n"); 14 printf("3. Salir\n"); 15 printf("Entre la opcion:\n"); 16 scanf("%i",&select); 17 }while(!(select>0 && select<4)); 18 19 return select; 20 } 21 22 void mostrar_score(int puntaje){ 23 //Si puntaje <0 entonces no agrega jugador 24 //Sino puede agregarlo 25 } 26 27 void jugada_maquina(int **tablero, int f, int c){ 28 int i,j; 29 do{ 30 i=rand()%f; 31 j=rand()%c; 32 } while (!tablero[i][j]==0); 33 tablero[i][j]=2; 34 } 35 36 void mostrar_tablero(int **tablero,int f, int c){ 37 int i,j; 38 for (i=0;i<f;i++){ 39 for (j=0;j<c;j++){ 40 41 switch(tablero[i][j]){ 42 case 0: printf("*");break; 43 case 1: printf("X");break; 44 case 2: printf("O");break; 45 } 46 } 47 printf("\n"); 48 } 49 } 50 51 52 int evaluar(int **tablero,int f,int c){ 53 int i,j; 54 int cambio=0; 55 int tablas=1; 56 int gana=0; 57 do{ 58 cambio=0; 59 for (i=0;i<f;i++){ 60 for (j=0;j<c;j++){ 61 if(tablero[i][j]==3){ 62 if (i-1>0) 63 if (tablero[i-1][j]==1) 64 tablero[i-1][j]=3,cambio=1; 65 if (i+1<f) 66 if (tablero[i+1][j]==1) 67 tablero[i+1][j]=3,cambio=1; 68 if (j-1>0) 69 if (tablero[i][j-1]==1) 70 tablero[i][j-1]=3,cambio=1; 71 if (i+1<c) 72 if (tablero[i][j+1]==1) 73 tablero[i][j+1]=3,cambio=1; 74 } else if (tablero[i][j]==1){ 75 if (i-1>0) 76 if (tablero[i-1][j]==0) 77 tablero[i][j]=3,cambio=1; 78 if (i+1<f) 79 if (tablero[i+1][j]==0) 80 tablero[i][j]=3,cambio=1; 81 if (j-1>0) 82 if (tablero[i][j-1]==0) 83 tablero[i][j]=3,cambio=1; 84 if (i+1<c) 85 if (tablero[i][j+1]==0) 86 tablero[i][j]=3,cambio=1; 87 } 88 } 89 } 90 }while(cambio); 91 92 for (i=0;i<f;i++){ 93 for (j=0;j<c;j++){ 94 if (tablero[i][j]==1) 95 gana=1; 96 } 97 } 98 for (i=0;i<f;i++){ 99 for (j=0;j<c;j++){ 100 if(tablero[i][j]==3) 101 tablero[i][j]=1; 102 } 103 } 104 105 if (gana==1){ 106 return 2; 107 } 108 109 gana=0; 110 do{ 111 cambio=0; 112 for (i=0;i<f;i++){ 113 for (j=0;j<c;j++){ 114 if(tablero[i][j]==4){ 115 if (i-1>0) 116 if (tablero[i-1][j]==2) 117 tablero[i-1][j]=4,cambio=1; 118 if (i+1<f) 119 if (tablero[i+1][j]==2) 120 tablero[i+1][j]=4,cambio=1; 121 if (j-1>0) 122 if (tablero[i][j-1]==2) 123 tablero[i][j-1]=4,cambio=1; 124 if (i+1<c) 125 if (tablero[i][j+1]==2) 126 tablero[i][j+1]=4,cambio=1; 127 } else if (tablero[i][j]==2){ 128 if (i-1>0) 129 if (tablero[i-1][j]==0) 130 tablero[i][j]=4,cambio=1; 131 if (i+1<f) 132 if (tablero[i+1][j]==0) 133 tablero[i][j]=4,cambio=1; 134 if (j-1>0) 135 if (tablero[i][j-1]==0) 136 tablero[i][j]=4,cambio=1; 137 if (i+1<c) 138 if (tablero[i][j+1]==0) 139 tablero[i][j]=4,cambio=1; 140 } 141 } 142 } 143 }while(cambio); 144 145 for (i=0;i<f;i++){ 146 for (j=0;j<c;j++){ 147 if (tablero[i][j]==2) 148 gana=1; 149 } 150 } 151 for (i=0;i<f;i++){ 152 for (j=0;j<c;j++){ 153 if(tablero[i][j]==4) 154 tablero[i][j]=2; 155 } 156 } 157 if (gana==1){ 158 return 1; 159 } 160 161 162 163 for (i=0;i<f;i++){ 164 for (j=0;j<c;j++){ 165 if(tablero[i][j]==0) 166 tablas=0; 167 } 168 } 169 170 if (tablas==1) 171 return 4; 172 173 return 0; 174 } 175 176 177 int jugar(){ 178 int i,j,f,c; 179 int **tablero; 180 int puntaje=0; 181 182 printf ("Entre el numero de filas y columnas del tablero:\n"); 183 scanf("%i%i",&f,&c); 184 185 tablero = (int**)malloc(f*sizeof(int*)); 186 for (i=0;i<f;i++){ 187 tablero[i]= (int*)malloc(c*sizeof(int)); 188 for (j=0;j<c;j++){ 189 tablero[i][j]=0; 190 } 191 } 192 193 194 do{ 195 int ni,nj; 196 197 mostrar_tablero(tablero,f,c); 198 do{ 199 printf("Entre el numero de la coordenada:\n"); 200 scanf("%i%i",&ni,&nj); 201 if (ni==0 && nj==0){ 202 printf("Desea Salir (s/n)\n"); 203 if(getch()=='s'){ 204 for (i=0;i<f;i++){ 205 free(tablero[i]); 206 } 207 free(tablero); 208 return -1; 209 } else continue; 210 } 211 ni--;nj--; 212 if(!(ni>=0 && ni<f && nj>=0 && nj<c)){ 213 printf("La coordenana esta fuera de los limites\n"); 214 continue; 215 } 216 if (tablero[ni][nj]!=0){ 217 printf("La coordenada colocada esta ocupada\n"); 218 continue; 219 } 220 break; 221 }while (1); 222 223 tablero[ni][nj]=1; 224 if(evaluar(tablero,f,c)==0){ 225 jugada_maquina(tablero,f,c); 226 }else { 227 //gano el humano 228 } 229 puntaje=evaluar(tablero,f,c); 230 printf("puntaje: %i\n",puntaje); 231 }while(puntaje==0); 232 233 for (i=0;i<f;i++){ 234 free(tablero[i]); 235 } 236 free(tablero); 237 238 } 239 240 int main(){ 241 int salir=0; 242 do{ 243 244 switch (menu()){ 245 case 1: 246 mostrar_score(-1); 247 break; 248 case 2: 249 mostrar_score(jugar()); 250 break; 251 case 3: 252 salir=1; 253 break; 254 } 255 }while(!salir); 256 257 printf("Gracias por utilizar el programa"); 258 259 return 0; 260 } 261
1 2 3 typedef void (*funcptr)(); 4 5 (*(funcptr) 0)(); 6 7 int main(){ 8 9 }; 10
1 2 #include <stdio.h> 3 4 5 typedef struct _operation{ 6 unsigned int op; 7 int arg1; 8 int arg2; 9 int arg3; 10 } operation; 11 12 typedef struct _scriptEngine{ 13 int var[255]; 14 int ip; 15 int halt; 16 operation code[255]; 17 } scriptEngine; 18 19 void operation_run(const operation *p, scriptEngine *s){ 20 switch (p->op){ 21 case 0: //add 22 s->var[p->arg1] = s->var[p->arg2]+s->var[p->arg3]; 23 s->ip++; 24 printf("Realizando suma\n"); 25 break; 26 case 1: //sup 27 s->var[p->arg1] = s->var[p->arg2]-s->var[p->arg3]; 28 s->ip++; 29 printf("Realizando resta\n"); 30 break; 31 case 3: //mul 32 s->var[p->arg1] = s->var[p->arg2]*s->var[p->arg3]; 33 s->ip++; 34 printf("Realizando multiplicacion\n"); 35 break; 36 case 4: //div 37 s->var[p->arg1] = s->var[p->arg2]/s->var[p->arg3]; 38 s->ip++; 39 printf("Realizando division\n"); 40 break; 41 case 5: //mod 42 s->var[p->arg1] = s->var[p->arg2]%s->var[p->arg3]; 43 s->ip++; 44 printf("Realizando modulo\n"); 45 break; 46 case 6: //set 47 s->var[p->arg1] = p->arg2; 48 s->ip++; 49 printf("Realizando asignacion\n"); 50 break; 51 case 7: //halt 52 s->halt=1; 53 break; 54 case 8: //jump 55 s->ip=s->var[p->arg1]; 56 break; 57 default: 58 break; 59 } 60 61 } 62 63 scriptEngine* scriptEngine_new(){ 64 scriptEngine *new_script; 65 new_script = (scriptEngine*) malloc(sizeof(scriptEngine)); 66 new_script->ip=0; 67 new_script->halt=0; 68 return new_script; 69 } 70 71 void scriptEngine_delete(scriptEngine *script){ 72 free(script); 73 } 74 75 76 void scriptEngine_run(scriptEngine *script){ 77 78 int j; 79 80 while(script->halt==0){ 81 printf("Inicio de operacion\n"); 82 operation_run(&(script->code[script->ip]),script); 83 printf("Estado de la maquina:\n"); 84 for (j=0;j<5;j++){ 85 printf("Posicion de la memoria %i: %i\n",j,script->var[j]); 86 } 87 } 88 }; 89 90 void scriptEngine_create_example(scriptEngine *script, int example){ 91 switch (example){ 92 case 0: 93 script->code[0].op=6; //set 94 script->code[0].arg1=0; 95 script->code[0].arg2=10; 96 97 script->code[1].op=6; //set 98 script->code[1].arg1=1; 99 script->code[1].arg2=20; 100 101 script->code[2].op=0; //set 102 script->code[2].arg1=2; 103 script->code[2].arg2=0; 104 script->code[2].arg3=1; 105 106 script->code[3].op=7; 107 break; 108 } 109 } 110 111 int main(int argc, char **argv){ 112 113 scriptEngine* script; 114 script = scriptEngine_new(); 115 scriptEngine_create_example(script,0); 116 scriptEngine_run(script); 117 scriptEngine_delete(script); 118 119 system("PAUSE"); 120 return 0; 121 } 122 123
1 2 // vararg.cpp: define el punto de entrada de la aplicación de consola. 3 // 4 5 #include <stdarg.h> 6 #include <stdio.h> 7 8 int 9 add_em_up (int count,...) 10 { 11 va_list ap; 12 int i, sum; 13 14 va_start (ap, count); /* Initialize the argument list. */ 15 16 sum = 0; 17 for (i = 0; i < count; i++) 18 sum += va_arg (ap, int); /* Get the next argument value. */ 19 20 va_end (ap); /* Clean up. */ 21 return sum; 22 } 23 24 int 25 main (void) 26 { 27 /* This call prints 16. */ 28 printf ("%d\n", add_em_up (3, 5, 5, 6)); 29 30 /* This call prints 55. */ 31 printf ("%d\n", add_em_up (10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)); 32 33 return 0; 34 } 35 36
1 2 #include <GL/gl.h> 3 #include <GL/glut.h> 4 5 #include <stdio.h> 6 #include <math.h> 7 #include <stdlib.h> 8 9 #define MAXNODOS 100 10 11 typedef struct _point{ 12 float x,y,z; 13 } point; 14 15 typedef struct _force{ 16 float fx,fy,fz; 17 } force; 18 19 typedef struct _sisi{ 20 point p; 21 force f; 22 } sisi; 23 24 typedef struct _grafo{ 25 int nnodos; 26 sisi nodos[100]; 27 int enlaces[100][100]; 28 point max,min; 29 } grafo; 30 31 float angulo=0.0; 32 grafo grafo_global; 33 34 void calcularfuerzas(grafo *g){ 35 int i,j; 36 float distancia; 37 for (i=0;i<g->nnodos;i++){ 38 g->nodos[i].f.fx = 0.0f; 39 g->nodos[i].f.fy = 0.0f; 40 g->nodos[i].f.fz = 0.0f; 41 42 for (j=0;j<g->nnodos;j++){ 43 if (i!=j && g->enlaces[i][j]==1){ 44 distancia = sqrt(powf(g->nodos[i].p.x - g->nodos[j].p.x,2.0f) + powf(g->nodos[i].p.y - g->nodos[j].p.y,2.0f) + powf(g->nodos[i].p.z - g->nodos[j].p.z,2.0f)); 45 if ( distancia > 0.001f ){ 46 g->nodos[i].f.fx += (g->nodos[i].p.x - g->nodos[j].p.x) / powf(distancia,3.0f); 47 g->nodos[i].f.fy += (g->nodos[i].p.y - g->nodos[j].p.y) / powf(distancia,3.0f); 48 g->nodos[i].f.fz += (g->nodos[i].p.z - g->nodos[j].p.z) / powf(distancia,3.0f); 49 } 50 } 51 } 52 // Nene 53 54 distancia = sqrt(powf(g->nodos[i].p.x,2.0f)+powf(g->nodos[i].p.y,2.0f)+powf(g->nodos[i].p.z,2.0f)); 55 56 if (distancia>(float)g->nnodos){ 57 g->nodos[i].f.fx -= g->nnodos*g->nodos[i].p.x/powf(distancia,3.0f); 58 g->nodos[i].f.fy -= g->nnodos*g->nodos[i].p.y/powf(distancia,3.0f); 59 g->nodos[i].f.fz -= g->nnodos*g->nodos[i].p.z/powf(distancia,3.0f); 60 } 61 62 } 63 64 grafo_global.max.x=-1000; 65 grafo_global.max.y=-1000; 66 grafo_global.max.z=-1000; 67 grafo_global.min.x=1000; 68 grafo_global.min.y=1000; 69 grafo_global.min.z=1000; 70 71 for (i=0;i<g->nnodos;i++){ 72 // Movimiento 73 g->nodos[i].p.x+=g->nodos[i].f.fx; 74 g->nodos[i].p.y+=g->nodos[i].f.fy; 75 g->nodos[i].p.z+=g->nodos[i].f.fz; 76 77 if (grafo_global.max.x<grafo_global.nodos[i].p.x) 78 grafo_global.max.x=grafo_global.nodos[i].p.x; 79 80 if (grafo_global.max.y<grafo_global.nodos[i].p.y) 81 grafo_global.max.y=grafo_global.nodos[i].p.y; 82 83 if (grafo_global.max.z<grafo_global.nodos[i].p.z) 84 grafo_global.max.z=grafo_global.nodos[i].p.z; 85 86 if (grafo_global.min.x>grafo_global.nodos[i].p.x) 87 grafo_global.min.x=grafo_global.nodos[i].p.x; 88 89 if (grafo_global.min.y>grafo_global.nodos[i].p.y) 90 grafo_global.min.y=grafo_global.nodos[i].p.y; 91 92 if (grafo_global.min.z>grafo_global.nodos[i].p.z) 93 grafo_global.min.z=grafo_global.nodos[i].p.z; 94 } 95 96 } 97 98 void init_grafo(void){ 99 int i,j; 100 grafo_global.nnodos=30; 101 102 for (i=0;i<grafo_global.nnodos;i++){ 103 for (j=0;j<grafo_global.nnodos;j++){ 104 grafo_global.enlaces[i][j]=1; 105 } 106 grafo_global.nodos[i].p.x=rand()%10; 107 grafo_global.nodos[i].p.