![:P](https://foro.elhacker.net/Smileys/navidad/tongue.gif)
Hace unas semanas me pidieron hacer una tarea para un ramo llamado fundamentos de programación, solo me complicó entenderlo un poco, hasta tuve que dibujar en papel
![:xD](https://foro.elhacker.net/Smileys/navidad/xd.gif)
Adjuntaré el pdf con los detalles, algunos casos de prueba y mi código ya que me gustaría recibir consejos en cuanto a optimización y mejoras del mismo (ya sé que está medio enredado, pero cumple con lo pedido
![:xD](https://foro.elhacker.net/Smileys/navidad/xd.gif)
Y obviamente que sea resuelto por ustedes, que tienen más experiencia y así también podré apreciar otros tipos de solución ya que me pidieron usar solo ansi C, arreglos bidimensionales y funciones.
Ejercicio:
tarea.pdf
Entrada:
Citar
4
3
1 2 3
4 5 6
7 8 9
2 1 2
4 1 2 3 4
4
1 2 3 4
5 6 7 8
9 1 2 3
4 5 6 6
2 1 2
2 3 4
5
1 2 3 4 5
6 7 8 9 1
2 3 4 5 6
7 8 9 1 2
3 4 5 6 7
2 3 4
2 1 3
4 1 3 2 4
6
1 2 3 4 5 6
7 8 9 1 2 3
4 5 6 7 8 9
1 2 3 4 5 6
7 8 9 1 2 3
4 5 6 7 8 9
2 4 1
2 2 3
1 1
3
1 2 3
4 5 6
7 8 9
2 1 2
4 1 2 3 4
4
1 2 3 4
5 6 7 8
9 1 2 3
4 5 6 6
2 1 2
2 3 4
5
1 2 3 4 5
6 7 8 9 1
2 3 4 5 6
7 8 9 1 2
3 4 5 6 7
2 3 4
2 1 3
4 1 3 2 4
6
1 2 3 4 5 6
7 8 9 1 2 3
4 5 6 7 8 9
1 2 3 4 5 6
7 8 9 1 2 3
4 5 6 7 8 9
2 4 1
2 2 3
1 1
Salida:
Citar
9 8 7
6 5 4
3 2 1
6 6 5 4
3 2 1 9
8 7 6 5
4 3 2 1
7 6 5 4 3
2 8 3 7 7
6 9 4 8 2
1 1 5 9 6
5 4 3 2 1
4 7 1 4 7 1
5 2 8 5 2 2
6 1 3 4 1 3
7 9 6 7 9 4
8 8 5 2 8 5
9 3 6 9 3 6
Código:
Código
#include <stdio.h> #define MAX 100 void LeerMatriz(int matriz[MAX][MAX],int,int,int); void Operacion1(int matriz[MAX][MAX],int i,int N,int Anillo); void Operacion2(int matriz[MAX][MAX],int i,int N,int Anillo); void Operacion3(int matriz[MAX][MAX],int i,int N,int Anillo); void Operacion4(int matriz[MAX][MAX],int i,int N,int Anillo); void ImprimirMatriz(int matriz[MAX][MAX],int,int,int); void Swap(int *,int *); int main() { int matriz[MAX][MAX]; int i,j,a,b,c,casos; int N,T,C,anillo,Anillo; for(c=1;c<=casos;c++) { if((N==1)||(N==0)); anillo=1; if(N%2==0) anillo=N/2; else anillo=(N+1)/2; //Calcular los anillos de la matriz LeerMatriz(matriz,i,j,N); for(a=0;a<anillo;a++) //Recorrer cada anillo de la matriz { Anillo=a+1; for(b=1;b<=T;b++) { switch (C) { case 1: // VERTICAL Operacion1(matriz,i,N,Anillo); break; case 2: // HORIZONTAL " -> " Operacion2(matriz,i,N,Anillo); break; case 3: // DIAGONAL " \ " Operacion3(matriz,i,N,Anillo); break; case 4: // DIAGONAL " / " Operacion4(matriz,i,N,Anillo); break; } } } ImprimirMatriz(matriz,i,j,N); } } void LeerMatriz(int matriz[MAX][MAX],int i,int j, int N) { for(i=0;i<N;i++) { for(j=0;j<N;j++) { } } } void ImprimirMatriz(int matriz[MAX][MAX],int i,int j,int N) { for(i=0;i<N;i++) { for(j=0;j<N;j++) { } } } void Swap(int * a, int * b) //Intercambiar variables { int aux; aux=*a; *a=*b; *b=aux; } /* Desde aqui jugando con los dibujitos a prueba y error, ya me entenderan xD */ void Operacion1(int matriz[MAX][MAX],int i,int N,int Anillo) //VERTICAL { for(i=Anillo-1;i<(N/2);i++) { Swap(&matriz[i][Anillo-1],&matriz[N-i-1][Anillo-1]); } for(i=Anillo;i<(N-Anillo);i++) { Swap(&matriz[Anillo-1][i],&matriz[N-Anillo][i]); } for(i=Anillo-1;i<(N/2);i++) { Swap(&matriz[i][N-Anillo],&matriz[N-i-1][N-Anillo]); } } void Operacion2(int matriz[MAX][MAX],int i,int N,int Anillo) //HORIZONTAL { for(i=Anillo-1;i<(N/2);i++) { Swap(&matriz[Anillo-1][i],&matriz[Anillo-1][N-i-1]); } for(i=Anillo;i<(N-Anillo);i++) { Swap(&matriz[i][Anillo-1],&matriz[i][N-Anillo]); } for(i=Anillo-1;i<(N/2);i++) { Swap(&matriz[N-Anillo][i],&matriz[N-Anillo][N-i-1]); } } void Operacion3(int matriz[MAX][MAX],int i,int N,int Anillo) //DIAGONAL " \ " { for(i=Anillo;i<(N-Anillo);i++) { Swap(&matriz[Anillo-1][i],&matriz[i][Anillo-1]); Swap(&matriz[N-Anillo][i],&matriz[i][N-Anillo]); } Swap(&matriz[N-Anillo][Anillo-1],&matriz[Anillo-1][N-Anillo]); } void Operacion4(int matriz[MAX][MAX],int i,int N,int Anillo) //DIAGONAL " / " { for(i=Anillo-1;i<N-Anillo;i++) { Swap(&matriz[Anillo-1][i],&matriz[((N-Anillo)-i)+Anillo-1][N-Anillo]); Swap(&matriz[i][Anillo-1],&matriz[N-Anillo][((N-Anillo)-i)+Anillo-1]); } Swap(&matriz[Anillo-1][Anillo-1],&matriz[N-Anillo][N-Anillo]); }
Para ingresar los casos de prueba deben guardar la entrada en un archivo de texto, luego ubicarse en la consola e ingresar:
Citar
programa.exe<entrada.txt>salida.txt
El archivo salida debe ser idéntico al mostrado arriba.
Saludos y cualquier duda pregunten
![:)](https://foro.elhacker.net/Smileys/navidad/smiley.gif)