elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Mensajes
Páginas: 1 ... 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 [88] 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 ... 235
871  Programación / Programación C/C++ / Re: Tutorial de archivos en lenguaje C. - en: 26 Agosto 2016, 23:57 pm
Cuando se tiene registros de longitud dinamica, y no tienes los datos cargados en memoria tienes que leerlos todos y reescribir todo el archivo o solo desde la parte que cambio.

Segun se te facilite si lo reescribe todo solo haces un ciclo y escribes desde 0 todo.

Si solo quieres modificar la parte modificada, tienes que situarte donde finaliza el ultimo registro no afectado fseek() y empezar a escribir apartir de ahi

Saludos
872  Programación / Desarrollo Web / Re: Acceso asincrono a Variables en: 26 Agosto 2016, 20:04 pm
Muy buen dia, gracias por las respuestas voy a leer los links que pusieron y los conceptos que mencionan para aprender mas ya que aunque se me da la programación, no tengo tanta experiencia en nivel web.

Cualquier duda que tenga la pondré por aquí.

Saludos!
873  Programación / Programación C/C++ / Re: qsort en: 26 Agosto 2016, 18:36 pm
Es la funcion QuickSort

https://en.wikipedia.org/wiki/Quicksort

Es una funcion que ordena un arreglo de menor a mayor
874  Programación / Programación C/C++ / Re: Tutorial de archivos en lenguaje C. - en: 26 Agosto 2016, 18:18 pm
El primer paso seria sanitizar la entrada (Limpiarla) y quitarle el \n del fin de linea para que no de el enter.

El segundo paso si lo quieres asi en forma Lineal es determinar como saber cuando empieza y termina cada registro. Se puede hacer de 2 formas,

Forma variable (Seperando con ',' o ';' o '.' o cual quier otro valor)
Forma estatica (Guardar una cantidad determinada de bytes en el archivo, rellenando los bytes restantes con valore NULL '\0')

Saludos!
875  Programación / Programación C/C++ / Re: [C++]Errores sin sentido en: 26 Agosto 2016, 17:28 pm
Cada día aprendemos cosas nuevas y ganamos mas experiencia.

Eso si resolvemos una duda y 2 mas aparecen.

Saludos
876  Programación / Programación C/C++ / Re: [C++]Errores sin sentido en: 26 Agosto 2016, 17:15 pm
Código
  1. #include <iostream>
  2. int main(){
  3.  
  4. }
  5.  
  6.    int sumar(){ //Si no pongo ; entre medio de las llaves da error
  7.    int a=2+2
  8.    std::cout << a << endl; //Este endl me da error
  9.    return 0;
  10.    }
  11.  

Las funciones deben de estar fuera del main

Saludos!
877  Programación / Programación C/C++ / Re: [C] Duda TATETI en: 26 Agosto 2016, 16:46 pm
NO ESTA TERMINADO AUN

Pero este programa genera tantos Arboles como queramos con ayuda de una funcion recursiva "next_moves" y la profuncidad deceada.

Primero se inicializa el tablero inicial con un valor random y apartir de ahi genera las siguientes "Level" Jugadas rellenando un arbol para su posterior evaluacion del siguiente mejor movimiento dado el turno Actual (Esto aun No esta)

Salida del programa (Aleatoria primera Jugada):

Código:
Tablero Actual:
...
...
...
Turno de X
X Jugo:
...
...
X..
Creando Nodo nuevo de Arbol
O..
...
X..
Creando Nodo nuevo de Arbol
.O.
...
X..
Creando Nodo nuevo de Arbol
..O
...
X..
Creando Nodo nuevo de Arbol
...
O..
X..
Creando Nodo nuevo de Arbol
...
.O.
X..
Creando Nodo nuevo de Arbol
...
..O
X..
Creando Nodo nuevo de Arbol
...
...
XO.
Creando Nodo nuevo de Arbol
...
...
X.O

Codigo (Espoiler EXCESO DE APUNTADORES Y MEMORIA DINAMICA)

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<time.h>
  5. #include<stdbool.h>
  6.  
  7. struct tablero {
  8. char juego[3][3];
  9. };
  10.  
  11. struct nodo {
  12. struct tablero *data;
  13. int total;
  14. struct nodo **aristas;
  15. };
  16.  
  17. struct move {
  18. char x,y;
  19. };
  20.  
  21. char *jugadores = "OX"; //0 = O , 1 = X
  22. void imprimir_tablero(struct tablero *t);
  23.  
  24. struct tablero *tablero_nuevo();
  25.  
  26. struct nodo *nuevo_nodo();
  27. struct nodo* create_nodo_from(struct tablero *t);
  28.  
  29. void next_moves(struct nodo *n,int turno,int level);
  30. struct move *best(struct tablero *actual,int turno,int level);
  31.  
  32. int main() {
  33. bool end = false;
  34. char x,y;
  35. struct tablero *inicial = NULL;
  36. srand(time(NULL));
  37. int turno = rand() % 2;
  38. inicial = tablero_nuevo();
  39. while(!end) {
  40. printf("Tablero Actual:\n");
  41. imprimir_tablero(inicial);
  42. printf("Turno de %c\n",jugadores[turno%2]);
  43. x = rand() % 3;
  44. y = rand() % 3;
  45. inicial->juego[x][y] = jugadores[turno%2];
  46. printf("%c Jugo:\n",jugadores[turno%2]);
  47. imprimir_tablero(inicial);
  48. //if(turno == 8) {
  49.  
  50.  
  51. end  = true;
  52. //}
  53. turno++;
  54. best(inicial,turno,1); //El nivel 1 es solo la siguiente jugada, a mas profundidad del arbol mas tarda, pero mas "dificilta" representa la computadora
  55. }
  56. return 0;
  57. }
  58.  
  59. struct move *best(struct tablero *actual,int turno,int level) {
  60. struct move *m = malloc(sizeof(struct move));
  61. struct nodo *raiz,*pivote,*aux;
  62. int i = 0;
  63. raiz = nuevo_nodo();
  64. raiz->data = malloc(sizeof(struct tablero));
  65. memcpy(raiz->data,actual,sizeof(struct tablero));
  66. next_moves(raiz,turno,level);
  67. return m;
  68. }
  69.  
  70. void next_moves(struct nodo *n,int turno,int level) {
  71. int i,j;
  72. struct nodo *temp = NULL;
  73. if(n) {
  74. i = 0;
  75. while(i < 3) {
  76. j =0;
  77. while(j < 3) {
  78. if(n->data->juego[i][j] == 0) {
  79. n->aristas = realloc(n->aristas,sizeof(struct nodo*)*n->total+1);
  80. n->aristas[n->total] = create_nodo_from(n->data);
  81. n->aristas[n->total]->data->juego[i][j] = jugadores[turno%2];
  82. if(level > 0) {
  83. next_moves(n->aristas[n->total],turno+1,level-1);
  84. printf("Creando Nodo nuevo de Arbol\n");
  85. imprimir_tablero(n->aristas[n->total]->data);
  86. }
  87. n->total++;
  88. }
  89. j++;
  90. }
  91. i++;
  92. }
  93. }
  94. }
  95.  
  96. struct nodo* create_nodo_from(struct tablero *t) {
  97. struct nodo *temp = nuevo_nodo();
  98. temp->data = tablero_nuevo();
  99. memcpy(temp->data,t,sizeof(struct tablero));
  100. return temp;
  101. }
  102.  
  103. struct nodo *nuevo_nodo() {
  104. struct nodo *n = calloc(1,sizeof(struct nodo));
  105. return n;
  106. }
  107.  
  108. struct tablero *tablero_nuevo() {
  109. struct tablero *temp = calloc(1,sizeof(struct tablero));
  110. return temp;
  111. }
  112.  
  113. void imprimir_tablero(struct tablero *t) {
  114. char i,j;
  115. if(t) {
  116. i = 0;
  117. while(i < 3) {
  118. j = 0;
  119. while(j < 3) {
  120. if(t->juego[i][j]) {
  121. printf("%c",t->juego[i][j]);
  122. }
  123. else {
  124. printf(".");
  125. }
  126. j++;
  127. }
  128. printf("\n");
  129. i++;
  130. }
  131. }
  132. }

La base para ver MAS jugadas esta en el tercer parametro de la funcion best, el cual si quertemos un arbol de mas profundidad cambiamos el 1 por 2 o 3 o X.... segun el nivel que queramos

Código
  1. best(inicial,turno,1);

Saludos!
878  Programación / Programación C/C++ / Re: Tutorial de archivos en lenguaje C. - en: 26 Agosto 2016, 16:41 pm
Tienes toda la razon mi estimado :)  ;-)
879  Programación / Programación C/C++ / Re: Tutorial de archivos en lenguaje C. - en: 26 Agosto 2016, 16:15 pm
Una buena idea para depurar el código y encontrar el error seria imprimir las direcciones y/o valores de las variables por ejemplo en tu caso:

Código
  1. fprintf("%p\n",recordatorio);

Si ya sabemos que el error esta en X linea ponemos el printf justo antes del error

Eso  os imprime la dirección a la cual esta apuntado, y si vemos que son puros 000000 sabremos que no lo hemos inicializado.

Saludos!
880  Programación / Programación C/C++ / Re: Ayuda do-while en: 26 Agosto 2016, 14:57 pm
Tal vez tiene un

Código
  1. system("pause");

Saludos
Páginas: 1 ... 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 [88] 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 ... 235
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines