Título: ejercicio matrices c
Publicado por: howaboutno en 9 Noviembre 2012, 10:58 am
como se haría para intercambiar filas? no entiendo.. 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.. Por ejemplo, si quisieras cambiar la primera fila por la última sería: 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; }
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
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...
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: #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...
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: #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]; } } } /**************************************************/
Si sólo quieres cambiar las filas y punto el código de cypascal te vale. Saludos!.
|