#include <stdio.h> #include <stdlib.h> int ** IntroduceMatriz (int *, int *); void SumaFilas (int **, int, int); void MultiplicaColumnas (int **, int, int); void RotaMatrizDerecha (int **, int, int); void MostrarMatriz (int **, int, int); int main () { int **matriz, f ,c; int i; matriz = IntroduceMatriz(&f, &c); MostrarMatriz(matriz,f,c); SumaFilas(matriz,f,c); MultiplicaColumnas(matriz,f,c); RotaMatrizDerecha(matriz,f,c); MostrarMatriz(matriz,f,c); for (i=0; i<f ; i++) { free(matriz[i]); } free(matriz); return EXIT_SUCCESS; } int ** IntroduceMatriz (int *f, int *c) { int **matriz; int i, j; printf ("Indique numero de filas: \n"); scanf ("%d",f); fflush (stdin); // Limpiar el buffer de entrada printf ("Indique numero de columnas: \n"); scanf ("%d",c); fflush (stdin); matriz = (int **) calloc (*f,sizeof(int*)); for (i=0 ; i<*f ; i++) { matriz[i] = (int*) calloc (*c,sizeof(int)); } for (i=0 ; i<*f ; i++) { for (j=0 ; j<*c ; j++) { printf ("\nIntroduzca posición %d - %d: ",i,j); scanf("%d",&matriz[i][j]); fflush(stdin); } } return matriz; } void MostrarMatriz (int **matriz, int f, int c) { int i,j; for (i=0 ; i<f ; i++) { for (j=0 ; j<c ; j++) { printf ("%d ",matriz[i][j]); } printf ("\n"); } } void SumaFilas (int **matriz, int f, int c) { int i,j,suma; for (i=0 ; i<f ; i++) { suma = 0; for (j=0 ; j<c ; j++) { suma += matriz[i][j]; } printf ("La fila %d suma: %d \n",f,suma); } } void MultiplicaColumnas (int **matriz, int f, int c) { int i,j, multiplica; for (j=0 ; j<c ; j++) { multiplica = 1; for (i=0 ; i<f ; i++) { multiplica *= matriz[i][j]; } printf ("La columna %d da: %d \n",j,multiplica); } } void RotaMatrizDerecha (int **matriz, int f, int c) { int i,j; int **matrizt; matrizt = (int**) calloc (f,sizeof(int*)); for (i=0; i<f ; i++) { matrizt[i] = (int*) calloc (c,sizeof(int)); } for (i=0 ; i<f ; i++) { for (j=0 ; j<c ; j++) { if (j == c-1) { matrizt[i][0] = matriz[i][j]; } else { matrizt[i][j+1] = matriz[i][j]; } } } for (i=0 ; i<f ; i++) { for (j=0 ; j<c ; j++) { matriz[i][j] = matrizt[i][j]; } } }
Mostrando entradas con la etiqueta punteros. Mostrar todas las entradas
Mostrando entradas con la etiqueta punteros. Mostrar todas las entradas
miércoles, 8 de abril de 2020
Matrices dinámicas en C
A continuación un ejercicio, similar a otros que he publicado, pero ésta vez con Matrices de dimensiones dinámicas.
Tags
C,
matemáticas,
matrices,
multiplicarcolumnas,
punteros,
rotarmatriz,
sumarfilar
Ubicación:
Majadahonda, Madrid, Spain
miércoles, 15 de mayo de 2019
Ejercicio completo en C. Revisión. Matrices y Cálculo
Buen ejemplo de práctica en C.
/* El ejercicio va a consistir en: 1. Multiplicar las columnas de una Matriz 3x3 2. Dado un número cualquiera, deberemos calcular los digitos que tiene y sumarlos */ #include <stdio.h>; #include <stdlib.h> void Muestra_Matriz (int [3][3], int f, int c); void Multiplica_Columnas(int m[3][3], int f, int c, int *m0, int *m1, int *m2); void Calcula_Digitos (int numero, int **digitos, int *longitud); void Muestra_Digitos (int *digitos, int longitud); void Calcula_Suma (int *digitos, int longitud, int *suma); int main () { int f=0, c=0, numero; int m0, m1, m2; int *digitos; int longitud; int suma; int m[3][3]={10,20,30,40,50,60,70,80,90}; Muestra_Matriz (m,f,c); Multiplica_Columnas (m,f,c, &m0, &m1, &m2); printf ("El resultado de la columna [1] es: %d \n",m0); printf ("El resultado de la columna [2] es: %d \n",m1); printf ("El resultado de la columna [3] es: %d \n",m2); printf ("Introduce un número :"); scanf ("%d",&numero); Calcula_Digitos (numero, &digitos, &longitud); printf ("El numero tiene %d números", longitud); Muestra_Digitos(digitos, longitud); Calcula_Suma (digitos,longitud,&suma); printf ("La suma es: %d",suma); return 0; } void Calcula_Suma (int *digitos, int longitud, int *suma) { int i; int tmp=0; for (i=0; i < longitud; ++i) { tmp += digitos[i]; } *suma=tmp; } void Muestra_Digitos (int *digitos, int longitud) { int i; printf ("\n"); for (i=longitud-1; i>=0; --i) { printf ("%d",digitos[i]); } printf ("--\n"); } void Calcula_Digitos (int numero, int **digitos, int *longitud) { int n, l; int *tmp = NULL; for (n = numero, l=0; n > 0 ; n = n/10) { l += 1; } *longitud = l; tmp=calloc(*longitud, sizeof(int)); for (n = numero, l = 0; l < *longitud; n /= 10, ++l) { tmp[l]= n % 10; } *digitos = tmp; } void Muestra_Matriz (int m[3][3], int f, int c) { for (f=0;f<3;f++) { for (c=0;c<3;c++) { printf ("[%d]",m[f][c]); } printf ("\n"); } } void Multiplica_Columnas (int m[3][3], int f, int c, int *m0, int *m1, int *m2) { int c0[3]; int c1[3]; int c2[3]; for (f=0;f<3;f++) { for (c=0;c<3;c++) { if (c == 0) c0[f]=m[f][c]; if (c == 1) c1[f]=m[f][c]; if (c == 2) c2[f]=m[f][c]; } } *m0=c0[0]*c0[1]*c0[2]; *m1=c1[0]*c1[1]*c1[2]; *m2=c2[0]*c2[1]*c2[2]; }
Tags
C,
calculo,
matemáticas,
matrices,
paso por referencia,
punteros,
sport
Ubicación:
Majadahonda, Madrid
Suscribirse a:
Entradas (Atom)