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 - K-YreX

#121
Programación C/C++ / Re: Nota par impar
14 Diciembre 2020, 20:50 PM
En primer lugar comentar que he borrado tu otro mensaje porque, como ya habrás visto, puedes modificar tu mensaje anterior para añadir lo que creas conveniente si nadie ha respondido aún.

Ahora el tema en cuestión: No vamos a darte el ejercicio solucionado si es lo que estás esperando y parece que así es... "tened en cuenta que no se puede realizar una división por cero." El que tiene que tener eso en cuenta eres tú, no nosotros.

Si ya tienes las notas (imagino que en un array) ahora lo que debes hacer es recorrer dicho array y comprobar si el número es par o impar mediante un condicional. Obviamente no tienes que comparar cada valor con todos los números pares/impares (porque son infinitos). Hay una expresión usando el operador de módulo (a % b) que devuelve el resto de dividir a entre b (claro que ambos deben ser números enteros). Dentro de esta comprobación tendrás que hacer lo que necesites (guardarlos, hacer cálculos con ellos,...).

Para más ayuda debes dejar tu código entre etiquetas de código GeSHi. Para seleccionarlas puedes ir al desplegable que dice "Código GeSHi" y seleccionar el lenguaje apropiado. Tu código debe quedar entre las dos etiquetas que aparecerán en el cuadro de texto y el resultado debe verse tal que así:
Código (cpp) [Seleccionar]
printf("Usando etiquetas de Codigo GeSHi\n");
(También puedes escribir las etiquetas manualmente)

PD: Código en C++ utilizando <stdio.h>... Hmm  :-\ Suena a una mezcla más habitual de lo que debería. ¿Qué te lleva a decir que el código es en C++? Aunque bueno, podré verlo si lo publicas en tu siguiente mensaje... :rolleyes:
#122
Cita de: @XSStringManolo en 12 Diciembre 2020, 15:41 PM
Videos sobre tecnología que vi en youtube este año: 20-50.
Entradas de blogs sobre tecnología que leí este año: 500-900.
Me he sentido muy identificado con esto  :xD
Cuando empecé a programar aprendía todo a base de vídeos por los motivos típicos: es más visual, vas viendo los cambios "en vivo", etc pero ahora realmente prefiero leer un blog porque los vídeos acostumbran a hacérseme demasiado lentos y siempre acabo saltando partes o aumentando la velocidad de reproducción.
Sé que no es lo habitual como dice #!drvy pero es mi caso y veo que el de más personas también.

Cita de: @XSStringManolo en 12 Diciembre 2020, 15:41 PM
A parte creo que en un escrito quedaría mejor tu contenido. No es lo mismo ver un código en pantalla que copiar y pegarlo de una web.

Supongo que podrías hacer las 2 cosas. Youtube más orientado a conceptos, explicar ideas, proyectos...
Y los blogs para el contenido extenso con código, citas, docu...
Teniendo en consideración las respuestas creo que me voy a decantar por empezar subiendo el contenido en forma de vídeo a Youtube y estudiaré algunas de las opciones de blogs mencionadas en el tema para publicar quizás algunos de los contenidos en texto.
Las opciones de Podcast y Newsletter de momento las dejaré aparcadas para más adelante aunque me parecen opciones interesantes.

Cita de: Tachikomaia en 12 Diciembre 2020, 16:08 PM
¿Puede que el problema de fondo sea cómo conseguir seguidores?
No, lo cierto es que no he pensado mucho en ello. Esto lo quiero hacer porque me parece una forma interesante de seguir aprendiendo, hacer cosas nuevas, afrontar nuevos retos y no quedarse estancado; y no tanto por tener más o menos seguidores. Con algunas personas cercanas que me digan qué tal se ve desde fuera y me ayuden a ir mejorando me es suficiente.
Más que nada por eso abrí el tema. Porque en vez de utilizar el típico YouTube, quería saber si a lo mejor existía alguna plataforma que aunque fuese menos conocida, tuviese más soporte para este tipo de contenido.
#123
Programación C/C++ / Re: codigo en c errores
12 Diciembre 2020, 10:56 AM
Lo primero mencionar que el código debe ir entre etiquetas de Código GeSHi. Las puedes seleccionar mediante el desplegable que hay encima del cuadro de texto o escribiéndolas tú manualmente.

Veo bastantes cosas mejorables (algunos son errores y otros no pero convendría corregirlo también).
Te pondré un indicador según el mensaje: Consejo (no da errores pero es mejor cambiarlo) | Aviso (puede dar errores según el caso) | Error (esto no funciona bien)
Voy mencionando según vaya viendo cosas:
  • Consejo: Por convenio las estructuras se suelen definir en UpperCamelCase -> Traductor.
  • Consejo: No utilizar variables globales. Es mejor crear las variables en la función main() y usar parámetros para pasar los datos a otras funciones (cosa que haces).
  • Consejo: Las funciones por convenio en lowerCamelCase -> carga(), busquedaDicotomica(),...
  • Consejo: Al utilizar typedef para definir la struct, ya no es necesario que utilices la palabra struct cada vez que la quieras hacer referencia.
  • Consejo: Al pasar arrays como parámetro no hace falta indicar la primera dimensión. Es obligatorio indicar todas las dimensiones excepto la primera. Es un número innecesario que tendrás que estar cambiando cada vez que hagas una modificación de tamaño.
  • Consejo: Utiliza constantes para todos los tamaños. Evita utilizar números sueltos que no aporten información y que haga más complicado la modificación de tamaños.
  • Aviso: En la función carga() no tienes en cuenta que haya más registros en el fichero que espacio en el array.
  • Aviso: Utilizar fscanf() o scanf() no es recomendable para cadenas de texto char[]. Lo recomendable es utilizar fgets().
    fgets(char *array, int limite_de_caracteres_a_copiar, FILE *fichero);


    Aquí me surge una duda y es: ¿por qué utilizas unos arrays de longitud 20 y otros de longitud 21? Y si la respuesta va a ser que la longitud es 21 para que entren los 20 que tiene el original + el caracter de fin de cadena, decir que el caracter de fin de cadena también lo tienen los de longitud 20 (lo tienen todas las cadenas char[]).
    Dicho esto, seguimos...


  • Consejo: No modificar el valor de i en busquedaDicotomica() por lo que no es necesario pasarlo como puntero. Hacerlo, además, facilita errores si modificas el valor de i sin querer.
  • Consejo: No utilizas la variable <palabra> en busquedaDicotomica().
  • Error: En la función Menu() no devuelves nada y tienes que devolver un int.
  • Error: En la función Menu1() tampoco devuelves nada. Además aunque C trabaja internamente igual con int/char es mejor devolver un char para que se entienda mejor.
  • Error: En la función Menu2() más de lo mismo.
  • Error: En la función tradu() recibes un int* (i) y luego lo pasas a carga() con &i por lo que en realidad estás pasando a carga() un int** cuando tiene que recibir un int*.
  • Aviso: fflush() está diseñada para limpiar el buffer de salida (stdout), no el de entrada (stdin). No suele dar problemas aunque nada impide que lo haga. Deberías limpiar el buffer de entrada después de cada uso con, por ejemplo:
    while(getchar() != '\n');
    (Es importante usar esto cuando sepas que el buffer tiene algún contenido porque de estar vacío, el programa no continuará hasta que no introduzcas un enter)
  • Error: En la función tradu() estás llamando a la función cambio() y esta todavía no existe. Si se crean las funciones sin definir los prototipos no se pueden usar funciones en líneas en las que aún no están definidas. Es por esto que o se organiza bien el orden de las funciones o es mejor definir antes del main() los prototipos y después del main() el cuerpo de las funciones.
  • Consejo: El código debería estar mejor indentado y especialmente en bloques grandes.
  • Error: Línea 122 -> Si encuentras la palabra, incrementas el valor de <band> y después te indicará que la palabra no se encontró cuando no es cierto.
  • Aviso: En <aux> puedes guardar una palabra de hasta 10000 caracteres (cosa que no creo que quieras hacer). Si luego la copias en un array de longitud 20 puedes tener problemas si <aux> tiene más de 20 caracteres. La función que debes usar es strncpy() para especificar el límite de caracteres a copiar.
  • Consejo: En la línea 138 guardas en <medio> (que se llamaría mejor <encontrado> o <indiceEncontrado>) el valor del índica en el que está esa palabra o -1 si no estaba la palabra. No tienes que volver a comprobarlo otra vez.
  • Error: El bucle de la línea 137 es infinito si no se encuentra la palabra.
  • Consejo: La función cambio() no es necesaria y además no debes comprobar cada índice. Es suficiente con que después de usar un fgets() copies:

    if(palabra[strlen(palabra)] - 1] == '\n') palabra[strlen(palabra) - 1] = '\0';
    else while(getchar() != '\n');

    Este bloque de código funciona muy bien junto y engloba dos funciones. Por un lado elimina el salto de línea del enter final y por otro lado deja el buffer de entrada siempre limpio.

    La función Agregar() no la he mirado con detenimiento pero así por encima decir que al llamar a carga() otra vez vas a volver a incluir todo el contenido del fichero de nuevo. Además tienes el mismo problema al pasar int** en vez de int*.
    El ordenamiento que haces sería un muy buen candidato a una función aparte. Además veo que ordenas según el valor de num por lo que tu búsqueda dicotómica no va a funcionar correctamente pues busca por nombre, no por número.
    Además cuando llamas a masBuscada() vuelves a ordenarlo otra vez...

    Bueno y ya llegar al main() y encontrarme con otro <T[]>... :-\ :-\
    Una mejor manera de repetir los menús es usar un do-while() en vez de usar un while() y llamar al menú antes de empezar y al final de este otra vez.

    Creo que con todo lo que he puesto ya tienes para hacer correcciones un buen rato. Además aunque te las haya puesto en un único sitio hay algunas que las he visto varias veces por lo que no servirá si te limitas a cambiar las cosas en el orden que las puse sino que tendrás que revisar bien tu código.
    Además veo el código un poco mal estructurado y en muchas ocasiones que las funciones sean tan grandes y los nombres de las variables tan poco descriptivos hace casi imposible el seguimiento del funcionamiento.
#124
Supongo que el problema sí lo tienes localizado, no? Cada vez que usas showMessageDialog() creas un cuadro de diálogo nuevo. Si metes este método dentro del for() que se repite n veces, crearás n cuadros de diálogo.

La solución es muy sencilla: concatenar en un string todo el texto que quieres mostrar y llamar a showMessageDialog() una única vez fuera del for():
Código (java) [Seleccionar]

public void mostrarClientes(){
  String mensaje = "LISTA DE CLIENTES"; // Lo inicializamos a una cadena vacia o a un mensaje inicial que queramos mostrar
  Cliente aux;
  for(int i = 0; i < getClientes().getSize(); ++i){
    Cliente = getClientes().get(i);
    // Ahora concatemos la informacion de cada cliente en una linea nueva
    mensaje += "\nNombre: " + aux.getNombre() + " " + aux.getApellidos() + " - DNI: " + aux.getDni(); //... y lo que sea ...
  }
  // Y una vez acabado el for(), mostramos un unico JOptionPane
  JOptionPane.showMessageDialog(null, mensaje);
}


PD: Para concatenar strings es más eficiente usar StringBuffer o StringBuilder por si quieres echar un ojo a esas clases o ya las conoces... :rolleyes:
Suerte  :-X
#125
Cita de: [D]aniel en  7 Diciembre 2020, 14:21 PM
Hola compañero, podrías usar un foro de plataforma, por ejemplo SMF o blogger o diseñar una web sencilla.

Con respecto a video o texto, podes tener los 2, en el sitio web podes poner textos o videos también.
El problema es que un foro o una web llevaría más tiempo de gestión, no? Al final cuando creas un foro tienes que gestionar muchas más cosas de las que un usuario puede percibir a simple vista (está visto en este foro por ejemplo el trabajo que hay constantemente por detrás) y para usar una web propia tendría que dedicarle un tiempo a crearla.
Ahora mismo prefiero usar una plataforma que esté lista ya para usar y como decía si más adelante veo que el proyecto avanza positivamente pues empezar a usar otras plataformas más gestionables.

Cita de: [D]aniel en  7 Diciembre 2020, 14:21 PM
Con el tema de largos o cortos, eso depende, lo mejor que podes hacer es pensar y crear un vídeo tutorial resumido, lo justo y necesario, pero tampoco tienen que ser los videos tan cortos porque sino terminaras explicando rápido todo y el usuario no va a entender nada.

Me ha pasado que he visto videos tutoriales con tipos explicando que son una luz de rápido y tuve que volver a ver los videos pero pausandolos o configurandolos para que la velocidad de reproducción sea más lenta, otras veces he visto videos donde hacen cosas y hablan algo de lo que hacen pero no todo y uno queda con dudas, yo creo que los videos tutoriales tenés que hacerlos lo más expresivo y resumido posible y si ves que hay cosas que te gustaría o deberías profundizar más, entonces haces otros videos explicativos sobre eso.
Sí, a mí también me ha pasado que me encuentro en ocasiones con vídeos así. Y también el problema de meter muchos contenidos en un mismo vídeo y hacer un vídeo de ~30 minutos en el que igual entras a buscar una parte muy concreta y tienes que ir avanzando y retrocediendo hasta encontrarlo.
A mí personalmente los vídeos que son muy largos me dan mucha pereza. Prefiero dos vídeos cortos y bien separados (tampoco cortar en medio de una explicación) que uno largo que tenga demasiadas cosas. Es algo así como un símil con las funciones/métodos de un programa: mejor que cada uno haga una cosa concreta y que tengan una alta cohesión que no al revés.

Cita de: [D]aniel en  7 Diciembre 2020, 14:21 PM
Los videos es mejor que los publiques en YouTube que todo el mundo conoce y utiliza, podrías crear un canal sobre videos-tutoriales.
Tiene pinta de que al final será la plataforma que use. Hay mucha gente que lleva años quejándose de la gestión que tiene YouTube pero bueno, una vez dentro veremos a ver qué tal va la cosa.

Cita de: [D]aniel en  7 Diciembre 2020, 14:21 PM
Con respecto a que vos sos extenso, sos igual que yo, cuando yo tenía mí foro de programación explicaba mucho y varios usuarios me agradecían por mis conocimientos y explicaciones, me decían que explicaba muy bien y detallado, que explicaba cosas que nadie lo hacía (únicas), y es verdad lo que ellos decían porque las cosas que yo explicaba no las encontraba en otro lado o al menos no de la forma que yo lo hacía.

Te comento ésto porque es bueno en muchas ocasiones ser extenso, de esa manera los usuarios no quedan con dudas, y yo siempre vi que vos explicas muy bien como si fueses un profesor, todos esos conocimientos y ese material que vos públicas, tiene mucho valor y es de mucha ayuda para los usuarios, en internet son pocas las personas que explican tanto como vos y de esa forma, además veo que les haces ver los errores a los usuarios y se los corregis también.
También he visto que les das muchos consejos.
Exactamente. Hay cientos de vídeo-tutoriales para aprender lo básico pero pocas veces se mencionan particularidades o errores muy comunes que se ven luego a diario en personas que están empezando.
Y es muy fácil también decir "tu programa no funciona, toma este que sí va bien" pero no creo que sea la solución. Cuando yo hacía programas u otras tareas y no funcionaban y me decían "hazlo así y funciona" y yo decía "no quiero que funcione, quiero saber por qué esto que hago no funciona". Eso es lo que te hace entender cómo funcionan las cosas y aprender de verdad. Es por esto que intento siempre mostrar los errores que se tienen, para que se vea por qué no funciona; aunque luego pueda dar otros consejos de cosas mejorables. Es cierto que lleva más trabajo pero así es como me hubiese gustado que me corrigieran a mí.
Muchas gracias por tu valoración a mi contenido  ;D

Cita de: [D]aniel en  7 Diciembre 2020, 14:21 PM
Bueno compañero, mucha suerte y éxitos en tus proyectos personales 

Saludos
Muchas gracias nuevamente.
Espero poder empezar con esto para Navidad que será cuando tenga un poco más de tiempo libre para organizarme bien las cosas.
#126
Como ha comentado [D]aniel, no se hacen tareas en el foro.

Para evitar esta situación lo que debes hacer es dejar tu código (o el fragmento necesario) entre etiquetas de Código GeSHi (las puedes elegir en el desplegable que hay encima del cuadro de texto con el lenguaje apropiado) y detallar el problema que tienes como has hecho en el último mensaje.

Es decir: "tengo que hacer un programa que haga esto..., el código que he hecho es este... y el problema que tengo es este..."

De esta manera tendrás más ayuda que si pides que te den el programa hecho. Piensa que no somos adivinos, no podemos saber cuál es el problema si no vemos el código.
#127
Tienes que asignarle con el = el dato que tiene que guardar.
Según las declaraciones de clases que he hecho antes, el segundo campo es un std::vector<Insumo> por lo que es ese objeto el que le tienes que asignar.
Código (cpp) [Seleccionar]

Insumo insumo1("Nombre insumo 1", "Unidad de medida 1", 1);
std::vector<Insumo> insumos; // creas el vector
// introduces los objetos que quieras
insumos.push_back(insumo1);
//...
std::map<string, std::vector<Insumo>> myMap;
myMap["tu cadena"] = insumos;
#128
Cita de: Tachikomaia en  7 Diciembre 2020, 02:21 AM
Los videos te pueden quedar igual de largos que el texto y me imagino que para las personas en general son más difíciles de hacer. Pero creo que los videos son más visitados.
Es cierto que un vídeo también puede resultar demasiado largo pero cuando se quiere comentar, modificar o probar algo es más fácil, rápido y visual hacerlo en un vídeo (donde la imagen y el sonido están coordinados y se ve en todo momento lo que haces) que tener que explicar cada cosa que haces en forma de texto para que quede lo más claro posible.

Y como tú dices, yo también creo que los vídeos son más visitados y difundidos actualmente.
#129
Si te fijas en el pseudocódigo que te puse, en la función moverDerecha() empiezo el for() en <longitud - 1> pero cuando lo he llamado desde insertarOrdenado() lo he hecho con <size + 1>. Por lo que realmente:

i = longitud - 1
longitud = size + 1
ENTONCES -> i = (size + 1) - 1 = size


EDIT: Es necesario recalcar que esa función tal y como la tienes presupone que: (size < maxSize). Por lo que sólo se puede utilizar en los casos en los que esa precondición sea cierta. No es muy buena opción, por eso comenté la alternativa de pasar la longitud máxima y comprobar la condición explícitamente.

PD: En la línea 15 no es necesario el = en la condición. Basta con >. Si lo pones tampoco funcionará mal pero estás copiando un valor que luego vas a sustituir por el nuevo por lo que no es necesario. Lo importante no es que funcione sino entender lo que se está haciendo.
#130
Desde hace algún tiempo tengo en mente empezar a publicar algunos contenidos como tutoriales, blogs o similares sobre informática, programación y puede que más adelante sobre otros temas relacionados o no con los anteriores. El problema me surge cuando pienso en qué formato y plataforma utilizar para ello, por lo que abro aquí este debate para cualquiera que quiera expresar su opinión (tanto si es creador de contenido como si no) o dar a conocer otras alternativas.

La duda principal que tengo es: ¿vídeo o texto?.
Aunque supongo que en formato texto conlleva menos trabajo de edición, también pueden acabar siendo textos demasiado grandes (lo he comprobado ya en este foro cuando intento responder un tema de forma breve y al final me acabo explayando más de lo esperado). Por esto pensé en hacerlo mejor en formato vídeo aunque no sé cómo me desenvolveré luego.

Y la otra duda es: ¿qué plataforma utilizar?
No conozco nada sobre blogs por lo que no sé qué páginas existen para publicar contenido (obviamente de forma gratuita para empezar) o cómo gestionarlo una vez creado.
Por otro lado, para publicar vídeos, tenía en mente la opción más conocida (creo): YouTube. Conozco algunas otras webs pero que tienen un propósito más específico y de momento prefiero elegir una más flexible y ya más adelante valorar si empezar en otras plataformas.

Dicho esto y como ya he comentado al principio, me gustaría conocer otras opiniones y recomendaciones de personas que se hayan visto, o no, en esta situación.

PD: Por si alguien se ha preocupado, no voy a dejar este foro pero sí quiero empezar otros proyectos personales paralelamente...  :xD