• Lunes 29 de Abril de 2024, 20:45

Autor Tema:  Impresion De Matrices  (Leído 3152 veces)

akira

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Impresion De Matrices
« en: Lunes 14 de Marzo de 2005, 17:00 »
0
Hola a todos, desde ya gracias por el simple hecho de ponerse a leer esto.
El problema es el siguiente, me piden que imprima por pantalla una matriz recorriendola en forma de espiral y que vaya mostrando cada elemento 1 a 1 y que quede ordenada como matriz en el display.
Se como recorrerla en espiral lo que no se es como mantener el orden de la matriz por pantalla.
Gracias.
 :comp:

fuhrer

  • Miembro MUY activo
  • ***
  • Mensajes: 329
  • Nacionalidad: mx
    • Ver Perfil
    • http://admin.busquenoseninternet.com
Re: Impresion De Matrices
« Respuesta #1 en: Lunes 14 de Marzo de 2005, 17:53 »
0
Hola, que tal.

Me gustaria ayudarte, pero no se a que te refieres con eso de mantener el orden de la matriz por pantalla.

No se si pudieras explicarte mejor o poner un ejemplo pequeño de lo que obtienes y otro donde muestres lo que quieres obtener, tal vez asi sea mas facil.

Hasta luego.

akira

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Impresion De Matrices
« Respuesta #2 en: Lunes 14 de Marzo de 2005, 19:48 »
0
Gracias por responder.
Te cuento lo que quiero es lo siguiente.
A mi me piden que muestre por pantalla una matriz, la cual tiene que ser recorrida en forma de espiral.
Ejemplo
 1   2  3   4
 5   6  7   8
 9  10 11 12
13 14 15 16
Esta seria la matriz que yo ingreso y  tendria que mostrarla asi
Primer elemento que muestro
1
Segundo elemento que muestro
1  2  
Tercer elemento que muestro
1  2  3
Me salteo hasta el 5 para que puedas verlo mas claro
1  2  3  4
           8
Asi tendria que aparecer el 6 elemento
1  2 3  4
          8
         12
Como podes ver la voy mostrando como si fuera un espiral de afuera hacia adentro, el tema es que tendria que mostrar los elementos con una minima pausa y que aparezcan con ese orden (de espiral). desde ya muchas gracias, te muestro lo que tengo por ahora del programa al cual le falta esto.
Saludos.
[/CODE]
#include <stdio.h>
#include <conio.h>

void cargar (int mat [][5]);

void mostrar (int mat [][5]);

void emaximo (int mat [][5]);

void multiplo (int mat [][5]);

void sumatoria (int mat [][5]);

void sumadiag (int mat[] [5]);

void ordenar (int mat[] [5]);

void main (){
    int m[5][5];
    cargar(m);
   mostrar(m);
   emaximo(m);
   multiplo(m);
   sumatoria(m);
   sumadiag(m);
   ordenar(m);
}

void cargar(int mat[][5]){
    int i,j;
    for(i=0;i<5;i++){
       for(j=0;j<5;j++){
           printf ("Ingrese Numero de Fila %d Columna %d : ",i+1,j+1);
           scanf("%d",&mat[j]);
    }
   }
}


void mostrar (int mat[][5])
{
int i,j;
   for  (i=0;i<5;i++)
   {
   printf("\n");
      for (j=0;j<5;j++)
      {
         printf("  %d",mat[j]);
      }
   }
}

void emaximo (int mat [][5])
{
int i,j,max=0,posi,posj;
   for  (i=0;i<5;i++)
   {
      for (j=0;j<5;j++)      
      {
         if ((mat[j])>max)
         {
            max=mat[j];
            posi=i;
            posj=j;
         }
         
      }
   }
printf ("\nPosicion del ultimo elemento maximo Fila:%d Columna:%d",posi+1,posj+1);
}

void multiplo (int mat[][5])
{
int i,j,mul;
   for  (i=0;i<5;i++)
   {
      for (j=0;j<5;j++)      
      {
         if ((mat[j])%5==0)
         {
            mul=mat[j];
         }
         
      }
   }
printf ("\nValor del ultimo elemento multiplo de 5:%d",mul);
}

void sumatoria (int mat[][5])
{
int i,j,resul=0;
   for (j=0;j<5;j++)
   {
      resul=resul+mat[3][j];   
   }
printf("\nSuma de la fila 3:%d",resul);
resul=0;
   for (i=0;i<5;i++)
   {
      resul=resul+mat[1];
   }
printf("\nSuma de la Columna 1:%d",resul);
}

void sumadiag (int mat[][5])
{
int i,j=0,resul=0,result=0;
   for (i=0;i<5;i++)
   {
      resul=resul+mat[j];
      j++;
   }
   printf("\nSuma de la Diagonal principal:%d",resul);
   i=4;
   for (j=0;j<5;j++)
   {      
      result=result+mat[j];      
      i--;
   }
   printf("\nSuma de la Diagonal secundaria:%d",result);
}

void ordenar (int mat[][5])
{
int i,j,aux;
   for (j=0;j<5;j++)
   {
      for (i=0;i<5;i++)
      {
         if (mat[1][j]<mat[1])
         {
            aux=mat[1][j];
            mat[1][j]=mat[1];
            mat[1]=aux;
         }
      }
   }

   printf ("\n");
   for (i=0;i<5;i++)
   {
   printf("  %d",mat[1]);
   }
   aux=0;
   for (j=0;j<5;j++)
   {
      for (i=0;i<5;i++)
      {
         if (mat[j][2]>mat[2])
         {
            aux=mat[j][2];
            mat[j][2]=mat[2];
            mat[2]=aux;
         }
      }
   }

   printf ("\n");
   for (i=0;i<5;i++)
   {
   printf("  %d",mat[2]);
   }
}
[/CODE]

fuhrer

  • Miembro MUY activo
  • ***
  • Mensajes: 329
  • Nacionalidad: mx
    • Ver Perfil
    • http://admin.busquenoseninternet.com
Re: Impresion De Matrices
« Respuesta #3 en: Martes 15 de Marzo de 2005, 04:55 »
0
No se si este bien, pero por lo que veo y creo quieres es que te respete los espacios

Código: Text
  1. 1  2  3  4
  2.           8
  3.          12
  4.  

que te deje algo asi??

Cuando lo vas mostrando??

Bueno si es asi, lo unico que debes hacer es agregar el numero de espacios que quieres tener antes o despues de tu numero, si haces por ejemplo:
Código: Text
  1. printf(&#34;%-14d %-14d&#34;,i, j);
  2.  
obtendras:
Código: Text
  1. 0              1            
  2.  
y si haces:
Código: Text
  1. printf(&#34;%14d %14d&#34;,i, j);
  2.  
obtendras:
Código: Text
  1.              0              1
  2.  

El numero "14" lo puedes ir variando dependiendo del numero de caracteres de tus digitos

Bueno, espero sea lo que quieres, y si no, vuelve a preguntar

Hasta luego.

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Impresion De Matrices
« Respuesta #4 en: Miércoles 16 de Marzo de 2005, 09:18 »
0
Por lo que he entendido lo que quieres es recorrer la matriz en forma de espiral desde fuera hacia dentro y en el sentido de las agujas del reloj.  Siguiendo con el ejemplo anterior (reducido a 3*3):
Citar
1 -> 2 -> 3
               |
4 -> 5      6
|              |
7 <- 8 <- 9
El problema es que los nºs finales tienen que mostrarse antes que los iniciales, para ello podrías usar la función gotoxy() que permitía printear en unas coordenadas de la pantalla, de tal forma que no tendrías problemas.  Esta función se encuentra en dos.h (creo), mi compilador (Visual Studio) no la soporta y por ello yo no la tengo, pero creo recordar que cuando usaba el mítico Borland de pantalla azul estaba.
En caso de que no puedas usar esta función deberías usar el truco de printear y borrar pantalla rapidamente para que el usuario crea que los nºs están saliendo uno tras otro, cuando lo que estás haciendo es sacar todos al mismo tiempo, una cosa como:

borrar pantalla;
printear el 1º;
esperar unos ms;
borrar pantalla;
printear el 1º;
esperar unos ms;
printear el 2º;
borrar pantalla;
printear el 1º,2º;
esperar;
printear el 3º;
....

No es la mejor solución pero es la única que se me ocurre.  Un saludo y suerte  :lightsabre:
No hay tonto más molesto que el ingenioso.

akira

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Impresion De Matrices
« Respuesta #5 en: Jueves 17 de Marzo de 2005, 16:59 »
0
Exactamente esa era mi duda, ahora el punto es como uso el goto(x,y) no tengo ni la mas minima idea de que es eso ni como se usa. Si me podrias dar un ejemplo te agradeceria... :scream:

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Re: Impresion De Matrices
« Respuesta #6 en: Jueves 17 de Marzo de 2005, 18:57 »
0
Hola  :hola:

Gotoxy sirve para situarse en la consola msdos
Código: Text
  1.  
  2.  
  3. #include &#60;stdio.h&#62;
  4. #include &#60;conio.h&#62; //libreria necesaria para usar gotoxy
  5.  
  6. void main()
  7. {
  8.  
  9. gotoxy( 20, 10 ); // te situa en la fila 10 columna 20
  10.  
  11. printf( &#34;Hola&#34; ); // escribe hola en esa posicion
  12.  
  13. }
  14.  

un saludo