elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ejercicios
| | | |-+  Ejercicio resuelto C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ejercicio resuelto C  (Leído 2,738 veces)
the_patox

Desconectado Desconectado

Mensajes: 1


Hazle a los demas... antes de que te hagan a ti.


Ver Perfil
Ejercicio resuelto C
« en: 3 Enero 2014, 23:46 pm »

Buenas tardes, llevo bastante tiempo como lector de este foro, el cual me ha enseñado desde hace años sobre informática, seguridad y programación  :P

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

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 )

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

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
  1. #include <stdio.h>
  2. #define MAX 100
  3.  
  4. void LeerMatriz(int matriz[MAX][MAX],int,int,int);
  5. void Operacion1(int matriz[MAX][MAX],int i,int N,int Anillo);
  6. void Operacion2(int matriz[MAX][MAX],int i,int N,int Anillo);
  7. void Operacion3(int matriz[MAX][MAX],int i,int N,int Anillo);
  8. void Operacion4(int matriz[MAX][MAX],int i,int N,int Anillo);
  9. void ImprimirMatriz(int matriz[MAX][MAX],int,int,int);
  10. void Swap(int *,int *);
  11.  
  12. int main()
  13. {
  14.    int matriz[MAX][MAX];
  15.    int i,j,a,b,c,casos;
  16.    int N,T,C,anillo,Anillo;
  17.  
  18.    scanf("%d",&casos); //Cantidad de casos de prueba
  19.  
  20.    for(c=1;c<=casos;c++)
  21.    {
  22.        scanf("%d",&N); //Dimension de la matriz correspondiente
  23.  
  24.        if((N==1)||(N==0)); anillo=1;
  25.        if(N%2==0) anillo=N/2; else anillo=(N+1)/2; //Calcular los anillos de la matriz
  26.  
  27.        LeerMatriz(matriz,i,j,N);
  28.  
  29.        for(a=0;a<anillo;a++) //Recorrer cada anillo de la matriz
  30.        {
  31.            scanf("%d",&T); //Cantidad de operaciones a realizar al anillo respectivo
  32.            Anillo=a+1;
  33.            for(b=1;b<=T;b++)
  34.            {
  35.                scanf("%d",&C); //Especificar la operacion a realizar
  36.                switch (C)
  37.                {
  38.                    case 1: // VERTICAL
  39.                        Operacion1(matriz,i,N,Anillo);
  40.                        break;
  41.                    case 2: // HORIZONTAL " -> "
  42.                        Operacion2(matriz,i,N,Anillo);
  43.                        break;
  44.                    case 3: // DIAGONAL " \ "
  45.                        Operacion3(matriz,i,N,Anillo);
  46.                        break;
  47.                    case 4: // DIAGONAL " / "
  48.                        Operacion4(matriz,i,N,Anillo);
  49.                        break;
  50.                }
  51.            }
  52.        }
  53.        ImprimirMatriz(matriz,i,j,N);
  54.    }
  55. }
  56.  
  57. void LeerMatriz(int matriz[MAX][MAX],int i,int j, int N)
  58. {
  59.    for(i=0;i<N;i++)
  60.    {
  61.        for(j=0;j<N;j++)
  62.        {
  63.            scanf("%d",&matriz[i][j]);
  64.        }
  65.    }
  66. }
  67.  
  68. void ImprimirMatriz(int matriz[MAX][MAX],int i,int j,int N)
  69. {
  70.    for(i=0;i<N;i++)
  71.    {
  72.        printf("\n");
  73.        for(j=0;j<N;j++)
  74.        {
  75.            printf(" %d",matriz[i][j]);
  76.        }
  77.    }
  78. }
  79.  
  80. void Swap(int * a, int * b) //Intercambiar variables
  81. {
  82.    int aux;
  83.    aux=*a;
  84.    *a=*b;
  85.    *b=aux;
  86. }
  87.  
  88. /* Desde aqui jugando con los dibujitos a prueba y error, ya me entenderan xD */
  89.  
  90. void Operacion1(int matriz[MAX][MAX],int i,int N,int Anillo) //VERTICAL
  91. {
  92.    for(i=Anillo-1;i<(N/2);i++)
  93.    {
  94.        Swap(&matriz[i][Anillo-1],&matriz[N-i-1][Anillo-1]);
  95.    }
  96.    for(i=Anillo;i<(N-Anillo);i++)
  97.    {
  98.        Swap(&matriz[Anillo-1][i],&matriz[N-Anillo][i]);
  99.    }
  100.    for(i=Anillo-1;i<(N/2);i++)
  101.    {
  102.        Swap(&matriz[i][N-Anillo],&matriz[N-i-1][N-Anillo]);
  103.    }
  104. }
  105.  
  106. void Operacion2(int matriz[MAX][MAX],int i,int N,int Anillo) //HORIZONTAL
  107. {
  108.    for(i=Anillo-1;i<(N/2);i++)
  109.    {
  110.        Swap(&matriz[Anillo-1][i],&matriz[Anillo-1][N-i-1]);
  111.    }
  112.    for(i=Anillo;i<(N-Anillo);i++)
  113.    {
  114.        Swap(&matriz[i][Anillo-1],&matriz[i][N-Anillo]);
  115.    }
  116.    for(i=Anillo-1;i<(N/2);i++)
  117.    {
  118.        Swap(&matriz[N-Anillo][i],&matriz[N-Anillo][N-i-1]);
  119.    }
  120. }
  121.  
  122. void Operacion3(int matriz[MAX][MAX],int i,int N,int Anillo) //DIAGONAL " \ "
  123. {
  124.    for(i=Anillo;i<(N-Anillo);i++)
  125.    {
  126.        Swap(&matriz[Anillo-1][i],&matriz[i][Anillo-1]);
  127.        Swap(&matriz[N-Anillo][i],&matriz[i][N-Anillo]);
  128.    }
  129.    Swap(&matriz[N-Anillo][Anillo-1],&matriz[Anillo-1][N-Anillo]);
  130. }
  131.  
  132. void Operacion4(int matriz[MAX][MAX],int i,int N,int Anillo) //DIAGONAL " / "
  133. {
  134.    for(i=Anillo-1;i<N-Anillo;i++)
  135.    {
  136.        Swap(&matriz[Anillo-1][i],&matriz[((N-Anillo)-i)+Anillo-1][N-Anillo]);
  137.        Swap(&matriz[i][Anillo-1],&matriz[N-Anillo][((N-Anillo)-i)+Anillo-1]);
  138.    }
  139.    Swap(&matriz[Anillo-1][Anillo-1],&matriz[N-Anillo][N-Anillo]);
  140. }
  141.  

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 :)


« Última modificación: 3 Enero 2014, 23:51 pm por the_patox » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ejercicio Problema de Bala de Cañon. Resuelto.
Ejercicios
necro1991 4 10,527 Último mensaje 16 Octubre 2010, 00:05 am
por ¡Micronet!
Ejercicio con matrices resuelto en un 90% (necesito ayuda)
Programación C/C++
Beaustyle 1 3,431 Último mensaje 8 Junio 2012, 07:40 am
por durasno
[RESUELTO]Ejercicio en C,se cierra¬¬,Borland 5.02
Programación C/C++
SonaArtica 2 2,796 Último mensaje 31 Agosto 2012, 21:10 pm
por SonaArtica
Ejercicio con funciones(Resuelto)
PHP
Maistere 4 2,351 Último mensaje 23 Octubre 2013, 12:29 pm
por Maistere
Ejercicio resuelto. Gracias por la ayuda.
Ejercicios
Droigor 3 5,733 Último mensaje 22 Marzo 2014, 19:29 pm
por Mitsu
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines