TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: mrmy en 01 de Febrero de 2012, 18:27:09

Título: Matriz de tipo int1
Publicado por: mrmy en 01 de Febrero de 2012, 18:27:09
Saludos
Estoy intentando llenar una matriz y al ingresar un dato en una posicion, se me llenan tambien en otras posiciones.
Aqui el codigo.
#include <16F877A.h>              // DISPOSITIVO A PROGRAMAR
#fuses XT, NOWDT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT               
/////////////////declaracion de variables y configuracion///////////////////////
#use delay(clock=4000000)        // XTAL OSCILADOR EXRTERNO 4MHZ
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)   
#include <string.h>
#define MAX_FIL 4
#define MAX_COL 5
void main(void)
{
 int1 matriz[MAX_FIL][MAX_COL];
 int aux2,aux,i,j,k;
 printf("Listo...\r");
 matriz[0][4]=1;
   for(i=0;i<=3;i++)
   {
    for(k=0;k<=4;k++)
    {
     aux2=matriz[k];
     printf("%D ",aux2);
    }
    printf("\r");
   }
   printf("\r");
}

Al ver el resultado, me sale lo siguiente:

0 0 0 0 1
0 0 0 1 0
0 0 1 0 0
0 1 0 0 0

Si me pueden dar una mano, les agradeceria.
Título: Re: Matriz de tipo int1
Publicado por: jukinch en 01 de Febrero de 2012, 19:44:29
Hola mrmy.
Definiste una matriz que tiene filas y columnas.
[MAX_FIL][MAX_COL]

Y luego cuando asignás el valor de la matriz para aux2 sólo le indicas k.

aux2=matriz[k];

deberías indicar tanto las filas como las columnas de la matriz para asignar correctamente el valor en aux2.
        Publicá los warnings que te deben estar saliendo al compilar.
          Saludos.
           Jukinch
Título: Re: Matriz de tipo int1
Publicado por: mrmy en 02 de Febrero de 2012, 12:42:40
Gracias por responder.
Si al escribir me he olvidado escribir correctamente las posiciones.
Aqui envio la simulacion en proteus.
Título: Re: Matriz de tipo int1
Publicado por: jukinch en 02 de Febrero de 2012, 15:21:19
Hola:
Código: C
  1. #include <16F877A.h>              // DISPOSITIVO A PROGRAMAR
  2. #fuses XT, NOWDT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT              
  3. /////////////////declaracion de variables y configuracion///////////////////////
  4. #use delay(clock=4000000)        // XTAL OSCILADOR EXRTERNO 4MHZ
  5. #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)  
  6. #include <string.h>
  7. #define MAX_FIL 4
  8. #define MAX_COL 5
  9. void main(void)
  10. {
  11.  int1 matriz[MAX_FIL][MAX_COL];
  12.  int aux2,aux,i,j,k;
  13.  printf("Listo...\r");
  14.  matriz[0][4]=1;
  15.    for(i=0;i<=3;i++)
  16.    {
  17.     for(k=0;k<=4;k++)
  18.     {
  19.      aux2=matriz[i][k];
  20.      printf("%D ",aux2);
  21.     }
  22.     printf("\r");
  23.    }
  24.    printf("\r");
  25. }
     Recordá inicializar los valores de las variables a cero para que luego al mostrarlas no muestren basura.
      Fijate que dentro del printf estás usando %D en mayúsculas y si mal no recuerdo debés usarlo en minúsculas así %d
Además usás \r y eso hace que no avance una línea. sino que se quede en el mismo renglón. usá \n.

A continuación te paso el codigo en C. lo compilé con devc++ porque no tengo ccs. Pero funciona bien. :) 
        Si considerás que este mensaje solucionó tu problema editá el titulo del post y poné [solucionado] así otras personas ya lo saben.
          Saludos.
                    Jukinch

Código: C
  1. //=================== Librerías a incluir ====================
  2. # include "stdio.h"
  3. # include "conio.h"
  4. # include "stdlib.h"
  5. #define MAX_FIL 4
  6. #define MAX_COL 5
  7.  
  8. int main (void)
  9. {
  10. printf("\n");
  11. printf("\n");    
  12. {
  13.  int matriz[MAX_FIL][MAX_COL];
  14.  int aux2,aux,i,j,k;
  15.  
  16.  printf("Listo...\n");
  17.  
  18.  
  19.  
  20.  for(i=0;i<=(MAX_FIL-1);i++) //inicializa el array en 0
  21.       {
  22.        for(k=0;k<=MAX_COL-1;k++)
  23.            {
  24.              matriz[i][k]=0;
  25.              printf("borando posicion fila: %d columna %d \n",i,k);
  26.            }
  27.       }
  28.  printf("listo blanqueo de matriz...\n\n");
  29.  printf("cargo el valor entero 1 en fila 0 columna 1.\n\n");
  30.   matriz[0][1]=1;
  31.      
  32.  printf("muestro contenido de matriz.\n\n");
  33.      
  34.    for(i=0;i<=MAX_FIL-1;i++)
  35.    {
  36.     for(k=0;k<=MAX_COL-1;k++)
  37.     {
  38.      aux2=matriz[i][k];
  39.      printf("%d ",aux2);
  40.     }
  41.     printf("\n");
  42.    }
  43.    printf("\n");
  44. }
  45.    printf("\n");
  46.  
  47. printf("fin de programa\n");
  48.   system("PAUSE");     
  49.   return 0;
  50. }
Título: Re: Matriz de tipo int1
Publicado por: mrmy en 02 de Febrero de 2012, 17:19:15
Gracias por responder.
Con variable tipo int la matriz si funciona el problema me sale cuando declaro a la matriz de tipo int1.
Título: Re: Matriz de tipo int1
Publicado por: jukinch en 02 de Febrero de 2012, 18:24:06
Ok. mrmy. lamento no poder ayudarte con ccs.