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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Mensajes
Páginas: 1 ... 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 [125] 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 ... 161
1241  Programación / Programación C/C++ / Re: Mostrar la Hora al cabo de 1 segundo en: 6 Mayo 2016, 23:35 pm
El sistema numérico de un ordenador no es sexagesimal por lo que no se pondrá a 0 cuándo llegue la cuenta a 60. Tampoco sabe que 60 segundos son un minuto. Todo eso tendrás que enseñárselo.

Por cierto: no puedes Horas no pueden ser 24, ni los minutos ni los segundos pueden ser 60.
1242  Programación / Programación C/C++ / Re: [C] Listas enlazadas utilizando arreglos en: 6 Mayo 2016, 18:39 pm
La premisa para que funcione la función es que la lista siempre debe estar terminada con NULL. Si está vacía debe estar apuntando a NULL.

La función pondrá el nodo generado con el dato al final de la lista. Siguiendo la primera premisa éste último nodo debe apuntar a NULL en next.

Lo que se hace es:
Se genera un nodo a partir de la información dada por data.

Si la lista está vacía, NULL, pasará a apuntar al nodo nuevo.
Si la lista no está vacía hay que recorrerla hasta encontrar el último elemento (aquel que apunte a NULL), cambiar el valor next para que apunte al nuevo nodo generado y regresar la lista entera, eso es el primer elemento (list).

Lo que ves en
Código
  1. while (slist_next(node) != slist_nil()) {
  2.    node = slist_next(node);
es precisamente ese recorrido. node apunta al principio de la lista (list) y vamos a trabajar sobre node. Mientras el elemento next de node no sea NULL, node apuntará a node->next (en el código esto está encapsulado por node = slist_next(node). Una vez llegado a éste último elemento la orden list_next(node) = newNode; coloca el nuevo nodo al final de la lista.
Como el inicio de la lista no ha sido modificado (list) y hay que regresar un puntero, precisamente al inicio de la lista, devolvemos list.

Otra versión sin estas macros es así:
Código
  1. SList slist_append(SList list, int data) {
  2.    Slist node;
  3.    SList newNode = malloc(sizeof(SNode));
  4.  
  5.    newNode->data = data;
  6.    newNode->next = NULL;
  7.  
  8.    if(list == NULL)
  9.        return newNode;
  10.  
  11.    node = list;
  12.  
  13.    while(node->next != NULL)
  14.        node = node->next;
  15.  
  16.    node->next = newNode;
  17.  
  18.    return list;
  19. }
1243  Programación / Programación C/C++ / Re: Duda STRCMP en: 6 Mayo 2016, 17:53 pm
Busca correspondencia 1 a 1 hasta la longitud que especifiques, en ese sentido busca una subcandena; de acuerdo con todo lo demás.

Eso es strncmp  :rolleyes:
1244  Programación / Programación C/C++ / Re: Duda STRCMP en: 6 Mayo 2016, 16:58 pm
strcmp busca una correspondencia 1 a 1 entre las dos cadenas por tanto
  • ¿Hay diferencias de capitalización entre las dos cadenas?
  • ¿Usas una família gets por un lado y scanf por otro? (las famílias fgets guardan el '\n', scanf no lo guarda)
  • Cuándo guardas los nicks en main, o donde sea, ¿estás seguro que no quedan carácteres en el buffer de entrada y se los pasas a la siguiente cadena cuándo vuelves a pedir datos?
1245  Programación / Programación C/C++ / Re: AYUDA PROGRAMA EN C:No detecta los tipo Char en: 6 Mayo 2016, 13:47 pm
Bien, veo que lo has escrito deprisa y corriendo. Para otra vez formatea el código, se agradece verlo bien presentado.

Dentro del bucle do-while, pon la primera instrucción que lleve control a 0. Si hay algún fallo control empezará el bucle ya con código de error y no saldrás de él.

Para scanf, debes hacer que acepte un máximo de 4 caracteres, sino podrías crear desbordamiento de la variable resp. Sobre la variable resp, ella misma ya actúa como puntero y no debes pasarle la dirección de memoria.

No uses fflush(stdin) no es estándar y no va bien con todos los compiladores. Hay alternativas con funciones de librería y un poco de código.

resp<'0'&& resp>'9' puedes sustituirlo por la función de librería isdigit de ctype.h

En el 'case 0' has escrito, en su última instrucción control==1, una comparación sin efecto. Supongo que querías hacer una asignación.

1246  Programación / Programación C/C++ / Re: [C] Listas enlazadas utilizando arreglos en: 6 Mayo 2016, 10:10 am
La funciones lo que hacen es devolver el inicio de la lista modificada.
Le entregas la lista y la modificación y la función te la devuelve modificada.

Si quieres que sea más específico deberás decirme exactamente que es que no entiendes.
1247  Programación / Programación C/C++ / Re: Ayuda en trabajo de Arreglos/Matrices en: 5 Mayo 2016, 20:38 pm
Está bien lo de la optimización, pero te has saltado lo de que el usuario entra la coordenada de donde quiere el 0. Si lo pone en una esquina no puede haber espejos y el máximo valor del recuadro es 10.
1248  Programación / Programación C/C++ / Re: Ayuda en trabajo de Arreglos/Matrices en: 5 Mayo 2016, 19:57 pm
Si a una mitad del recuadro la tratas de una forma y a la otra mitad la tratas de otra nunca llegarás a una solución coherente.
En vez de usar un cuadro de 11x11 usa uno de 3x3 y sitúate en el centro. Obviamente el anillo exterior todo son 1s.
Código:
111
101
111
Reduciendo más el problema, si tomas en cuenta solo la distancia de los puntos en el eje X
Código:
101
101
101
y teniendo en cuenta solo la distancia de los puntos en el eje Y
Código:
111
000
111
Superponiendo estos dos últimos recuadros y tomando la conjunción lógica de ambos queda
Código:
101
000
101
¿Qué operación hace que los 0 del anillo tomen el valor de las esquinas?
1249  Programación / Programación C/C++ / Re: [C] Listas enlazadas utilizando arreglos en: 5 Mayo 2016, 16:31 pm
Hace una cosa extraña.

Está pensado para modificar la misma lista que se le pasa, pero en vez de modificar directamente el parámetro list lo que hace es modificarlo y regresar un puntero con el dato modificado. Seguramente el autor pensó en esa solución para dar un valor en caso de que list fuera NULL. Pero hubiera hecho lo mismo con un puntero a puntero y el resultado habría sido más natural.

Supongamos el siguiente trozo de código:
Código
  1. SList mi_lista = NULL;
  2.  
  3. mi_lista = slist_append(mi_lista, 5);

Ahora mi_lista pasa a tener un elemento con un valor en data de 5. Continuamos con la variable mi_lista tal y como la hemos dejado en el siguiente código:
Código
  1. mi_lista = slist_append(mi_lista, 7);
Ahora mi_lista tiene dos elementos, uno que contiene el 5 y otro que contiene el 7. Se puede representar así [5 , 7].

Pero qué pasaría si hubiera:
Código
  1. SList lista_uno = NULL;
  2. SList lista_dos = NULL;
  3.  
  4. lista_uno = slist_append(lista_uno, 5);
  5. lista_dos = slist_append(lista_uno, 7);
¿Era esto lo que esperaba el autor que se hiciera?

Casi mejor hubiera sido definir la función con un puntero a puntero.
Código
  1. void slist_append(SList * list, int data) {
  2.    /* Implementación de la función */
  3. }
  4.  
  5. /* Código y más código */
  6.  
  7. SList mi_lista = NULL;
  8. slist_append(&mi_lista, 5);
  9. slist_append(&mi_lista, 7);

Ahora mi_lista estaría actualizada con [5 , 7] pero no habría posibilidad de darle a otra lista la posibilidad de acceder a los datos de ésta con lo que se previenen errores a la hora de escribir el programa.

Por otra parte esconder un puntero dentro de un typedef no es muy buena práctica, pero cada uno hace lo que quiere.

Por otra parte, sobre la primera pregunta: tal vez un array de punteros. Los elementos apuntados no se mueven de su sitio, lo que cambias son los punteros del array y tienes un array para acceder a ellos.
1250  Programación / Programación C/C++ / Re: ¿Que es más eficiente, utilizar array o memoria dinámica? [C] en: 5 Mayo 2016, 16:07 pm
Sí, cada compilador genera su propio código y en verdad no se puede asegurar que uno u otro optimice más.
Por ejemplo GCC con O2 no genera ni el array en el ejemplo del array en pila de Eternal Idol:
Código
  1. main:
  2. .LFB24:
  3. .cfi_startproc
  4. sub rsp, 8
  5. .cfi_def_cfa_offset 16
  6. mov edx, 2
  7. mov esi, OFFSET FLAT:.LC0
  8. mov edi, 1
  9. xor eax, eax
  10. call __printf_chk
  11. xor eax, eax
  12. add rsp, 8
  13. .cfi_def_cfa_offset 8
  14. ret
  15. .cfi_endproc



Todo depende de cada compilador y de la configuración que se le da. Continuar ahora sería entrar en una guerra de compiladores, jeje, y no es plan.
Páginas: 1 ... 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 [125] 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 ... 161
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines