sábado, 30 de julio de 2011

Programa Ordenar Matriz C++

Programa que permite ordenar una matriz en forma de espiral, de zigzag horizontal y vertical, y en forma de lluvia, ademas reducir la matriz.


#include <iostream>
#include <stdio.h>
#define max 15
using namespace std;
//Función leer
void leer(int n,int c[max][max])
  {int i,j;
for(j=0;j<n;j++)
for(i=0;i<n;i++)
 {cout<<"Ingrese el elemento c["<<j<<"]["<<i<<"]: ";
cin>>c[j][i];
system("cls");
 }
}
//Función mostrar
void mostrar(int x[max][max],int n)
  {int i,j;
for(j=0;j<n;j++)
{for(i=0;i<n;i++)
 printf("%5d",x[j][i]);
 cout<<endl;
}
}
//Función para pasar arreglo unidimensional a bidimensional
void pasaarreglo(int a[max][max],int b[max], int r)
  {int j,i ,n=0;
for(j=0;j<r;j++)
for(i=0;i<r;i++,n++)
 a[j][i]=b[n];
  }
 //Función para reducir matriz en orden 2 
void reducemat(int x[max][max],int n){
    int i,j, y[max][max];
     for(j=0;j<n-1;j++)
for(i=0;i<n-1;i++)
y[j][i]=(x[j][i]*x[j+1][i+1])-(x[j+1][i]*x[j][i+1]);
    n--;
    cout<<"\nLa Matriz Original reducida es:"<<endl;
    mostrar(y,n);  
         
     }
 //Función para ordenar en espiral 
void ordenaespiral(int t[max][max],int r)
{
 int aux[max*max],aux2[max][max];
 int tope,a,j,i,n=0;
 if(r%2) tope=r/2+1;
 else tope=r/2;
 for(a=0;a<tope;a++)
  {
for(j=a,i=a;i<r-a;i++,n++)
aux[n]=t[j][i];
for(j=a+1,i--;j<r-a;j++,n++)
aux[n]= t[j][i];
for(i--,j--;i>=a;i--,n++)
aux[n]=t[j][i];
for(i++,j--;j>a;j--,n++)
aux[n]=t[j][i];
  }
 pasaarreglo(aux2,aux,r);
 cout<<"\nLa Matriz ordenada en forma de espiral es:"<<endl;
 mostrar(aux2,r);
 }
//Función para ordenar en zigzag horizontal 
void ordenahorizigzag(int c[max][max],int n)
  {int aux[max*max],aux2[max][max];
int i,j,t=0;
for(j=0;j<n;j++)
 {if(j%2==0)
for(i=0;i<n;i++,t++)
aux[t]=c[j][i];
else
for(i=n-1;i>=0;i--,t++)
aux[t]=c[j][i];
 }
pasaarreglo(aux2,aux,n);
cout<<"\nLa Matriz ordenada en forma de zigzag horizontal es:"<<endl;
mostrar(aux2,n);
}
//Función para ordenar en zigzag vertical
 void ordenavertizigzag(int c[max][max],int n)
 { int aux[max*max],aux2[max][max];
int i,j,t=0;
for(j=0;j<n;j++)
 {if(j%2==0)
for(i=0;i<n;i++,t++)
aux[t]=c[i][j];
else
for(i=n-1;i>=0;i--,t++)
aux[t]=c[i][j];
 }
pasaarreglo(aux2,aux,n);
cout<<"\nLa Matriz ordenada en forma de zigzag vertical es:"<<endl;
mostrar(aux2,n);
  }
//Función para ordenar en forma de lluvia comenzando desde la ultima fila  
void ordenalluvia(int c[max][max],int n)
 {int aux[max*max],aux2[max][max];
  int i=0,j,k,t=0,p;
for (j=n-1;j>=0;j--)
 {for(k=j,i=0;k<n;k++,i++,t++)
aux[t]=c[k][i];
}
         for(p=1;p<n;p++)
for(k=0,i=p;i<n;k++,i++,t++)
aux[t]=c[k][i];
    pasaarreglo(aux2,aux,n);
cout<<"\nLa Matriz ordenada en forma de lluvia es:"<<endl;
mostrar(aux2,n);

 }


//Inicio del main()
main(){
  int n;
  int c[max][max];
  do{
cout<<"Ingrese las dimensiones de la Matriz [3,15]: ";
cin>>n;

}while(n<3 || n>15);
  leer(n,c);
  cout<<"La Matriz original es:"<<endl;
  mostrar(c,n);
  ordenaespiral(c,n);
  ordenahorizigzag(c,n);
  ordenavertizigzag(c,n);
  ordenalluvia(c,n);
  reducemat(c,n);
  system("pause");
 }

Captura de Ejecución:
Saludos att: LordRamos.

7 comentarios:

  1. Esta muy bueno tu codigo me cayo de pelo me sirvio para mi trabajo gracias...

    ResponderEliminar
  2. Saludos, hasta la ultima llave antes de la frase que dice captura de ejecucion que esta en rojo.

    ResponderEliminar
  3. muy buen codigo pero hay que optimizar ;)

    ResponderEliminar
  4. Hola, y si quisiera ordenar cada FILA de menor a mayor ¿cómo lo podría hacer?

    ResponderEliminar
  5. buenas noches tengo un problema con este codigo no ordena lo uqe tiene que ordenar si alguien me podria colaborar con esto gracias quedo al tanto


    #include
    using namespace std;
    void ordenar (int[][3],int);
    void llenar (int[][3],int);
    void imprimir(int[][3],int);
    main()
    {
    int fila;
    int A [fila][3];
    llenar(A,fila);
    return 0;
    }
    void llenar(int A [][3],int x)
    {
    cout<<"ingrese numero de filas"<>x;
    for(int i=0;i>A[i][j];
    }
    }
    cout<<"esta es la matriz desordenada"<A[i+1][j+1])
    {
    int aux=A[i][j];
    A[i][j]=A[i+1][j+1];
    A[i+1][j+1]=aux;
    }
    }
    }
    }

    }
    imprimir( A,x);
    }


    ResponderEliminar