Programa en PVM para obtener la posicin o posiciones de un nmero entero en un vector de enteros . Se supone que ya tenemos cargado el vector . La dimensin del vector es divisible por el nmero de nodos .
*****************************************************************************
//Programa maestro.c

#INCLUDE "pvm3.h"
#INCLUDE <stdio.h>

#DIMENSION 1000
#N_NODOS 25

main(){
	int numero,tid,bloque,aciertos,posicion;
	int arraytids[N_NODOS];
	printf("Introduzca el entero a buscar : ");
	scanf("%d",&numero);
	printf("%d\n",numero);
	tid=pvm_mytid();
	bloque=DIMENSION/N_NODOS;
	pvm_spawn("esclavo","",0,"",N_NODOS,arraytids);
	for(int i=0;i<N_NODOS;i++){
		pvm_initsend(PvmDataDefault);
		pvm_pkint(&numero,1,1);
		pvm_pkint(&bloque,1,1);
		pvm_pkint(&vector[i*bloque],bloque,1);
		pvm_send(arraytids[i],1);
	}
	printf("Las posiciones encontradas son \n");
	for(int i=0;i<N_Nodos;i++){
		aciertos=0;
		pvm_recv(arraytids[i],1);
		pvm_upkint(&aciertos,1,1);
		for(int j=0;j<aciertos;j++){
			pvm_upkint(&posicin,1,1);
			printf("%d\n",(i*bloque)+posicin);
		}
	}
	printf("FIN");
	pvm_exit();
	exit(0);
}
*****************************************************************************
//Programa esclavo.c

#INCLUDE "pvm3.h"

main(){
	int tid,padre,bloque,numero,contador;
	int *vector;
	tid=pvm_mytid();
	padre=pvm_parent();
	pvm_recv(padre,1);
	pvm_upkint(&numero,1,1);
	pvm_ipkint(&bloque,1,1);
	vector=(int *)malloc(bloque*sizeof(int));
	pvm_upkint(&vector[0],bloque,1);
	contador=0;
	for(int i=0;i<bloque;i++){
		if(vector[i]==numero)contador++;
	}
	pvm_initsend(PvmDataDefault);
	pvm_pkint(&contador,1,1);
	for(int i=0;i<bloque;i++){
		if(vector[i]==numero)pvm_pkint(&i,1,1);
	}
	pvm_send(padre,1);
	pvm_exit();
	exit(0);
}

