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;
}