![](/user_photo/2706_HbeT2.jpg)
- •Розділ 1. Теоретичні відомості
- •Вхід в систему
- •1.2 Отримання інформації про процеси в системі
- •1.3 Неіменовані і іменовані канали
- •1.4 Засоби міжпроцесной комунікації (ipc)
- •1.5 Процеси в операційній системі
- •Розділ 2. Постановка задачі із індивідуальним завданням.
- •2.1 Завдання 1
- •2.2 Завдання 2
- •2.3 Завдання 3
- •2.9 Завдання 9
- •Розділ 3. Результати розрахунково-графічної роботи
- •3.1 Результат виконання завдання 1
- •3.2 Результат виконання завдання 2
- •3.3 Результат виконання завдання 3
- •3.4 Результат виконання завдання 4
- •3.5 Результат виконання завдання 5
- •3.6 Результат виконання завдання 6
- •3.7 Результат виконання завдання 7
- •3.8 Результат виконання завдання 8
- •3.9. Результат виконання завдання 9
- •Висновки
- •Список використаної літератури
3.4 Результат виконання завдання 4
Лістинг програми завдання 1А
#include <stdio.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/wait.h>
#include <stdlib.h>
int x,y;
int a,b;
int A[5][5]={{4,-8,7,1,2},{45,3,4,-78,3},{-34,54,3,8,-9},{-36,43,6,-1,2},{43,56, -5,72,3}};
int max;
int tmpX;
int tmpY;
struct mem{
int maxX;
int maxY;
int mas[5][5];
int maxS;
int y[5][5];
int x[5][5];
}*mem_max;
int main(){
int shmid=shmget(IPC_PRIVATE,2,IPC_CREAT|0666);
if(shmid<0){
fprintf(stdout,"Oshubka\n");
return 0;
}
mem_max=(mem *)shmat(shmid,NULL,0);
int pid;
pid=fork();
if(pid==0){
//Zapobnenna A[x][y]
for(x=0;x<5;x++)
for(y=0;y<5;y++)
mem_max->mas[x][y]=A[x][y];
//Znaxodgenna max
max=A[0][0];
for(x=0;x<5;x++)
for(y=0;y<5;y++)
if(abs(max)<abs(A[x][y])){
max=A[x][y];
a=x;
b=y;
}
mem_max->maxS=max;
mem_max->maxX=a;
mem_max->maxY=b;
//Perectanobka 0 with 2 col
for(x=0;x<5;x++){
tmpX=A[x][0];
A[x][0]=A[x][2];
A[x][2]=tmpX;
}
for(x=0;x<5;x++)
for(y=0;y<5;y++)
mem_max->x[x][y]=A[x][y];
//Perectanobka 1 with 3 row
for(x=0;x<5;x++){
tmpY=A[1][y];
A[1][y]=A[3][y];
A[3][y]=tmpY;
}
for(x=0;x<5;x++)
for(y=0;y<5;y++)
mem_max->y[x][y]=A[x][y];
}
if(pid!=0){
//Zapobnenna A[x][y]
for(x=0;x<5;x++)
for(y=0;y<5;y++)
mem_max->mas[x][y]=A[x][y];
//Znaxodgenna max
max=A[0][0];
for(x=0;x<5;x++)
for(y=0;y<5;y++)
if(abs(max)<abs(A[x][y])){
max=A[x][y];
a=x;
b=y;
}
//Perectanobka 0 with 2 col
for(x=0;x<5;x++){
tmpX=A[x][0];
A[x][0]=A[x][2];
A[x][2]=tmpX;
}
//Perectanobka 1 with 3 row
for(y=0;y<5;y++){
tmpY=A[1][y];
A[1][y]=A[3][y];
A[3][y]=tmpY;
}
wait(NULL);
//Bubedenna A[x][y]
printf("Bubedenna matruci:\n");
for(x=0;x<5;x++){
for(y=0;y<5;y++){
fprintf(stdout,"%4d",mem_mas->mas[x][y]);
}
printf("\n");
}
//Bubedenna max
printf("Bubedenna max po modolu element matruci:\n");\
printf("x y max\n");
fprintf(stdout,"%d %d %d\n", mem_max->maxX, mem_max->maxY,mem_max->maxS);
//Bubedenna perectanoblenux col
printf("Pominatu col 0 with 2\n");
for(x=0;x<5;x++){
for(y=0;y<5;y++){
fprintf(stdout,"%4d"mem_max->x[x][y]);
}
printf("\n");
}
//Bubedenna perectanoblenux row
printf("Pominatu row 1 with 3\n");
for(x=0;x<5;x++){
for(y=0;y<5;y++){
fprintf(stdout,"%4d",mem_max->y[x][y]);
}
printf("\n");
}
}
return 1;
}
Результати програми завдання 1А
Рисунок 3.4.1 – Виведення матриці А
Рисунок 3.4.2 – Виведення максимального по модулю елемента у матриці А
Рисунок 3.4.3 - Міняється місцями стовпець 0 зі стовпцем 2
Рисунок 3.4.5 - Міняється місцями рядок 1 з рядком 3