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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el ttwitter! de elhacker.NET


  Mostrar Mensajes
Páginas: 1 2 [3] 4 5
21  Programación / Programación C/C++ / Re: Problema con matriz dinámica en: 23 Mayo 2013, 14:42 pm
¿Nadie?
22  Programación / Programación C/C++ / Problema con matriz dinámica en: 22 Mayo 2013, 18:09 pm
Buenas, resulta que tengo que coger la información de un fichero .dat con la información de una matriz dinámica. Se supone que la estructura empleada es la siguiente:

Código
  1. typedef struct Matriz{
  2. int f;
  3. int c;
  4. double **m;
  5. }tMatriz;

He probado mil formas, pero no consigo coger correctamente la información del fichero. Ésta es la última forma que he probado:

Código
  1. int main()
  2. {      
  3. //Variables
  4. FILE *fichero;
  5. tMatriz *matriz;
  6. char nombre[15];
  7. int cantidad;
  8. int i;
  9. /****************************/
  10.  
  11. printf("Nombre del fichero: ");
  12. gets(nombre);
  13.  
  14. if( (fichero= fopen(nombre, "rb") ) == NULL )
  15. {
  16. printf("\nEl fichero no existe. El programa se cerrará...");
  17. Sleep(2500);
  18. exit(1);
  19. }
  20.  
  21. matriz = (tMatriz*) malloc( 20 * sizeof(tMatriz) );
  22.  
  23. matriz->m = (double**) malloc( 20* sizeof(double*) );
  24.  
  25. for(i=0; i < 20; i++)
  26. matriz->m[i] = (double*) malloc( 20* sizeof(double) );
  27.  
  28.  
  29. cantidad= fread(matriz, sizeof(tMatriz), 20, fichero);
  30. printf("%d\n", cantidad);    //9
  31. printf("%d\t%d", matriz->c, matriz->f);   //Basura
  32.  
  33. fflush(stdin);
  34.  
  35. return 0;
  36. }

El valor de 20 para las filas y columnas es uno elegido al azar.

Cuando imprimo los valores de 'c' y 'f', salen números que no tienen nada que ver con lo que corresponde. Y cuando intento imprimir los valores de la matriz, el programa peta y se cierra.

A ver si me podéis ayudar. Saludos.
23  Programación / Programación C/C++ / Re: Insertar un elemento ordenadamente en una lista enlazada simple en: 27 Abril 2013, 14:25 pm
Muchísimas gracias a todos, ya lo he conseguido con vuestra ayuda. Gracias!!
24  Programación / Programación C/C++ / Insertar un elemento ordenadamente en una lista enlazada simple en: 26 Abril 2013, 17:11 pm
Hola, tengo que hacer una lista enlazada simple en la que los elementos que se insertan, sea de una forma ordenada (de menor a mayor). He hecho la función y no consigo que funcione como debe, no sé cuál es el fallo y cómo debo corregirlo...

Os dejo la función (creo que no hace falta poner todo el programa, pero si así fuera decídmelo y lo pongo (igual me he líado con el nombre de alguna variable en la traducción jeje):

Código
  1. LISTA *meterElementoOrdenado(int num, LISTA *lista)
  2. {
  3. LISTA *nodo_aux, *inicio;
  4. int cont = 1;
  5.  
  6. inicio = lista;
  7. nodo_aux = (LISTA*) malloc( sizeof(LISTA) );
  8.  
  9. if(nodo_aux == NULL)
  10. printf("\nNo hay sitio para mas elementos...\n");
  11.  
  12. if(lista == NULL)
  13. {
  14. nodo_aux->numero = num;
  15. nodo_aux->siguiente = NULL;
  16. return nodo_aux;
  17. }
  18.  
  19. else
  20. {
  21. do
  22. {
  23.          if(num < lista->numero)
  24.          {
  25.                                   nodo_aux->numero = num;
  26.                                   nodo_aux->siguiente = lista->siguiente;
  27.                                  lista->siguiente = nodo_aux;
  28.                                  cont = 0;
  29.           }
  30.           lista = lista->siguiente;
  31.  
  32. }while( (lista != NULL) && (cont != 0) );
  33.  
  34. nodo_aux = inicio;
  35. return nodo_aux;
  36. }
  37.  
  38. }

Gracias de antemano y saludos.
25  Programación / Programación C/C++ / Re: No se añade elemento nuevo en una lista enlazada en: 23 Abril 2013, 10:05 am
Muchas gracias por responder rir3760, pero ya he descubierto mi fallo.

Para ejecutar las opciones, usaba la siguiente función:

Código
  1. void ejecutarOpcion(LISTA *lista, int opcion);

No me había dado cuenta de cuál era el fallo hasta que he copiado esa función en el main y sí funcionaba. En como parámetro tenía que pasarle la dirección de memoria de la lista, entonces había que definir el parámetro con un doble puntero, para que los cambios afectaran a todo el programa y no sólo en la función. Me alegro de haber podido corregir el fallo por mi cuenta  :D

De nuevo, gracias por tu atención.

Saludos
26  Programación / Programación C/C++ / No se añade elemento nuevo en una lista enlazada en: 22 Abril 2013, 11:23 am
Buenas, mi problema es el siguiente. Tengo una lista simplemente enlazada que la inicializo con los elementos de un array generados aleatoriamente. Esos elementos se insertan sin problema en la lista, pero cuando lo inserto manualmente, por el teclado por ejemplo, no se añade a la lista (o si se añade, no se visualiza). A ver si me podéis ayudar.

La estructura:

Código
  1. typedef struct lista{
  2. int numero;
  3. struct lista *siguiente;
  4. }LISTA;

La función para crear la lista
Código
  1. LISTA *crearLista(int num)
  2. {
  3. LISTA *lista;
  4.  
  5. lista = (LISTA*) malloc( sizeof(LISTA) );
  6.  
  7. lista->numero= num;
  8. lista->siguiente= NULL;
  9.  
  10. return lista;
  11. }
La función de añadir un elemento:

Código
  1. LISTA *anyadirElementoAlPrincipio(int num, LISTA *lista)
  2. {
  3. LISTA *nodo_nuevo;
  4.  
  5. nodo_nuevo= (LISTA*) malloc( sizeof(LISTA) );
  6. if(nodo_nuevo == NULL)
  7. printf("\nNo hay sitio para más números.\n");
  8.  
  9.        else
  10.        {
  11.        nodo_nuevo->numero = num;
  12.        nodo_nuevo->siguiente= lista;
  13.        }
  14.  
  15. return nodo_nuevo;
  16. }
  17.  

La función de ver la lista entera:

Código
  1. void mostrarLista(LISTA *lista)
  2. {
  3. printf("%d\n", lista->numero);
  4.  
  5. if(lista->siguiente != NULL)
  6. mostrarLista(lista->siguiente);
  7. }

En el main el uso de la función de añadir un elemento es exactamente igual con los elementos del array y con el introducido desde el teclado... Si ayudara en algo, decídmelo y lo pongo también.

Gracias de antemano y saludos.

PD: aprovecho para preguntar una duda que me ha surgido, cuando se llama a la función de añadir elementos, ¿no habría que liberar con free() el espacio reservado para el nodo que se usa en la función?
27  Programación / Programación C/C++ / Re: Incremento de punteros en: 29 Marzo 2013, 18:15 pm
Estas seguro que esa es la salida de ese codigo?
Recordar que haces un pos incremento.
Sí, lo he probado con más de un compilador.
28  Programación / Programación C/C++ / Incremento de punteros en: 29 Marzo 2013, 17:43 pm
Buenas, mi problema esta vez es el siguiente.

En realidad me gustaría que me explicarais el porqué de este resultado de este código.

El código:
Código
  1. #include <stdio.h>
  2.  
  3. #define MAXLINE 60
  4.  
  5. int main()
  6. {
  7. char *ptr;
  8. ptr = (char*) malloc(MAXLINE * sizeof(char) );
  9.  
  10. printf("Introduce una frase: ");
  11. fgets(ptr, MAXLINE+1, stdin);
  12.  
  13. printf("\n%p = %c", ptr,*ptr);
  14. ptr++;
  15. printf("\n%p = %c", ptr, *ptr);
  16.  
  17. printf("\n\n%p %p", ptr, ptr++);
  18.  
  19.  
  20. return 0;
  21. }

El resultado:


Mi duda es, ¿por qué hace el incremento "al revés"? Después de haber incrementado el puntero en uno para que apunte al segundo carácter (ahí en cambio no hay problema), luego en el printf no es la misma dirección de memoria.

Saludos y gracias de antemano.
29  Programación / Programación C/C++ / Re: Problema con array de punteros en: 26 Marzo 2013, 20:29 pm
Fíjate en esta sentencia:
Código
  1. palabras[i] = '\0';
¿A qué le estás asignando el carácter nulo, al array de caracteres o al array de punteros? :silbar:



Menudo despiste... Pensaba que la aritmética de punteros ya la dominaba por completo  ;D

Muchas gracias.
30  Programación / Programación C/C++ / Problema con array de punteros en: 26 Marzo 2013, 20:00 pm
Buenas, mi ejercicio es el siguiente: tengo que guardar un string en un array, y luego decir cuál es la palabra que más se repite. Para ello, he pensado guardar cada palabra en un array de punteros, y luego hacer las comparaciones y tal.

El problema viene cuando intento copiar manualmente caracteres en los arrays de punteros. En el siguiente ejemplo:

Código
  1. void copiarPalabras(char *string, char *palabras[]);
  2. {
  3.         int  i = 0;
  4.         //Para las primeras 10 letras, por ejemplo
  5.         palabras[0] = (char*) malloc(10 * sizeof(char) );
  6.  
  7.        while( *(string+ i) != ' ' )   //Copiamos la primera palabra de la frase
  8.       {
  9.       *(palabras[0] + i) = *(string+ i);
  10.       i++;
  11.       }
  12. palabras[i] = '\0';
  13. }
Si, por ejemplo, guardo desde el teclado "hola que tal" en string, en palabras[0] no sólo no se copia "hola", sino basura (strlen me dice que hay 24 caracteres en total). Si compruebo las vueltas que ha dado el bucle, efectivamente son 4 , el número de letras, y además añado el '\0' al final. Funciona mal reserve el espacio que reserve con malloc.

PD: con calloc en lugar de malloc sí funciona correctamente, pero quiero saber qué es lo que hago mal en esa función como está.

Gracias y saludos.
Páginas: 1 2 [3] 4 5
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines