Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РГР.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
503.3 Кб
Скачать

Результати виконання програм

Програма а:

Програма б:

Завдання 4

Розподілена пам’ять.

а. Визначити чи є матриця А симетричної щодо головної діагоналі. Вхідні дані: ціле додатнє число n, масив чисел А розмірності nxn. Використати не менше 4 процесів для вирішення завдання.

б. Дано послідовність натуральних чисел a0 ... an-1. Створити багатопоточний додаток для пошуку всіх ai, які є простими числами.

Лістинги програм

Програма а:

#include<stdio.h>

#include<time.h>

#include<stdlib.h>

#include<sys/shm.h>

#include<sys/ipc.h>

#include<unistd.h>

#include <sys/wait.h>

struct Mymem

{

int isSymmetric;

} *mem;

int main()

{

int shmid = shmget(IPC_PRIVATE, 2, IPC_CREAT|0666);

if (shmid < 0 ) {

printf("Fatal Error\n");

return 0;

}

mem = (Mymem *)shmat(shmid, NULL, 0);

int pid, n, st;

pid = fork();

if (pid == 0) {

printf("Enter N: ");

scanf("%d", &n);

}

wait(NULL);

int m[n][n], i, j, a, b;

srand(time(0));

puts("Matrix:");

pid = fork();

if (pid == 0) {

for (i = 0; i < n; i++) {

for (j = 0; j < n; j++) {

m[i][j] = rand() % 2;

printf("%3d", m[i][j]);

}

puts("");

}

}

wait(NULL);

a = n/2;

if (n % 2 == 0) {

b = a;

} else {

b = a+1;

}

int isSymmetric = 1;

pid = fork();

if (pid == 0) {

for (i = 0; i < a; i++) {

for (j = 0; j < n; j++) {

isSymmetric = isSymmetric && (m[i][j] == m[j][i]);

}

}

mem->isSymmetric = isSymmetric;

}

if (pid != 0) {

for (i = a; i < b; i++) {

for (j = 0; j < n; j++) {

isSymmetric = isSymmetric && (m[i][j] == m[j][i]);

}

}

wait(NULL);

if (isSymmetric && mem->isSymmetric) {

puts("Symmetric");

} else {

puts("No symmetric");

}

}

return 1;

}

Програма б:

#include<stdio.h>

#include<sched.h>

#include<unistd.h>

#include<stdlib.h>

#include<time.h>

#define NUMSTACK 5000

int isPrime(int);

int func(void *);

int center(int);

int a[100];

char stack[2][NUMSTACK];

int number = 1;

int length;

int main()

{

printf("Enter N: ");

scanf("%d", &length);

int i;

srand(time(0));

puts("Array:");

for (i = 0; i < length; i++) {

a[i] = rand() % 14;

printf("%5d", a[i]);

}

printf("\n");

clone(func, (void*)(stack[0]+NUMSTACK-1), CLONE_VM|CLONE_VFORK, NULL);

clone(func, (void*)(stack[1]+NUMSTACK-1), CLONE_VM|CLONE_VFORK, NULL);

return 1;

}

int func(void *param)

{

printf("Thread # %d\n", number);

int start, end, i;

if (number == 1) {

start = 0;

end = center(length);

} else {

start = center(length);

end = length;

}

for (i = start; i < end; i++) {

if (isPrime(a[i])) {

printf("%5d", a[i]);

}

}

printf("\n");

number++;

}

int center(int number)

{

int n = number/2;

int b;

if (number % 2 == 0) {

b = n;

} else {

b = n+1;

}

}

int isPrime(int number)

{

if (number == 0) {

return 0;

}

int i;

for (i = 2; i < number; i++) {

if (number % i == 0)

return 0;

}

return 1;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]