|
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
1
« 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
2
« 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: > 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?
4
« en: Lunes 5 de Enero de 2009, 15:47 »
5
« en: Lunes 5 de Enero de 2009, 15:44 »
! eso me es muy util estoy buscando documentacion sobre eso, conoces alguna pagina que tenga info acerca de eso? gracias!
6
« en: Lunes 5 de Enero de 2009, 14:54 »
a q te refieres con el codigo scan del teclado?
7
« en: Martes 30 de Diciembre de 2008, 23:43 »
pagame y te ayudo con la tarea
8
« 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
9
« 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
« 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): #include <stdio.h> #include <stdlib.h> #include <windows.h> int main(void){ char caracter; printf("%dn",VK_NUMPAD0); printf("%dnn",VK_NUMPAD9); printf("%dn",'1'); printf("%dnn",'9'); printf("%dn",'A'); printf("%dnn",'Z'); for(caracter = 0; caracter < 256; caracter++){ switch(caracter){ case 'A'||'B'||'C'||'D'||'E'||'F'|| 'G'||'H'||'I'||'J'||'K'||'L'|| 'M'||'N'||'O'||'P'||'Q'||'R'|| 'S'||'T'||'U'||'V'||'W'||'X'|| 'Y'||'Z'|| '1'||'2'||'3'||'4'||'5'|| '6'||'7'||'8'||'9'||'0': printf("aguante...n"); break; case VK_NUMPAD0||VK_NUMPAD1||VK_NUMPAD2||VK_NUMPAD3||VK_NUMPAD4|| VK_NUMPAD5||VK_NUMPAD6||VK_NUMPAD7||VK_NUMPAD8||VK_NUMPAD9: printf("..el metal!!n"); break; } } return 0; }
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
« en: Miércoles 29 de Octubre de 2008, 06:24 »
Por cierto, eternity, ha dicho C++, no C. ¿Y no sirve también ese código en C++?
calculo q si
12
« en: Viernes 24 de Octubre de 2008, 17:47 »
pero es un arbol binario de busqueda.. no nesesito tener valores repetidos
13
« en: Viernes 24 de Octubre de 2008, 17:09 »
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 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
14
« en: Viernes 24 de Octubre de 2008, 16:13 »
:O un par de datos bastante interesantes tiraste ahi gracias ternitys!
15
« en: Viernes 24 de Octubre de 2008, 15:12 »
Pero no olvides hacer un free() de los malloc() que hayas hecho. si, ya tengo la destructora. 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
16
« en: Viernes 24 de Octubre de 2008, 14:57 »
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 lo soluicione modificando la funcion creaNodo(); de esta manera: nodo_t *creaNodo(arbol_t *arbol, void *valor, nodo_t *der, nodo_t *iz){ nodo_t *nodo = (nodo_t *)malloc(sizeof(nodo_t )); void *dato = malloc(sizeof(void*)); nodo->valor = dato; //para que nodo->valor apunte a una dir valida antes de hacer el memcpy memcpy((char *)(nodo ->valor ), (char *)valor , sizeof(nodo_t )); nodo->der = der; nodo->iz = iz; return nodo; }
asi con el memcpy copio el contenido y no la direccion gracias!
17
« 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: #include <stdlib.h> #include <stdio.h> #include <assert.h> typedef int (*_funCmp_t)(void *a, void *b); typedef void (*_funPrint_t)(void *a); ///Arbol typedef struct _nodo{ void *valor; struct _nodo *iz; struct _nodo *der; }nodo_t; ///Estructura administrativa typedef struct { int sizeTipo; //Tamaño del dato a almacenar nodo_t *raiz; _funCmp_t funCmp; //Funcion de comparacion _funPrint_t funPrint; //Funcion de impresion }arbol_t; int comparaEnteros(void *a, void *b){ return *((int *)a) - *((int *)b); } void imprimeEnteros(void *a){ } arbol_t *arbolCreate(int sizeTipo, _funCmp_t funCmp, _funPrint_t funPrint){ arbol_t *arbol = (arbol_t *)malloc(sizeof(arbol_t )); arbol->sizeTipo = sizeTipo; arbol->funCmp = funCmp; arbol->funPrint = funPrint; arbol->raiz = NULL; return arbol; } nodo_t *creaNodo(arbol_t *arbol, void *valor, nodo_t *der, nodo_t *iz){ nodo_t *nodo = (nodo_t *)malloc(sizeof(nodo_t )); nodo->valor = valor; nodo->der = der; nodo->iz = iz; return nodo; } nodo_t *arbolInsert(arbol_t *arbol, nodo_t *nodo, void *aIngresar){ if(!nodo) return creaNodo(arbol, aIngresar, NULL, NULL); if(arbol->funCmp(nodo->valor, aIngresar) > 0) nodo->iz = arbolInsert(arbol, nodo->iz, aIngresar); else if(arbol->funCmp(nodo->valor, aIngresar) < 0) nodo->der = arbolInsert(arbol, nodo->der, aIngresar); return nodo; } void printArbol(arbol_t *arbol, nodo_t *nodo){ //Preorden if(nodo) arbol->funPrint(nodo->valor); if(nodo->iz) printArbol(arbol, nodo->iz); if(nodo->der) printArbol(arbol, nodo->der); } int main(void){ arbol_t *arbol = arbolCreate(sizeof(int),comparaEnteros, imprimeEnteros); int i = 5; arbol->raiz = arbolInsert(arbol, arbol->raiz, (void *)&i); i =4; arbol->raiz = arbolInsert(arbol, arbol->raiz, (void *)&i); i =3; arbol->raiz = arbolInsert(arbol, arbol->raiz, (void *)&i); i = 7; arbol->raiz = arbolInsert(arbol, arbol->raiz, (void *)&i); printArbol(arbol, arbol->raiz); return 0; }
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
« 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
« 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
« en: Sábado 18 de Octubre de 2008, 18:29 »
ufff siempre se me confunden gracias Eternal IDOL!! cuando tenga todas las estructuras genericas las voy a compratir con la comunidad XD
21
« 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
« 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: #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <string.h> #define FALSE 0 #define TRUE !FALSE typedef char boolean; typedef int (*list_funCmp_t)(void *a, void *b); typedef void (*list_funPrint_t)(void *a); //#define INT 0 #define STRING 0 //#define CHAR 0 typedef struct lPtr{ void *valor; struct lPtr *next; }list_t; typedef struct{ list_t *entrada; //Entrada a la lista; int sizeTipo; list_funCmp_t funCmp; list_funPrint_t funPrint; }listAdm_t; ///Funciones de COMPARACION---------------------------------------/// int comparaEnteros(void *a, void *b){ return *(int *)a - *(int *)b; } int comparaCadenas(void *a, void *b){ return ((int)strcpy((char *)a , (char*)b )); //0 si son iguales, > 1 si b < a; < 1 si a < b } ///Funciones de IMPRESION----------------------------------------/// void imprimeEnteros(void *a){ } void imprimeCadenas(void *a){ } ///Servicios de LISTA listAdm_t *lAdmCreate(int sizeTipo, list_funCmp_t funCmp, list_funPrint_t funPrint){ //Crea La estructura administrativa listAdm_t *listAdm = (listAdm_t *)malloc(sizeof(listAdm_t )); listAdm->funCmp = funCmp; listAdm->funPrint = funPrint; listAdm->sizeTipo = sizeTipo; listAdm->entrada = NULL; return listAdm; } list_t *creaNodo(listAdm_t *lista, list_t *pNext, void *elemento){ //necesito la estructura administrativa para el peso de dato list_t *nodo = (list_t *)malloc(sizeof(list_t )); nodo->next = pNext; memcpy((char *)nodo ->valor , (char *)elemento , lista ->sizeTipo ); return nodo; } list_t *lInsertOrdered(listAdm_t *listAdm, list_t *lista, void *elemento){ //Ordenado de menor a mayor if( !lista || (listAdm->funCmp(lista->valor,elemento)) >= 0 ){ return creaNodo(listAdm, lista, elemento); } lista->next = lInsertOrdered(listAdm, lista->next, elemento); return lista; } void printList(listAdm_t *listAdm, list_t *list){ if(list){ //Si existe la lista listAdm->funPrint(list->valor); printList(listAdm, list->next); } } int main(void){ #ifdef STRING char i[] = "AAZ", b[] = "AAA"; listAdm_t *lista = lAdmCreate(sizeof(i), comparaCadenas,imprimeCadenas); #endif #ifdef CHAR char i = 'a', b = 'g'; listAdm_t *lista = lAdmCreate(sizeof(char), comparaCaracteres,imprimeCaracteres); #endif #ifdef INT int i= 6, b = 9; listAdm_t *lista = lAdmCreate(sizeof(int), comparaEnteros,imprimeEnteros); #endif lista->entrada = lInsertOrdered(lista, lista->entrada, (void *)&i); lista->entrada = lInsertOrdered(lista, lista->entrada, (void *)&b); #ifdef INT i = 0; b = 8; #endif #ifdef STRING #endif lista->entrada = lInsertOrdered(lista, lista->entrada, (void *)&i); lista->entrada = lInsertOrdered(lista, lista->entrada, (void *)&b); printList(lista, lista->entrada); return 0; }
23
« 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: #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <string.h> #define FALSE 0 #define TRUE !FALSE typedef char boolean; typedef int (*list_funCmp_t)(void *a, void *b); typedef void (*list_funPrint_t)(void *a); #define INT 0 /* #define STRING 0 #define CHAR 0 */ typedef struct lPtr{ void *valor; struct lPtr *next; }list_t; typedef struct{ list_t *entrada; //Entrada a la lista; int sizeTipo; list_funCmp_t funCmp; list_funPrint_t funPrint; }listAdm_t; ///Funciones de COMPARACION---------------------------------------/// int comparaEnteros(void *a, void *b){ return *(int *)a - *(int *)b; } int comparaCadenas(void *a, void *b){ return ((int)strcpy((char *)a , (char*)b )); //0 si son iguales, > 1 si b < a; < 1 si a < b } ///Funciones de IMPRESION----------------------------------------/// void imprimeEnteros(void *a){ } void imprimeCadenas(void *a){ } ///Servicios de LISTA listAdm_t *lAdmCreate(int sizeTipo, list_funCmp_t funCmp, list_funPrint_t funPrint){ //Crea La estructura administrativa listAdm_t *listAdm = (listAdm_t *)malloc(sizeof(listAdm_t )); listAdm->funCmp = funCmp; listAdm->funPrint = funPrint; listAdm->sizeTipo = sizeTipo; listAdm->entrada = NULL; return listAdm; } list_t *creaNodo(listAdm_t *lista, list_t *pNext, void *elemento){ //necesito la estructura administrativa para el peso de dato list_t *nodo = (list_t *)malloc(sizeof(list_t )); nodo->next = pNext; memcpy((char *)nodo ->valor , (char *)elemento , lista ->sizeTipo ); return nodo; } list_t *lInsertOrdered(listAdm_t *listAdm, list_t *lista, void *elemento){ //Ordenado de menor a mayor if( !lista || (listAdm->funCmp(lista->valor,elemento)) >= 0 ){ return creaNodo(listAdm, listAdm->entrada, elemento); } lista->next = lInsertOrdered(listAdm, lista->next, elemento); return lista; } void printList(listAdm_t *listAdm, list_t *list){ if(list){ //Si existe la lista listAdm->funPrint(list->valor); printList(listAdm, list->next); } } int main(void){ #ifdef STRING char i[50] = "iber", b[50] = "jose"; listAdm_t *lista = lAdmCreate(sizeof(i), comparaCadenas,imprimeCadenas); #endif #ifdef CHAR char i = 'a', b = 'g'; listAdm_t *lista = lAdmCreate(sizeof(char), comparaCaracteres,imprimeCaracteres); #endif #ifdef INT int i= 6, b = 9; listAdm_t *lista = lAdmCreate(sizeof(int), comparaEnteros,imprimeEnteros); #endif lista->entrada = lInsertOrdered(lista, lista->entrada, (void *)&i); lista->entrada = lInsertOrdered(lista, lista->entrada, (void *)&b); printList(lista, lista->entrada); return 0; }
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) list_t *lInsertOrdered(listAdm_t *listAdm, list_t *lista, void *elemento){ //Ordenado de menor a mayor if( !lista || (listAdm->funCmp(lista->valor,elemento)) >= 0 ){ return creaNodo(listAdm, listAdm->entrada, elemento); } lista->next = lInsertOrdered(listAdm, lista->next, elemento); return lista; }
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
« en: Sábado 18 de Octubre de 2008, 17:24 »
XD de nada
y te recomiendo sinceramente que porgrames en ansi ;D
Saludos!
25
« 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 (*prom)= (float)sum / (float)p;
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: *(prom = (float)sum /(float)p)
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 k = ingreso(m1,m2,m,n,sum,k,&prom);
si haces esto, k va a "agarrar" el valor q devuelves y despues lo imprimes y list #include<stdio.h> int ingreso(int matriz1[10][10], int matriz2[10][10], int m, int n,int sum,int k,float *prom); int main(void){ int m1[10][10],m2[10][10],/*v[20],*/m,n,sum = 0,k=0; float prom=0; printf("ingrese el tama¤o de la matrizn"); k = ingreso(m1,m2,m,n,sum,k,&prom); printf("la cantidad de n no multiplos son %dn",k ); printf("el promedio es %fn",prom ); return 0; } int ingreso(int matriz1[10][10], int matriz2[10][10], int m, int n,int sum,int k,float *prom){ int i,j,p = 0; for(i=0;i<m;i++){ for(j=0;j<n;j++){ printf("ingrese los numeros a la matrizn"); scanf("%d",&matriz1 [i ][j ]); } } for(i=0;i<m;i++){ for(j=0;j<n;j++){ if(matriz1[i][j]%7==0){ matriz2[i][j]=matriz1[i][j]; } } } for(i=0;i<m;i++){ for(j=0;j<n;j++){ if(matriz1[i][j]%7!=0){ sum +=matriz1[i][j]; k++; p++; } } } (*prom)= (float)sum / (float)p; return(k); }
|
|
|