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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  matriz de estructuras
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: matriz de estructuras  (Leído 2,068 veces)
codX

Desconectado Desconectado

Mensajes: 65


Es más complejo de lo que crees...


Ver Perfil
matriz de estructuras
« en: 6 Abril 2019, 01:23 am »

Hola que tal?, tengo el siguiente código

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ncurses.h>
  4. #include <pthread.h>
  5. struct casillas{
  6. WINDOW *casilla;
  7. };
  8.  
  9. void iniVideo();
  10. struct casillas panel();
  11. void mostrar(struct casillas casillero[10][10], int, int, int);
  12. void fin();
  13.  
  14.  
  15. int main()
  16. {
  17. iniVideo();
  18. int x = 2;
  19. int y = 3;
  20. struct casillas casillero[10][10];
  21. casillero[10][10] = panel();
  22. mostrar(casillero[10][10], 69, x, y);
  23. fin();
  24. return 0;
  25. }
  26.  
  27.  
  28. void iniVideo()
  29. {
  30. initscr();
  31. start_color();
  32. init_pair(1, 0, 7); //letras, fovdo. menu
  33. init_pair(2, 7, 0); // panel números
  34. init_pair(3, 0, 2); // casilla x
  35. init_pair(4, 0, 6);
  36. cbreak();
  37. noecho();
  38. keypad(stdscr, true);
  39. curs_set(0);
  40. refresh();
  41. }
  42.  
  43.  
  44. struct casillas panel()
  45. {
  46. struct casillas casillero[10][10];
  47. int k, i, y, x;
  48.  
  49. y = 5;
  50. x = 16;
  51.  
  52. //casillas
  53. for(i = 0; i < 10; i++)
  54. {
  55. for(k = 0; k < 10; k++)
  56. {
  57. casillero[i][k].casilla = newwin(3, 6, y, x);
  58. box(casillero[i][k].casilla, 0,0);
  59. wbkgd(casillero[i][k].casilla, COLOR_PAIR(2));
  60. wrefresh(casillero[i][k].casilla);
  61. x+=6;
  62. }
  63. y+=3;
  64. x = 16;
  65. }
  66. return casillero[10][10];
  67. }
  68.  
  69. void mostrar(struct casillas casillero[10][10], int num, int x, int y)
  70. {
  71.  
  72. mvwprintw(casillero[x][y].casilla, 2, 1, "%i",num);
  73. wrefresh(casillero[x][y].casilla);
  74. }
  75.  
  76. void fin()
  77. {
  78. getch();
  79. endwin();
  80. exit(0);
  81. }
  82.  

El cual en la línea del mani casillero[10][10] muestra la matriz creada, pero cuando invoco la funcion que sigue 'mostrar(casillero[10][10], 69, x, y);' me da el siguiente error: note: expected ‘struct casillas (*)[10]’ but argument is of type ‘struct casillas’
 void mostrar(struct casillas casillero[10][10], int, int, int);

Alguien podría ayudarme por favor?
Gracias.


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: matriz de estructuras
« Respuesta #1 en: 6 Abril 2019, 01:34 am »

Código
  1. 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:
Código
  1. mostrar(casillero, 69, x, y);


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
codX

Desconectado Desconectado

Mensajes: 65


Es más complejo de lo que crees...


Ver Perfil
Re: matriz de estructuras
« Respuesta #2 en: 6 Abril 2019, 02:18 am »

Hola, gracias por tu tiempo. Por qué dices que la matriz se pasa de los límites?
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: matriz de estructuras
« Respuesta #3 en: 6 Abril 2019, 02:20 am »

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
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
codX

Desconectado Desconectado

Mensajes: 65


Es más complejo de lo que crees...


Ver Perfil
Re: matriz de estructuras
« Respuesta #4 en: 6 Abril 2019, 02:24 am »

Entiendo. Muchísimas gracias por tu ayuda. Buen finde!  :D
En línea

codX

Desconectado Desconectado

Mensajes: 65


Es más complejo de lo que crees...


Ver Perfil
Re: matriz de estructuras
« Respuesta #5 en: 6 Abril 2019, 22:44 pm »

Hola YreX-DwX, volví. Cómo podría hacer, teniendo en cuenta el código anterior para que al llamar a la funcion
 void mostrar(struct casillas casillero[10][10], int num, int x, int y)
anote en el casillero dado (x,y) el valor dado(num). ya que no logro cambiar los valores iniciales de la matriz. gracias y disculpá la molestia
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: matriz de estructuras
« Respuesta #6 en: 6 Abril 2019, 23:27 pm »

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.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
codX

Desconectado Desconectado

Mensajes: 65


Es más complejo de lo que crees...


Ver Perfil
Re: matriz de estructuras
« Respuesta #7 en: 7 Abril 2019, 01:40 am »

YreX-DwX, to logré hacer que el programa funcione, pero el código no es el que prefiero hacer.
declaré la estructura casillas casillero[10][10] como variable global.
la funcion struct casillas panel() devuelve una matriz que en realidad son 10x10 ventanas enlas que quiero ingresar un valor x pasado por parámetro.
Mi idea es usar ese panel en otra parte del codigo parte del codigo y asignarle valores ingresados por teclado
Por eso en la funcion ing_resp_mostrar_result(struct casillas casilleros_panel[10][10], int x, int y, int producto, int mov) es la responsable de llenar la matriz con valores ingresados por el usuario
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: matriz de estructuras
« Respuesta #8 en: 7 Abril 2019, 01:54 am »

A lo que me refiero es que qué función de las que ya existen o que método hay para asignar un valor a un <WINDOW *> ya que desconozco su uso, entonces no puedo ayudarte más específicamente.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
codX

Desconectado Desconectado

Mensajes: 65


Es más complejo de lo que crees...


Ver Perfil
Re: matriz de estructuras
« Respuesta #9 en: 7 Abril 2019, 02:14 am »

te entiendo perfectamente YreX-DwX. El problema es que sería demasiado rollo pasarte todo el código. Igualmente vuevlo a agradecer mucho tu tiempo y disposición a ayudar. Que tengas un lindo fin de semana. !!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines