elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


  Mostrar Mensajes
Páginas: 1 ... 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [18] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ... 102
171  Programación / Programación C/C++ / Re: Piramide de Numeros -> C++ en: 29 Enero 2021, 21:16 pm
El código debe estar publicado entre etiquetas de Código GeSHi. Puedes seleccionarlas en el desplegable que dice "Código GeSHi" o escribiendo directamente:
[code=cpp]
// Tu codigo C++
[/code]



Los espacios tienes que imprimirlos también tú pues el programa siempre escribirá desde la izquierda en cada línea. Entonces tienes que encontrar un patrón (una regla) que sigan estos espacios. Además lo bueno es que solo tienes que preocuparte por los espacios a la izquierda ya que a la derecha son indiferentes.

Si te fijas en la línea 0, los espacios a la izquierda son: 0. En la línea 1, los espacios a la izquierda son: 1. ...así hasta que solo imprimes 1 valor y entonces los espacios serán (n-1) y entonces empiezan a disminuir.

Otro problema que veo es que no va a parecer centrado sino que aparecerá alineado a la derecha. Esto es porque al usar fuentes monoespaciadas (todos los caracteres ocupan lo mismo), en la línea 1 (empezando a contar por el 0) el espacio ocupará el hueco del 1, el 1 el hueco del 2,..., y el 5 ocupará el hueco del 6 por lo que quedará a la derecha. La solución es incluir un espacio entre cada valor de forma que quede:
Código:
1 2 3 4
 1 2 3
  1 2
   1
  1 2
 1 2 3
1 2 3 4

Para que se entienda bien lo que tienes que hacer:
Código
  1. int numeroMaximo = 6; // por ejemplo
  2. for(int linea = 0; linea < numeroMaximo; ++linea){
  3.  // En la linea 0 -> 0 espacios | En la linea 1 -> 1 espacio | En la linea 2 -> 2 espacios | ...
  4.  for(int espacios = 0; espacios < linea; ++espacios){
  5.    cout << " ";
  6.  }
  7.  // En la linea 0 -> 6 numeros | En la linea 1 -> 5 numeros | En la linea 2 -> 4 numeros | ...
  8.  for(int numero = 1; numero <= (numeroMaximo - linea); ++numero){
  9.    cout << numero << " "; // Incluimos un espacio despues de cada numero para que tenga forma
  10.  }
  11. }
Con esto consigues la primera mitad.
Ahora te toca ver cómo haces la segunda mitad pero la idea es la misma.

172  Programación / Programación C/C++ / Re: Juego de Buscaminas en: 28 Enero 2021, 01:01 am
En esta ocasión no voy a explayarme tanto como en el otro tema. El foro es para resolver dudas concretas, no para que te digan cómo tienes que hacer cada ejercicio y te lo den prácticamente hecho. Para otra ocasión incluye concretamente cuál es la duda o problema que tienes.

Imagina un tablero con: X (mina) y ? (no mina)
Código:
? ? X ?
X ? ? ?
? X ? X
? ? ? ?

Tendrías que introducir en el programa los siguientes datos (tal y como te dicen):
Código:
4 // Numero de filas/columnas del tablero (matriz)
4 // Numero de minas en el tablero (cada X)
0 2 // Coordenadas de la primera mina (0,2)
1 0 // Coordenadas de la primera mina (1,0)
2 1 // Coordenadas de la primera mina (2,1)
1 3 // Coordenadas de la primera mina (1,3)

Ahora tienes que hacer un programa que construya el tablero completo comprobando cuántas minas hay adyacentes a cada casilla. Te doy la solución para que la compruebes con tu programa:
Código:
1 1 -1 1
-1 2 2 2
2 -1 2 -1
1 1 2 1

Suerte  :-X
173  Programación / Programación C/C++ / Re: validar gato en: 27 Enero 2021, 09:12 am
Primero, para situarnos, vemos que se habla del juego del gato (conocido también como el 3 en raya si el tablero es de 3x3). Esto se juega entre dos jugadores que ponen sus fichas en el tablero y el primero que consigue completar una fila, columna o diagonal (principal o secundaria) con sus fichas, gana. Hasta aquí todo claro.

Lo que parece que pide es un algoritmo que determine si un jugador en concreto ha ganado. Para ello tienes que pasar una entrada al programa en el formato que te dicen:
Citar
En la primer línea el valor  entero a buscar en el tablero.

En la segunda línea separados por un espacio, la cantidad 3<=n<=10 de renglones y columnas para una matriz (tablero) de forma cuadrada.

A partir de la tercera línea, se presentan separadas por un espacio los números de cada renglón de la matriz, se inicia con el renglón 0 y se termina con el renglon n-1 , y en cada renglón se inicia con la columna 0  y se termina con la columna . n-1

Suponiendo que los valores pueden ser: {0, 1, 2} para representar: {casilla vacía, jugador1, jugador2}, respectivamente.
Un ejemplo de entrada podría ser:
Código:
1 // Vamos a ver si ha ganado el jugador 1
4 // En un tablero de 4x4 cuyos valores actuales son: (Y ahora escribimos la matriz que representa el tablero)
1 0 0 2
1 1 2 2
2 1 1 2
0 0 0 1
Como se puede ver, en este caso sí ha ganado el jugador 1 porque tiene la diagonal principal completa con sus fichas. Entonces tu algoritmo tiene que devolver 1 (lo que viene a traducirse como true). En caso de que el jugador 1 no hubiese ganado (bien porque ha ganado el jugador 2 o porque no ha ganado ninguno todavía), debería devolver un 0 (que equivale a false).

No sé si este programa tienes que hacerlo en C o C++ pero una idea para empezar (en C) puede ser:
Código
  1. #define MIN_SIZE 3
  2. #define MAX_SIZE 10
  3.  
  4. // Es obligatorio indicar todas las dimensiones de un array, excepto la primera
  5. // Esta funcion comprueba si el jugador indicado ha ganado segun la matriz (tablero) indicada
  6. int comprobarGanador(int, int[][MAX_SIZE], int);
  7.  
  8.  
  9. int main(){
  10.  // La forma mas sencilla para empezar es crear una matriz con el maximo valor posible y usar solo la parte necesaria
  11.  int matriz[MAX_SIZE][MAX_SIZE];
  12.  // Aqui ya depende del formato que utilices para la entrada de datos (fichero, teclado,...)
  13.  int jugador;
  14.  // Con este bucle sigues pidiendo un valor hasta que sea valido (1 o 2)
  15.  do {
  16.    printf("Introduce el jugador a comprobar (1/2): ");
  17.    scanf("%d", &jugador);
  18.  } while(jugador != 1 && jugador != 2);
  19.  
  20.  // Hacemos lo mismo para el orden de la matriz
  21.  int orden; // A partir de ahora tenemos que usar 'orden' para recorrer la matriz porque las posiciones restantes hasta MAX_SIZE contendran basura
  22.  do {
  23.    printf("Introduce el orden del tablero [%d, %d]: ", MIN_SIZE, MAX_SIZE);
  24.    scanf("%d", &orden);
  25.  } while(orden < MIN_SIZE || orden > MAX_SIZE);
  26.  
  27.  for(int i = 0; i < orden; ++i){
  28.    printf("Introduce los valores de la fila %d: ", i);
  29.    for(int j = 0; j < orden; ++j){
  30.      scanf("%d", &matriz[i][j]); // Aunque se escriban todos los valores en una fila, scanf() va separando por espacios
  31.    }
  32.  }
  33.  
  34.  printf("El jugador %d ha ganado la partida?: %d\n", jugador, comprobarGanador(jugador, matriz, orden));
  35.  // Si vas a ejecutarlo desde la consola hay que incluir la siguiente linea para que no se cierre hasta pulsar Enter:
  36.  getchar(); // cin.get() si se hace en C++
  37.  return 0; // El return se puede omitir y el compilador lo incluye implicitamente
  38. }
  39.  
  40. int comprobarGanador(int jugador, int matriz[][MAX_SIZE], int orden){
  41.  // Aqui queda tu tarea de comprobar si el jugador indicado ha ganado o no
  42.  // Recuerda recorrer la matriz hasta la fila/columna <orden-1> y no hasta <MAX_SIZE-1> (no es lo mismo)
  43. }

Tenía ganas de escribir algo en C así que creo que con eso ya te he dejado más que suficiente... :silbar: :silbar:
Con implementar la función comprobarGanador(), el código debería funcionar correctamente (si no he olvidado nada). Luego ya puedes cambiar lo que quieras o necesites.
Si lo pruebas con el ejemplo de entrada que puse antes el resultado debería ser:
Código:
El jugador 1 ha ganado la partida?: 1
174  Programación / Programación General / Re: Cambiar idioma de un toast en: 20 Enero 2021, 21:38 pm
Para cambiar el idioma de un toast se hace igual que con cualquier otro elemento.
Lo importante es que no definas las cadenas (strings) en el propio código fuente sino que lo hagas en el fichero strings.xml. Así después basta con crear otro fichero strings.xml cambiando el lenguaje y definir las mismas cadenas pero en el idioma que quieras.

Desde el código fuente tienes que hacer referencia a las cadenas de strings.xml. Así al cambiar el idioma del dispositivo, las cadenas se obtendrán del xml correspondiente y se cambiarán automáticamente.
175  Programación / Programación C/C++ / Re: Duda C++ en: 3 Enero 2021, 17:47 pm
Pues para hacer/entender programas escritos en C++ básicamente... :xD :xD

C++ es un lenguaje que se usa bastante de forma profesional para videojuegos pero tú puedes hacer programas de cualquier tipo con él. Una de las cosas que destacan de este lenguaje es que tiene tantos las características de alto nivel (al igual que lenguajes como Java) como de bajo nivel (al igual que C o ensamblador). Puedes hilar muy fino si así lo necesitas y trabajar directamente con espacios de memoria y punteros, cosa que en otros lenguajes de alto nivel es imposible.
Además, cualquier código escrito en C lo podrás compilar y ejecutar junto a C++ (a la inversa no)
176  Programación / Programación C/C++ / Re: extraer submatrices en: 27 Diciembre 2020, 20:25 pm
Tienes varios errores:
  • Líneas 17 y 18 -> La i y la j marcan el punto de inicio. A cada valor de i y de j le vas a sumar hasta 2 por lo que en las últimas iteraciones de cada bucle se te saldrá fuera de la matriz.
  • Línea 23 -> No es la misma la posición que vas leyendo de la matriz original que la posición en la que tienes que escribir de la submatriz. Aunque hagas la submatriz que empieza por ejemplo en [2][3] tienes que empezar a escribir en
  • , no en [2][3].
  • Líneas 25 - 28 -> No tienes que calcular la suma cada vez que cambias un valor sino cada vez que copias una submatriz completa. Tal y como lo haces ahora mismo estás calculando sumas de submatrices que no existen.

Aparte de los errores, ese programa está muy limitado pues no permite cambiar fácilmente ni el tamaño ni los valores de las matrices. Sería mejor usar constantes para permitir esto más fácilmente.
177  Programación / Programación General / Re: ¿Qué lenguajes de programación son más usados hoy en día? en: 22 Diciembre 2020, 14:03 pm
Si tu objetivo es aprender un lenguaje en profundidad lo mejor es que primero tengas claros tus objetivos. Prácticamente todos los lenguajes sirven para prácticamente todo pero en muchas ocasiones hay un lenguaje que resalta sobre el resto para una tarea específica.

Sobre API Rest no tengo conocimientos por lo que no puedo decir nada pero sobre POO está claro que es uno de los paradigmas de programación más utilizados, sino el más. Al final el mundo en general no se representa con variables sueltas sin más sino que todo son objetos, cada objeto tiene sus características y sus comportamientos y la POO justo define eso.

En cuanto a lenguajes: es cierto que .NET y Java son de los lenguajes más demandados y más completos que existen. Además ambos permiten programar mediante POO y a mi parecer tienen una buena curva de aprendizaje. En cambio de poco te sirven si lo que quieres es programador controladores o servicios del sistema por ejemplo, para esta tarea siempre será mucho mejor aprender C. Por eso digo que lo importante es que primero definas tus propósitos (sistemas operativos, juegos, análisis estadístico, desarrollo móvil (Android, iOS), ...) y cuando lo tengas te será muy fácil elegir el lenguaje más adecuado para ello (C, C++, Python, R, Java, Kotlin, Swift, Flutter,...) sin olvidar toda la parte de web (PHP, diversos frameworks en los que no estoy al día...) o las bases de datos (SQL).

Y si no tienes muy claro lo que hacer o estás dando tus primeros pasos Java y .NET (C#) creo que son dos de las mejores opciones para empezar porque como ya he dicho son lenguajes muy completos y que permiten hacer muchas cosas. Hay gente que prefiere empezar con lenguajes más sencillos como Python pero en mi opinión estos lenguajes enmascaran demasiado la programación. Si aprendes un lenguaje como Java, C# o similares te será más sencillo dar el paso a Python y similares, que al contrario.

Mucha suerte y recuerda que puedes probar todos los que te causen curiosidad y quedarte al final con el/los que más te guste/n.
178  Programación / Java / Re: [JAXB] Generar xsd mediante schemagen en: 22 Diciembre 2020, 01:17 am
que tal doc? que es la que hay?

quitale el
Código
  1. @XmlRootElement
a las superclases y avisa que tal... o sea a la superclase Vehiculo
He probado el cambio que comentas y el resultado sigue sin ser satisfactorio. El error que aparecía sigue apareciendo y además ahora tampoco aparece el elemento Vehiculo en el xsd.
El resultado es el siguiente:
Código
  1.  <xs:element name="Furgoneta" type="furgoneta"/>
  2.  
  3.  <xs:element name="Vehiculos" type="conjuntoVehiculos"/>
  4.  
  5.  <xs:complexType name="conjuntoVehiculos">
  6.    <xs:sequence>
  7.        <xs:element ref="Furgoneta" minOccurs="0" maxOccurs="unbounded"/>
  8.    </xs:sequence>
  9.  </xs:complexType>
  10.  
  11.  <!-- ... -->
179  Programación / Programación General / Re: ¿que se representa en las clases y diagramas de clases uml? en: 20 Diciembre 2020, 16:26 pm
Tal y como dices, los diagramas uml se asemejan bastante a las clases cuando hablamos de POO, sin embargo; que aparezcan relaciones no significa que hagan referencia a bases de datos. Las relaciones son necesarias también para saber cómo interactúan unas clases con otras y además existen pequeños detalles que se pueden apreciar en la implementación.

Te pongo un ejemplo donde creo que se puede ver bien:
Imagina que estás creando una aplicación para un banco donde entre otras muchas cosas tienes una clase Cliente y otra clase Cuenta. Según cómo definas la relación entre ambas clases tendrás una estructura u otra.
  • Según la cardinalidad: Definimos si hace falta utilizar una colección de datos (array u otras) para relacionar los datos. Por ejemplo: "Un cliente puede tener una o más cuentas pero una cuenta solo puede ser de un cliente" esto suena a diagrama entidad-relación de bases de datos pero también se aplica a las clases de tu programa. Las clases de tu aplicación quedarían así:
Código:
class Cuenta {
  string numeroCuenta;
  Cliente propietario;
  //...
}

class Cliente {
  string nombre;
  Array<Cuenta> cuentas;
  //...
}

  • Según la dirección: La dirección de la relación indica qué clase conoce (y puede acceder) a las instancias de la otra. Aunque en UML se suelen usar relaciones bidireccionales (sin punta de flecha), también se pueden hacer unidireccionales. Por ejemplo imagina la relación anterior Cliente-Cuenta pero en este caso unidireccional: Cliente -> Cuenta (solo el cliente conoce sus cuentas entonces desde un cliente puedes acceder a sus cuentas pero desde una cuenta no puedes acceder a su propietario) Esto en tus clases se representaría así:
Código:
class Cuenta {
  string numeroCuenta;
}

class Cliente {
  string nombre;
  Array<Cuenta> cuentas;
}

Mediante UML se puede llegar a un nivel de precisión muy alto aunque no está muy estandarizado. Sí que existen algunos estándares a seguir pero a la hora de la verdad cada uno utiliza los elementos que cree convenientes para representar la información.
Hace un año tuve que preparar unas cosas mediante UML y me costó mucho trabajo encontrar algo de información en claro así que al final acabé leyendo por encima la guía "UML 2 Certification Guide Fundamental & Intermediate Exams (Tim Weilkiens y Bernd Oestereich)" y más o menos pude apañarme aunque es muy extensa pues está preparada precisamente para los exámenes de certificación en UML.

Yo creo que al final UML está ahí como un modelo teórico para representar las ideas de forma rápida y más o menos común para que todo el que conozca UML pueda entenderlo pero al final cada empresa o grupo de trabajo se crea sus propias anotaciones para entenderse. Mientras tanto emisor como receptor entiendan el diagrama, queda muy abierto a posibilidades.
180  Programación / Java / Re: [JAXB] Generar xsd mediante schemagen en: 19 Diciembre 2020, 13:47 pm
Fichero ConjuntoVehiculos.java
Código
  1. @XmlRootElement(name = "vehiculos")
  2. @XmlAccessorType(XmlAccessType.FIELD)
  3. public class ConjuntoVehiculos {
  4.  @XmlElementRefs({
  5.    @XmlElementRef(name = "Vehiculo", type = Vehiculo.class),
  6.    @XmlElementRef(name = "Coche", type = Coche.class),
  7.    @XmlElementRef(name = "Furgoneta", type = Furgoneta.class)
  8.  })
  9.  private ArrayList<Vehiculo> vehiculos;
  10.  //...
  11. }

Fichero Vehiculo.java
Código
  1. @XmlRootElement(name = "Vehiculo")
  2. @XmlAccessorType(XmlAccessType.FIELD)
  3. public class Vehiculo implements Serializable {
  4.  //...
  5. }

Fichero Coche.java
Código
  1. @XmlRootElement(name = "Coche")
  2. @XmlAccessorType(XmlAccessType.FIELD)
  3. public class Coche extends Vehiculo {
  4.  //...
  5. }

Fichero Furgoneta.java
Código
  1. @XmlRootElement(name = "Furgoneta")
  2. @XmlAccessorType(XmlAccessType.FIELD)
  3. public class Furgoneta extends Vehiculo {
  4.  //...
  5. }

Y el schema xsd que quiero obtener es:
Código
  1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  2. <xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  3.  
  4.  <xs:element name="Coche" type="coche"/>
  5.  
  6.  <xs:element name="Furgoneta" type="furgoneta"/>
  7.  
  8.  <xs:element name="Vehiculo" type="vehiculo"/>
  9.  
  10.  <xs:element name="Vehiculos" type="conjuntoVehiculos"/>
  11.  
  12.  <xs:complexType name="conjuntoVehiculos">
  13.    <xs:sequence>
  14.      <xs:choice minOccurs="0" maxOccurs="unbounded">
  15.        <xs:element ref="Vehiculo"/>
  16.        <xs:element ref="Coche"/>
  17.        <xs:element ref="Furgoneta"/>
  18.      </xs:choice>
  19.    </xs:sequence>
  20.  </xs:complexType>
  21.  
  22.  <xs:complexType name="vehiculo"><!-- ... --></xs:complexType>
  23.  
  24.  <xs:complexType name="coche"><!-- ... --></xs:complexType>
  25.  
  26.  <xs:complexType name="furgoneta"><!-- ... --></xs:complexType>
  27. </xs:schema>

Pero como no reconoce la clase Coche.class, me genera el siguiente xsd:
Código
  1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  2. <xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  3.  
  4.  <xs:element name="Furgoneta" type="furgoneta"/>
  5.  
  6.  <xs:element name="Vehiculo" type="vehiculo"/>
  7.  
  8.  <xs:element name="Vehiculos" type="conjuntoVehiculos"/>
  9.  
  10.  <xs:complexType name="conjuntoVehiculos">
  11.    <xs:sequence>
  12.      <xs:choice minOccurs="0" maxOccurs="unbounded">
  13.        <xs:element ref="Vehiculo"/>
  14.        <xs:element ref="Furgoneta"/>
  15.      </xs:choice>
  16.    </xs:sequence>
  17.  </xs:complexType>
  18.  
  19.  <xs:complexType name="vehiculo"><!-- ... --></xs:complexType>
  20.  
  21.  <xs:complexType name="furgoneta"><!-- ... --></xs:complexType>
  22. </xs:schema>
Páginas: 1 ... 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [18] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ... 102
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines