Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Mensajes - Xandrete

#1
Programación C/C++ / Re: Dibujar con putchxy
24 Agosto 2014, 01:23 AM
¿Mh?

¿Seguro que está bien hecha la matriz de caracteres que representa el pescado?

Esto es lo que me sale a mi al dibujarlo:


     _,
 
 _/{_  
.
`    `./'>  

/ e ((  
=<
`.,__,
.'\_>  
 
  \)    


No creo que haya ningún problema con el código, aunque no he usado nunca el putchxy (¿alguna de estas funciones de la famosa biblioteca conio, verdad?).

Respecto al parpadeo al borrar y volver a dibujar, no estoy seguro de qué podrías hacer al respecto. Es el inconveniente de usar la consola para hacer hacer un juego/animación. ¿Sobre que tipo de consola estás trabajando? ¿Un terminal de Linux? ¿cmd.exe de Windows? Tiene más pinta de ser una limitación de la biblioteca (en este caso conio) o del terminal que estés usando que algo de tu código.

Saludos.

[EDITADO]

Acabo de fijarme en que en la matriz de caracteres hay saltos de líneas (código 10, en ASCII) que, según creo, no deberían estar (deberían ser espacios, porque el salto de línea ya viene implícito con el cambio de fila). Échale un ojo.

Por cierto, deberías buscar alguna forma menos... engorrosa de guardar la(s) representación del pescado, porque ponerlo así, tal cual en el código, es un poco feo. Podrías guardarlo en un fichero aparte y cargarlo al principio del programa.
#2
Hola.

Si tienen los mismos parámetros, no es posible. El tipo del valor de retorno de la función virtual tiene que estar fijado y no puedes modificarlo al heredar. Tampoco puedes crear dos funciones con igual nombre y conjunto de parámetros, y diferenciarlas exclusivamente por el tipo de retorno. La cabecera de las funciones la constituyen el nombre y los parámetros, así que no es posible distinguirlas por el tipo de retorno.

Plantéate si realmente te hace falta hacer eso. Si los tipos son diferentes, ¿no crees que son tan diferentes que tendría más sentido definirla exclusivamente para las clases hijas, sin hacerla constar como método virtual de la superclase? Si la respuesta es que no, quizás quieras plantearte hacer que el tipo de retorno del método virtual sea Object, y en una clase hija devolver un Integer y en la otra devolver un String, aprovechando que en Java todas las clases heredan de Object.

Saludos
#3
Pues yo también me corrijo, no era un [MOD] de moderador, sino un [MOD] de modificado,  :-X

¡Saludos!
#4
Bueno, primero fíjate en una cosa. No te solucionará el problema, pero puedes eliminar tranquilamente el parámetro nombre (de tipo String) de la función leerArchivo, ya que no lo usas y no te hace falta para nada.

Otra cosa es que cuando se invoca a leerArchivo, el archivo ya se encuentra abierto (si no, no hubieras podido crear el objeto RandomAccessFile r). Por tanto, en el catch la explicación "No se pudo abrir el archivo" es errónea y puede dar lugar a confusión. Si hay una excepción en ese punto, y por pantalla ves "No se pudo abrir el archivo", puede llevarte un tiempo llegar a la conclusión de que en realidad sí que se ha abierto, y que el error es otro. Por tanto, te recomendaría un ex.printStackTrace() en ese punto, si el programa se encuentra en fase experimental (te imprime la línea en que se produjo la excepción, la excepción en sí misma y la pila de activación, es muy útil en fases experimentales del desarrollo).

Y ya respondiendo a tu pregunta, fíjate en que tal y como está ahora, es totalmente imposible que leerArchivo te devuelva un signo de puntuación. Observa. Tal y como está ahora, si le pusieras una entrada:

char nombreVariable; Cosa

te devuelve "char", "nombreVariable" y "Cosa", pero la única razón por la que te devuelve esto es porque hay un espacio después del ;

Con

char nombreVariable;Cosa

obtendrías "char" y "nombreVariableCosa"

Lo que hace tu código ahora mismo es ignoral las , y los ;, no incorporándolos a la palabra en curso (pruébalo de todas formas, por si acaso, lo he hecho a ojímetro porque no tengo Java instalado en este ordenador).

Una posible solución es modificar tu leerArchivo para que al principio, antes de entrar en el while, compruebe si el carácter actual es un ; o una , en cuyo caso ha de devolverlo directamente. Si, por el contrario, empieza a leer letras y luego se encuentra con un ; o una , has de dejar de leer y hacer retroceder el puntero de lectura del archivo una posición, para que la próxima vez que invoques al leerArchivo te encuentres al punto y coma o a la coma en la posición actual.

Saludos
#5
¡Hola!

Primero que nada, no voy a resolver yo el ejercicio, porque así no aprenderías y además sería injusto.

Querría hacer una observación sobre la forma de expresarse. En programación, y en general en todas las ciencias, es muy importante emplear un lenguaje lo menos ambiguo posible, claro y técnico, en medida de lo que alcancen tus conocimientos. Dices...

Citar(no tiene que tener variables globales)

Esa frase estrictamente quiere decir: "no es necesario que tenga variables globales, no es obligatorio". Sin embargo, haciendo algo de metajuego entiendo que lo que quieres decir es: "No ha de usar variables globales/ No está permitido emplear variables globales/ Es obligatorio hacerlo sin variables globales". En problemas más complejos, esta diferencia que a priori puede parecer muy tiquismiquis marca la diferencia entre crear un programa correcto y crear uno incorrecto.

Respecto al problema, yo (y seguramente cualquiera) estaré encantado de ayudarte si nos ofreces algo de código, un intento aunque sea fútil de resolverlo y que nos demuestre que lo has meditado lo suficiente. Como no tienes nada de código sólo puedo aportarte unas guías generales:

Puedes utilizar un vector (como estás en C, sería un array) o una lista enlazada (quizás en este caso sea mejor una lista enlazada, ya que a priori no sabes el número de compras hasta que te ingresan una con el número de ticket igual a cero) de structs para guardar la información sobre las compras. El struct tendría como campos el número de ticket, el número del remedio, el número del rubro, la cantidad, el valor unitario y el número del vendedor. A partir de ahí, una forma muy fácil de resolver el problema sería recorrer la lista el número de veces que te sea necesario para hallar el resultado de cada una de las cosas que te piden. Hacerlo de esta manera puede resultar algo más ineficiente que calcular dos o tres de ellos en el mismo recorrido (o incluso todo), pero te puede ayudar al principio para separar el problema en subproblemas de dimensión menor. Una vez tengas hecho el primer apartado (el de la facturación total), los demás son muy sencillos.

Respecto a lo de las variables globales, no es una restricción demasiado fuerte. De hecho, acostúmbrate a hacerlo todo sin variables globales. Éstas es conveniente usarla sólo en ocasiones especiales (por ejemplo, cuando programas con OpenGL en C, con el que no puedes declararte clases, es más cómodo usar variables globales).

Saludos y ánimos resolviendo el problema.
#6
Me parece bien. Además creo que sería conveniente realizar varias ejecuciones de un mismo programa (por ejemplo, cinco) y hacer la media de los tiempos.

Respecto al problema, ¿tienes alguno en mente? Yo había pensado que sería chulo un problema de grafos ^^.
#7
Cita de: ivancea96 en  6 Agosto 2014, 23:07 PM
Pensaba en priblemas tipo Projecteuler.net, pero quizás sean muy difíciles.
Más q dificultad, yo buscaba ver diferentes algoritmos.

Acerca de solo C++: dado que distintos lenguajes puede implicar diferencia de velocidad del programa, podría influir en la 'competición', y en el testeo de los códigos. Pero bueno, es una sugerencia. Si preferír cualquier lenguaje, ningún problema.
Pero claro, python probablemente gane un matemática a C, por ejemplo.

En cualquier caso: si os interesa, viendo q somos bastantes (y todos los que quieran), podemos empezar.
¿Nuevo tema, o en este?
¿Este subforo, o el de Programación General?

:D

Sí, sí, tienes razón. Quería decir abrir un tema (concurso) distinto para cada lenguaje. Pero para eso necesitaríamos ser unos cuantos. Por tanto sí, apuesto por C++ para empezar, y si funciona, lo extendería a más lenguajes.

Project Euler mola. No creo que sea tan difícil. Y después de todo, estamos aquí por el reto, ¿no? De cara al concurso, creo que sería guay primero formalizar las reglas. También uno de nosotros (quizás tú, que eres quien ha tenido la idea) debería ser juez ecuánime y hacer la comparación de los programas en su ordenador (inclusive el suyo, por eso lo de ecuánime  :rolleyes:).

Respecto al tema, creo que si todos nos decantamos por C++, deberíamos hacer nuevo tema en este foro. Si consensuamos que se puede usar cualquier lenguaje, en el de Prog. general.

¡Saludos!
#8
Mmmh.

¿Con qué tienes el problema exactamente? ¿Con el menú? ¿No sabes cómo hacer la lista? ¿Cómo representar cada estudiante?

Bueno, el menú se hace (tanto en Java como en C++) con un bucle en el que vas leyendo repetidamente una entrada del teclado y utilizas un conjunto de cláusulas if...else if...else (o un switch...case...default).

Y si es la lista, lo puedes hacer con la clase list de la STDL de C++ (previo #include <list>): http://www.cplusplus.com/reference/list/list/;  o con la clase LinkedList (ya que has dicho lista enlazada, si no podría ser también una ArrayList) de Java: http://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html.

Los estudiantes los puedes representar con un struct o clase en C++ o con una clase en Java.

Mírate la documentación, ten la API a mano. Y si tienes código que aportar para ayudarte, mejor que mejor.

Saludos

CitarElm profesor tambien dijo que era valido traerlo en C++

P.S. ¿Tu profesor es el profesor Elm? ¿Qué Pokemon elegiste al principio?
#9
Me parece genial a mí también.

Cita de: Blaster en  6 Agosto 2014, 21:07 PM
Me gusta la idea, pero no estoy de acuerdo en lo de usar solo c++

Saludos

Sí, puede estar bien extender la idea a otros lenguajes como Haskell, Python, Java, etc, aunque C/C++ está bien para empezar.

¿En qué tipos de problemas están pensando? ¿Algo así: http://uva.onlinejudge.org/?

Saludos
#10
Cita de: eferion en  6 Agosto 2014, 15:53 PM
Como bien comentó nuestro compañero programator11, está practicando. Si le doy la solución definitiva... ¿qué va a practicar?

¿?

Ya, pero tenía el código casi completo para usar la clase complex, sólo tiene que borrar una línea y cambiar el tipo de dos variables. Yo proponía una solución a su problema siguiendo el camino que ya había comenzado. También le he sugerido implementar las operaciones básicas entre complejos, como ejercicio. Estoy seguro de que programator11 valorará y tendrá en consideración tu respuesta.

Saludos.