|
|
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 - EL_UNI
Páginas: [1]
1
« en: Jueves 20 de Noviembre de 2008, 12:27 »
char nombre1car[nombre1.length()]; char nombre2car[nombre2.length()];
Esto lo tendrías que poner teníendo en cuenta el /0, ya que si no, supuestamente estas reservando menos memoria de la que ocupa la variable.
2
« en: Martes 28 de Octubre de 2008, 13:32 »
Bueno tengo una pequeña implementación que soluciona tu problema. No entendí muy bien tu código pero supongo que lo que quieres es intercalar dos cadenas y una vez que una de las dos cadenas llegue a su fin, se rellene con lo que queda de la otra. Si es así tengo aquí el código: while((cad1[i]!=' ')&&(cad2[i]!=' ')){ cad3[j++]=cad1[i]; cad3[j++]=cad2[i++]; } if(cad1[i]!=' '){ while(cad1[i]!=' '){ cad3[j++] = cad1[i++]; } cad3[j]=' '; }else{ while(cad2[i]!=' '){ cad3[j++] = cad2[i++]; } cad3[j]=' '; } printf("La cadena resultante es: %s",cad3 );
Lo va rellenando intercalando los caracteres de una y otra cadena. Luego comprueba si NO ha salido del bucle por causa de la primera cadena y rellena con lo que queda en ella, si es asi es que ha salido por la otra cadena y la rellena con los otros caracteres. Luego muy importante indicar el fin de cadena. Espero que te haya ayudado. Un saludo, EL_UNI
3
« en: Viernes 24 de Octubre de 2008, 11:53 »
Habría que tener en cuenta también lo que han dado en clase.... no puedes usar cosas que no hayan dado (o eso creo yo) porque podría decirte que no lo quiere así, que lo quiere como el diga...
De todas maneras, tienes que introducir todos los datos de golpe separados por espacios o puedes meterlos uno a uno (metes dato,enter,metes dato,enter....)??
Si es de la segunda manera lo tienes muchisimo más fácil.
4
« en: Viernes 24 de Octubre de 2008, 11:41 »
Antes que nada, este problema no esta bien solucionado (no dices cuantos caballos les das a cada uno), y creo que en el foro no se hacen trabajos... se ayuda a las dudas que tengas.. La verdad es que tampoco sabría decirte ahora mismo como solucionarlo (solo te daría la idea claro xDD) Si de aqui en más adelante se me ocurre te intentaré ayudar.
5
« en: Domingo 19 de Octubre de 2008, 19:37 »
Estoy casi seguro que si, nunca he usado borland. Si clrscr(); borra lo que se ve en la consola, sip.
6
« en: Domingo 19 de Octubre de 2008, 16:25 »
Pues es muy sencillo. Simplemente tienes que hacer un do{}while(); así: (supongo que es para el primer menu) void menu_principal(){ int opc = 2; //Un número que este entre los validos. do{ if((opc<1)||(opc>4)){ printf("Valor incorrecto, introduzcalo de nuevo"); } printf("n1.- Gestion del edificion"); printf("ingrese su opcion :"); }while((opc<1)||(opc>3));
system("cls"); sirve para limpiar la pantalla de la cmd de windows, para linux se usa system("clear"); recomiendo hacer una función para obtener la opción y operar con ella en el main. Espero que te sirva.
7
« en: Sábado 18 de Octubre de 2008, 17:49 »
Me gustaría aclarar una cosilla sobre el casting en este caso. No hace falta hacer un casting a los dos miembros de la operación. Simplemente con que el DIVISOR sea float, te aseguras que el resultado lo sea. (*prom) = sum / (float)p;
Lo explico en modo de aprendizaje. Nunca biene mal saber más ^^. Otra cosa crocop, es MUY recomendable que entiendas muy bien los punteros y como funcionan (digo recomendable por no decir obligatorio) porque luego los verás y usarás a montones, a demás de que son muy útiles y prácticos (como has podido ver aquí) Lo que no he entendido es porque querías que uno lo devolviea con return y el otro por puntero... Puedes hacer que los datos te los envíe por puntero y con el return se devuelva un entero para indicar si en la función hubo errores o no. (esto si es sobre gustos ^^) Que main nos devuelva 0 (return 0; al final) nos indica que el programa ha concluido sin errores. Por eso también es recomendable hacerlo y tampoco es algo que sea muy laborioso. Por cierto, Cuando a una función queremos que no se le pasen valores se puede escribir asi también. Es más cómodo: int funcion() { //Código de la función. }
Saludos y seguid con la programación! ^^
8
« en: Sábado 18 de Octubre de 2008, 13:15 »
La verdad es que siempre hay que pensar que la mejor manera de hacer algo es la más fácil y la que va a llevarte menos tiempo... Creo que no es necesario usar sobrecarga de operadores para hacer una concatenación... el código de la unión de listas lo tengo aquí por si os interesa: void colaintdoble::concatena(colaintdoble &cola1,colaintdoble &cola2) { colaNodo *aux; aux = cola1.cabecera->primero; while(aux){ this->insertaFin(aux->dato); aux = aux->sig; } aux = cola2.cabecera->primero; while(aux){ this->insertaFin(aux->dato); aux = aux->sig; } };
Está con los nombres de mis variables... no creo que os cueste cambiarlo por eso xDDD. Yo creo que la única sobrecarga de operación que hice fuen en un vector dinámico generico (el vector STL de toda la vida pero hecho por mi) fue el operador[]. Por eso no entendia muy bien lo que hacia el operador +
9
« en: Sábado 18 de Octubre de 2008, 11:59 »
Está saliendo un código un poco lioso, no es más fácil implementarle una función a la clase para que concatene dos colas pasadas como parametros?
Siento no haber podido responder antes... pero como soy usuario nuevo no puedo enviar mas de X mensajes por día... :S
Y otra cosa m0skit0... porque no usas punteros a colas?? Lo único que tienes que tener cuidado es de acordarte de crearlos y destruirlos. A demás, dan mucho más juego... aunque también más errores por culpa de esto xDD
Una pregunta... porque no usais varios archivos... lo introducis todo en un mismo .cpp. Es mucho mejor y más cómodo luego revisar código si los separas en cabeceras (.h) y código (.cpp). En mi caso tengo colaIntDoble.h, colaIntDoble.cpp y main.cpp. Es solo por comentar... no reprocho nada xDDD
10
« en: Sábado 18 de Octubre de 2008, 00:10 »
He implementado esta noche una cola doble de enteros... Todo funciona bién, pero tengo un problema con el operator +. Y es que no hace nada... bueno cuando lo depuras me dice que no puede acceder a una dirección de memoria... he amoldado la funcion para mi codigo pero nada... Si pudierais explicarme que como funciona exactamente esa función os lo agradecería.
11
« en: Viernes 17 de Octubre de 2008, 15:21 »
De nada, para eso estamos ^^
Ya tienes un quebradero menos de cabeza xDD
Saludos. EL_UNI
12
« en: Viernes 17 de Octubre de 2008, 15:20 »
A mi no me ha dado error ninguno :S Solo me decia que lo de hacerse amigo a si mismo estaba implicito... que no hace falta ponerlo. Por lo demas todo bien. Por cierto deja una linea en blanco al final del fichero. Da errores raros luego.
Solo decirte que yo uso el eclipse con MinGW.
13
« en: Viernes 17 de Octubre de 2008, 14:52 »
Le he dado unas cuantas vueltas, pero no consigo ver el error... es más, me parece que esta todo bien... Puedes pasar el codigo completo (si hay algo que no quieras poner no lo hagas... es solo para probar a compilarlo y depurarlo)
14
« en: Viernes 17 de Octubre de 2008, 14:27 »
Has mirado que tengas bién hecho el crea?? Muchas veces (creo que a mi me pasaba siempre) es porque no se reserva bién la memoria a la hora de la creación. Puede que tu fallo esté ahí ^^ Revisalo también y nos cuentas
15
« en: Jueves 16 de Octubre de 2008, 18:11 »
Perdona ha sido un pequeño error a la hora de transquivir el codigo... de todas maneras tambien es porque en la cola que tengo hecha yo si tengo que ponerlo así porque trabajo de otra manera ^^ Ya lo he editado y gracias por la observación
16
« en: Jueves 16 de Octubre de 2008, 17:50 »
He encontrado un fallo también en tú código. void qDestroy(queue_t *queue){ }
Deverías asginar luego NULL a queue, porque queue esta apuntando a una dirección de memoria que estaba RESERVADA y ahora no lo está. Debes de ponerlo así: void qDestroy(queue_t *queue){ queue = NULL; }
Y ya solucioné tu error a la hora de introducir y sacar datos ^^. Faltaba multiplicar la dirección donde se meterá/sacará el dato POR EL TAMAÑO DEL DATO. Entonces el qPut y el qGet te quedaría de la siguiente manera: qPut: boolean qPut(queue_t *queue, void *valor){ if(qFull(queue)) return FALSE; //Esta llena y no puedo ingresar nada memcpy(((queue ->cola ->elementos ))+(queue ->cola ->tail % queue ->cola ->size )*queue ->sizeTipo , valor , queue ->sizeTipo ); queue->cola->tail++; return TRUE; }
qGet: boolean qGet(queue_t *queue, void *valor){ if(qEmpty(queue)) return FALSE; //Esta vacia y no puedo ingresar nada /* * Resuelvo el problema de q los * indices crezcan hacia el infinito */ if(queue->cola->head > queue->cola->size){ queue->cola->head %= queue->cola->size; queue->cola->tail %= queue->cola->size; } memcpy(valor ,queue ->cola ->elementos +(queue ->cola ->head *queue ->sizeTipo ), queue ->sizeTipo ); queue->cola->head++; return TRUE; }
Como puedes ver he quitado muchas cosas... pero lo que te faltaba era simplemente la multiplicación dentro del memcpy. De todas maneras, esta manera de implementarla creo que puede tener algunos fallos a la hora de hacer muchos introducciones y sacadas de datos. Espero que te haya servido de ayuda, para cualquier duda que tengas sobre el código aquí estoy. UN SALUDO. EL_UNI PD: Te envie un e-mail, si no es mucho pedir, contestalo.
17
« en: Jueves 16 de Octubre de 2008, 15:02 »
Le he dado vueltas a tu codigo y no he sido capaz de encontrarlo... En internet las encontraras dinamicas (esta es estatica) De todas maneras, si puedo esta tarde (ahora tengo seminario...) te reviso el codigo otra vez... Seguro que es algun puntero... hasta que me acostumbre a ellos las pasaba fatal xDDD
Yo tengo tambien implementado un vector dinamico generico. Por si os inetera ^^
Saludos. EL_UNI
PD: Es mas facil hacer una sola estructura que una estructura dentro de otra estructura. Te ahorras una llamada de liberado y otra de reserva ^^
18
« en: Jueves 16 de Octubre de 2008, 14:35 »
Creo que lo entiendo... la manera que hago yo para hacer las colas genericas, es mediante la posicion del primero y el numero de elemtos introducidos (primero y usados). Se queda un codigo facil y rapido de entender. De todas maneras tambien hago otro tipo de estructuracion de la cola: struct cola_rep{ void *datos; //Vector de datos. int primero; //Posicion del primer elemento. Inicialmente 0. int usados; //Cantidad de elementos dentro de la cola. int tam; //Tamaño de la cola. int tam_dato; //Tamaño de los datos. };
Con esta estructura, meter y sacar datos es muy sencillo: int cola_gen_mete(cola_gen c,void *dato) { if(!(cola_gen_llena(c))){ memcpy(c ->datos +((c ->primero +c ->usados ++)%c ->tam )*c ->tam_dato ,dato ,c ->tam_dato ); return 0; } return -1; //No se puede meter }; int cola_gen_saca(cola_gen c,void *dato) { if((cola_gen_vacia(c))){ memcpy(dato ,c ->datos +(c ->primero )*c ->tam_dato ,c ->tam_dato ); c->primero++; c->primero %= c->tam //Para que el valor de c->primero no se nos dispare se va actualizando c->usados--; return 0; } return -1; //No se puede sacar };
Así funciona perfecto :p. De todas maneras bajaré tu código e intentaré ver donde falla ^^
19
« en: Jueves 16 de Octubre de 2008, 11:09 »
Tengo una pregunta Rombus... ¿Que significan el head y el tail? ¿La posición del primer y el ultimo elemento respectivamente? Yo tengo una cola implementada (por mi) así que intentaré ayudarte como pueda ^^
Páginas: [1]
|
|
|