elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / multiplicar matrices con pipes en: 10 Octubre 2010, 07:18 am
Hola!! Necesito ayuda, mi programa debe multiplicar dos matrices utilizando pipes pero la verdad no tengo idea de como hacerlo , he avanzado un poco pero aun falta mucho por hacer... Espero me puedan ayudar a completar mi codigo...

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>


int m,n,p; /*Variables que contendran las dimensiones de las matrice*/
int **matdfA,**matdfB;
int **matA,**matB,*matresultado;



/*-----------------------Funciones----------------------*/

/*La funcion cerrarpipe permitira como bien dice su nombre
cerrar las entradas no utilizadas*/
void cerrarpipe(int a){  /*el parametro i es la pipe utilizada*/
    int j;
    for(j=0;j<m;j++){
        if(j!=a){
            close(matdfA[j][0]);  /*cerramos tanto la parte de lectura como de escritura de las pipes no utilizadas*/
            close(matdfA[j][1]);
            //close(matdfA[j]);
            close(matdfB[j][0]);
            close(matdfB[j][1]);
            //close(matdfB[j]);
        }

    }
}
void padre_parte_envia_matriz(){

    /* Creacion del buffer*/
    int j,k, *bufr;
    for(j=0;j>m;j++){
        for(k=0;k<n;k++){
            //bufr[k]=matA[j][k];
            bufr[k]=matA[j][k];
        }
        write(matdfA[j][1],bufr,sizeof(bufr));
    }

}
/*Leeremos los datos y asignaremos estos al buffer*/
void hijo_recibe(int i){
    int *bufr,*resultado;
    read(matdfA
  • ,bufr,sizeof(bufr));
    /*Procesamiento del buffer*/
    write(matdfB[1],resultado,sizeof(resultado));
}
/*Creacion de las matrices iniciales aleatoriamente e impresion*/
void crear_matrices(int m, int n, int p){
    int i,j;
    //matA=(int *)malloc(sizeof(int*)*m);
    //for(i=0;i<m;i++){
    //    matA=(int *)malloc(sizeof(int*)*n);
    //}
    for(i=0;i<m;i++){
        for(j=0;j<n;j++){
            matA[j]=rand()%9;
            }
    }
    for(i=0;i<n;i++){
        for(j=0;j<p;j++){
            matB[j]=rand()%9;
            }
    }
    printf("********Matriz A********");
    for(i=0;i<m;i++){
        for(j=0;j<n;j++){
            printf("%d",matA[j]);
        }
        printf("\n");
    }
    printf("********Matriz B********");
    for(i=0;i<n;i++){
        for(j=0;j<p;j++){
            printf("%d",matB[j]);
        }
        printf("\n");
    }

}
void padre_obtiene_datos(){
    fd_set fd;
    int mayor;
    int cont,j,i;
    mayor=matdfB[0][0];
    for(i=1;i<m;i++){
        if(mayor<matdfB
  • ){
            mayor=matdfB
  • ;
        }
    }
    do{
            FD_ZERO(&fd);
            for(j=0;j<m;j++){
            FD_SET(matdfB[j][0],&fd);
            }
            if(select(mayor+1,&fd,NULL,NULL,NULL)){
                perror("Select");
            }
            else{
                for(j=0;j<m;j++){
                        if(FD_ISSET(matdfB[j][0],&fd)){
                            /* ..........*/
                        }
                        else{
                        read(matdfB[j][0],matresultado,sizeof(matresultado));
                        cont++;
                        }
                }
            }
    }while(cont<m);
}

int main(){

    int i;
    int j;
    /*Peticion de las dimensiones para la creacion de matrices */
    printf("De el numero de columnas en de la Matriz A: ");
    scanf("%d",&n);
    printf("\n De el numero de filas en de la Matriz A: ");
    scanf("%d",&m);
    printf("\n De el numero de filas en de la Matriz B: ");
    scanf("%d",&p);
        matdfA=(int **)malloc(sizeof(int *)*m);
   
    for(i=0;i<m;i++){
        matdfA=(int *)malloc(sizeof(int)*2);
        matdfB=(int *)malloc(sizeof(int)*2);
        for(j=0;j<m;j++){
            if(pipe(matdfA[j]<0) || pipe(matdfB[j]<0)){
                perror("Error creando pipes");
                exit(0);
            }
        }
    }
/* Creacion de los hijos con las caracteriasticas necesarias*/
    for(i=0;i<m;i++){
        if(fork()==0){
            cerrarpipe(i);
            hijo_recibe(i);
            exit(0);
        }
    }
    crear_matrices(m,n,p);
    padre_parte_envia_matriz();
    padre_obtiene_datos();


}
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines