Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** */
- /* ** // ** // ** // Código fuente de programa que realiza producto matricial // ** // ** // ** */
- /* ** // ** // ** // * Licenciado bajo GNU General Public License (GPL) 3.0 * // ** // ** // ** */
- /* ** // ** // ** // ** // ** // ** // Created by: XeBuZer0 // ** // ** // ** // ** // ** // ** */
- /* ** // ** // ** // ** // ** // Windows beta tester: Rafael Mora // ** // ** // ** // ** // ** */
- /* ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** */
- /* ** // ** // EDITED V2.0: Improved compatibility with windows. For better results // ** // ** */
- /* ** // ** // * this was tested with windows, compiled with Geany as IDE and TCC * // ** // ** */
- /* ** // ** // ** Under Linux there's no trouble, tested with GCC, Clang and TCC ** // ** // ** */
- /* ** // ** // ** // ** // ** V2.0 finished on 5th - December - 2021 ** // ** // ** // ** // ** */
- /* ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** */
- /* ** // ** // ** // ** // ** // * F v q _ U k r a N a z i s ! * // ** // ** // ** // ** // ** */
- /* ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** */
- #include <stdio.h>
- #include <stdlib.h>
- #include <errno.h>
- #include <string.h>
- #include <time.h>
- typedef long double** matriz;
- matriz InitMat (const int f, const int c);
- void LlenaMat (const int f, const int c, matriz M);
- void LeerMat (const int f, const int c, matriz M);
- void LlenaMatRand(const int f, const int c, matriz M);
- void ProdMat (const int i, const int j, const int k, const matriz M1, const matriz M2, matriz M3);
- void clean_stdin (void);
- int main (void){
- matriz M1, M2, M3;
- int i=0, j=0, k=0,a=0;
- printf("Ingrese # renglones de M1: ");
- scanf("%i", &i);
- printf("Ingrese # columnas de M1: ");
- scanf("%i", &j);
- printf("Ingrese # columnas de M2: ");
- scanf("%i", &k);
- printf("¿Desea ingresar el contenido de las matrices\nO desea que el contenido sea aleatorio?\n1) Si, ingresar manualmente\n0) No, contenido aleatorio\n Ingrese opción: ");
- scanf("%i", &a);
- M1 = InitMat(i,j);
- M2 = InitMat(j,k);
- M3 = InitMat(i,k);
- if (a==1){
- printf("Ingresando datos de Matriz 1...\n");
- LlenaMat(i,j,M1);
- printf("Ingresando datos de Matriz 2...\n");
- LlenaMat(j,k,M2);
- }
- if (!a) {
- printf("Ingresando datos de Matriz 1...\n");
- LlenaMatRand(i,j,M1);
- printf("Ingresando datos de Matriz 2...\n");
- LlenaMatRand(j,k,M2);
- }
- if (!(!a || a==1)) {
- printf("¿Usted se hace pendejo o neta mastica agua?\n");
- return a;
- }
- printf("Multiplicando Matrices...\n");
- ProdMat(i,j,k,M1,M2,M3);
- LeerMat(i,k,M3);
- free(M1); free(M2); free(M3);
- return 0;
- }
- matriz InitMat(const int f, const int c){
- extern int errno;
- register int t = 0;
- matriz dummy = (matriz)calloc(f,sizeof(long double*));
- if (dummy != NULL)
- for (t = 0; t<f;t++){
- *(dummy+t) = (long double*)calloc(c,sizeof(long double));
- if ( *(dummy+t) == NULL ){
- fprintf(stderr, "Error asignando memoria:\nCode error:%d\n%s\n", errno, strerror(errno));
- exit(EXIT_FAILURE);
- }
- }
- else {
- fprintf(stderr, "Error asignando memoria:\nCode error:%d\n%s\n", errno, strerror(errno));
- exit(EXIT_FAILURE);
- }
- return dummy;
- }
- void LlenaMat(const int f, const int c, matriz M){
- register int x = 0, y = 0;
- for(x=0;x < f;x++)
- for(y=0;y < c;y++){
- printf("Ingrese valor %d,%d : ",x+1,y+1);
- scanf("%Lf",&(M[x][y]));
- }
- LeerMat(f,c,M);
- }
- void LlenaMatRand(const int f, const int c, matriz M){
- register int x = 0, y = 0;
- time_t t = 0;
- srand((unsigned) time(&t));
- for(x=0;x < f;x++)
- for(y=0;y < c;y++)
- M[x][y] = (rand()%99);
- LeerMat(f,c,M);
- }
- void LeerMat(const int f, const int c, matriz M){
- printf("Imprimiendo Matriz... \n");
- register int x = 0, y = 0;
- for(x=0;x < f;x++)
- for(y=0;y < c;y++){
- printf("%4Lf%c",M[x][y],(y+1==c)?'\n':'\t');
- }
- }
- void clean_stdin(void){
- register int c;
- do c = getchar();
- while (c != '\n' && c != EOF);
- }
- void ProdMat(const int i, const int j, const int k, const matriz M1, const matriz M2, matriz M3){
- register int x = 0, y = 0, z=0;
- for (x = 0;x<i;x++)
- for (y = 0;y<k;y++)
- for (z = 0;z<j;z++)
- M3[x][y] = (M1[x][z] * M2[z][y]) + M3[x][y];
- }
Add Comment
Please, Sign In to add comment