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

Завдання 1

Сценарії на мові Shell. Реалізувати меню з двох пунктів: 1-ий пункт - визначити кількість запущених даними користувачем процесів (передбачити введення імені користувача); 2-ий пункт - завершити всі процеси даного користувача.

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

while true

do

echo "Скрипт работы с процессами";

echo "1. Количество запущенных процессов";

echo "2. Завершить все процессы";

echo "3. Выход";

echo "Выберите один из пунктов:";

read key;

case $key in

1)

while true

do

echo "Введите имя пользователя:";

read name;

echo `ps -au$name | wc -l`;

read name;

break;

done;;

2)

while true

do

echo "Введите имя пользователя:";

read name;

echo `killall -u$name`;

read name;

break;

done;;

3)

break;;

esac;

done;

Результат роботи програми

Завдання 2

Unix процеси. Реалізувати меню з двох пунктів: 1-ий пункт - визначити кількість запущених даними користувачем процесів (передбачити введення імені користувача); 2-ий пункт - завершити всі процеси даного користувача.

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

#include < stdio.h >

int main() {

for (;;) {

char name[15], command[25];

int st;

printf("Скрипт работы с процессами\n");

printf("1. Количество запущенных процессов\n");

printf("2. Завершить все процессы\n");

printf("3. Выход\n");

printf("Выберите один из пунктов:\n");

int key;

scanf("%d", & key);

switch (key) {

case 1:

printf("Введите имя пользователя:\n");

scanf("%s", name);

sprintf(command, "ps -au%s | wc -l", name);

if (fork() == 0) {

system(command);

}

wait(&st);

break;

case 2:

printf("Введите имя пользователя:\n");

scanf("%s", name);

sprintf(command, "killall -u%s", name);

if (fork() == 0) {

system(command);

}

wait(&st);

break;

case 3:

return 0;

}

}

}

Результат роботи програми

Завдання 3

Організація взаємодії процесів за допомогою каналів.

а. Знайти індекси i та j, для яких існує найбільша послідовність    a[i] - a [i +1] + a [i +2] - a [i +3] ... + / - a [j]. Вхідні дані: ціле позитивне число n, масив чисел А розмірності n.

б. Перший додаток чекає введення чисел a, b, c і відсилає їх другий додатком, яке знаходить рішення рівняння ax2+bx+c= 0, і відсилає результат першому додатку.

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

Програма а:

#include<stdio.h>

int compare(int[], int, int);

void findSequence(int[], int);

int main() {

int i, j, k, n, st;

int a[100];

int fd[2];

pipe(fd);

if (fork() == 0) {

printf("Введите число n: ");

int z;

scanf("%d", &z);

write(fd[1], &z, sizeof(int));

return 1;

}

wait(&st);

read(fd[0], &n, sizeof(int));

srand(time(0));

printf("Массив чисел: ");

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

a[i] = (rand() % 40) - 20;

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

}

printf("\n");

findSequence(a, n);

return 0;

}

int compare(int a[], int n, int m) {

if ((a[n] > 0 && a[m] < 0) || (a[n] < 0 && a[m] > 0)) {

return 1;

}

return 0;

}

void findSequence(int a[], int n) {

int maxlen = 1, maxtmp = 1, indextmp = 1, indexmax, i;

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

if (compare(a, i, i+1)) {

maxtmp = maxtmp+1;

} else {

if (maxtmp > maxlen) {

maxlen = maxtmp;

indexmax = indextmp;

}

indextmp = i+1;

maxtmp = 1;

}

}

printf("Результат: %d .. %d\n", indexmax+1, (indexmax+maxlen));

}

Програма б:

#include<stdio.h>

#include<fcntl.h>

int main()

{

int a[3];

printf("Введите 3 числа:\n");

scanf("%d", &a[0]);

scanf("%d", &a[1]);

scanf("%d", &a[2]);

mkfifo("mypipe",0777);

int fd[2];

fd[0] = open("mypipe", O_WRONLY);

write(fd[0], &a, sizeof(a));

close(fd[0]);

char result[30];

fd[1] = open("mypipe", O_RDONLY);

read(fd[1], &result, sizeof(result));

printf("Результат:\n%s\n", result);

close(fd[1]);

}

#include<stdio.h>

#include<fcntl.h>

#include<math.h>

void calculate(int, int, int);

char result[30];

int main()

{

int fd[2];

int a[3];

fd[0] = open("mypipe", O_RDONLY);

read(fd[0], &a, sizeof(a));

calculate(a[0], a[1], a[2]);

close(fd[0]);

fd[1] = open("mypipe", O_WRONLY);

write(fd[1], &result, sizeof(result));

close(fd[1]);

}

void calculate(int a, int b, int c)

{

int d = b*b-4*a*c;

if (d < 0)

{

sprintf(result, "Нет решений");

}

else if (d == 0)

{

double x = -b / (2 * a);

sprintf(result, "x = %.3f", x);

}

else

{

double x1, x2;

x1 = (-b + sqrt(d)) / (2.0 * a);

x2 = (-b - sqrt(d)) / (2.0 * a);

sprintf(result, "x1 = %.3f, x2 = %.3f", x1, x2);

}

}

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