Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: howaboutno en 9 Noviembre 2012, 10:58 am



Título: ejercicio matrices c
Publicado por: howaboutno en 9 Noviembre 2012, 10:58 am
como se haría para intercambiar filas? no entiendo..

Citar
Generar una matriz de 10x10 numérica entera , a continuación pedir dos números de fila, que se deben filtrar entre 1 y 10  e intercambiar ambas filas. Presentar las matrices antes y después del cambio.


Título: Re: ejercicio matrices c
Publicado por: leosansan en 9 Noviembre 2012, 12:16 pm
como se haría para intercambiar filas? no entiendo..
Citar
Por ejemplo, si quisieras cambiar la primera fila por la última sería:
Código
  1. puts ("cambio fila primera ultima\n");
  2.    for (j=0;j<TAM;j++)
  3.            {
  4.                temp1=b[0][j];
  5.                temp2=b[TAM-1][j];
  6.                b[TAM-1][j]= temp1;
  7.                b[0][j]= temp2;
  8.            }
Citar
Todo es jugar con los subídices cero y TAM-1; para cabiar la 3ª fila por la 5ª serían esos valores 2 y 4 en lugar de cero y TAM-1.
Saludos!.


Título: Re: ejercicio matrices c
Publicado por: howaboutno en 9 Noviembre 2012, 15:13 pm
Código
  1. puts ("cambio fila primera ultima\n");
  2.    for (j=0;j<TAM;j++)
  3.            {
  4.                temp1=b[0][j];
  5.                temp2=b[TAM-1][j];
  6.                b[TAM-1][j]= temp1;
  7.                b[0][j]= temp2;
  8.            }
Saludos!.

sigo sin entenderlo...


Título: Re: ejercicio matrices c
Publicado por: cypascal en 9 Noviembre 2012, 15:54 pm
Te dejo tambien aqui el codigo, espero que te sirva:

Código:
#include <stdio.h>

int main(void)
{
int matriz[11][11],fil1,fil2,c1,c2,aux;

for(c1=1;c1<=10;c1++) for(c2=1;c2<=10;c2++){
printf("Termino (%d,%d): ",c1,c2); scanf("%d",&matriz[c1][c2]);
}

printf("\n\nMatriz introducida:\n\n");
for(c1=1;c1<=10;c1++){ for(c2=1;c2<=10;c2++){
printf("%6d",matriz[c1][c2]);
}printf("\n");}

printf("Introduce primera fila:"); scanf("%d",&fil1);
printf("Introduce segunda fila:"); scanf("%d",&fil2);

for(c1=1;c1<=10;c1++)
{
aux=matriz[fil1][c1];
matriz[fil1][c1]=matriz[fil2][c1];
matriz[fil2][c1]=aux;
}

printf("\n\nMatriz cambiada:\n\n");
for(c1=1;c1<=10;c1++){ for(c2=1;c2<=10;c2++){
printf("6%d",matriz[c1][c2]);
}printf("\n");}

return(0);
}

Salu10


Título: Re: ejercicio matrices c
Publicado por: leosansan en 9 Noviembre 2012, 21:04 pm
sigo sin entenderlo...
Citar
Lo que hago es crear una nueva matriz con el intercambio de las filas, así no pierdo la matriz inicial. Eso es porque presupongo que se va a "hacer" otras cosas con la matriz inicial, como cambiar diagonales, obtener la simétrica sumar o restar, etc. Por ejemplo:
Código
  1. #include <stdio.h>
  2. #define TAM 4
  3. #include <time.h>
  4. int i,j;
  5. int main()
  6. {
  7.    int fila1,fila2,temp1,temp2,a[TAM][TAM],b[TAM][TAM],c[TAM][TAM],d[TAM][TAM],e[TAM][TAM];
  8.    srand(time(0));
  9.    generar_matriz (a);
  10.    imprimir (a);
  11. /**********  cambio fila primera ultima  **********/
  12.    copia_matriz (a,b);
  13.    puts ("cambio fila primera ultima\n");
  14.    for (j=0;j<TAM;j++)
  15.            {
  16.                temp1=b[0][j];
  17.                temp2=b[TAM-1][j];
  18.                b[TAM-1][j]= temp1;
  19.                b[0][j]= temp2;
  20.            }
  21.    imprimir (b);
  22. /****************  cambio filas ***************/
  23.    copia_matriz (a,e);
  24.    puts ("cambio filas\n");
  25.    printf ("Numero de fila1: ");
  26.    scanf ("%d",&fila1);
  27.    printf ("Numero de fila2: ");
  28.    scanf ("%d",&fila2);
  29.    puts ("\n");
  30.    for (j=0;j<TAM;j++)
  31.            {
  32.                temp1=e[fila1-1][j];
  33.                temp2=e[fila2-1][j];
  34.                e[fila2-1][j]= temp1;
  35.                e[fila1-1][j]= temp2;
  36.            }
  37.    imprimir (e);
  38. /*************  cambio diagonales   *****************/
  39.    copia_matriz (a,c);
  40.    puts ("cambio diagonales\n");
  41.    for (i=0;i<TAM;i++)
  42.        {
  43.            temp1=c[i][i];
  44.            temp2=c[i][TAM-1-i];
  45.            c[i][TAM-1-i]= temp1;
  46.            c[i][i]= temp2;
  47.        }
  48.    imprimir (c);
  49.  
  50. /*************  matriz simetrica   *****************/
  51.    copia_matriz (a,d);
  52.    puts ("matriz simetrica\n");
  53.    for (i=0;i<TAM;i++)
  54.        for (j=0;j<TAM && j<i;j++)
  55.            {
  56.                temp1=d[i][j];
  57.                temp2=d[j][i];
  58.                d[j][i]= temp1;
  59.                d[i][j]= temp2;
  60.            }
  61.      imprimir (d);
  62.      return 0;
  63. }
  64. /**************************************************/
  65. int generar_matriz (int a[][TAM])
  66.    {
  67.        for (i=0;i<TAM;i++)
  68.       {
  69.          for (j=0;j<TAM;j++)
  70.              {
  71.                 /* printf("a[%d][%d]= ",i,j);
  72.                 scanf("%d",&a[i][j]);*/
  73.                a[i][j]=rand() % 10 ;
  74.              }
  75.       }
  76.    }
  77.  
  78. /**************************************************/
  79.  
  80. int imprimir (int a[][TAM])
  81. {
  82.    int i,j;
  83.    for (i=0;i<TAM;i++)
  84.        {
  85.            for (j=0;j<TAM;j++)
  86.                {
  87.                     printf("%d  ",a[i][j]);
  88.                }puts("\n");
  89.        }puts("\n");
  90. }
  91. /**************************************************/
  92. int   copia_matriz (int matriz1[][TAM],int matriz2[][TAM])
  93. {
  94.    int i,j;
  95.    for (i=0;i<TAM;i++)
  96.        {
  97.            for (j=0;j<TAM;j++)
  98.                {
  99.                     matriz2[i][j]=matriz1[i][j];
  100.                }
  101.        }
  102. }
  103. /**************************************************/
  104.  
Citar
Si sólo quieres cambiar las filas y punto el código de cypascal te vale.
Saludos!.