ejercicio matrices c

Iniciado por howaboutno, 9 Noviembre 2012, 10:58 AM

0 Miembros y 1 Visitante están viendo este tema.

howaboutno

como se haría para intercambiar filas? no entiendo..

CitarGenerar 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.

leosansan

Cita de: howaboutno en  9 Noviembre 2012, 10:58 AM
como se haría para intercambiar filas? no entiendo..
CitarPor ejemplo, si quisieras cambiar la primera fila por la última sería:
Código (cpp) [Seleccionar]
puts ("cambio fila primera ultima\n");
    for (j=0;j<TAM;j++)
            {
                temp1=b[0][j];
                temp2=b[TAM-1][j];
                b[TAM-1][j]= temp1;
                b[0][j]= temp2;
            }

CitarTodo 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!.

howaboutno

Cita de: leosansan en  9 Noviembre 2012, 12:16 PM
Código (cpp) [Seleccionar]
puts ("cambio fila primera ultima\n");
    for (j=0;j<TAM;j++)
            {
                temp1=b[0][j];
                temp2=b[TAM-1][j];
                b[TAM-1][j]= temp1;
                b[0][j]= temp2;
            }
Saludos!.

sigo sin entenderlo...

cypascal

Te dejo tambien aqui el codigo, espero que te sirva:

#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
Problemas interesantes de programación en C/C++ y Pascal en:
BLOG C/C++


WWW.CYPASCAL.BLOGSPOT.COM.ES

leosansan

Cita de: howaboutno en  9 Noviembre 2012, 15:13 PM
sigo sin entenderlo...
CitarLo 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 (cpp) [Seleccionar]
#include <stdio.h>
#define TAM 4
#include <time.h>
int i,j;
int main()
{
    int fila1,fila2,temp1,temp2,a[TAM][TAM],b[TAM][TAM],c[TAM][TAM],d[TAM][TAM],e[TAM][TAM];
    srand(time(0));
    generar_matriz (a);
    imprimir (a);
/**********  cambio fila primera ultima  **********/
    copia_matriz (a,b);
    puts ("cambio fila primera ultima\n");
    for (j=0;j<TAM;j++)
            {
                temp1=b[0][j];
                temp2=b[TAM-1][j];
                b[TAM-1][j]= temp1;
                b[0][j]= temp2;
            }
    imprimir (b);
/****************  cambio filas ***************/
    copia_matriz (a,e);
    puts ("cambio filas\n");
    printf ("Numero de fila1: ");
    scanf ("%d",&fila1);
    printf ("Numero de fila2: ");
    scanf ("%d",&fila2);
    puts ("\n");
    for (j=0;j<TAM;j++)
            {
                temp1=e[fila1-1][j];
                temp2=e[fila2-1][j];
                e[fila2-1][j]= temp1;
                e[fila1-1][j]= temp2;
            }
    imprimir (e);
/*************  cambio diagonales   *****************/
    copia_matriz (a,c);
    puts ("cambio diagonales\n");
    for (i=0;i<TAM;i++)
        {
            temp1=c[i][i];
            temp2=c[i][TAM-1-i];
            c[i][TAM-1-i]= temp1;
            c[i][i]= temp2;
        }
    imprimir (c);

/*************  matriz simetrica   *****************/
    copia_matriz (a,d);
    puts ("matriz simetrica\n");
    for (i=0;i<TAM;i++)
        for (j=0;j<TAM && j<i;j++)
            {
                temp1=d[i][j];
                temp2=d[j][i];
                d[j][i]= temp1;
                d[i][j]= temp2;
            }
      imprimir (d);
      return 0;
}
/**************************************************/
int generar_matriz (int a[][TAM])
    {
        for (i=0;i<TAM;i++)
       {
          for (j=0;j<TAM;j++)
              {
                 /* printf("a[%d][%d]= ",i,j);
                scanf("%d",&a[i][j]);*/
                a[i][j]=rand() % 10 ;
              }
       }
    }

/**************************************************/

int imprimir (int a[][TAM])
{
    int i,j;
    for (i=0;i<TAM;i++)
        {
            for (j=0;j<TAM;j++)
                {
                     printf("%d  ",a[i][j]);
                }puts("\n");
        }puts("\n");
}
/**************************************************/
int   copia_matriz (int matriz1[][TAM],int matriz2[][TAM])
{
    int i,j;
    for (i=0;i<TAM;i++)
        {
            for (j=0;j<TAM;j++)
                {
                     matriz2[i][j]=matriz1[i][j];
                }
        }
}
/**************************************************/

CitarSi sólo quieres cambiar las filas y punto el código de cypascal te vale.
Saludos!.