• Viernes 19 de Abril de 2024, 01:37

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Rombus

Páginas: [1] 2 3 ... 5
1
GNU/Linux / Re: GDB en Karmic
« en: Miércoles 17 de Marzo de 2010, 22:31 »
Solucionado.

No sé como (tampoco me importa xD) pero en la última actualización del sistema se solucionó.
Ahora puedo debuggear tranquilo :D

2
GNU/Linux / GDB en Karmic
« en: Domingo 14 de Marzo de 2010, 17:17 »
Hola gente, hace unos días necesité del GDB y probando con todos los IDE's que me crucé me di cuenta que hay un bug en Ubuntu relativo al GDB.

Obtengo este error:
Citar
> aviso: GDB: Failed to set controlling terminal: Operación no permitida

Buscando no encontré la solución a este problema y no importa que IDE use, el error está en otro lado.

¿Alguna idea?

3
C/C++ / Re: como imprimo esta cadena?
« en: Viernes 20 de Marzo de 2009, 12:57 »
si, es como dice phobos.

se llaman secuencias de escape, sirven para representar caracteres "no imprimibles" y algunos mas como en este caso la doble comilla.

el \ muestra una barra ;)

aca tenes mas info si queres investigarlos un poco:
http://aurea.es/wp-content/uploads/4-mo ... guajec.pdf
http://www.zator.es/Cpp/E3_2_3e.htm
http://www.alegsa.com.ar/Notas/97.php

saludos!

4
C/C++ / Re: Simple Case Error
« en: Lunes 5 de Enero de 2009, 15:47 »

5
C/C++ / Re: Simple Case Error
« en: Lunes 5 de Enero de 2009, 15:44 »
:o!

eso me es muy util  :beer:


estoy buscando documentacion sobre eso, conoces alguna pagina que tenga info acerca de eso?

gracias!

6
C/C++ / Re: Simple Case Error
« en: Lunes 5 de Enero de 2009, 14:54 »
a q te refieres con el codigo scan del teclado?

7
C/C++ / Re: Programacion de Sockets en C
« en: Martes 30 de Diciembre de 2008, 23:43 »
pagame y te ayudo con la tarea ;)

8
C/C++ / Re: duda map dentro de vector
« en: Martes 30 de Diciembre de 2008, 16:15 »
aaa C++

por eso no te entendia lo de map xD

me quede careta  :(

solo se C

esperemos q otra persona mas sabia te pueda ayudar  :beer:

9
C/C++ / Re: duda map dentro de vector
« en: Lunes 29 de Diciembre de 2008, 19:37 »
hola ;)

creo q no te entendi muy bien, pero si te sirve de ayuda, podrias hacer una estructura con dos campos, uno string y otro int, y luego un vector de dicha estructura, entonces a cada posicion del vector podrias facilmente asignarle un numero y una palabra.


saludos ;)

10
C/C++ / Simple Case Error
« en: Lunes 29 de Diciembre de 2008, 19:32 »
Hola gente!

estoy haciendo un programa con una sentencia switch muy extensa, y me encontre con un error bastante simple que no eh podido eliminar.

el codigo reducido al problema es este (esta hecho para wingdows):

Código: Text
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4.  
  5. int main(void){
  6.     char caracter;
  7.    
  8.     printf("%dn",VK_NUMPAD0);
  9.     printf("%dnn",VK_NUMPAD9);
  10.  
  11.     printf("%dn",'1');
  12.     printf("%dnn",'9');
  13.  
  14.     printf("%dn",'A');
  15.     printf("%dnn",'Z');
  16.  
  17.     for(caracter = 0; caracter < 256; caracter++){
  18.             switch(caracter){
  19.                 case 'A'||'B'||'C'||'D'||'E'||'F'||
  20.                      'G'||'H'||'I'||'J'||'K'||'L'||
  21.                      'M'||'N'||'O'||'P'||'Q'||'R'||
  22.                      'S'||'T'||'U'||'V'||'W'||'X'||
  23.                      'Y'||'Z'||
  24.  
  25.                      '1'||'2'||'3'||'4'||'5'||
  26.                      '6'||'7'||'8'||'9'||'0':
  27.                             printf("aguante...n");
  28.  
  29.                     break;  
  30.                 case VK_NUMPAD0||VK_NUMPAD1||VK_NUMPAD2||VK_NUMPAD3||VK_NUMPAD4||
  31.                      VK_NUMPAD5||VK_NUMPAD6||VK_NUMPAD7||VK_NUMPAD8||VK_NUMPAD9:                    
  32.                         printf("..el metal!!n");                                      
  33.                     break;
  34.             }
  35.     }
  36.  
  37.     return 0;
  38. }
  39.  

el error q obtengo es el de que el valor case '1' ya ha sido utilizado.
Lo extraño , o capaz mi mal interpretacion del error, es que ninguna constante usada en los cases es 1, imprimi sus valores al comienzo del programa y demuestra que no hay valores repetidos.

sera que estoy utilizando mal la sentencia switch case?


saludos!

11
C/C++ / Re: Matrices C++ !!
« en: Miércoles 29 de Octubre de 2008, 06:24 »
Cita de: "Geo"
Cita de: "m0skit0"
Por cierto, eternity, ha dicho C++, no C.
¿Y no sirve también ese código en C++?


calculo q si

12
C/C++ / Re: Asignacion de punteros
« en: Viernes 24 de Octubre de 2008, 17:47 »
pero es un arbol binario de busqueda.. no nesesito tener valores repetidos

13
C/C++ / Re: Asignacion de punteros
« en: Viernes 24 de Octubre de 2008, 17:09 »
Citar
puede que funciones pero no estoy seguro de si if(!nodo) es lo mismo que prguntar if (nodo == NULL), esto es mucho mas decifrable cuando se labura con punteros jeje

si  if (!nodo) seria preguntar por si nodo == NULL


Citar
otra, en tu codigo no conteplabas en los casos que arbol->funCmp(nodo->valor, aIngresar) eran iguales a cero, en ese caso nunca harias nada yo lo solucione con un <= 0 eso me garantiza que todos los valores seran insertados;
y de vuelta vos llamaste dos veces a arbol->funCmp(nodo->valor, aIngresar) cuando por defecto en un IF, sabes la contrapartida colocando un ELSE

claro, justamente no quiero q haga nada cuando sea 0, pq significa q ese valor ya esta ingresado, y no hace falta volverlo a ingresar.

por eso en vez de poner un else pongo un else if, para dejar fuera cuando me de 0

 :good:

14
C/C++ / Re: Asignacion de punteros
« en: Viernes 24 de Octubre de 2008, 16:13 »
:O


un par de datos bastante interesantes tiraste  ahi  :beer:

gracias ternitys!

15
C/C++ / Re: Asignacion de punteros
« en: Viernes 24 de Octubre de 2008, 15:12 »
Citar
Pero no olvides hacer un free() de los malloc() que hayas hecho.

si, ya tengo la destructora. ;)

Citar
Sigo pensando que con POO quedaría mucho más bonito, puesto que tienes destructores que se encargan de esto.

seguramente.. pero un gran problema para mi es que no se C++ XD!

y es verdad lo del arbol por parametro solo lo necesito para usar esas funciones

gracias moskito!

un saludo  :comp:

16
C/C++ / Re: Asignacion de punteros
« en: Viernes 24 de Octubre de 2008, 14:57 »
Cita de: "m0skit0"
Tú lo que estas insertando en el árbol no son los valores de i, sino el puntero a i, por lo tanto es lógico que nodo_t *nodo y void *aIngresar sean el mismo

gracias moskito!!

es verdad  :wacko:

lo soluicione modificando la funcion creaNodo(); de esta manera:

Código: C
  1. nodo_t *creaNodo(arbol_t *arbol, void *valor, nodo_t *der, nodo_t *iz){
  2.     nodo_t *nodo = (nodo_t *)malloc(sizeof(nodo_t));
  3.     void *dato = malloc(sizeof(void*));
  4.     assert(dato);
  5.     assert(nodo);
  6.  
  7.     nodo->valor = dato; //para que nodo->valor apunte a una dir valida antes de hacer el memcpy
  8.     memcpy((char *)(nodo->valor), (char *)valor, sizeof(nodo_t));
  9.     nodo->der = der;
  10.     nodo->iz = iz;
  11.    
  12.     return nodo;
  13. }
  14.  

asi con el memcpy copio el contenido y no la direccion  :beer:


gracias!

17
C/C++ / Asignacion de punteros
« en: Viernes 24 de Octubre de 2008, 05:18 »
Hola gente!

estoy realizando un arbol generico y me encuentro con el problema (despues de depurar bastante) que no estoy asignando bien los hijos de los nodos.


mi codigo es el siguiente, como siempre, listo para compilar:

Código: C
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <assert.h>
  4.  
  5. typedef int (*_funCmp_t)(void *a, void *b);
  6. typedef void (*_funPrint_t)(void *a);
  7.  
  8. ///Arbol
  9. typedef struct _nodo{
  10.     void *valor;
  11.     struct _nodo *iz;
  12.     struct _nodo *der;
  13. }nodo_t;
  14.  
  15. ///Estructura administrativa
  16. typedef struct {
  17.     int sizeTipo;           //Tamaño del dato a almacenar
  18.     nodo_t *raiz;
  19.     _funCmp_t funCmp;       //Funcion de comparacion
  20.     _funPrint_t funPrint;   //Funcion de impresion
  21. }arbol_t;
  22.  
  23. int comparaEnteros(void *a, void *b){
  24.     return *((int *)a) - *((int *)b);
  25. }
  26. void imprimeEnteros(void *a){
  27.     printf("lol: %d",*(int *)a);
  28. }
  29.  
  30. arbol_t *arbolCreate(int sizeTipo, _funCmp_t funCmp, _funPrint_t funPrint){
  31.     arbol_t *arbol = (arbol_t *)malloc(sizeof(arbol_t));
  32.     assert(arbol);
  33.  
  34.     arbol->sizeTipo = sizeTipo;
  35.     arbol->funCmp = funCmp;
  36.     arbol->funPrint = funPrint;
  37.     arbol->raiz = NULL;
  38.     return arbol;
  39. }
  40.  
  41. nodo_t *creaNodo(arbol_t *arbol, void *valor, nodo_t *der, nodo_t *iz){
  42.     nodo_t *nodo = (nodo_t *)malloc(sizeof(nodo_t));
  43.     assert(nodo);
  44.  
  45.     nodo->valor = valor;
  46.     nodo->der = der;
  47.     nodo->iz = iz;
  48.    
  49.     return nodo;
  50. }
  51. nodo_t *arbolInsert(arbol_t *arbol, nodo_t *nodo, void *aIngresar){
  52.     if(!nodo)
  53.         return creaNodo(arbol, aIngresar, NULL, NULL);
  54.    
  55.     if(arbol->funCmp(nodo->valor, aIngresar) > 0)
  56.         nodo->iz = arbolInsert(arbol, nodo->iz, aIngresar);
  57.     else if(arbol->funCmp(nodo->valor, aIngresar) < 0)
  58.         nodo->der = arbolInsert(arbol, nodo->der, aIngresar);
  59.     return nodo;
  60. }
  61. void printArbol(arbol_t *arbol, nodo_t *nodo){  //Preorden
  62.     if(nodo)
  63.         arbol->funPrint(nodo->valor);
  64.  
  65.     if(nodo->iz)
  66.         printArbol(arbol, nodo->iz);
  67.     if(nodo->der)
  68.         printArbol(arbol, nodo->der);
  69. }
  70.  
  71. int main(void){
  72.     arbol_t *arbol = arbolCreate(sizeof(int),comparaEnteros, imprimeEnteros);
  73.     int i = 5;
  74.  
  75.     arbol->raiz = arbolInsert(arbol, arbol->raiz, (void *)&i);
  76.     i =4;
  77.     arbol->raiz = arbolInsert(arbol, arbol->raiz, (void *)&i);
  78.     i =3;
  79.     arbol->raiz = arbolInsert(arbol, arbol->raiz, (void *)&i);
  80.     i = 7;
  81.     arbol->raiz = arbolInsert(arbol, arbol->raiz, (void *)&i);
  82.    
  83.    
  84.     printArbol(arbol, arbol->raiz);
  85.     return 0;
  86. }
  87.  

el problema creo q esta en la funcion arbolInsert(); ya que nunca entra ni en el IF ni el ELSE IF de dicha funcion, siempre termina devolviendo el return creaNodo(); lo que genera que no se forme un arbol.. siempre se inserta en la cabeza y lo que habia antes se pierde.

esto se debe a que la comparacion que contemplan los if's: arbol->funCmp(nodo->valor, aIngresar) , siempre da 0, y es porque tanto el valor que recibe como parametro nodo_t *nodo y  void *aIngresar es el mismo :O!, imprimo las direcciones de memoria y los valores y siepmre compara (por ejemplo) A con A, B con B, y en la funcion de comparacion cuando las cadenas son iguales devuelve 0.

entiendo que es lo que pasa... lo que no me sale es como arreglarlo :S


alguien sabe como evitar esto?

gracias de antemano!

18
C/C++ / Re: proglema con metodo de sacar la diferencia de años
« en: Miércoles 22 de Octubre de 2008, 20:38 »
fijate arriba del cuadro donde podes escribir cuando dejas un mensaje que hay como unas cajitas con texto adentro, B i u Quote Code ....

pincha la Code y pone entre el [ CODE  ]  y el [    /CODE    ] el codigo, cuando veo un codigo sin indentar ni ganas dan de leerlo

19
C/C++ / Re: Validar enteros en C
« en: Domingo 19 de Octubre de 2008, 19:33 »
hey! el_uni

hacer un system("clear") (en linux) equivaldria a hacer un clrscr(); en borland ?

20
C/C++ / Re: Punteros A Funcion
« en: Sábado 18 de Octubre de 2008, 18:29 »
ufff

 :wacko: siempre se me confunden


gracias Eternal IDOL!! :beer:

cuando tenga todas las estructuras genericas las voy a compratir con la comunidad XD

21
C/C++ / Re: VOLTEAR LA CADENA
« en: Sábado 18 de Octubre de 2008, 18:27 »
hola!

acuerdo con eternal idol, usa librerias standar!!

XD

mira, a de mas de lo q te dijo eternal idol, lo que haces en el for que muestra la cadena al revez esta bien, pero solo la muestra, despues cuando intentas imprimir la cadena modificada, la va a imprimir normal, pq no cambiaste sus valores.

saludos!

22
C/C++ / Re: Punteros A Funcion
« en: Sábado 18 de Octubre de 2008, 18:10 »
:O!

si! ahi lo arregle!

return creaNodo(listAdm, lista, elemento);

en vez de

return creaNodo(listAdm, listAdm->entrada, elemento);


y me anda pero solo con enteros, pruebo con string y no me anda :S

mira:
Código: C
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <assert.h>
  4. #include <string.h>
  5. #define FALSE 0
  6. #define TRUE !FALSE
  7. typedef char boolean;
  8. typedef int (*list_funCmp_t)(void *a, void *b);
  9. typedef void (*list_funPrint_t)(void *a);
  10.  
  11. //#define INT 0
  12.  
  13. #define STRING 0
  14. //#define CHAR 0
  15.  
  16.  
  17. typedef struct lPtr{
  18.     void *valor;
  19.     struct lPtr *next;
  20. }list_t;
  21.  
  22. typedef struct{
  23.     list_t *entrada;    //Entrada a la lista;
  24.     int sizeTipo;
  25.     list_funCmp_t funCmp;
  26.     list_funPrint_t funPrint;
  27. }listAdm_t;
  28.  
  29.  
  30. ///Funciones de COMPARACION---------------------------------------///
  31. int comparaEnteros(void *a, void *b){
  32.     return *(int *)a - *(int *)b;
  33. }
  34. int comparaCadenas(void *a, void *b){
  35.     return ((int)strcpy((char *)a, (char*)b));  //0 si son iguales, > 1 si b < a; < 1 si a < b
  36. }
  37.  
  38. ///Funciones de IMPRESION----------------------------------------///
  39. void imprimeEnteros(void *a){
  40.     printf("%d",*(int *)a);
  41. }
  42. void imprimeCadenas(void *a){
  43.     printf("%s",(char *)a);
  44. }
  45.  
  46. ///Servicios de LISTA
  47. listAdm_t *lAdmCreate(int sizeTipo, list_funCmp_t funCmp, list_funPrint_t funPrint){    //Crea La estructura administrativa
  48.     listAdm_t *listAdm = (listAdm_t *)malloc(sizeof(listAdm_t));
  49.     assert(listAdm);
  50.  
  51.     listAdm->funCmp = funCmp;
  52.     listAdm->funPrint = funPrint;
  53.  
  54.     listAdm->sizeTipo = sizeTipo;
  55.     listAdm->entrada = NULL;
  56.  
  57.     return listAdm;
  58. }
  59. list_t *creaNodo(listAdm_t *lista, list_t *pNext, void *elemento){  //necesito la estructura administrativa para el peso de dato
  60.     list_t *nodo = (list_t *)malloc(sizeof(list_t));
  61.     assert(nodo);
  62.  
  63.     nodo->valor = malloc(lista->sizeTipo);      assert(nodo->valor);
  64.     nodo->next = pNext;
  65.     memcpy((char *)nodo->valor, (char *)elemento, lista->sizeTipo);
  66.  
  67.     return nodo;
  68. }
  69. list_t *lInsertOrdered(listAdm_t *listAdm, list_t *lista, void *elemento){  //Ordenado de menor a mayor
  70.     if( !lista || (listAdm->funCmp(lista->valor,elemento)) >= 0  ){
  71.         return creaNodo(listAdm, lista, elemento);
  72.     }
  73.     lista->next = lInsertOrdered(listAdm, lista->next, elemento);
  74.     return lista;
  75. }
  76. void printList(listAdm_t *listAdm, list_t *list){
  77.     if(list){   //Si existe la lista
  78.         listAdm->funPrint(list->valor);
  79.         printf(" - ");
  80.         printList(listAdm, list->next);
  81.     }
  82. }
  83.  
  84. int main(void){
  85.     #ifdef STRING
  86.         char i[] = "AAZ", b[] = "AAA";
  87.         listAdm_t *lista = lAdmCreate(sizeof(i), comparaCadenas,imprimeCadenas);
  88.     #endif
  89.     #ifdef CHAR
  90.         char i = 'a', b = 'g';
  91.         listAdm_t *lista = lAdmCreate(sizeof(char), comparaCaracteres,imprimeCaracteres);
  92.     #endif
  93.     #ifdef INT
  94.         int i= 6, b = 9;
  95.         listAdm_t *lista = lAdmCreate(sizeof(int), comparaEnteros,imprimeEnteros);
  96.     #endif
  97.  
  98.     lista->entrada = lInsertOrdered(lista, lista->entrada, (void *)&i);
  99.     lista->entrada = lInsertOrdered(lista, lista->entrada, (void *)&b);
  100.    
  101.     #ifdef INT  
  102.         i = 0;
  103.         b = 8;
  104.     #endif
  105.     #ifdef STRING
  106.         strcpy(i,"ZZZ");
  107.         strcpy(b,"BBB");
  108.     #endif
  109.    
  110.     lista->entrada = lInsertOrdered(lista, lista->entrada, (void *)&i);
  111.     lista->entrada = lInsertOrdered(lista, lista->entrada, (void *)&b);
  112.  
  113.     printList(lista, lista->entrada);
  114.     return 0;
  115. }
  116.  
  117.  

23
C/C++ / Punteros A Funcion
« en: Sábado 18 de Octubre de 2008, 17:39 »
Hola gente!

estoy realizando una estructura generica de lista (sigo con mis estructuras genercias XD) y estoy teniendo un problema a la hora de implementar una funcion insertaOrdenado(); que lo que debe hacer es , justamente, insertar nodos de manera ordenada segun el campo a comparar que se le sea especificado con un puntero a funcion.


el codigo con el problema aislado es el siguiente, esta completo para poder probarlo directamente:

Código: C
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <assert.h>
  4. #include <string.h>
  5. #define FALSE 0
  6. #define TRUE !FALSE
  7. typedef char boolean;
  8. typedef int (*list_funCmp_t)(void *a, void *b);
  9. typedef void (*list_funPrint_t)(void *a);
  10.  
  11. #define INT 0
  12. /*
  13. #define STRING 0
  14. #define CHAR 0
  15. */
  16.  
  17. typedef struct lPtr{
  18.     void *valor;
  19.     struct lPtr *next;
  20. }list_t;
  21.  
  22. typedef struct{
  23.     list_t *entrada;    //Entrada a la lista;
  24.     int sizeTipo;
  25.     list_funCmp_t funCmp;
  26.     list_funPrint_t funPrint;
  27. }listAdm_t;
  28.  
  29.  
  30. ///Funciones de COMPARACION---------------------------------------///
  31. int comparaEnteros(void *a, void *b){
  32.     return *(int *)a - *(int *)b;
  33. }
  34. int comparaCadenas(void *a, void *b){
  35.     return ((int)strcpy((char *)a, (char*)b));  //0 si son iguales, > 1 si b < a; < 1 si a < b
  36. }
  37.  
  38. ///Funciones de IMPRESION----------------------------------------///
  39. void imprimeEnteros(void *a){
  40.     printf("%d",*(int *)a);
  41. }
  42. void imprimeCadenas(void *a){
  43.     printf("%s",(char *)a);
  44. }
  45.  
  46. ///Servicios de LISTA
  47. listAdm_t *lAdmCreate(int sizeTipo, list_funCmp_t funCmp, list_funPrint_t funPrint){    //Crea La estructura administrativa
  48.     listAdm_t *listAdm = (listAdm_t *)malloc(sizeof(listAdm_t));
  49.     assert(listAdm);
  50.  
  51.     listAdm->funCmp = funCmp;
  52.     listAdm->funPrint = funPrint;
  53.  
  54.     listAdm->sizeTipo = sizeTipo;
  55.     listAdm->entrada = NULL;
  56.  
  57.     return listAdm;
  58. }
  59. list_t *creaNodo(listAdm_t *lista, list_t *pNext, void *elemento){  //necesito la estructura administrativa para el peso de dato
  60.     list_t *nodo = (list_t *)malloc(sizeof(list_t));
  61.     assert(nodo);
  62.  
  63.     nodo->valor = malloc(lista->sizeTipo);      assert(nodo->valor);
  64.     nodo->next = pNext;
  65.     memcpy((char *)nodo->valor, (char *)elemento, lista->sizeTipo);
  66.  
  67.     return nodo;
  68. }
  69. list_t *lInsertOrdered(listAdm_t *listAdm, list_t *lista, void *elemento){  //Ordenado de menor a mayor
  70.     if( !lista || (listAdm->funCmp(lista->valor,elemento)) >= 0  ){
  71.         return creaNodo(listAdm, listAdm->entrada, elemento);
  72.     }
  73.     lista->next = lInsertOrdered(listAdm, lista->next, elemento);
  74.     return lista;
  75. }
  76. void printList(listAdm_t *listAdm, list_t *list){
  77.     if(list){   //Si existe la lista
  78.         listAdm->funPrint(list->valor);
  79.         printf(" - ");
  80.         printList(listAdm, list->next);
  81.     }
  82. }
  83.  
  84. int main(void){
  85.     #ifdef STRING
  86.         char i[50] = "iber", b[50] = "jose";
  87.         listAdm_t *lista = lAdmCreate(sizeof(i), comparaCadenas,imprimeCadenas);
  88.     #endif
  89.     #ifdef CHAR
  90.         char i = 'a', b = 'g';
  91.         listAdm_t *lista = lAdmCreate(sizeof(char), comparaCaracteres,imprimeCaracteres);
  92.     #endif
  93.     #ifdef INT
  94.         int i= 6, b = 9;
  95.         listAdm_t *lista = lAdmCreate(sizeof(int), comparaEnteros,imprimeEnteros);
  96.         printf("hellon");
  97.     #endif
  98.  
  99.     lista->entrada = lInsertOrdered(lista, lista->entrada, (void *)&i);
  100.     lista->entrada = lInsertOrdered(lista, lista->entrada, (void *)&b);
  101.  
  102.     printList(lista, lista->entrada);
  103.     return 0;
  104. }
  105.  

tiene un par de ifndefs para realizarle distintas pruebas con los diferentes tipos de datos y verificar que en verdad sea generica.
ahora lo que pasa es q se queda iterando hasta un segmentation fault en el ciclo de impresion, antes habia logrado que funcione correctamente la inserta ordenado pero solo lo hacia con int's (poco generico q digamos XD).

esca esta la funcion problematica (tambien esta en el codigo anterior pero para que se vea mas directo)
Código: C
  1. list_t *lInsertOrdered(listAdm_t *listAdm, list_t *lista, void *elemento){  //Ordenado de menor a mayor
  2.     if( !lista || (listAdm->funCmp(lista->valor,elemento)) >= 0  ){
  3.         return creaNodo(listAdm, listAdm->entrada, elemento);
  4.     }
  5.     lista->next = lInsertOrdered(listAdm, lista->next, elemento);
  6.     return lista;
  7. }
  8.  

la logica creo q esta bien.
si no tengo lista, o si el valor es menor al que tengo en la lista inserto a la cabeza, sino llamo recursivamente a la funcion pasandole el siguiente elemento de la lista.


estoy dandole vueltas al codigo pero no logro decifrar el error.

espero sus comentarios!


saludos!

24
C/C++ / Re: funciones retorno por puntero y return
« en: Sábado 18 de Octubre de 2008, 17:24 »
XD de nada

y te recomiendo sinceramente que porgrames en ansi ;D

Saludos!

25
C/C++ / Re: funciones retorno por puntero y return
« en: Viernes 17 de Octubre de 2008, 22:04 »
hola crocop!


castear es "cambiar" el tipo de dato, es entre comillas pq no camibas el tipo de dato, sino que en la instruccion donde lo utilizes la variable casteada va a ser interpretada como del tipo de dato que fue casteada, despues va a seguir siendo lo que siempre fue ;)

con respecto al prom entre parentesis

Código: Text
  1. (*prom)= (float)sum / (float)p;
  2.  

es por un tema de precedencia de operadores, agregando los parentesis a prom evitas algun posible problema de que el operador * tenga menor precedencia que el =.

lo que me refiero es que sin el parentesis el compilador podria interpretar el codigo de esta manera:

Código: Text
  1.  *(prom = (float)sum /(float)p)
  2.  

haciendo que prom apunte al resultado de la division, algo q no es razonable

pruebalo sin los parentesis, si da resultados erroneos, o una violacion de segmento es efectivamente como te dije recien, de lo contrario el operador * tiene mayor procedencia que el = .

me explico?


otra cosa, si tu main es de tipo int debe tener un return al final, pq le estas diciendo al compilador que la main devuelve un entero.
si tu main es de tipo void no hace falta ;)


el codigo esta bien, pero no te anda lo del return pq no lo agarras de ninguna lado en el main.
osea la funcion devuelve el valor y tu no lo agarras

Código: Text
  1. k = ingreso(m1,m2,m,n,sum,k,&prom);
  2.  

si haces esto, k va a "agarrar" el valor q devuelves y despues lo imprimes y list ;)









Código: C
  1. #include<stdio.h>
  2.    
  3. int ingreso(int matriz1[10][10], int matriz2[10][10], int m, int n,int sum,int k,float *prom);
  4.      
  5. int main(void){
  6.     int m1[10][10],m2[10][10],/*v[20],*/m,n,sum = 0,k=0;
  7.     float prom=0;
  8.      
  9.     printf("ingrese el tama¤o de la matrizn");
  10.     scanf("%d",&m);
  11.     scanf("%d",&n);
  12.    
  13.     k = ingreso(m1,m2,m,n,sum,k,&prom);
  14.  
  15.     printf("la cantidad de n no multiplos son %dn",k);
  16.     printf("el promedio es %fn",prom);
  17.     getchar();
  18.     return 0;
  19. }
  20.  
  21. int ingreso(int matriz1[10][10], int matriz2[10][10], int m, int n,int sum,int k,float *prom){
  22.    int i,j,p = 0;
  23.  
  24.     for(i=0;i<m;i++){
  25.         for(j=0;j<n;j++){
  26.             printf("ingrese los numeros a la matrizn");
  27.             scanf("%d",&matriz1[i][j]);
  28.         }
  29.     }
  30.  
  31.     for(i=0;i<m;i++){
  32.         for(j=0;j<n;j++){
  33.             if(matriz1[i][j]%7==0){
  34.                 matriz2[i][j]=matriz1[i][j];
  35.             }
  36.         }
  37.     }
  38.  
  39.     for(i=0;i<m;i++){
  40.         for(j=0;j<n;j++){
  41.             if(matriz1[i][j]%7!=0){
  42.                 sum +=matriz1[i][j];
  43.                 k++;
  44.                 p++;
  45.             }
  46.         }
  47.     }
  48.     (*prom)= (float)sum / (float)p;
  49.     return(k);
  50. }
  51.  
  52.  

Páginas: [1] 2 3 ... 5