Ricerca carattere in un array - Processi concorrenti

di il
3 risposte

Ricerca carattere in un array - Processi concorrenti

Ho un problema con questo esercizio:
Consegna: 

Creare un array di 50 numeri interi inseriti in maniera randomica. Clonare il processo padre in 4 processi figli. Ogni processo chiede all'utente di inserire un numero che dovrà ricercare all'interno di una porzione dell'array (ad ogni array è affidata la gestione di 1/4 dell'array). 
A fine scansione della propria porzione di array, i singoli processi riportano al padre il numero di volte in cui il numero si è presentato. 
Il padre stampa il numero che è stato cercato e quante volte si ripete in quella porzione dell'array.

Ho chiesto a Chat GPT ed ecco quello che mi ha tirato fuori, io vorrei solo modificare la parte in cui vengono clonati i 4 processi figli e vorrei anche cercare di semplificare di molto il codice, ma non so da dove iniziare. Qualcuno che possa aiutarmi? Grazie.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/types.h>
#include <unistd.h>

#define ARRAY_SIZE 50
#define NUM_CHILDREN 4

int main() {
   int array[ARRAY_SIZE];
   srand(time(NULL));
   for (int i = 0; i < ARRAY_SIZE; i++) {
       array[i] = rand() % 100;
   }

   pid_t figli[NUM_CHILDREN];
   int start_index[NUM_CHILDREN], end_index[NUM_CHILDREN];
   int i;
   for (i = 0; i < NUM_CHILDREN; i++) {
       start_index[i] = i * ARRAY_SIZE / NUM_CHILDREN;
       end_index[i] = (i + 1) * ARRAY_SIZE / NUM_CHILDREN;
       figli[i] = fork();
       if (figli[i] == 0) {
           int num;
           printf("Inserisci un numero da cercare nell'intervallo %d-%d: ", start_index[i], end_index[i] - 1);
           scanf("%d", &num);
           int count = 0;
           for (int j = start_index[i]; j < end_index[i]; j++) {
               if (array[j] == num) {
                   count++;
               }
           }
           printf("Numero %d trovato %d volte nell'intervallo %d-%d\n", num, count, start_index[i], end_index[i] - 1);
           return 0;
       }
   }

   int num;
   printf("Inserisci un numero da cercare nell'array: ");
   scanf("%d", &num);

   int child_counts[NUM_CHILDREN];
   for (i = 0; i < NUM_CHILDREN; i++) {
       wait(NULL);
       int status;
       int count = WEXITSTATUS(status);
       child_counts[i] = count;
   }

   for (i = 0; i < NUM_CHILDREN; i++) {
       printf("Numero %d trovato %d volte nell'intervallo %d-%d\n", num, child_counts[i], start_index[i], end_index[i] - 1);
   }

   return 0;
}

3 Risposte

Devi accedere o registrarti per scrivere nel forum
3 risposte