90 likes | 291 Views
ARREGLOS BIDIMENSIONALES. Práctica. Revise el siguiente programa y explique cuál es el resultado. #include <stdio.h> #define FILAS 3 #define COLUMNAS 4 void main ( ) { int i,j ; int M[FILAS][COLUMNAS] ; // lectura por filas for ( i=0; i<FILAS; i++)
E N D
ARREGLOS BIDIMENSIONALES Práctica Elaborado por Fernando Torre - Universidad Simón Bolívar
Revise el siguiente programa y explique cuál es el resultado. • #include <stdio.h> • #define FILAS 3 • #define COLUMNAS 4 • void main ( ) • { • int i,j; • int M[FILAS][COLUMNAS]; • // lectura por filas • for ( i=0; i<FILAS; i++) • for ( j=0; j< COLUMNAS; j++) • scanf(“%d”, &M[i][j]); • //Escribe por columnas • for ( j=0; j<COLUMNAS; j++) • { • for ( i=0; i< FILAS; i++) • printf(“%5d”,M[i][j]); • printf(“\n”); • } • } Declaraciones iniciales Es programa puede ser dividido en varias secciones Lectura de datos en el arreglo M Escritura de los datos del arreglo M Fin del programa Elaborado por Fernando Torre - Universidad Simón Bolívar
Observemos primero la sección con las declaraciones iniciales #include <stdio.h> #define FILAS 3 #define COLUMNAS 4 void main ( ) { int i,j; int M[FILAS][COLUMNAS]; Incluye librería estándar de entrada y salida. • Define dos constantes simbólicas: • FILAS con valor 3 y • COLUMNAS con valor 4 • Observe que no requieren el signo igual ni el punto y coma, y se procesan antes de la compilación. Declara la función main Declara las variables enteras i y j Declara el arreglo M de elementos enteros con dimensiones M[3][4] Elaborado por Fernando Torre - Universidad Simón Bolívar
Veamos ahora la sección que efectúa la lectura de datos por filas en el arreglo M // Lectura por filas for ( i=0; i < FILAS; i++) for ( j=0; j< COLUMNAS; j++) scanf(“%d”, &M[i][j]); Hagámosle un seguimiento a esta sección del programa • Note que la lectura de datos para el arreglo • M[ i ] [ j ] se realiza por FILAS, donde: • se mantiene fijo el valor de la FILAi mientras que • el valor de la COLUMNAj varía de 0 a 3. Los índices i y j de M[ i ] [ j ] varían de acuerdo a las instrucciones for, indicando con cuál valor del arreglo M se está trabajando en ese momento. i = 0 1 2 FILA 2 0 3 2 1 2 3 0 1 0 3 1 j = COLUMNA M[0][0] M[0][1] M[0][2] M[0][3] M[1][0] M[1][1] M[1][2] M[1][3] M = M[2][0] M[2][1] M[2][2] M[2][3] Hasta aquí hemos leído los datos y los hemos almacenado en el arreglo M Vamos primero paso a paso Veamos ahora un elemento a la vez Finalmente veamos una fila completa Elaborado por Fernando Torre - Universidad Simón Bolívar
M[0][0] M[0][1] M[0][2] M[0][3] M[1][0] M[1][1] M[1][2] M[1][3] M[2][0] M[2][1] M[2][2] M[2][3] Examinemos ahora la sección que imprime los datos almacenados en el arreglo M //Escribe por columnas for ( j=0; j<COLUMNAS; j++) { for ( i=0; i< FILAS; i++) printf(“%5d”,M[i][j]); printf(“\n”); } • Observe que el programador utilizó aquí los índices i y j en un orden inverso al que usó para leer los datos: • Aquí la j está primero que la i. • En la sección previa el arreglo M [ i ] [ j ] fue recorrido por FILAS, es decir horizontalmente. • Aquí el arreglo M [ i ] [ j ] es recorrido por COLUMNAS, es decir verticalmente. i = 0 2 1 2 0 1 0 0 1 2 1 2 FILA j = 1 0 3 2 COLUMNA M = Elaborado por Fernando Torre - Universidad Simón Bolívar
Procedamos ahora a observar el orden en que los datos son impresos //Escribe por columnas for ( j=0; j<COLUMNAS; j++) { for ( i=0; i< FILAS; i++) printf(“%5d”,M[i][j]); printf(“\n”); } M[0][0] M[1][0] M[2][0] “\n” es Salto de línea M[0][1] M[1][1] M[2][1] “\n” es Salto de línea M[0][2] M[1][2] M[2][2] “\n” es Salto de línea M[0][3] M[1][3] M[2][3] “\n” es Salto de línea • La matriz que fue introducida con • 3 filas y 4 columnas, aparece impresa como de • 4 filas y 3 columnas. Elaborado por Fernando Torre - Universidad Simón Bolívar
Un programa que lee una matriz 3 X 3 de valores reales, luego:·Calcule la suma de cada fila y la almacena en un vector·Calcule la suma de cada columna y la almacena en otro vector. Para este programa se definen los siguientes elementos de datos: Sum_colum: vector de 3 elementos reales Matriz: arreglo de elementos reales con dimensión 3x3 Sum_fila: vector de 3 elementos reales Sum_colum: contiene la suma de cada columna. Sum_fila: contiene la suma de cada fila Elaborado por Fernando Torre - Universidad Simón Bolívar
#include <stdio.h> • #define N 3 • void main ( ) • { • float matriz[N][N]; // Entrada • float sum_fila[N], sum_colum[N]; // Salida • int i,j; • for (i=0; i<N; i++){ • sum_fila[i]= 0.0; • sum_colum[i]= 0.0; • } • // Lee los datos para la matriz • printf("Introduzca los %d elementos de la matriz por fila\n", N*N); • for ( i=0; i<N; i++) • for (j=0; j<N; j++) • scanf("%f", &matriz[i][j]); • // Suma las filas • for ( i=0; i<N; i++) • for (j=0; j<N; j++) • sum_fila[i] = sum_fila[i]+matriz[i][j] ; • // Suma las columnas • for ( j=0; j<N; j++) • for (i=0; i<N; i++) • sum_colum[j] = sum_colum[j] + matriz[i][j] ; • // Imprime las sumas de cada fila y cada columna • for (i=0; i<N; i++) • printf("La suma de la fila %d es: %5.2f y la • suma de la columna %d es: %5.2f \n", • i,sum_fila[i],i, sum_colum[i]); • } Definiciones iniciales y declaración de variables Inicializa los arreglos sum_fila y sum_colum a cero Lee los datos y los almacena en el arreglo matriz Recorre cada fila y almacena la suma en sum_fila Recorre cada columna y almacena la suma en sum_column Imprime la suma de cada fila y de cada columna Fin de programa Elaborado por Fernando Torre - Universidad Simón Bolívar
Interacción con el programa Primero el programa solicita al usuario los datos para llenar la matriz, para ello hemos introducido unos datos de prueba, y luego se muestran los resultados para esos datos: Introduzca los 9 elementos de la matriz por fila 1 2 3 4 5 6 7 8 9 La suma de la fila 0 es:6.00 y lasuma de la columna 0 es: 12.00 La suma de la fila 1 es: 15.00 y lasuma de la columna 1 es: 15.00 La suma de la fila 2 es: 24.00 y lasuma de la columna 2 es: 18.00 Elaborado por Fernando Torre - Universidad Simón Bolívar