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

#181
Programación C/C++ / Re: Ayuda con arreglo char
30 Octubre 2020, 00:05 AM
Me sigue costando entender lo que quieres decir...
Intuyo que por "elevado a" quieres decir que su contenido esté repetido n veces, no?

Sería algo así si lo entiendo bien:

int main(){
  char frase[] = "Hola";
  int n = 3;
  char fraseN[strlen(frase) * n + 1]; // Se suma 1 para el caracter final '\0'
  for(int i = 0; i < n; ++i){
    strcat(fraseN, frase); // Elimina el '\0', concatena la cadena e incluye otro '\0' al final
  }
  printf("%s\n", fraseN); // Resultado: HolaHolaHola
}


Si no es eso lo que estás buscando concreta más con un ejemplo de lo que tienes y lo que quieres conseguir.
#182
Programación C/C++ / Re: Torre de Hanoi
29 Octubre 2020, 01:33 AM
Explica qué tienen que hacer esas funciones de la forma más detallada posible.

Ya habrás visto que poniendo ahí todo el programa y las dos funciones que te faltan, totalmente en blanco no estás recibiendo muchas respuestas.

Además supongo que de alguna manera sabrás empezar, no? No esperes que te hagan las funciones enteras. Empieza a hacerlo a tu manera y detalla la parte en la que tengas problemas.
#183
Programación C/C++ / Re: Ayuda con arreglo char
29 Octubre 2020, 01:25 AM
No entiendo muy bien tu problema...

Qué es lo que quieres repetir? Si pudieras poner un ejemplo concreto del resultado que quieres obtener igual es más fácil ayudarte.
#184
He probado y funciona correctamente.

El único error que se me ocurre es que al abrir el fichero para escribir lo haces con el argumento "ab" que indica que añade lo que escribas al final del fichero sin borrar lo que ya tenía (y la b de binario).
Si el fichero tiene otros registros anteriores estás trabajando con unos datos indeseados.

De no ser eso incluye algún mensaje en pantalla después de obtener los registros del fichero al array para ver que el contenido del array sea el esperado.

Suerte.
#185
Programación C/C++ / Re: Ayuda en programa
27 Octubre 2020, 02:36 AM
El foro es para lo que es.

Tú dirás por qué no puedes poner el código. Tienes las etiquetas de código para insertarlo. Que es muy grande? Puedes poner un enlace a github y subir ahí el código, puedes simplificar el ejercicio y poner un ejemplo que simule tu situación real...

#186
Java / Re: Problema con archivos
23 Octubre 2020, 01:59 AM
No puedes comparar instancias de la clase String (ni de ninguna clase) usando el operador ==. El operador == compara que las direcciones de memoria sean las mismas, es decir, que sea la misma instancias.

Para comparar el contenido y no la referencia tienes que utilizar el método equals().



Empieza a utilizar etiquetas de Código GeSHi para adjuntar tu código.
Para colocarlas tienes que seleccionar tu código y con él seleccionado, abrir el desplegable llamado Código GeSHi y elegir Java.
Código (java) [Seleccionar]

public class MyClass {
  //...
}
#187
Desconozco si existe algún método alternativo de instalación que no requiera de una unidad externa pero lo que sí sé es que Kali Linux es para fines muy concretos y no se suele recomendar instalarlo en el ordenador.

Lo habitual es utilizarlo como Live desde una unidad externa. Sin embargo, si te sirve puedes utilizar una máquina virtual (VirtualBox por ejemplo) y crear ahí tu sistema Kali.
#188
Al final las funciones las puedes hacer como tú quieras pero siempre hay mejores y peores diseños.
La gracia de una función es encapsular un fragmento de código autónomo que puede ser reutilizado.

Una forma de hacerlo es crear un main() que sea fácil de leer. Que con un simple vistazo sepas lo que hace pero sin entrar en detalles. En tu caso podría ser algo como lo siguiente (de forma esquemática):

declarar matriz
pedir tamaño
inicializar matriz
mostrar matriz
comprobar si es matriz identidad


Ahora hay que analizar cada paso:
  • declarar matriz -> Es una instrucción atómica (muy sencilla). No ganas nada metiendo la declaración de la matriz en una función. En cambio, si usases memoria dinámica igual sí te conviene hacerlo pues es más complejo.

  • pedir tamaño -> En tu caso también lo haces de una forma muy sencilla pero y si compruebas que el valor que te introducen está entre 1 y el límite máximo? En ese caso ya podrías encapsular ese fragmento en una función. Para que sea lo más reutilizable posible podrías pasar como parámetros los límites y que te devuelva el valor cuando sea correcto:

    int solicitarNumero(int minimo, int maximo){
      int numero;
      do {
        printf("Introduce un numero en el rango [%d, %d]: ", minimo, maximo);
        scanf("%d", &numero);
      } while(numero < minimo || numero > maximo);
      return numero;
    }

    Ahí lo tienes una función que vas a poder reutilizar en infinidad de programas. Claro está que luego podrás añadirle más cosas como que no falle si meten caracteres que no sean numéricos, etc.

  • inicializar matriz -> Esta tarea requiere de varias líneas y es posible que en un mismo programa necesites inicializar una matriz en más de una ocasión por lo que podrías encapsularlo en una función para llamarla varias veces:
    void inicializarMatriz(int matriz[][SIZE], int filas, int columnas);
    PD: Cuando se pasan arrays como argumentos, es obligatorio especificar todas sus dimensiones menos la primera. <filas> y <columnas> representan el tamaño útil real que será el introducido por el usuario. En tu caso se puede usar un único parámetro <orden> ya que son matrices cuadradas pero haciéndolo así harás una función que te servirá para cualquier tipo de matriz.

  • mostrar matriz -> Esta es otra tarea que además de emplear varias líneas puede ser utilizada muchas veces en un mismo programa. Por lo tanto ya sabes, otra función:
    void mostrarMatriz(int matriz[][SIZE], int filas, int columnas);

  • comprobar si es matriz identidad -> Esto es otra tarea independiente por lo que puedes hacer otra función. Hay personas que prefieren comprobar y mostrar el resultado en la misma función aunque esto no es aconsejable.
    Podríamos decir que hay dos tipos de funciones: las que interactúan con el usuario y las que hacen cálculos internos sin necesidad de interactúar con el usuario. En las primeras es lógico que tendremos que mostrar mensajes pero en las segundas es mejor no hacerlo.
    Aquí lo mejor es un valor de retorno <bool> o <int> que sea 1/true si es identidad y 0/false si no lo es. En los parámetros hay más posibilidades.
    1. int esMatrizIdentidad(int matriz[][SIZE], int filas, int columnas); // vale para todas las matrices y lo primero sera comprobar que filas == columnas
    2. int esMatrizIdentidad(int matriz[][SIZE], int orden); // solo valdra para matrices cuadradas



    Con todos estos cambios y 2 cambios más:
  • Utilizar constantes para almacenar los números que haya perdidos por el código. Hacen el código más fácil de modificar.
  • Sustituir system("pause"); por getchar();. Hará la misma función con un menor gasto de recursos.
    te quedaría un código tal que:

    #include <stdio.h>

    // 2 alternativas para crear constantes
    #define SIZE 50
    const int SIZE = 50;

    int main(){
      int matriz[SIZE][SIZE];
      int orden = solicitarNumero(1, SIZE);
     
      inicializarMatriz(matriz, orden, orden);
     
      printf("La matriz resultante es:\n");
      mostrarMatriz(matriz, orden, orden);
     
      if(esMatrizIdentidad(matriz, orden, orden))
        printf("La matriz es Identidad\n");
      else
        printf("La matriz no es Identidad\n");

      getchar();
      return 0;
    }


    PD2: Te queda como trabajo a ti implementar el cuerpo de cada una de las funciones para que ese código funcione.
#189
Programación C/C++ / Re: Duda con Calculo errado
21 Octubre 2020, 02:09 AM
No, por defecto toma la precedencia de operadores correctamente.
Supongo que en este caso estaba implementando un algoritmo propio que replicase ese comportamiento.
#190
Programación C/C++ / Re: Duda con Calculo errado
20 Octubre 2020, 23:12 PM
Efectivamente, siguiendo el orden de preferencia de los operadores, el resultado debería ser -144 y no -1008.

Parece que tu programa hace las operaciones según las ve pues si haces: (-18 * 6 + (-4)) * 9 = -1008.

Obviamente, sin ver el código es imposible ayudarte más.