Системные вызовы fork () и wait () (Фибоначчи, быстрая сортировка и объединение этих двух) - PullRequest
0 голосов
/ 02 ноября 2011

У меня есть домашнее задание, которое должно использовать системные вызовы fork () и wait ():

1) Писать две C-программы, используя системный вызов fork (), который генерирует следующее в дочернем процессе: a) Фибоначчипоследовательность для числа m, указанная в командной строке (какая единственная задача, которую я фактически выполнила:)

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h> 
int main() {
      int a=0, b=1, n=a+b,i,ii;
      pid_t pid;
      printf("Enter the number of a Fibonacci Sequence:\n");
      scanf("%d", &ii);
      if (ii < 0)
          printf("Please enter a non-negative integer!\n");
      else    {
          pid = fork();
      if (pid == 0)
      {
         printf("Child is producing the Fibonacci Sequence...\n");
         printf("%d %d",a,b);
         for (i=0;i<ii;i++)
         {
            n=a+b;
            printf("%d ", n);
            a=b;
            b=n;
         }
         printf("Child ends\n"); 
      }
      else 
      {
         printf("Parent is waiting for child to complete...\n");
         wait(NULL);
         printf("Parent ends\n");
      }    }    return 0; }

b) быстрая сортировка n чисел, предоставленных из командной строки (Я не знаю, должен ли я просто написать алгоритм быстрой сортировки или реализовать fork (), или я больше не знаю?)

Для обеих программ родительский элемент вызывает вызов wait () длядождитесь завершения дочернего процесса перед выходом из программы.Выполните необходимую проверку ошибок, чтобы убедиться, что в командной строке передано неотрицательное число.

2) Объедините две вышеупомянутые программы (об этом я понятия не имею, как это сделать) в один, где один родительский процесс будет разветвлять два дочерних процесса, один для последовательности Фибоначчи, а другой для быстрой сортировки.Вход в вашу программу должен быть взят из аргументов командной строки.Ваша исходная программа должна быть названа merge.c .Командная строка выглядит следующим образом: merge mn Здесь m и n - два натуральных числа.Таким образом, ваша программа должна сгенерировать m случайных целых чисел (об этом я тоже понятия не имею, генерируя случайные числа в C) , отсортировать их с помощью быстрой сортировки и вычислить n-е число Фибоначчи.Вывод должен быть следующим:

*Quicksort Process Started
Random Numbers Generated
6 8 3 10 25 5 2 30
Sorted Sequence
2 3 5 6 8 10 25 30
Quicksort Process Exits*

Мне нужна быстрая помощь :( спасибо youuuu:)

1 Ответ

0 голосов
/ 02 ноября 2011

Ваша первая программа в основном верна. Вы сделаете свою жизнь немного проще, если сделаете часть Фибоначчи своей собственной функцией.

Ваша программа быстрой сортировки должна быть написана так же. Позвоните fork и попросите ребенка выполнить сортировку.

Для генерации случайных чисел используйте функцию 'rand' . (То же самое в C и C ++.)

...