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

#611
Programación C/C++ / Re: Programación C
7 Abril 2019, 01:50 AM
Para que lo entiendas es como que el compilador coge lo que devuelve cada parámetro. Si es una variable simple coge el propio valor, si es una función coge el valor de retorno de la función o si es una operación coge su resultado.
#612
Tu matriz <casillero> es una matriz donde cada celda es un objeto de tipo <casillas>. Y cada objeto de tipo <casillas> sólo contiene un puntero de tipo <WINDOW>.
Nunca he trabajado con ello pero por lo que veo en tu código anterior parece que se inicializa usando <newwin(a, b, x, y) donde no sé que es a y b pero si uno de esos dos valores es el que quieres sustituir por <num> simplemente pasa <num> como parámetro.

Sin embargo <newwin()> ya lo usas en la función <panel()> por lo que estarías creando el doble de objetos.
Además en la línea 21 de tu primer código tienes un error, no puedes asignar <panel()> (función que devuelve una casilla) a <casillero[10][10]> por lo que te comenté de que esa posición se sale de los límites de tu matriz.

Si me comentas que hacen las funciones que estás usando y que representan los parámetros quizás pueda ayudarte más.
#613
Cambia el tipo de <x> de <double> a <float> y me comentas si te ha funcionado.
O al revés, si quieres usar <x> como <double>, cambia el formato de <%g> a <%lg>.
#614
Porque si tienes una matriz de 10x10, su último elemento es matriz[9][9]. Entonces aparte de que está mal pasado el parámetro, solo he comentado que esa posición además no es válida. Era solo un comentario extra que no era necesario para solucionar el problema, pero nunca está de más :-X
#615

mostrar(casillero[10][10], 69, x, y);

El error está ahí porque como te dice el propio error, la función está esperando un puntero de arrays (es decir, una matriz) y tú le estás pasando un elemento concreto de esa matriz (la casilla [10][10] de la matriz, la cual además se sale de los límites). La opción correcta sería:

mostrar(casillero, 69, x, y);
#616
Programación C/C++ / Re: Programación C
4 Abril 2019, 22:07 PM
La función <printf()> tiene unos parámetros que cuesta ver si no se conocen. Te dejo AQUÍ un enlace a una página donde puedes ver todo lo relacionado con esa función.

El primer parámetro siempre es una cadena de <char> que puede:
  • Ser literal: Muestra tal cual lo que le pones.

    printf("Hello World"); // Salida: Hello World

  • Usar especificadores de formato: Permite mostrar el valor de variables o funciones que devuelven algo.

    int a = 3, b = 2;
    printf("La suma de %d + %d es %d", a, b, a+b); // Salida: La suma de 3 + 2 es 5

    Puedes encontrar todos los especificadores de formato que hay en el enlace que te he dejado antes. Según el tipo de variable que quieres mostrar o literales (como en este caso) tienes que usar un especificador u otro.
#617
Entonces no tiene ningún sentido que guardes los datos en la matriz usando <strcpy()> como has hecho.
Lo que tienes que hacer es: de un fichero que ya tiene las variables guardadas con su valor y todo, meterlas en una matriz. Te dejo un ejemplo mejor que ir caracter a caracter...

#define MAX_SIZE 20

int main(){
    FILE *fichero;
    fichero = fopen("fichero.txt", "r");
    char registro[MAX_SIZE][MAX_SIZE];
    int num_variables = 0; // numero de variables/lineas del fichero
    while(!feof(fichero))
        fgets(registro[num_variables++], MAX_SIZE, fichero);
    num_variables--;
}


Luego tienes que pedir una palabra/variable y buscar en la matriz si está y si está devolver el valor que está a la derecha del "=". Mírate las funciones de la librería <string.h> ya que son de utilidad para este ejercicio.
PD: Te recomiendo pedir la palabra usando la función <fgets()> (tendrás que hacer una pequeña modificación para quitar el ENTER que le des al terminar de escribir la palabra).

Vete probando lo que te comento y cuando te quedes bloqueado, intento ayudarte más específicamente ya que ahora estoy ocupado. Suerte :-X
#618
Vale. Todo depende de cómo estés guardando esos datos. Tienes varias opciones como pueden ser:
  • Pedir al usuario la cadena entera (no te lo recomiendo... el usuario siempre tiende a equivocarse y tenemos que vigilar todo lo que hace  :xD)
  • Pedir al usuario el numero y el resto de la cadena lo creamos nosotros
  • No pedir nada al usuario y establecer unos valores fijos en tiempo de compilacion
  • Estan los datos en el fichero y tenemos que cogerlos de ahi

    Según la opción que quieras implementar, tenemos que seguir unas restricciones u otras.
    Si no es la opción 4, yo te recomendaría la segunda opción, te evitas los problemas de la primera y no pierdes tanta funcionalidad como en la tercera (estoy suponiendo que nosotros conocemos los nombres de las variables de antemano, es decir, que van a ser "var1", "var2", etc) Si lo que quieres es que el usuario introduzca el nombre que el quiera para la variable, entonces hay que implementar la primera opción.

    Coméntame cuál se adapta mejor a lo que quieres/necesitas e intentaré echarte una mano desde lo más básico para corregir el problema de raíz. :-X
#619
Programación C/C++ / Re: Programación C
4 Abril 2019, 04:05 AM
Coloca tus códigos entre etiquetas de código GeSHi (puedes seleccionar el lenguaje apropiado en el desplegable que hay encima del cuadro de texto)... :rolleyes:


// incluyes la libreria <stdio.h> para poder usar las funciones que contiene (printf() en este caso)
#include <stdio.h>

int power(int m, int n); // prototipo de una funcion <power()> que recibe dos enteros <int> como parametros y devuelve otro entero <int>

/* prueba la funcion power */
main() // funcion principal (lo que realmente se ejecuta. PD: Aunque funciona asi es recomendable poner <int main()> ya que devuelve un <int>
{
   int i; // declaras una variable <i> de tipo entero <int>
   for (i = 0; i < 10; ++i) // bucle que empieza asignando 0 a <i>, se ejecuta mientras (i < 10) y en cada vuelta se suma 1 a <i> [(++i) es igual que (i = i+1) y que (i += 1)]
      printf ("%d %d %d\n", i, power(2,i), power (-3,i); // muestra por pantalla 3 enteros, primero <i>, luego 2 elevado a <i> y luego -3 elevado a <i>
   return 0; // devuelve 0, es lo que suele indicar que el programa se ha ejecutado correctamente hasta el final
}
/* power: eleva la base a la enesima potencia; n > = 0 */
int power(int base, int n) // implementas la funcion cuyo prototipo has puesto al principio
{
   int i, p; // declaras dos variables enteras <int> que son <i> y <p>
   p = 1 // asignas a p el valor 1. PD: Has olvidado el ;
   for ( i = 1; i < = n; + + i) // bucle empezando en 1,  e incrementando de 1 en 1 mientras (i <= n)
      p = p * base // asignas a <p> el producto de <p> por la variable <base> (primer parametro de la funcion. Se puede abreviar como p *= base
   return p; // devuelve el valor que tiene <p> al terminar la funcion
}
#620
Mientras que la función de <comparar()> es correcta, la de <ordenarVectorStrings()> no lo es. Tienes un lío bien montado ahí cuando la función es mucho más sencilla.
Además no necesitas devolver nada, puedes reordenar el array que pasas como parámetro simplemente.

Antes de nada si tienes errores hay que asegurarse de que el error no está en la entrada de datos. Por lo que te dejo aquí una forma de pedir las palabras y un algoritmo para ordenarlas. No te lo voy a dar hecho en C++ para no dártelo todo hecho, pero te servirá para guiarte:

// almacenar palabras
reservarFilas(palabras, cantidad_palabras)
para i := 0 hasta cantidad_palabras-1
    nueva_palabra := pedirPalabra()
    longitud := longitud(nueva_palabra)
    reservarColumnas(palabras[i], longitud)
    palabras[i] := nueva_palabra
fin para

// ordenar palabras
para i := 0 hasta cantidad_palabras-2
    para j := i+1 hasta cantidad_palabras-1
        si compararPalabras(palabras[i], palabras[j] > 0)
            intercambiar(palabras[i], palabras[j])
        fin si
    fin para
fin para


Espero que te sirva y si tienes alguna duda más o problema no olvides dejar tú código para poder corregir esos errores. :-X :-X