Autor Tema: Matriz de tipo int1  (Leído 1691 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado mrmy

  • PIC10
  • *
  • Mensajes: 14
Matriz de tipo int1
« 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.

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Matriz de tipo int1
« Respuesta #1 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
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado mrmy

  • PIC10
  • *
  • Mensajes: 14
Re: Matriz de tipo int1
« Respuesta #2 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.

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Matriz de tipo int1
« Respuesta #3 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. }
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado mrmy

  • PIC10
  • *
  • Mensajes: 14
Re: Matriz de tipo int1
« Respuesta #4 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.

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Matriz de tipo int1
« Respuesta #5 en: 02 de Febrero de 2012, 18:24:06 »
Ok. mrmy. lamento no poder ayudarte con ccs.
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes