Прежде всего, спасибо за помощь заранее. Я должен написать программу, в которой я передаю элемент для поиска из терминала и в котором родительский процесс делит массив (состоящий из случайных чисел) измерений - определенных терминалом - на равные части, каждый из которых управляется дочерним процессом с тот же код Каждый дочерний элемент заботится о поиске элемента в части массива, чтобы справедливо разделить работу между дочерними процессами.
Проблема в том, что я не знаю, как сделать этот раздел без сортировки массива. Я думал, что смогу сделать вид слияния / коктейля или быстрой сортировки,
но я думаю, что это переизбыток и бесполезно для этой задачи.
Вот это код:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>
int partition(int x, int y);
int main(int argc, char*argv[]){
int i, j, result, state_wait, *v, n_children, dim, random_number;
int elem,div,lower,higher;
pid_t pid;
srand(time(NULL));
if(argc<4){
fprintf(stderr,"Insufficient parameters\n");
exit(EXIT_FAILURE);
}
n_children=atoi(argv[1]);
if(n_children<0){
fprintf(stderr,"Enter a positive number of children\n");
exit(EXIT_FAILURE);
dim=atoi(argv[2]);
if(dim<0||dim>n_children){
fprintf(stderr,"Enter a valid size\n");
exit(EXIT_FAILURE);
elem=atoi(argv[3]);
fprintf(stdout,"F: Father || PID = %d\n",getpid());
v=(int*)malloc(sizeof(int)*dim);
fprintf(stdout,"F: VECTOR:\n\n");
for(i=0;i<dim;i++){
v[i]=rand();
fprintf(stdout,"(%d) v[%d] number = %d\n",i,i,v[i]);
}
for(j=0;j<n_children;j++){
if(fork()==0){
fprintf("F: Child N. = %d || PID = %d\n",i,getpid());
div=partition(dim,n_children);
//lower=? j*div?
higher=lower+div-1; //except the final case when it is dim-1
result=search(lower,higher,&elem);
}
}
}
int partition(int x, int y){
int div=(x/y); //If I had a vector of 1000 elem., work on them must be fairly distributed among the children
//number of elements each group
if((x-div)>1)
div=(x/y)+1;
return div;
}
int search(int lower,int higher, int*elem){
int i;
for(i=lower;i<=higher;i++){
if(v[i]==elem){
fprintf(stdout,"Element found [position = %d]\n",i);
exit(1);
}
}
exit(-1);
}