From 81eb312ee113311dd6953f0060bde712cad0753a Mon Sep 17 00:00:00 2001 From: Vladislav Kurochkin <94047003+kuroochkin@users.noreply.github.com> Date: Fri, 8 Sep 2023 14:03:40 +0000 Subject: [PATCH 01/12] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20hello.c=20=D0=B8=20empty?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab0/hello/empty | 0 lab0/hello/newhello.c | 6 ++++++ 2 files changed, 6 insertions(+) create mode 100644 lab0/hello/empty create mode 100755 lab0/hello/newhello.c diff --git a/lab0/hello/empty b/lab0/hello/empty new file mode 100644 index 000000000..e69de29bb diff --git a/lab0/hello/newhello.c b/lab0/hello/newhello.c new file mode 100755 index 000000000..c71ae2565 --- /dev/null +++ b/lab0/hello/newhello.c @@ -0,0 +1,6 @@ +#include + +int main() +{ + printf("Hello World!\n"); +} \ No newline at end of file From 02acd147403a033c3195dd157910e7f3b4b0f98c Mon Sep 17 00:00:00 2001 From: Vladislav Kurochkin <94047003+kuroochkin@users.noreply.github.com> Date: Fri, 8 Sep 2023 15:25:21 +0000 Subject: [PATCH 02/12] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=B01?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab1/src/cake_rhymes.txt | 2 +- lab1/src/file.txt | 0 lab1/src/show_all | 4 + lab1/src/with_cake.txt | 381 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 386 insertions(+), 1 deletion(-) create mode 100644 lab1/src/file.txt create mode 100755 lab1/src/show_all create mode 100644 lab1/src/with_cake.txt diff --git a/lab1/src/cake_rhymes.txt b/lab1/src/cake_rhymes.txt index 8a0141bf4..265bdd67a 100755 --- a/lab1/src/cake_rhymes.txt +++ b/lab1/src/cake_rhymes.txt @@ -2141,4 +2141,4 @@ Let's spend some cake From "I Meant You No Harm/Jimmy's Rap [Eddie Murphy]" by Various Artists: Listen, Jimmy wanna rib, Jimmy wanna stake, -Jimmy wanna piece o' your chocolate cake! \ No newline at end of file +Jimmy wanna piece o' your chocolate cake! diff --git a/lab1/src/file.txt b/lab1/src/file.txt new file mode 100644 index 000000000..e69de29bb diff --git a/lab1/src/show_all b/lab1/src/show_all new file mode 100755 index 000000000..98b3ee74d --- /dev/null +++ b/lab1/src/show_all @@ -0,0 +1,4 @@ +#!/bin/bash +pwd +date +echo "I have $1 in my pocket" diff --git a/lab1/src/with_cake.txt b/lab1/src/with_cake.txt new file mode 100644 index 000000000..61bbb8f60 --- /dev/null +++ b/lab1/src/with_cake.txt @@ -0,0 +1,381 @@ +Here is some milk and oaten cake. +And a halfpenny cake, +I'll give you a cake +She takes the cake - +One day it's honey and raisin cake, +Don't that take the cake +With the big bad devil's food cake. +Sweet as a cake +I say let 'em all eat cake. +And baked him a cake +Is it the baker who gave you a cake +Was sugar cake +We ask them for bread and get ?let them eat cake? +when it comes to brains I take the cake +The sacramental cake: +Well, I'll be a lawman's piece of cake +And the maid comes in with coffee and cake +is just icing on the cake, +Nibblin' on sponge cake +And when you stand before the candles on a cake +There's no bread, let them eat cake +In the wedding cake? +I want to be the girl with the most cake +This is what you call presidential cake up +I light the candles and I cut the cake +I put my face down in the cake +Back inside Sam, throw away your cake +What's up? They all want the cake +And I will bake a sugar cake +Baby Cham and Foxy Brown, ah we take the cake +A piece of your cake? +He was the one afraid to cut the cake +Right, look, I was out of town getting cake +Well did he leave your pretty fingers lying in the wedding cake +A sell dem sell very cheap fi fruit cake +But I wake, mountains pop out of the cake +Rubberbands round cash im makin cake +We get a bit of the good life, a piece of the cake +Mary antoinette enjoyed her cake +After Canada the USA's a piece of cake +And ain't no fake gonna steal my cake +Homie over here's tryin to take his cake +makes you humble for the pot, I know he's accustomed to the cake +You traded in your real man for trailer life and funnel cake +Want a big piece of the cake +Is sweeter than the cake +I like cake, +I'll cut out cake +Don't need candles and cake +I'm gonna be on you like a fat kid on cake! +Becomes a piece of cake +So damp and rich a cake- +Back the cake, +The way John Goodman needs cake +this dessert, takes the cake, +Becomes a piece of cake +While he gorges on truffles and cake. +When there was still one piece of cake +when it comes to brains I take the cake +That's nice, but it's just icing on the cake. +Not an enticing effect to be icing your face like a cake +Some take just apple pie, some take just cake +Happy birthday darling, I've no present, no fancy cake +Vanilla fudge and wedding cake +We ought to bake a sunshine cake, +[We ought to bake a sunshine cake] +[So why not bake a sunshine cake,] +I thought the world was sugar cake +before the candles on a cake +He's a piece of cake +It's as easy as pie, and as simple as cake +Matter fact make me a birthday cake +Celebrate, drink up, get your cake up, +Did you leave your pretty fingers flying in the wedding cake? +Spaghetti and cookies and cake +About the time the couple cut the cake +and janey's fingers were in the cake +While blowing out the candles on a birthday cake +Blow out the candles on the cake +Running this hotel is no piece of cake +some folks like cake +He said don't worry it's a piece of cake +I popped out from a cake +Poor old papa carved the turkey and little sister cut the cake +Too many reaching for a piece of cake +you sick little cup cake, +Now it's time to light another candle on the cake +Why don't you take a stone and eat it just as if it were a cake +It ain't hard to tell, you know I get cake +It all comes with the wedding cake +But you take the cake +I live in a cake, +I make spaghetti, she brings cake +I had to leave before they even cut the cake. +I'm the one that get the cake +The streets is talkin and they tellin me to go get that cake +I swear it ain't been the same ever since I got cake +I'm on a paper chase for pies, yeah that cookies and cake +I'm on a paper chase for pies, yeah that cookies and cake +And you're filling your fat face with every different kind of cake +You serve me up with cake +Well all that icing and all that cake, +in the wedding cake? +This is what you call presidential cake up +This is what you call presidential cake up +Remember I'm gonna spend my cake +Yeah I VV'd the stones, dog I'm into cake +You like the frosting, you just bought the cake +The kids won't eat my charcoal cake +Playin' patty cake (patty cake) +Thinking about you is the icing on the cake. +Now they're out in the woods eating ice-cream and cake +Sweeter than a buckwheat cake +About the time the couple cut the cake +It's time to get wise, rise, and cut the cake +iceing on a cake +Carved our initials on top of the cake +Here on earth I'll have my cake +I'm the candles on you're cake +when do i jump out of the cake +famous for his cake +Where we're all gonna have a cake. +Can I have another piece of chocolate cake? +Why my homeys ain't get that cake +Half baked, eatin' ganja cake +Janey's fingers were in the cake +If I told you what I make, everytime I flip a cake +i lived in a cake +Lost in coma and covered in cake. +All's fair in love and war, piece of cake +Claiming the got backs but they never share their cake +Give me a cake +And a piece of the wedding cake +And Janey's fingers were in the cake +Ain't no piece of cake +it hasn't always been a piece of cake +Did you leave your pretty fingers lying in the wedding cake? +on my way up, gettin my cake up +Just icing on the cake +Want you to come get a file in your cake +He lost his slice of the eternal cake +The girl in the cake +As we keep you wired, so up the stakes, cut the cake +dem sin a pile up on dem and it a cake up +Won't feed the birds bread boys, let them eat cake +I'll make my money, set my cake up +Now, let's set it straight, B-I-G don't cuff or cake +People say you can't have your cake +Some songs sound like cake +straight to the hood to see some new cake +I gotta stay awake when I hold the cake +Those who could relate know the world ain't cake +Where you said put the cake +soup and his kingly cake +spaghetti and cookies and cake +He said you try it, I said it's a piece of cake +Too much sugar and too much cake +Are you made or broken by the birthday cake? +Thirty-nine (39) candles burnt out on a cake +Sweet carob rice cake +Well, she go to see the baker when she wants a cake +Traveling and stacking the cake +I've got some mochomo cake +now my cake up +Man, this really takes the cake +You bake my cake +Cutting the cake +I'm cake +see the sugar bowl do a tootsi roll and the bad devils food cake +I wanna have my piece of cake +Yeah and I'm about cake +Violet wants ice cream, Violet wants cake +I want the whole of the cake +For the birthday cake +Been like this ever since I got my cake up +I flashed a grin and said, Jack this is gonna be a piece of cake +They do whatever it takes to keep a lil' cake +Baking up a Martian cake +but the something on the side is what takes the cake +These limitations that burden me must be the icing on your cake +To much icind on the cake +But your kiss is sweeter than the cake +My heart, my soul, my candy, my cake +I'm a bake a hater cake today +seems like a cake +Being that we ugly, it ain't a piece of cake. +I'm selfish got to have the pie and the whole cake +comin' around for devil's cake +There were no balloons or cake +Dark, rich and thick like a fresh baked cake +I'm craving the taste of the cake +Where you goin'? Where I'm goin? Finna get the cake!/ +If I knew you were comin' I'd've baked a cake +Ate up all of the wedding cake, Uh-huh. +Eat it like a piece of cake +Her name is Little Debbie, and I love her cake +Light a fuse, bake a cake +Thirty-one candles on her birthday cake +You'll miss my carrot cake +I love you like a fat kid love cake +First they brought in tay and cake +Antagonizing pressure is the icing on the cake +I eat my cake +The kids won't eat my charcoal cake +But this job ain't all cookies and cake +They brought in tea and whisky cake. +All the world is birthday cake +I ain't tryina sell my soul but I'm tryina get this cake +And I will bake a sugar cake +Consider my raw demeanor the icing on the cake +Life is just a piece of cake +'cause wit whipped cream on em, they taste just like cake +Most friends were broke, only a couple had cake +I'd celebrate at your wake, I'd bake myself a cake +I'm just tryin' to be the great, tryin' to get a piece of cake +You can't get a slice if you don't bake the cake +If 50 was Puffy, you'd run and go get him a cheese cake +But bein an entertainer puts the icin on the cake +Your pockets we shake for cake +So just cut the stupid cake +But this one takes the cake +And ain't no fake gonna steal my cake +makes you humble for the pot, I know he's accustomed to the cake +I'm a man - I insist you insist on a piece of cake +You're a man - You insist I insist on a piece of cake +"Let 'em eat cake." +I don't want a piece of your cake! +Tryin' not to go to jail, tryin' not to cake up +We smash for cake +In an old age pension-less cake +Vanilla fudge and wedding cake +(You are just the icing to put on my cake) +Eat a crocodile cake +You have let us eat the cake +To make up for that piece of cake +Matter fact make me a birthday cake +And start to bake a sugar cake +ha get your cake up +Get cha cake up +Somebody's been digging 'round in my cake. +When a waiter brought out a big strawberry cake +And I quietly finished my strawberry cake +There's too much motherfuckin' paper to cake up +stake and a layer cake. +The jingoistic cake +Black the colour icing on our cake +and janey's fingers were in the cake +The layers on the cake +I'm a cup of hot coffee, I'm a piece of cake. +I can fill your larder, I'm a piece of cake. +you can bowl me over, I'm a piece of cake. +Been piece of cake +He said don't worry it's a piece of cake +Four and twenty blackbirds in a cake +odd years without having my cake up +You dudes is cake +Then blow out the candles, and have a piece of cake! +All I found was that old piece of our wedding cake. +The few hours off to eat wedding cake +But I hear tell someone's been diggin round in my cake +Come with the wedding cake +Comes with the wedding cake +a piece of cake +Red Velvet cake +Joy and tears come with the wedding cake. +It all comes with the wedding cake... +I eat it up and take the cake +In time I've earned my cake, +Today my son birthday and I can't even buy a cake +I had to leave before they even cut the cake. +She in her birthday suit cause of the damn cake +You serve me up with cake +Who ate every crumb of the wedding cake. +Cuz wit whipped cream on em, they taste just like cake +The safe in the floor with a life time of cake +Him and Genius flew back from, Uganda black, gettin' that cake +Just the sweet watermelon and the buckwheat cake +Gotta get my cake up +Marie said "Just let them eat cake" +Four and twenty blackbirds in a cake +for a cup of cold coffee and a piece of cake. +I will be the file in the cake +getting that independent cake +I'm gonna bake me her favorite cake +But wait, he got singles in his cake +I got locked by the jake, you was right I had to take the whole cake +I'll screw my only brother for even a glimpse at a piece of the cake +Leaving all the yellow roses on her wedding cake +They just get the news and the ones in power always get the cake +Thinking about you is the icing on the cake. +It's time to get wise, rise, and cut the cake +Becomes a piece of cake +Did we mention each meal would be full of fun cake? +Mek all mi allstar cake +It's gonna melt the icing on our cake +Mind right, cake up +Birthday wordplay, piece of cake +heaven is a beef-cake. +Beef cake? +Triple beam wit da lean, the man wit da cake +I believe in birthday cake +And I can't be runnin late cause I'm about that cake +Sweet potatoe cake +The only thing she'd make was cake, +Four and twenty blackbirds in a cake +Janey's fingers were in the cake +I bake Donald Trump cake +so i get up off my bump and go get that cake +But im still gettin cake +I'm your cream cake +Before you hibernate and you come out a crab cake" +When I was nine I said a rhyme by putting candles on my cake +I love you like a fat kid love cake +If you bring enough for them, you can have your cake +And Janey's fingers were in the cake +You take the cake. +Your style is all tissue, chocolate fudge cream cake +Luck seemed to serve us a slice of life's cake +Baby don't stop, take it to the top, eat it like a piece of cake +She might pop out of the top of a birthday cake +Come with the wedding cake. +I didn't know this was the place I'd get my piece of the cake +Or feed you poison birthday cake +i`m popping out of my rebirthday cake +I bang up like a birthday cake +Watch me bake my own cake +Ended up in folsom but the file was in the cake +The camel's tellin' you to come on, you had to cake it +You have sex with cake +dem sin a pile up on dem and it a cake up +Won't feed the birds bread boys, let them eat cake +From "Fruitcake" by Eraserheads: +Life is a piece of cake +And start to bake a sugar cake +It's no piece of cake, +I say stick together God until y'all cake up +That way they get the biggest slice of the cake +ni mamul bbetnun kosun negenun piece of a cake +Those who could relate know the world ain't cake +Ice cream and cake. +Whether we have not or have cake +For a slice of cake +Are you made or broken by the birthday cake? +And I share her love of wine and cake +Same knife that cuts your throat divides the cake +well, first she brought out tea and cake, +Still you want to have and eat your cake +Well I found a match and wrote these words on your cake +and the brook valley man dem need a slice a di cake +And a red-head freckled face blows out the candles on his birthday cake +Cutting the cake +Becomes a piece of cake +But your friends are hungry so just cut the stupid cake. +You just keep on trying till you run out of cake +Gave up your lot for a bite of the cake +If I kill, yo, I'm doin' so for the cake +My piece of the cake +It's a'one big... one big... one big... cake! +Like dropping out of weight while you're trying to have your cake +You know it's all for the cake, yeah it's all for the cake +That's when the voice began to barter with the promise of cake. +She could almost taste the cake. +on my birthday give me a burger not a cake +Love burns all and hate takes the cake +And we would sail under the stars eating strawberry cake +I'm a bake a hater cake today +Then its kissy smiley, fake fake fake, Like a cake +And dream of mama's chocolate cake +Hey producer cut me on the cake +Everyday is a grind, gotta get the cake up +We drank a lot of stout and ate a lot of cake! +He said baby you'r so hott you could bake my cake +till you run out of cake. +I'm craving the taste of the cake +I shake the jake to get the cake +Baked inside a fudge cake. +Ain't nothing but a fruit cake +Out of a ginger cake +Won't even buy me cheap, cheap cake +Let's spend some cake +Jimmy wanna piece o' your chocolate cake! From efc88f15d3643664e73f35d6f95d9c8fb620f3f1 Mon Sep 17 00:00:00 2001 From: Vladislav Kurochkin <94047003+kuroochkin@users.noreply.github.com> Date: Fri, 22 Sep 2023 13:19:32 +0000 Subject: [PATCH 03/12] =?UTF-8?q?=D0=A1=D0=B4=D0=B0=D0=BD=D0=B0=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B2=D0=B0=D1=8F=20=D0=BB=D0=B0=D0=B1=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab0/hello/a.out | Bin 0 -> 16696 bytes lab0/hello/hello_world | Bin 0 -> 16696 bytes lab0/src/{hello.c => hello} | 0 lab1/src/average.sh | 13 ++++++++++++ lab1/src/cat | 0 lab1/src/date.sh | 8 ++++++++ lab1/src/numbers.txt | 38 ++++++++++++++++++++++++++++++++++++ 7 files changed, 59 insertions(+) create mode 100755 lab0/hello/a.out create mode 100755 lab0/hello/hello_world rename lab0/src/{hello.c => hello} (100%) create mode 100755 lab1/src/average.sh create mode 100644 lab1/src/cat create mode 100755 lab1/src/date.sh create mode 100644 lab1/src/numbers.txt diff --git a/lab0/hello/a.out b/lab0/hello/a.out new file mode 100755 index 0000000000000000000000000000000000000000..8b76cd74556bd35b0ba71f2b7392b626721cd2e3 GIT binary patch literal 16696 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 literal 0 HcmV?d00001 diff --git a/lab0/hello/hello_world b/lab0/hello/hello_world new file mode 100755 index 0000000000000000000000000000000000000000..8b76cd74556bd35b0ba71f2b7392b626721cd2e3 GIT binary patch literal 16696 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 literal 0 HcmV?d00001 diff --git a/lab0/src/hello.c b/lab0/src/hello similarity index 100% rename from lab0/src/hello.c rename to lab0/src/hello diff --git a/lab1/src/average.sh b/lab1/src/average.sh new file mode 100755 index 000000000..a2a3c6411 --- /dev/null +++ b/lab1/src/average.sh @@ -0,0 +1,13 @@ +sum=0 +count=0 + +for arg in "$@" +do + sum=$((sum + arg)) + count=$((count + 1)) +done + +average=$((sum / count)) + +echo "Количество: $count" +echo "Среднее: $average" \ No newline at end of file diff --git a/lab1/src/cat b/lab1/src/cat new file mode 100644 index 000000000..e69de29bb diff --git a/lab1/src/date.sh b/lab1/src/date.sh new file mode 100755 index 000000000..78b22b868 --- /dev/null +++ b/lab1/src/date.sh @@ -0,0 +1,8 @@ +current_path=$(pwd) +echo "Текущий путь: $current_path" + +current_datetime=$(date) +echo "Текущая дата и время: $current_datetime" + +echo "Переменная окружения PATH:" +echo "$PATH" \ No newline at end of file diff --git a/lab1/src/numbers.txt b/lab1/src/numbers.txt new file mode 100644 index 000000000..6f809d399 --- /dev/null +++ b/lab1/src/numbers.txt @@ -0,0 +1,38 @@ + -2052327929 305313122 1710747617 -447613493 + -313123026 -548928818 -956788863 -743001018 + -1744759366 -118652918 -1829660190 -1844615270 + -1509313493 -427771341 1062937898 1824819511 + -843800214 1082206093 383192283 862209460 + 1173114215 527834824 43319982 794503944 + -1906875220 -1777862017 903828368 1465672524 + 260585254 -1027851049 1075490081 -1646011538 + 1696275105 -263419061 -1556047791 1787808342 + 907456296 -1981479094 1459165564 406217401 + -1345096005 1285216707 -165944879 -456595589 + 643708491 -820103845 -936157586 -316027939 + 659574036 171795479 -258303041 1564078749 + -644199081 -1041994536 -1002657168 -491651272 + -182483842 1510071333 -859581615 -956758217 + 68601168 849537820 -1039043339 -1869906744 + 716751050 -1564301193 -1252282184 823334594 + 1549021612 -1886693599 751631666 -1724643184 + -706318923 1242321336 1461296801 1011789853 + 1392037245 1190641597 -1364451949 -1504471030 + 1132028689 971592827 -884161693 1152913838 + 744163316 346212835 -696212065 1760132864 + -352693723 1985571736 835783877 -1273660573 + -655178014 -1213184821 675088096 -381402664 + -703386773 59883766 -711451025 1640948178 + 1417854370 32868656 644481753 -1268824927 + -1380175048 1895416202 574489454 154158005 + -1918304011 -204796523 -734469036 400680589 + 5103190 624075437 -596690411 -1285112967 + 2111244731 -318083076 -269495340 1429528656 + 474601737 1277783648 -894177877 -578765142 + -1281997175 -651733918 1133053749 -186408248 + 1561449653 432220552 388551490 -1262827756 + -2144512146 1471877951 148957167 1581252722 + 1813552769 -1359072653 -1716099336 -1797210878 + 989657636 634415298 -1734158945 -256685798 + 1086075533 -1280513553 406068273 -708678475 + 1518191518 -1989649904 \ No newline at end of file From fc656620b2f01aab6a1c9ab59650c46ccf5fab18 Mon Sep 17 00:00:00 2001 From: Vladislav Kurochkin <94047003+kuroochkin@users.noreply.github.com> Date: Fri, 6 Oct 2023 11:48:09 +0000 Subject: [PATCH 04/12] Lab2 --- lab2/src/revert_string/librevstr.a | Bin 0 -> 1830 bytes lab2/src/revert_string/librevstrdin.so | Bin 0 -> 16120 bytes lab2/src/revert_string/result | Bin 0 -> 16952 bytes lab2/src/revert_string/resultdin | Bin 0 -> 16912 bytes lab2/src/revert_string/resultstatic | Bin 0 -> 16952 bytes lab2/src/revert_string/revert_string.c | 11 ++++++++++- lab2/src/revert_string/revert_string.o | Bin 0 -> 1680 bytes lab2/src/swap/result | Bin 0 -> 16808 bytes lab2/src/swap/swap.c | 4 +++- lab2/src/tests/Unittests | Bin 0 -> 17152 bytes lab2/src/tests/revert_string.h | 4 ++++ 11 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 lab2/src/revert_string/librevstr.a create mode 100755 lab2/src/revert_string/librevstrdin.so create mode 100755 lab2/src/revert_string/result create mode 100755 lab2/src/revert_string/resultdin create mode 100755 lab2/src/revert_string/resultstatic create mode 100644 lab2/src/revert_string/revert_string.o create mode 100755 lab2/src/swap/result create mode 100755 lab2/src/tests/Unittests create mode 100755 lab2/src/tests/revert_string.h diff --git a/lab2/src/revert_string/librevstr.a b/lab2/src/revert_string/librevstr.a new file mode 100644 index 0000000000000000000000000000000000000000..b3b84fe85912975c4f4fb8410a76313cbde09b03 GIT binary patch literal 1830 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 literal 0 HcmV?d00001 diff --git a/lab2/src/revert_string/result b/lab2/src/revert_string/result new file mode 100755 index 0000000000000000000000000000000000000000..b50c91dd4cba11a129c1eb225429c7a5a2a7b112 GIT binary patch literal 16952 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 T@LkFOzRi}^GHxh2xkT|FRO(-R literal 0 HcmV?d00001 diff --git a/lab2/src/revert_string/resultdin b/lab2/src/revert_string/resultdin new file mode 100755 index 0000000000000000000000000000000000000000..7279a58433ec68ccb146dd4153e3bd8f18e91ca8 GIT binary patch literal 16912 zcmeHOYit}>6~61u!+EWpCZSG3lOZ%x(#jhrB*qDt?D~~4I1duLEh5Qy?H${T_QmdO zYnMJ;T&k{87xx$WfrN|7o07ChC=oA52}vsfN&z*Dc+?~5~@1xCaEoDBR;N%w{5mH)eG9fD1w}Ul=2#Gqe1pcoT zYs5UD=fEdK#csSW4v!BO`UE*c6X-)o$Gsk5(>A-Fo zLyp2I`(ioCSl;>ArRR=c{Pp2OKREfR7rygOVB;%i)^i=`6Lm15J$Et6m|p}R)G@FB zG02%5;syQZ3B*$An^16DkwUz^l_ES=R!sjhC3vF*e@_YiXbB#Ny8<6~`YaH|+Vf%H z6}K|TdHAd=!VBonjDCOC$V6jF=tiNnw(r)WdPeV!Weq*kzPmA=O6u*AuDC8Vtv8WM zYFQ(aF*MCoEvmR*zhBQ72aHTC*^3^!ae&kc@Y0-I4Tc-+SGJ%`07Y&_2$$dB20`8|Lnq?c^GeSSG_;~}74@*?0x zz>9zv0WShx1iT3R&qUzQ6>Hv6hpv>XN9JDIB!v38F{7+-UL879ep+5*VOs|1slxg! zK*d^t`h8e3HTg!NP#BRiKA25SUa(|*K%AO9Wy$z}HZ}QzCF6tH)a0|4j1Oc}lh3dW z-VRA`O+xwu`DPHk&&W4i@>Q37*(Ja3l3%gQo3FO!FC13$zg35RcWqyL+wk1C;fmDZ zC67v|KLyPztauSj-WpMd>n}k@9iICOgzeMD3JBfPn1|3UD2!LE9Rzi8nh^BAA@#R? z8DZlsHGfS#_2y3X)U;pqomDT~GL}OHI#p0!81IqS$@UoE!Fntfxw|{mq51~Qs`<;t zV)aOU3kVZ0-zpR)q7b~ZbL&C&9Rgd+KiW?|0EL+806XYxCI9dhHJ=+FdiYA2u}(eG zJgy#rD$hb&uP=c|Xl(z)ccIo3U|0BKMrsU=!59Ipa}#+eQHRESn13Gg`R3^vl}gA? ztNB;4bT5`l@!Uk#%A=pJSbjcc@#iKgATPbY443dYHbeG*_};eR`d{89MEIW8{Hx)P z*8GiddpQ5M4t2Qt4A2MKHr~WBJhAB}_&aseZ>-(?8pXdYKh>6hvnl`kaAEmx)S=Tp zb^GhNKj8TO$FP}vfw`e?9zv0WSjo9}(dFc)b6P zmPgiJHN zyj?ZcP=ALA_YrmyrU?fLUFPp9mWNE0U5$-9lnotSxulU(wgXqs!Q<1(&lfz7 zoqW0A{&n&T1dj_Rzfkb_bMlLW5!X`ittXu=W=__1`0SesS`*i(=#353>c&2TpyM%|dp@ z%=^VEQCXDd*>1)L@8db*dSQk!b2yKdL8sKX;uavj)5X7!c%G-tT7>u@WPG;v@VwC? z`Pp$uP(9G%>lfXrL^`e;dNf#9Q@gpi5+2%!X^~7OGN9>6BQpR;H6jUJi{=uE z0Wh&i8fY30RXo}OP13ZM{o&osTJxSJJXqq?iwdpj6MMqDTN|Av@*E0Ka7IXLR;dQH zX}{2Rwe4*Pw`qG@S`IX~Ywh8Nwq~qV9x3V0=46ZIfs#Uc>bs8p&sW69cPsym>ozMkuE?ZV`3lY;INOLNsC}I zW$3})WG$-jUZ%$y(thelhwOL(9ruq#32mYDcPSvy^jWMUleL%$*jX1 zy`}}{!Br#?gUU>Eh^`32os)pOfp5Qm7x5b$rWE*YFjEyh_c8K%g^Hyv=MmozA6z4_ zJwInMDo|!mye?p_7BY7G`^Y~dzK60Wo==%;g^b;vpIaFfRwQ)W-wXWPu*Tr_^Ybku z`{#9-yZsTc$MaKc&(Fb(3I-Pvwh^;z&+DZaaCpgV&(F(@yv_p^nW#Dz#it>MYbdto z=W0gw!|i81#z(*&*JLd7^EabHp4{yxS`0%5W6JjYoX$8#itOKg{a+ya2GZkoC*z3C z9dZvwenNHk{})~M3fVEHsX7K%_2O$TdtOH{vVJN1<1YJAGGOdv zLqe{P5uXzr*U!(nge$mXT=rb;k6re>eqmg~iiGa?{en?0|? zo~#BE66=}LjLiH^D8RAH{&~H|=g~PZc>iHyJMRB)0f(1p+0*YlBlKXHMk8Bdd&YTS zY_}I7Qm!$P{csg*$MRw@MvndS^JFF2yYsj)Cb>;?p3bM~$6Q}4sQ z+bcE@YGgn;jA<&hYLKcnNd2%xThf0JNUd<J7gvzu@w(rfp zcivr}ONIEW+GpLpdB68Dvu|d{JGV36h_yEReLley5ML4~O@u5YLW=%vQ~(wcTf`Fh zUL|f2^Ff{`F-sq@7-%gz<9G6E!UMq3uNDgx_;nU6m~#t}qu*RKfeiv;F6cVYuL>0; zyZLvh9n4u@u1`T{AVq$c`6wCyF}M3+Qx4ThwK&w^a2X`Dae)73)&T&dnRwr4n_iWTwzx*S}?R-R6zqd^Ws6R*db! zI&e(wxT8Zrm@&jCjj}J6lZ^Ub{_d-PNPTOx{^?C`wx4{bab9tMJj*e#PP9Qne;yJj zV|gKb(8jv{N1;}>Dk!e3pu7h#r2@VPuuAsV%z>kACHu{D;03@H__#>{ zpi-R207sphJ`ccZH;6LyTNifIW|22?U3~+hFPF?1-6*B>j7Y~*sce_fw66ZR)}746 zQ^^N)5YbJ`8}Xc>rQ^wr=+5c7*wNb3xLw;2-Voj-w3harT0+n1J;}VG=h}B}Ph~TD zd%QD+?mg*jhTJvFw4$NapML07{9_55?UR2q(^Fw(@(R@NL?sZzOCxjBg8)yNH$McdW|ctuUeruY{>3!SgHpx^x~a+2Wf>nV zrzVe(0m)HNjrFi;& zwfK%Y^w+a(?X4qKPe2RRktH>fH5`TJm@9q@E*B1}BMl!zK^>`@Lbi3ih@HpU%Fu8J=wDNZJ4&kW zHPrj<>SHx8#Lge^55+F{hSJkM2zFa+`r+pe9y~eT9j;mR7*+-YC?dySbWiI@!$Y?S z5&cR_@y%#QOYx&pyxaV60mIHjRhY;#6z#!=~cj zqUQ2Ht3%^Hb?cuB@8SJ)@80Nr(Y?|8quO})Or4kqywi}&`>=fH$tHPUUIx4jcp30A z;AOzefR_O;16~Ha40sv%%rfAEw?G~Fc#pnKxjC=EOR{99M>DcoPXD@|GZukHAeK)%ww35pxx(+hR)11^H0 z=3woYYZg6FJt%Hpx$TxO+_V~D^uG^2hry2D1v73y;Sk_$2oPaiPr>IUsPB2iV!_Z8 z{_RWV`+p2AvfA=ffK|ArCms4nr5=8I5Wj)X80dA>HwQ!C^tS|SpAN)=%E-J}aLrRy zO~Lvn=BvRiLko5UBbnfqXs|vST+#v%Yc^wF9Ti%{y#Io`}=r5A1#;4d*>GOWz*sY-nU6Qu*~APUlWP<4PI-B z<$b>^N#^~7xc))Hbsf@2m(48l!?Y=n*CMCpAua z8M%o=v~Lez86)*uOs?Os$a@a2CcKw6Co(=t4dZr?ksa?zkCp^|Hy{=aQ(*chP4*{NfB``v#-3r-)Fr?YQg>L#IF!M9-R0>!Q;+}FA_XHojBaB z75XIrrzn()cu)*h#B0RCig>7eUc*`MQo-|q6NjDFiXE}a0kN#SAK$JGz}+}l(SAjF zesS7gC3s$O;#Z4G<2nGd1kVFbdzi%{cElsT z{qBc<1b#95epv<=b|vI(kp92%|DzivE-P_-Z30|zAeL}U;aI%Ai>|?LDsb9UD2H}Ep|tf1_w%i=5dFZ7pUyxTIkGw=8|Ld6- z>vWCFUQfi0I32Zds;pBuPRx3@uv=a;w`S%Dj?)&p2SQs%Y{1re-bPF0vs!OFlfbh$ zEq8)dBAL+&c^xt}bCH;PI{)L2-I>o*XnFWY)8Kdy=N`}fR6NY%JVWFRDZ=@Iv=Q$F zZsaW9%OyCDr04oXIFmK>a8ITX?#pHS;AP8z4eBf;;pka1K~S`@rOt@=2x;CM&-aRO zVju%mSlq~28hB-sPi8X?K?7Y*PsP!JN_{Cqgk?6uPz?8ELBv8{?-F4{?*|cwG+1Y4 ze}?s58pOQ`h{lo?!y3(&2bZC$csdEeEO*GR2*aI}hP$KEt@&v%{7(;44E(RKsFt1& zne%#v)Y6vA$Zv!Xt|8c;pGTQ1ptBRN8yLg$ZFc{=seb18p2|)EvLp^0tsUg{e;u^gf9zkcSmw-IEwTLV_J12RcK<=eGG)F7l{Vt>!_d1>z_kiZ zJLPo)pL2HGv&{S)_}19`dA)YH4nQEbv!ofBaeRKqvCH-Ix{lAS^Z9hV|B%>^`~Nw> z@Dkad*MEoTL9rK|Y{dS|=YzA|Uqr~b-r`&jhhRUJ7lSimTt7cwhREM-k9FB;Db-Kr zWflA5c6d9nzn$~gvD-x`;3!QD*MkyM!tLSt7k}U4w%h$n_>T#wJTY3L%oP=0A literal 0 HcmV?d00001 diff --git a/lab2/src/revert_string/revert_string.c b/lab2/src/revert_string/revert_string.c index e257bbe26..2844af2c3 100755 --- a/lab2/src/revert_string/revert_string.c +++ b/lab2/src/revert_string/revert_string.c @@ -1,7 +1,16 @@ #include "revert_string.h" +#include void RevertString(char *str) { - // your code here + int length = strlen(str); + int i, j; + char temp; + + for (i = 0, j = length - 1; i < j; i++, j--) { + temp = str[i]; + str[i] = str[j]; + str[j] = temp; + } } diff --git a/lab2/src/revert_string/revert_string.o b/lab2/src/revert_string/revert_string.o new file mode 100644 index 0000000000000000000000000000000000000000..03a3d0bfb753f4cf8287c73e7b1d80bbc3c4d33f GIT binary patch literal 1680 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 D!Q!pf literal 0 HcmV?d00001 diff --git a/lab2/src/swap/swap.c b/lab2/src/swap/swap.c index 38e97928c..06c687307 100755 --- a/lab2/src/swap/swap.c +++ b/lab2/src/swap/swap.c @@ -2,5 +2,7 @@ void Swap(char *left, char *right) { - // ваш код здесь + char temp = *right; + *right = *left; + *left = temp; } diff --git a/lab2/src/tests/Unittests b/lab2/src/tests/Unittests new file mode 100755 index 0000000000000000000000000000000000000000..c7a2eaca5196e63241f4c29fccf9a4e982223874 GIT binary patch literal 17152 zcmeHOeQ;FO6~CM1BPeWwg$h_@rP_fiOM-+3ZR&2wh8G(?lPI>}bF=%BY}t>n`&Nj9 zG){^`im}+SQ~%HowAOZ}Ez*BF=u{1Zg3eeAGqr=YwW-zVrYb@dhpMpso%`lT zf4;avOaVVhVph4|A}F=e$%;Z+sc<(a>CK@`5&8uS7EHN?L`kny(xzD@OhvWDlip;? zD&9#uWT6mDxjbK=mz0sb@;^_XQ~hIV*CXF(i!FJrp^&otai!0C#FE}drMFS(F|Ahe zOxd606Z+LFe>$lbWt6<~UkIn(My2PZO-i0A)j_H44Kwmt>RYGu+OM?iIBBZ|3#MG( zdgzf~K5gP*-k|C$H4cZAKbg{aQ(6*>b}nDGBoDKaxlxYAEX7m#&KE`GsqFIm-Rsleaz8os!292JzsfeKPLiQS`l?BJ zp6VeP>i=&4e#%x7_Bs40H3naL>xsXAf5!>q#rVrxH}WlG6*~Tpg1^Lp5xcbnPSb!F zKWBOqKruVJOW-F<;M35XVs`eIkiWSEUQ@!(q7pdWUS9m1=>ULY?fF3o{Hwsd_&HM} z>a7-YMYX@Mq(kEK#2g1c5BP#YQOUI^d8ZwL>oaBCkv3D2Xabj|&|BJ9>k%VmbVt*s zk!oMPGL}pj?V-+?A#}Yvo=oUzGn6uQ-4ZP-xWTx?NSSSBDw^n~8p4@G)TE2PR;=vM zqhO+;SoBUqx3p7z1cxFKJ)Mb~1~aCSHYwk2n7WZlB~!8>ordX_cyG*z8woRHMw1D` zJ45McSWiPVo{UHn7Lv*&bTX7Cp>WIyB{IF^)l%E2UCYrobSu0?5BF@*yF$?zfbjN^ z-W5&AmI`<%9Pb56D#``%P&6TQBN8%0DCkV5EgVoHB38AwG_KT_`j-0Y^7&lZ-)+O~ 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 literal 0 HcmV?d00001 diff --git a/lab2/src/tests/revert_string.h b/lab2/src/tests/revert_string.h new file mode 100755 index 000000000..fc1492fb0 --- /dev/null +++ b/lab2/src/tests/revert_string.h @@ -0,0 +1,4 @@ + +/* function to revert string */ +void RevertString(char *str); + From c160a798048c69e3b4f53d0b5f459ebf9b2fb250 Mon Sep 17 00:00:00 2001 From: Vladislav Kurochkin <94047003+kuroochkin@users.noreply.github.com> Date: Fri, 6 Oct 2023 11:51:12 +0000 Subject: [PATCH 05/12] =?UTF-8?q?=D0=A1=D0=B4=D0=B0=D0=BD=D0=B0=20=D0=B2?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B0=D1=8F=20=D0=BB=D0=B0=D0=B1=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab2/src/tests/revert_string.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lab2/src/tests/revert_string.h b/lab2/src/tests/revert_string.h index fc1492fb0..782a130f3 100755 --- a/lab2/src/tests/revert_string.h +++ b/lab2/src/tests/revert_string.h @@ -2,3 +2,5 @@ /* function to revert string */ void RevertString(char *str); + + From 3bb10a5bae5bb335c7dabdc24291d976e8b361e5 Mon Sep 17 00:00:00 2001 From: Vladislav Kurochkin <94047003+kuroochkin@users.noreply.github.com> Date: Thu, 19 Oct 2023 16:52:50 +0000 Subject: [PATCH 06/12] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab2/src/tests/Unit | Bin 0 -> 17152 bytes lab3/src/find_min_max.c | 10 +++++++++- lab3/src/sequential_min_max.c | 9 +++++++++ lab3/src/task1 | Bin 0 -> 17088 bytes 4 files changed, 18 insertions(+), 1 deletion(-) create mode 100755 lab2/src/tests/Unit create mode 100755 lab3/src/task1 diff --git a/lab2/src/tests/Unit b/lab2/src/tests/Unit new file mode 100755 index 0000000000000000000000000000000000000000..c7a2eaca5196e63241f4c29fccf9a4e982223874 GIT binary patch literal 17152 zcmeHOeQ;FO6~CM1BPeWwg$h_@rP_fiOM-+3ZR&2wh8G(?lPI>}bF=%BY}t>n`&Nj9 zG){^`im}+SQ~%HowAOZ}Ez*BF=u{1Zg3eeAGqr=YwW-zVrYb@dhpMpso%`lT zf4;avOaVVhVph4|A}F=e$%;Z+sc<(a>CK@`5&8uS7EHN?L`kny(xzD@OhvWDlip;? zD&9#uWT6mDxjbK=mz0sb@;^_XQ~hIV*CXF(i!FJrp^&otai!0C#FE}drMFS(F|Ahe zOxd606Z+LFe>$lbWt6<~UkIn(My2PZO-i0A)j_H44Kwmt>RYGu+OM?iIBBZ|3#MG( zdgzf~K5gP*-k|C$H4cZAKbg{aQ(6*>b}nDGBoDKaxlxYAEX7m#&KE`GsqFIm-Rsleaz8os!292JzsfeKPLiQS`l?BJ zp6VeP>i=&4e#%x7_Bs40H3naL>xsXAf5!>q#rVrxH}WlG6*~Tpg1^Lp5xcbnPSb!F zKWBOqKruVJOW-F<;M35XVs`eIkiWSEUQ@!(q7pdWUS9m1=>ULY?fF3o{Hwsd_&HM} z>a7-YMYX@Mq(kEK#2g1c5BP#YQOUI^d8ZwL>oaBCkv3D2Xabj|&|BJ9>k%VmbVt*s zk!oMPGL}pj?V-+?A#}Yvo=oUzGn6uQ-4ZP-xWTx?NSSSBDw^n~8p4@G)TE2PR;=vM zqhO+;SoBUqx3p7z1cxFKJ)Mb~1~aCSHYwk2n7WZlB~!8>ordX_cyG*z8woRHMw1D` zJ45McSWiPVo{UHn7Lv*&bTX7Cp>WIyB{IF^)l%E2UCYrobSu0?5BF@*yF$?zfbjN^ z-W5&AmI`<%9Pb56D#``%P&6TQBN8%0DCkV5EgVoHB38AwG_KT_`j-0Y^7&lZ-)+O~ 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 literal 0 HcmV?d00001 diff --git a/lab3/src/find_min_max.c b/lab3/src/find_min_max.c index 6662a8fba..fb1dadc9c 100755 --- a/lab3/src/find_min_max.c +++ b/lab3/src/find_min_max.c @@ -7,6 +7,14 @@ struct MinMax GetMinMax(int *array, unsigned int begin, unsigned int end) { min_max.min = INT_MAX; min_max.max = INT_MIN; - // your code here + for (unsigned int i = begin; i <= end; i++) { + if (array[i] < min_max.min) { + min_max.min = array[i]; + } + if (array[i] > min_max.max) { + min_max.max = array[i]; + } + } + return min_max; } diff --git a/lab3/src/sequential_min_max.c b/lab3/src/sequential_min_max.c index e6bd2d866..3e5978e98 100755 --- a/lab3/src/sequential_min_max.c +++ b/lab3/src/sequential_min_max.c @@ -10,21 +10,30 @@ int main(int argc, char **argv) { return 1; } + //преобразует аргумент seed в целое число и проверяет, что оно положительно. int seed = atoi(argv[1]); if (seed <= 0) { printf("seed is a positive number\n"); return 1; } + //Преобразует аргумент arraysize в целое число и проверяет, что оно положительно. int array_size = atoi(argv[2]); if (array_size <= 0) { printf("array_size is a positive number\n"); return 1; } + //Выделяет память для массива array размером arraysize элементов с int *array = malloc(array_size * sizeof(int)); + + //Генерирует массив с помощью функции GenerateArray, используя переданный seed. GenerateArray(array, array_size, seed); + + //Вызывает функцию GetMinMax для нахождения минимального и максимального элементов struct MinMax min_max = GetMinMax(array, 0, array_size); + + //Освобождает память, выделенную для массива array. free(array); printf("min: %d\n", min_max.min); diff --git a/lab3/src/task1 b/lab3/src/task1 new file mode 100755 index 0000000000000000000000000000000000000000..391947ccf943bb4e56e1b1b1d38d567d6e48ea55 GIT binary patch literal 17088 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 MOo=rP1qaLi1))Cz*Z=?k literal 0 HcmV?d00001 From a692bb3d405805b4d96881345728875ed6db5727 Mon Sep 17 00:00:00 2001 From: Vladislav Kurochkin <94047003+kuroochkin@users.noreply.github.com> Date: Thu, 19 Oct 2023 18:37:30 +0000 Subject: [PATCH 07/12] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=20Ma?= =?UTF-8?q?kefile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab3/src/makefile | 15 +++++ lab3/src/minmax_0.txt | 1 + lab3/src/minmax_1.txt | 1 + lab3/src/minmax_2.txt | 1 + lab3/src/minmax_3.txt | 1 + lab3/src/parallel_min_max.c | 109 ++++++++++++++++++++++++++++++++++-- lab3/src/task3 | Bin 0 -> 18072 bytes 7 files changed, 123 insertions(+), 5 deletions(-) create mode 100644 lab3/src/minmax_0.txt create mode 100644 lab3/src/minmax_1.txt create mode 100644 lab3/src/minmax_2.txt create mode 100644 lab3/src/minmax_3.txt create mode 100755 lab3/src/task3 diff --git a/lab3/src/makefile b/lab3/src/makefile index 1538d9699..959664279 100755 --- a/lab3/src/makefile +++ b/lab3/src/makefile @@ -15,3 +15,18 @@ find_min_max.o : utils.h find_min_max.h clean : rm utils.o find_min_max.o sequential_min_max parallel_min_max + +task4: sequential_min_max + $(CC) -o task4 task4.c + ./task4 + + +# Запуск 2-3 задания +make build_bin: + $(CC) find_min_max.c parallel_min_max.c utils.c -o task3 + +make up_by_files: build_bin + ./task3 --seed 2 --array_size 1000 --pnum 4 --by_files + +make up_by_pipes: build_bin + ./task3 --seed 2 --array_size 1000 --pnum 4 diff --git a/lab3/src/minmax_0.txt b/lab3/src/minmax_0.txt new file mode 100644 index 000000000..aefbfe793 --- /dev/null +++ b/lab3/src/minmax_0.txt @@ -0,0 +1 @@ +11719343 2139613154 diff --git a/lab3/src/minmax_1.txt b/lab3/src/minmax_1.txt new file mode 100644 index 000000000..db23ac8c3 --- /dev/null +++ b/lab3/src/minmax_1.txt @@ -0,0 +1 @@ +19296505 2145219718 diff --git a/lab3/src/minmax_2.txt b/lab3/src/minmax_2.txt new file mode 100644 index 000000000..1ab8ee138 --- /dev/null +++ b/lab3/src/minmax_2.txt @@ -0,0 +1 @@ +4344352 2144848934 diff --git a/lab3/src/minmax_3.txt b/lab3/src/minmax_3.txt new file mode 100644 index 000000000..b770ed712 --- /dev/null +++ b/lab3/src/minmax_3.txt @@ -0,0 +1 @@ +6966532 2146294955 diff --git a/lab3/src/parallel_min_max.c b/lab3/src/parallel_min_max.c index acb35ec64..cb4b72b55 100755 --- a/lab3/src/parallel_min_max.c +++ b/lab3/src/parallel_min_max.c @@ -42,22 +42,34 @@ int main(int argc, char **argv) { seed = atoi(optarg); // your code here // error handling + if (seed <= 0) { + printf("seed is a positive number\n"); + return 1; + } break; case 1: array_size = atoi(optarg); // your code here // error handling + if (array_size <= 0) { + printf("array_size is a positive number\n"); + return 1; + } break; case 2: pnum = atoi(optarg); // your code here // error handling + if (pnum <= 0) { + printf("pnum is a positive number\n"); + return 1; + } break; case 3: with_files = true; break; - defalut: + default: printf("Index %d is out of options\n", option_index); } break; @@ -84,13 +96,29 @@ int main(int argc, char **argv) { return 1; } + // Выделение памяти для массива int *array = malloc(sizeof(int) * array_size); + // Генерация значений GenerateArray(array, array_size, seed); + // Инициализация активных дочерних процессов int active_child_processes = 0; struct timeval start_time; gettimeofday(&start_time, NULL); + // Создаем каналы синхронизации процессов + int **pipes = malloc(pnum * sizeof(int *)); + for (int i = 0; i < pnum; i++) { + pipes[i] = malloc(2 * sizeof(int)); + } + + for (int i = 0; i < pnum; i++) { + if (pipe(pipes[i]) == -1) { + perror("pipe"); + return 1; + } + } + for (int i = 0; i < pnum; i++) { pid_t child_pid = fork(); if (child_pid >= 0) { @@ -98,13 +126,42 @@ int main(int argc, char **argv) { active_child_processes += 1; if (child_pid == 0) { // child process - + + // Определяем размер подмассива + int mini_array_size = array_size / pnum; + int begin = i * mini_array_size; + int end; + + if (i == pnum - 1) { + end = array_size - 1; + } else { + end = (i + 1) * mini_array_size; + } // parallel somehow + struct MinMax array_minmax = GetMinMax(array, begin, end); + + + // Создание файлов и запись в них результатов каждого дочернего процесса if (with_files) { // use files here + char filename[256]; + snprintf(filename, sizeof(filename), "minmax_%d.txt", i); + + FILE *file = fopen(filename, "w"); + if (file == NULL) { + perror("fopen"); + return 1; + } + + fprintf(file, "%d %d\n", array_minmax.min, array_minmax.max); + + fclose(file); } else { // use pipe here + close(pipes[i][0]); // Закрыть чтение из pipe + write(pipes[i][1], &array_minmax, sizeof(struct MinMax)); + close(pipes[i][1]); // Закрыть запись в pipe } return 0; } @@ -115,10 +172,22 @@ int main(int argc, char **argv) { } } + // Пока есть активные процессы while (active_child_processes > 0) { // your code here + int status; + pid_t finished_pid = wait(&status); + + if (finished_pid > 0) { + active_child_processes -= 1; - active_child_processes -= 1; + if (WIFEXITED(status)) { + int exit_status = WEXITSTATUS(status); + } + } else { + perror("wait"); + return 1; + } } struct MinMax min_max; @@ -131,12 +200,38 @@ int main(int argc, char **argv) { if (with_files) { // read from files + char filename[256]; + snprintf(filename, sizeof(filename), "minmax_%d.txt", i); + + // Открытие файла для чтения + FILE *file = fopen(filename, "r"); + if (file == NULL) { + perror("fopen"); + return 1; // Обработка ошибки открытия файла + } + + // Чтение минимума и максимума из файла + int min, max; + fscanf(file, "%d %d", &min, &max); + + // Закрытие файла + fclose(file); + + // Сравнение с глобальным минимумом и максимумом + if (min < min_max.min) min_max.min = min; + if (max > min_max.max) min_max.max = max; + } else { // read from pipes + close(pipes[i][1]); // Закрыть запись в pipe + struct MinMax array_minmax; + read(pipes[i][0], &array_minmax, sizeof(struct MinMax)); + close(pipes[i][0]); // Закрыть чтение из pipe + + if (array_minmax.min < min_max.min) min_max.min = array_minmax.min; + if (array_minmax.max > min_max.max) min_max.max = array_minmax.max; } - if (min < min_max.min) min_max.min = min; - if (max > min_max.max) min_max.max = max; } struct timeval finish_time; @@ -145,6 +240,10 @@ int main(int argc, char **argv) { double elapsed_time = (finish_time.tv_sec - start_time.tv_sec) * 1000.0; elapsed_time += (finish_time.tv_usec - start_time.tv_usec) / 1000.0; + for (int i = 0; i < pnum; i++) { + free(pipes[i]); + } + free(pipes); free(array); printf("Min: %d\n", min_max.min); diff --git a/lab3/src/task3 b/lab3/src/task3 new file mode 100755 index 0000000000000000000000000000000000000000..6cdcc6261fb06d46bcc7f861ce2753ce134b0e80 GIT binary patch literal 18072 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 literal 0 HcmV?d00001 From 061f063f9ba21c617397448227e072e2acdae107 Mon Sep 17 00:00:00 2001 From: Vladislav Kurochkin <94047003+kuroochkin@users.noreply.github.com> Date: Thu, 19 Oct 2023 20:33:17 +0000 Subject: [PATCH 08/12] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20makefile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab4/src/Makefile | 18 +++ lab4/src/find_min_max.c | 20 +++ lab4/src/find_min_max.h | 8 ++ lab4/src/find_min_max.o | Bin 0 -> 1528 bytes lab4/src/parallel_min_max.c | 276 ++++++++++++++++++++++++++++++++++++ lab4/src/utils.c | 10 ++ lab4/src/utils.h | 11 ++ lab4/src/utils.o | Bin 0 -> 1680 bytes 8 files changed, 343 insertions(+) create mode 100644 lab4/src/Makefile create mode 100755 lab4/src/find_min_max.c create mode 100755 lab4/src/find_min_max.h create mode 100644 lab4/src/find_min_max.o create mode 100755 lab4/src/parallel_min_max.c create mode 100755 lab4/src/utils.c create mode 100755 lab4/src/utils.h create mode 100644 lab4/src/utils.o diff --git a/lab4/src/Makefile b/lab4/src/Makefile new file mode 100644 index 000000000..95fd61e69 --- /dev/null +++ b/lab4/src/Makefile @@ -0,0 +1,18 @@ +CC=gcc +CFLAGS=-I. + +up_parallel_min_max: + ./parallel_min_max --seed 2 --array_size 1000 --pnum 4 --timeout 10 + +utils.o : utils.h + $(CC) -o utils.o -c utils.c $(CFLAGS) + +find_min_max.o : utils.h find_min_max.h + $(CC) -o find_min_max.o -c find_min_max.c $(CFLAGS) + +parallel_min_max : utils.h find_min_max.h + $(CC) -o parallel_min_max utils.o find_min_max.o parallel_min_max.c $(CFLAGS) + +clean : + rm utils.o find_min_max.o parallel_min_max + diff --git a/lab4/src/find_min_max.c b/lab4/src/find_min_max.c new file mode 100755 index 000000000..fb1dadc9c --- /dev/null +++ b/lab4/src/find_min_max.c @@ -0,0 +1,20 @@ +#include "find_min_max.h" + +#include + +struct MinMax GetMinMax(int *array, unsigned int begin, unsigned int end) { + struct MinMax min_max; + min_max.min = INT_MAX; + min_max.max = INT_MIN; + + for (unsigned int i = begin; i <= end; i++) { + if (array[i] < min_max.min) { + min_max.min = array[i]; + } + if (array[i] > min_max.max) { + min_max.max = array[i]; + } + } + + return min_max; +} diff --git a/lab4/src/find_min_max.h b/lab4/src/find_min_max.h new file mode 100755 index 000000000..07892028c --- /dev/null +++ b/lab4/src/find_min_max.h @@ -0,0 +1,8 @@ +#ifndef FIND_MIN_MAX_H +#define FIND_MIN_MAX_H + +#include "utils.h" + +struct MinMax GetMinMax(int *array, unsigned int begin, unsigned int end); + +#endif diff --git a/lab4/src/find_min_max.o b/lab4/src/find_min_max.o new file mode 100644 index 0000000000000000000000000000000000000000..091636729e0c4299c89594d26fe290d79743917b GIT binary patch literal 1528 zcmbtTL2DCH5T4D}R%_K&3W^npCl%~tTPhd@34~|%U_A(dUP{=c+a~C4N_Hb#p{*ba zOAvDL>Ti*H=+$2!Jya-oQOqGoAkJ*wOJCOQr4G!_%=hMd^Jd=LUH->qo-C~6%>rGtIm8w>`!`@D~7Z`%AY;@uy$Ht$*= zX5SIhYV#vY``R|zyqDYCzM8TG5$~nI$mr+xc1~dQ-}0`8tVjIdRR@doR=+^8PwJQpq0(BC1%bqwBl%CXVGNl5?j1G#N(a-CeRwFXHbjJN`P&DCQL^qnH?I?UOxvd zG_<*ysk0p%*bT% z$K8x$6zMSeFBs!fC*U-RaiLjVQO+6nPAThkZ>{Xsy|QbEtO`XZSgw1^b|~msVX2d` zZkWI226hFQA2f%yCcVH317K@*U<0f8KCo)TbsY~euMs#5uWQ~9?CJ{Km5l$xmjlLC}!RN5oSCoFk)2*HY|f1LtF V#I_^kGJ0wJj^J;MGKWr*{}&ZwlrjJS literal 0 HcmV?d00001 diff --git a/lab4/src/parallel_min_max.c b/lab4/src/parallel_min_max.c new file mode 100755 index 000000000..7c4e1fce1 --- /dev/null +++ b/lab4/src/parallel_min_max.c @@ -0,0 +1,276 @@ +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include "find_min_max.h" +#include "utils.h" + +void Killing(int sig){ + kill(-1, SIGKILL); + printf("TIMEOUT\n"); +} + +int main(int argc, char **argv) { + int seed = -1; + int array_size = -1; + int timeout = -1; + int pnum = -1; + bool with_files = false; + + while (true) { + int current_optind = optind ? optind : 1; + + static struct option options[] = {{"seed", required_argument, 0, 0}, + {"array_size", required_argument, 0, 0}, + {"pnum", required_argument, 0, 0}, + {"by_files", no_argument, 0, 'f'}, + {"timeout", required_argument, 0, 0}, + {0, 0, 0, 0}}; + + int option_index = 0; + int c = getopt_long(argc, argv, "f", options, &option_index); + + if (c == -1) break; + + switch (c) { + case 0: + switch (option_index) { + case 0: + seed = atoi(optarg); + // your code here + // error handling + if (seed <= 0) { + printf("seed is a positive number\n"); + return 1; + } + break; + case 1: + array_size = atoi(optarg); + // your code here + // error handling + if (array_size <= 0) { + printf("array_size is a positive number\n"); + return 1; + } + break; + case 2: + pnum = atoi(optarg); + // your code here + // error handling + if (pnum <= 0) { + printf("pnum is a positive number\n"); + return 1; + } + break; + case 3: + with_files = true; + break; + + case 4: + timeout = atoi(optarg); + if (timeout <= 0){ + printf("timeout must be a positive number\n"); + return 1; + } + break; + + default: + printf("Index %d is out of options\n", option_index); + } + break; + case 'f': + with_files = true; + break; + + case '?': + break; + + default: + printf("getopt returned character code 0%o?\n", c); + } + } + + if (optind < argc) { + printf("Has at least one no option argument\n"); + return 1; + } + + if (seed == -1 || array_size == -1 || pnum == -1) { + printf("Usage: %s --seed \"num\" --array_size \"num\" --pnum \"num\" \n", + argv[0]); + return 1; + } + + // Выделение памяти для массива + int *array = malloc(sizeof(int) * array_size); + // Генерация значений + GenerateArray(array, array_size, seed); + // Инициализация активных дочерних процессов + int active_child_processes = 0; + + struct timeval start_time; + gettimeofday(&start_time, NULL); + + // Создаем каналы синхронизации процессов + int **pipes = malloc(pnum * sizeof(int *)); + for (int i = 0; i < pnum; i++) { + pipes[i] = malloc(2 * sizeof(int)); + } + + for (int i = 0; i < pnum; i++) { + if (pipe(pipes[i]) == -1) { + perror("pipe"); + return 1; + } + } + + for (int i = 0; i < pnum; i++) { + pid_t child_pid = fork(); + if (child_pid >= 0) { + // successful fork + active_child_processes += 1; + if (child_pid == 0) { + // child process + + // Определяем размер подмассива + int mini_array_size = array_size / pnum; + int begin = i * mini_array_size; + int end; + + if (i == pnum - 1) { + end = array_size - 1; + } else { + end = (i + 1) * mini_array_size; + } + // parallel somehow + + struct MinMax array_minmax = GetMinMax(array, begin, end); + + + // Создание файлов и запись в них результатов каждого дочернего процесса + if (with_files) { + // use files here + char filename[256]; + snprintf(filename, sizeof(filename), "minmax_%d.txt", i); + + FILE *file = fopen(filename, "w"); + if (file == NULL) { + perror("fopen"); + return 1; + } + + fprintf(file, "%d %d\n", array_minmax.min, array_minmax.max); + + fclose(file); + } else { + // use pipe here + close(pipes[i][0]); // Закрыть чтение из pipe + write(pipes[i][1], &array_minmax, sizeof(struct MinMax)); + close(pipes[i][1]); // Закрыть запись в pipe + } + return 0; + } + + } else { + printf("Fork failed!\n"); + return 1; + } + } + + //Вызов Killing + if(timeout>0) + { + signal(SIGALRM, Killing); + alarm(timeout); + } + + // Пока есть активные процессы + while (active_child_processes > 0) { + // your code here + int status; + pid_t finished_pid = wait(&status); + + if (finished_pid > 0) { + active_child_processes -= 1; + + if (WIFEXITED(status)) { + int exit_status = WEXITSTATUS(status); + } + } else { + perror("wait"); + return 1; + } + } + + struct MinMax min_max; + min_max.min = INT_MAX; + min_max.max = INT_MIN; + + for (int i = 0; i < pnum; i++) { + int min = INT_MAX; + int max = INT_MIN; + + if (with_files) { + // read from files + char filename[256]; + snprintf(filename, sizeof(filename), "minmax_%d.txt", i); + + // Открытие файла для чтения + FILE *file = fopen(filename, "r"); + if (file == NULL) { + perror("fopen"); + return 1; // Обработка ошибки открытия файла + } + + // Чтение минимума и максимума из файла + int min, max; + fscanf(file, "%d %d", &min, &max); + + // Закрытие файла + fclose(file); + + // Сравнение с глобальным минимумом и максимумом + if (min < min_max.min) min_max.min = min; + if (max > min_max.max) min_max.max = max; + + } else { + // read from pipes + close(pipes[i][1]); // Закрыть запись в pipe + struct MinMax array_minmax; + read(pipes[i][0], &array_minmax, sizeof(struct MinMax)); + close(pipes[i][0]); // Закрыть чтение из pipe + + if (array_minmax.min < min_max.min) min_max.min = array_minmax.min; + if (array_minmax.max > min_max.max) min_max.max = array_minmax.max; + } + + } + + struct timeval finish_time; + gettimeofday(&finish_time, NULL); + + double elapsed_time = (finish_time.tv_sec - start_time.tv_sec) * 1000.0; + elapsed_time += (finish_time.tv_usec - start_time.tv_usec) / 1000.0; + + for (int i = 0; i < pnum; i++) { + free(pipes[i]); + } + free(pipes); + free(array); + + printf("Min: %d\n", min_max.min); + printf("Max: %d\n", min_max.max); + printf("Elapsed time: %fms\n", elapsed_time); + fflush(NULL); + return 0; +} diff --git a/lab4/src/utils.c b/lab4/src/utils.c new file mode 100755 index 000000000..d1650659d --- /dev/null +++ b/lab4/src/utils.c @@ -0,0 +1,10 @@ +#include "utils.h" + +#include +#include +void GenerateArray(int *array, unsigned int array_size, unsigned int seed) { + srand(seed); + for (int i = 0; i < array_size; i++) { + array[i] = rand(); + } +} diff --git a/lab4/src/utils.h b/lab4/src/utils.h new file mode 100755 index 000000000..f0c6c9456 --- /dev/null +++ b/lab4/src/utils.h @@ -0,0 +1,11 @@ +#ifndef UTILS_H +#define UTILS_H + +struct MinMax { + int min; + int max; +}; + +void GenerateArray(int *array, unsigned int array_size, unsigned int seed); + +#endif diff --git a/lab4/src/utils.o b/lab4/src/utils.o new file mode 100644 index 0000000000000000000000000000000000000000..53c641244b865605fbaf6e710300521a96893a5d GIT binary patch literal 1680 zcmbtT&1(};5TDJ~){j)96ck!z4(VdB~|Xp=~OY`yl9`_G#W+csOPU$}>}M z7{i|bVJXO^Hx=G^7BLdBAK&wHg-v=E56vu#Cn$S-C}|F!M@@aiOS#7JTO1F+(2qPG zR#YP>chI4l|H{uGmuiZ8qUnj~PxXT$`U|~;L172;`avgPhjSlbjQ*;TH-!E^=O|nY zCFUpmDjHNX%s=J{S+0c&^EWUMwZDB{Q0$5JM_j=dcvNrdmE<3Kk8Ap;=-&_X2@CHI dA$ZFB-z6s?yxb{r8LcS(SI)1WX8J~${|C>DkXir$ literal 0 HcmV?d00001 From 34883a6434737609fd8f969d703a7474919cf620 Mon Sep 17 00:00:00 2001 From: Vladislav Kurochkin <94047003+kuroochkin@users.noreply.github.com> Date: Fri, 3 Nov 2023 11:19:04 +0000 Subject: [PATCH 09/12] Complete lab4 --- lab3/src/find_min_max.o | Bin 0 -> 1528 bytes lab3/src/{task1 => sequential_min_max} | Bin 17088 -> 17088 bytes lab3/src/utils.o | Bin 0 -> 1680 bytes lab4/src/Makefile | 25 ++++++ lab4/src/Summa.c | 8 ++ lab4/src/Summa.h | 8 ++ lab4/src/Summa.o | Bin 0 -> 1432 bytes lab4/src/parallel_min_max | Bin 0 -> 22440 bytes lab4/src/parallel_min_max.c | 22 +++--- lab4/src/parallel_sum.c | 103 ++++++++++++++++++------- lab4/src/process_memory | Bin 0 -> 17240 bytes lab4/src/psum | Bin 0 -> 17624 bytes lab4/src/zombie | Bin 0 -> 16872 bytes lab4/src/zombie.c | 29 +++++++ 14 files changed, 156 insertions(+), 39 deletions(-) create mode 100644 lab3/src/find_min_max.o rename lab3/src/{task1 => sequential_min_max} (91%) create mode 100644 lab3/src/utils.o create mode 100644 lab4/src/Summa.c create mode 100644 lab4/src/Summa.h create mode 100644 lab4/src/Summa.o create mode 100755 lab4/src/parallel_min_max create mode 100755 lab4/src/process_memory create mode 100755 lab4/src/psum create mode 100755 lab4/src/zombie create mode 100755 lab4/src/zombie.c diff --git a/lab3/src/find_min_max.o b/lab3/src/find_min_max.o new file mode 100644 index 0000000000000000000000000000000000000000..091636729e0c4299c89594d26fe290d79743917b GIT binary patch literal 1528 zcmbtTL2DCH5T4D}R%_K&3W^npCl%~tTPhd@34~|%U_A(dUP{=c+a~C4N_Hb#p{*ba zOAvDL>Ti*H=+$2!Jya-oQOqGoAkJ*wOJCOQr4G!_%=hMd^Jd=LUH->qo-C~6%>rGtIm8w>`!`@D~7Z`%AY;@uy$Ht$*= zX5SIhYV#vY``R|zyqDYCzM8TG5$~nI$mr+xc1~dQ-}0`8tVjIdRR@doR=+^8PwJQpq0(BC1%bqwBl%CXVGNl5?j1G#N(a-CeRwFXHbjJN`P&DCQL^qnH?I?UOxvd zG_<*ysk0p%*bT% z$K8x$6zMSeFBs!fC*U-RaiLjVQO+6nPAThkZ>{Xsy|QbEtO`XZSgw1^b|~msVX2d` zZkWI226hFQA2f%yCcVH317K@*U<0f8KCo)TbsY~euMs#5uWQ~9?CJ{Km5l$xmjlLC}!RN5oSCoFk)2*HY|f1LtF V#I_^kGJ0wJj^J;MGKWr*{}&ZwlrjJS literal 0 HcmV?d00001 diff --git a/lab3/src/task1 b/lab3/src/sequential_min_max similarity index 91% rename from lab3/src/task1 rename to lab3/src/sequential_min_max index 391947ccf943bb4e56e1b1b1d38d567d6e48ea55..0d99fda0324ba921220f35eeaebb92fcea0b8037 100755 GIT binary patch delta 428 zcmX@m%6OoaaYF{Ph({Rv@kx`ynb+^`_}8HL(d7C3g7nQb%qMu6b}>$N6Ff87PkrxnNvuO=ME18!wv=@crokm zWNRU5@wI<}8eCsA*S=t=7xU<~-49goBI57lT%cSvSnf@8?Hh)AVW8Yg|AX9-XcqxFxac;ZDA>U#52xwz%eR2cWZ;+ItSeH@!)yHM|NlQgejkul znY>kD`Q#c!3AQyr5&e&oXDQ0b%K({IfH>*n|NrugK!z)yKpT@YFB`KMBM&>r=Ix4% zLX68NKQt0&T)+9EaXupxr_f|4(|1hEg(e%B^)WFCZ$4xu$0(MTnU@luo0%7%n^>Wj W%urgAnNzHnJo&!4*k&G!EnEP7d9tVg delta 456 zcmX@m%6OoaaYF{PNb8nE?nN3w-F{iwM=M`kh`K7wZMC_E`2;W1L59h0f@dak3(MAD z;ZTQ3BTSrn&YFL%lFi#}beZd6(VdB~|Xp=~OY`yl9`_G#W+csOPU$}>}M z7{i|bVJXO^Hx=G^7BLdBAK&wHg-v=E56vu#Cn$S-C}|F!M@@aiOS#7JTO1F+(2qPG zR#YP>chI4l|H{uGmuiZ8qUnj~PxXT$`U|~;L172;`avgPhjSlbjQ*;TH-!E^=O|nY zCFUpmDjHNX%s=J{S+0c&^EWUMwZDB{Q0$5JM_j=dcvNrdmE<3Kk8Ap;=-&_X2@CHI dA$ZFB-z6s?yxb{r8LcS(SI)1WX8J~${|C>DkXir$ literal 0 HcmV?d00001 diff --git a/lab4/src/Makefile b/lab4/src/Makefile index 95fd61e69..0d1377f68 100644 --- a/lab4/src/Makefile +++ b/lab4/src/Makefile @@ -1,12 +1,37 @@ CC=gcc CFLAGS=-I. +task1: + ./parallel_min_max --seed 42 --array_size 100 --pnum 5 --timeout 20 + +zombie: zombie.c + $(CC) -o zombie zombie.c + +zombie_print: + ./zombie & + ps -l + +cleanzombie: + rm zombie + +process_memory : process_memory.c + $(CC) -o process_memory process_memory.c $(CFLAGS) + +psum : Summa.o utils.o Summa.h utils.h + $(CC) -o psum utils.o Summa.o parallel_sum.c -lpthread $(CFLAGS) + +psum_print: psum + ./psum --seed 4 --array_size 1000 --threads_num 4 + up_parallel_min_max: ./parallel_min_max --seed 2 --array_size 1000 --pnum 4 --timeout 10 utils.o : utils.h $(CC) -o utils.o -c utils.c $(CFLAGS) +Summa.o : Summa.h + $(CC) -o Summa.o -c Summa.c $(CFLAGS) + find_min_max.o : utils.h find_min_max.h $(CC) -o find_min_max.o -c find_min_max.c $(CFLAGS) diff --git a/lab4/src/Summa.c b/lab4/src/Summa.c new file mode 100644 index 000000000..e5801f79a --- /dev/null +++ b/lab4/src/Summa.c @@ -0,0 +1,8 @@ +#include "Summa.h" + +int Sum(const struct SumArgs *args) { + int sum = 0; + for(int i=args->begin;iend;i++) + sum+=*(args->array+i); + return sum; +} \ No newline at end of file diff --git a/lab4/src/Summa.h b/lab4/src/Summa.h new file mode 100644 index 000000000..f89928b8d --- /dev/null +++ b/lab4/src/Summa.h @@ -0,0 +1,8 @@ +struct SumArgs { + int *array; + int begin; + int end; +}; + + +int Sum(const struct SumArgs *args); \ No newline at end of file diff --git a/lab4/src/Summa.o b/lab4/src/Summa.o new file mode 100644 index 0000000000000000000000000000000000000000..5aaa320c22c3db954ad1e5cfd8fa3900a668549d GIT binary patch literal 1432 zcmbtTOKTKC5U!qy$*LP&gNKDgSx+jMW)dPK9%NwcWDe>oyA)FY@HH(P*X9uQ`ulAJCKu!pyR?bX`rxESZlp2Vxou6hBqsWHoKfxTI`3p`rF)2qeoYUsa&rT(` z(=haThb)B+T2N^6iRpQ~A0~bqc$`Fq-BDf=>?OeO`H2s_9ml{sy)X>Ah;@5O!141e z#);p#FXQcQ%6FsQZV)B=z@y-S&x4)2Tah0I`PTon%p;q=m3d>X>^eHPjHyx|u{&~#PGx}HlCFD|12UQofKjn2%`zw1HlgiiYUh9G8o3#RS^r|MlJ;n#9 zB#nF>FXk_^i7D!7@;^z+sjDX->sgc-h`Wsmp_YqX6X? kD)lh=gqhzCA*jgxXDQG`wjCj-&@1CRlD|EwEF6>n8`c17$^ZZW literal 0 HcmV?d00001 diff --git a/lab4/src/parallel_min_max b/lab4/src/parallel_min_max new file mode 100755 index 0000000000000000000000000000000000000000..ddba34ad6dae03b5fa8419b7999fac2ac98744bf GIT binary patch literal 22440 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 literal 0 HcmV?d00001 diff --git a/lab4/src/parallel_min_max.c b/lab4/src/parallel_min_max.c index 7c4e1fce1..c28f709f0 100755 --- a/lab4/src/parallel_min_max.c +++ b/lab4/src/parallel_min_max.c @@ -15,9 +15,13 @@ #include "find_min_max.h" #include "utils.h" -void Killing(int sig){ - kill(-1, SIGKILL); - printf("TIMEOUT\n"); +pid_t child_pid; // Идентификатор дочернего процесса +volatile bool child_exited = false; // Флаг, указывающий на завершение дочернего процесса + +// Обработчик сигнала SIGALRM (вызывается по истечению таймаута) +void alarm_handler(int signum) { + printf("Таймаут истек. Отправляем SIGKILL дочернему процессу...\n"); + kill(child_pid, SIGKILL); // Отправляем сигнал SIGKILL дочернему процессу } int main(int argc, char **argv) { @@ -134,6 +138,11 @@ int main(int argc, char **argv) { } } + if (timeout > 0) { // Если таймаут задан, устанавливаем таймаут с использованием функции alarm + signal(SIGALRM, alarm_handler); // Устанавливаем обработчик сигнала SIGALRM + alarm(timeout); // Устанавливаем таймаут (в секундах) + } + for (int i = 0; i < pnum; i++) { pid_t child_pid = fork(); if (child_pid >= 0) { @@ -187,13 +196,6 @@ int main(int argc, char **argv) { } } - //Вызов Killing - if(timeout>0) - { - signal(SIGALRM, Killing); - alarm(timeout); - } - // Пока есть активные процессы while (active_child_processes > 0) { // your code here diff --git a/lab4/src/parallel_sum.c b/lab4/src/parallel_sum.c index 66034d2c5..6191c733a 100755 --- a/lab4/src/parallel_sum.c +++ b/lab4/src/parallel_sum.c @@ -1,20 +1,12 @@ #include #include #include - +#include #include +#include +#include "Summa.h" +#include "utils.h" -struct SumArgs { - int *array; - int begin; - int end; -}; - -int Sum(const struct SumArgs *args) { - int sum = 0; - // TODO: your code here - return sum; -} void *ThreadSum(void *args) { struct SumArgs *sum_args = (struct SumArgs *)args; @@ -22,29 +14,74 @@ void *ThreadSum(void *args) { } int main(int argc, char **argv) { - /* - * TODO: - * threads_num by command line arguments - * array_size by command line arguments - * seed by command line arguments - */ - - uint32_t threads_num = 0; - uint32_t array_size = 0; - uint32_t seed = 0; - pthread_t threads[threads_num]; + uint32_t threads_num = -1; + uint32_t array_size = -1; + uint32_t seed = -1; + static struct option options[] = {{"seed", required_argument, 0, 0}, + {"array_size", required_argument, 0, 0}, + {"threads_num", required_argument, 0, 0}, + {0, 0, 0, 0}}; - /* - * TODO: - * your code here - * Generate array here - */ + int option_index = 0; + while(1) + { + int c = getopt_long(argc, argv, "f", options, &option_index); + if (c == -1) break; + switch(c) + { + case 0: + switch(option_index) + { + case 0: + seed = atoi(optarg); + if(seed < 0) + seed = -1; + break; + case 1: + array_size = atoi(optarg); + if(array_size < 1) + array_size = -1; + break; + case 2: + threads_num = atoi(optarg); + if(threads_num < 1) + threads_num = -1; + break; + } + break; + default: + printf("Index %d is out of options\n", option_index); + } + } + if (optind < argc) + { + printf("Has at least one no option argument\n"); + return 1; + } + if (seed == -1 || array_size == -1 || threads_num == -1) + { + printf("Usage: %s --seed \"num\" --array_size \"num\" --threads_num \"num\" \n", argv[0]); + return 1; + } + + pthread_t threads[threads_num]; int *array = malloc(sizeof(int) * array_size); + GenerateArray(array, array_size, seed); + + struct timeval start_time; + gettimeofday(&start_time, NULL); struct SumArgs args[threads_num]; + for(int i = 0; i < threads_num; i++) + { + args[i].array = array; + args[i].begin = i*array_size/threads_num; + args[i].end = (i == (threads_num - 1)) ? array_size : (i+1)*array_size/threads_num; + } for (uint32_t i = 0; i < threads_num; i++) { - if (pthread_create(&threads[i], NULL, ThreadSum, (void *)&args)) { + //Создание нового потока + if (pthread_create(&threads[i], NULL, ThreadSum, (void *)&args[i])) { printf("Error: pthread_create failed!\n"); return 1; } @@ -53,11 +90,19 @@ int main(int argc, char **argv) { int total_sum = 0; for (uint32_t i = 0; i < threads_num; i++) { int sum = 0; + //Завершаем потоки pthread_join(threads[i], (void **)&sum); total_sum += sum; } + struct timeval finish_time; + gettimeofday(&finish_time, NULL); + + double elapsed_time = (finish_time.tv_sec - start_time.tv_sec) * 1000.0; + elapsed_time += (finish_time.tv_usec - start_time.tv_usec) / 1000.0; + free(array); printf("Total: %d\n", total_sum); + printf("Elapsed time: %fms\n", elapsed_time); return 0; } diff --git a/lab4/src/process_memory b/lab4/src/process_memory new file mode 100755 index 0000000000000000000000000000000000000000..571e0d8f7b0cd7475b3fe807bfdc41d721d41017 GIT binary patch literal 17240 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 literal 0 HcmV?d00001 diff --git a/lab4/src/psum b/lab4/src/psum new file mode 100755 index 0000000000000000000000000000000000000000..cee39b7e56005021104512db4a182a95ef249f2e GIT binary patch literal 17624 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 +#include +#include +#include +#include + +int main() { + pid_t child_pid = fork(); + + if (child_pid < 0) { + perror("fork"); + exit(1); + } else if (child_pid == 0) { + // Этот код выполняется в дочернем процессе + printf("Дочерний процесс выполняется...\n"); + sleep(2); // Дочерний процесс спит 2 секунды + printf("Дочерний процесс завершается.\n"); + exit(0); + } else { + // Этот код выполняется в родительском процессе + printf("Родительский процесс ожидает завершения дочернего процесса...\n"); + sleep(10); // Родительский процесс спит 5 секунд + //int status; // Переменная для хранения статуса завершившегося дочернего процесса + //wait(&status); // Родительский процесс ожидает завершения дочернего процесса и собирает его статус + printf("Родительский процесс завершается.\n"); + } + + return 0; +} \ No newline at end of file From c07307d732b25fb269f1573c103f406d27025884 Mon Sep 17 00:00:00 2001 From: Vladislav Kurochkin <94047003+kuroochkin@users.noreply.github.com> Date: Fri, 3 Nov 2023 11:58:22 +0000 Subject: [PATCH 10/12] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=205=20=D0=BB=D0=B0?= =?UTF-8?q?=D0=B1=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab5/src/Makefile | 15 ++++++ lab5/src/factorial | Bin 0 -> 17512 bytes lab5/src/factorial.c | 113 +++++++++++++++++++++++++++++++++++++++++++ lab5/src/mutex | Bin 0 -> 17232 bytes lab5/src/mutex.c | 4 +- lab5/src/withmutex | Bin 0 -> 17352 bytes lab5/src/withmutex.c | 80 ++++++++++++++++++++++++++++++ 7 files changed, 210 insertions(+), 2 deletions(-) create mode 100644 lab5/src/Makefile create mode 100755 lab5/src/factorial create mode 100644 lab5/src/factorial.c create mode 100755 lab5/src/mutex create mode 100755 lab5/src/withmutex create mode 100644 lab5/src/withmutex.c diff --git a/lab5/src/Makefile b/lab5/src/Makefile new file mode 100644 index 000000000..0471e1b21 --- /dev/null +++ b/lab5/src/Makefile @@ -0,0 +1,15 @@ +CC=gcc +CFLAGS=-I. +LDFLAGS = -lpthread + +mutex: mutex.c + $(CC) -o mutex mutex.c $(LDFLAGS) + +withmutex: withmutex.c + $(CC) -o withmutex withmutex.c $(LDFLAGS) + +factorial_complile: factorial.c + $(CC) -o factorial factorial.c $(LDFLAGS) + +factorial: + ./factorial --k 10 --pnum 4 --mod 10 diff --git a/lab5/src/factorial b/lab5/src/factorial new file mode 100755 index 0000000000000000000000000000000000000000..caa287d6d69e0ca0adc9118b89bc488b16ff5a6a GIT binary patch literal 17512 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 +#include +#include +#include +#include +#include + +struct somedata +{ + uint64_t* a; + uint64_t s, e; + uint64_t m; +}; + +pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; //инициализация mutex +uint64_t shared; + +void *ThreadSum(void *args) { + struct somedata *smd = (struct somedata *)args; + for(uint64_t i = smd->s; i < smd->e; i++){ + pthread_mutex_lock(&mtx); //перехват mutex + *(smd->a) = (*(smd->a)*i)%smd->m; + pthread_mutex_unlock(&mtx); //освобождение mutex + } + return 0; +} + +int main(int argc, char **argv) { + shared = 1; + uint32_t k = -1; + uint32_t pnum = -1; + uint32_t mod = -1; + static struct option options[] = {{"k", required_argument, 0, 0}, + {"pnum", required_argument, 0, 0}, + {"mod", required_argument, 0, 0}, + {0, 0, 0, 0}}; + + int option_index = 0; + while(1) + { + int c = getopt_long(argc, argv, "f", options, &option_index); + if (c == -1) break; + switch(c) + { + case 0: + switch(option_index) + { + case 0: + k = atoi(optarg); + if(k < 0) + printf("k is a positive number!\n"); + break; + case 1: + pnum = atoi(optarg); + if(pnum < 1) + printf("pnum is a positive number!\n"); + break; + case 2: + mod = atoi(optarg); + if(mod < 1) + printf("mod is a positive number!\n"); + break; + } + break; + default: + printf("Index %d is out of options\n", option_index); + } + } + if (optind < argc) + { + printf("Has at least one no option argument\n"); + return 1; + } + if (k == -1 || pnum == -1 || mod == -1) + { + printf("Usage: %s --k \"num\" --pnum \"num\" --mod \"num\" \n", argv[0]); + return 1; + } + pthread_t threads[pnum]; //создаем потоки + struct somedata smd[pnum]; + for(uint64_t i = 0; i < pnum; i++) + { + smd[i].a = &shared; + smd[i].s = i*k/pnum + 1; + smd[i].e = (i == (pnum - 1)) ? k + 1 : (i+1)*k/pnum + 1; + smd[i].m = mod; + } + + struct timeval start_time; + gettimeofday(&start_time, NULL); + + for (uint32_t i = 0; i < pnum; i++) { + if (pthread_create(&threads[i], NULL, ThreadSum, (void *)&smd[i])) { + printf("Error: pthread_create failed!\n"); + return 1; + } + } + + for (uint32_t i = 0; i < pnum; i++) { + pthread_join(threads[i], NULL); + } + + struct timeval finish_time; + gettimeofday(&finish_time, NULL); + + double elapsed_time = (finish_time.tv_sec - start_time.tv_sec) * 1000.0; + elapsed_time += (finish_time.tv_usec - start_time.tv_usec) / 1000.0; + + + printf("Total: %d\n", shared); + printf("Elapsed time: %fms\n", elapsed_time); + return 0; +} diff --git a/lab5/src/mutex b/lab5/src/mutex new file mode 100755 index 0000000000000000000000000000000000000000..fc086af360840fb1b5394f28e801517fee608c62 GIT binary patch literal 17232 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 literal 0 HcmV?d00001 diff --git a/lab5/src/mutex.c b/lab5/src/mutex.c index 4e86390db..ef35372dc 100755 --- a/lab5/src/mutex.c +++ b/lab5/src/mutex.c @@ -57,7 +57,7 @@ void do_one_thing(int *pnum_times) { unsigned long k; int work; for (i = 0; i < 50; i++) { - // pthread_mutex_lock(&mut); + //pthread_mutex_lock(&mut); printf("doing one thing\n"); work = *pnum_times; printf("counter = %d\n", work); @@ -82,7 +82,7 @@ void do_another_thing(int *pnum_times) { for (k = 0; k < 500000; k++) ; /* long cycle */ *pnum_times = work; /* write back */ - // pthread_mutex_unlock(&mut); + //pthread_mutex_unlock(&mut); } } diff --git a/lab5/src/withmutex b/lab5/src/withmutex new file mode 100755 index 0000000000000000000000000000000000000000..497a0c6eeff04573852211e841f1a0da688c628e GIT binary patch literal 17352 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 +#include +#include +#include + +void do_one_thing(int *); +void do_another_thing(int *); +void do_wrap_up(int); +int common = 0; /* A shared variable for two threads */ +int r1 = 0, r2 = 0, r3 = 0; +pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER; + +int main() { + pthread_t thread1, thread2; + + if (pthread_create(&thread1, NULL, (void *)do_one_thing, + (void *)&common) != 0) { + perror("pthread_create"); + exit(1); + } + + if (pthread_create(&thread2, NULL, (void *)do_another_thing, + (void *)&common) != 0) { + perror("pthread_create"); + exit(1); + } + + if (pthread_join(thread1, NULL) != 0) { + perror("pthread_join"); + exit(1); + } + + if (pthread_join(thread2, NULL) != 0) { + perror("pthread_join"); + exit(1); + } + + do_wrap_up(common); + + return 0; +} + +void do_one_thing(int *pnum_times) { + int i, j, x; + unsigned long k; + int work; + for (i = 0; i < 50; i++) { + pthread_mutex_lock(&mut); + printf("doing one thing\n"); + work = *pnum_times; + printf("counter = %d\n", work); + work++; /* increment, but not write */ + for (k = 0; k < 500000; k++) + ; /* long cycle */ + *pnum_times = work; /* write back */ + pthread_mutex_unlock(&mut); + } +} + +void do_another_thing(int *pnum_times) { + int i, j, x; + unsigned long k; + int work; + for (i = 0; i < 50; i++) { + pthread_mutex_lock(&mut); + printf("doing another thing\n"); + work = *pnum_times; + printf("counter = %d\n", work); + work++; /* increment, but not write */ + for (k = 0; k < 500000; k++) + ; /* long cycle */ + *pnum_times = work; /* write back */ + pthread_mutex_unlock(&mut); + } +} + +void do_wrap_up(int counter) { + int total; + printf("All done, counter = %d\n", counter); +} \ No newline at end of file From 13327ab950cbfebba24f6c64c304350fad584c46 Mon Sep 17 00:00:00 2001 From: Vladislav Kurochkin <94047003+kuroochkin@users.noreply.github.com> Date: Fri, 3 Nov 2023 12:00:46 +0000 Subject: [PATCH 11/12] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab5/src/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lab5/src/Makefile b/lab5/src/Makefile index 0471e1b21..781f24f5d 100644 --- a/lab5/src/Makefile +++ b/lab5/src/Makefile @@ -12,4 +12,4 @@ factorial_complile: factorial.c $(CC) -o factorial factorial.c $(LDFLAGS) factorial: - ./factorial --k 10 --pnum 4 --mod 10 + ./factorial --k 10 --pnum 4 --mod 1 From 74e743e1c5bb86113a0bbc02db7c3f25f80923f2 Mon Sep 17 00:00:00 2001 From: Vladislav Kurochkin <94047003+kuroochkin@users.noreply.github.com> Date: Fri, 3 Nov 2023 13:49:40 +0000 Subject: [PATCH 12/12] Complete lab6 --- lab4/src/Makefile | 2 +- lab4/src/zombie.c | 2 +- lab5/src/Makefile | 11 +- lab5/src/deadlock | Bin 0 -> 17248 bytes lab5/src/deadlock.c | 50 +++++++++ lab5/src/factorial | Bin 17512 -> 0 bytes lab5/src/factorial.c | 234 +++++++++++++++++++++++---------------- lab5/src/factorial1 | Bin 0 -> 17584 bytes lab6/src/Makefile | 21 ++++ lab6/src/MultMod.o | Bin 0 -> 1496 bytes lab6/src/client | Bin 0 -> 17896 bytes lab6/src/client.c | 50 +++------ lab6/src/libMultModulo.a | Bin 0 -> 1644 bytes lab6/src/multfact.c | 13 +++ lab6/src/server | Bin 0 -> 17960 bytes 15 files changed, 245 insertions(+), 138 deletions(-) create mode 100755 lab5/src/deadlock create mode 100644 lab5/src/deadlock.c delete mode 100755 lab5/src/factorial create mode 100755 lab5/src/factorial1 create mode 100644 lab6/src/Makefile create mode 100644 lab6/src/MultMod.o create mode 100755 lab6/src/client create mode 100644 lab6/src/libMultModulo.a create mode 100644 lab6/src/multfact.c create mode 100755 lab6/src/server diff --git a/lab4/src/Makefile b/lab4/src/Makefile index 0d1377f68..33521ef7d 100644 --- a/lab4/src/Makefile +++ b/lab4/src/Makefile @@ -2,7 +2,7 @@ CC=gcc CFLAGS=-I. task1: - ./parallel_min_max --seed 42 --array_size 100 --pnum 5 --timeout 20 + ./parallel_min_max --seed 42 --array_size 100 --pnum 5 --timeout 5 zombie: zombie.c $(CC) -o zombie zombie.c diff --git a/lab4/src/zombie.c b/lab4/src/zombie.c index ff46c0738..13e76d636 100755 --- a/lab4/src/zombie.c +++ b/lab4/src/zombie.c @@ -19,7 +19,7 @@ int main() { } else { // Этот код выполняется в родительском процессе printf("Родительский процесс ожидает завершения дочернего процесса...\n"); - sleep(10); // Родительский процесс спит 5 секунд + sleep(10); // Родительский процесс спит 10 секунд //int status; // Переменная для хранения статуса завершившегося дочернего процесса //wait(&status); // Родительский процесс ожидает завершения дочернего процесса и собирает его статус printf("Родительский процесс завершается.\n"); diff --git a/lab5/src/Makefile b/lab5/src/Makefile index 781f24f5d..da0388a20 100644 --- a/lab5/src/Makefile +++ b/lab5/src/Makefile @@ -1,6 +1,6 @@ CC=gcc CFLAGS=-I. -LDFLAGS = -lpthread +LDFLAGS = -pthread mutex: mutex.c $(CC) -o mutex mutex.c $(LDFLAGS) @@ -9,7 +9,10 @@ withmutex: withmutex.c $(CC) -o withmutex withmutex.c $(LDFLAGS) factorial_complile: factorial.c - $(CC) -o factorial factorial.c $(LDFLAGS) + $(CC) -o factorial1 factorial.c $(LDFLAGS) -factorial: - ./factorial --k 10 --pnum 4 --mod 1 +factorial: + ./factorial1 -k 10 --pnum 4 --mod 1 + +deadlock: deadlock.c + $(CC) -o deadlock deadlock.c $(LDFLAGS) diff --git a/lab5/src/deadlock b/lab5/src/deadlock new file mode 100755 index 0000000000000000000000000000000000000000..830908b82a7fb9e5bee88600791b4bc48bf86aef GIT binary patch literal 17248 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 J;&O0_;@{{?V*~&I literal 0 HcmV?d00001 diff --git a/lab5/src/deadlock.c b/lab5/src/deadlock.c new file mode 100644 index 000000000..dbe6027a2 --- /dev/null +++ b/lab5/src/deadlock.c @@ -0,0 +1,50 @@ +#include +#include + +pthread_mutex_t mutex1, mutex2; + +void* thread1(void* arg) { + pthread_mutex_lock(&mutex1); + printf("Thread 1: Holding mutex1...\n"); + sleep(2); // Искусственная задержка для создания deadlock + printf("Thread 1: Waiting for mutex2...\n"); + pthread_mutex_lock(&mutex2); + printf("Thread 1: Got mutex2!\n"); + pthread_mutex_unlock(&mutex2); + pthread_mutex_unlock(&mutex1); + return NULL; +} + +void* thread2(void* arg) { + pthread_mutex_lock(&mutex2); + printf("Thread 2: Holding mutex2...\n"); + sleep(2); // Искусственная задержка для создания deadlock + printf("Thread 2: Waiting for mutex1...\n"); + pthread_mutex_lock(&mutex1); + printf("Thread 2: Got mutex1!\n"); + pthread_mutex_unlock(&mutex1); + pthread_mutex_unlock(&mutex2); + return NULL; +} + +int main() { + pthread_t t1, t2; + + //Инициализируем мьютексы + pthread_mutex_init(&mutex1, NULL); + pthread_mutex_init(&mutex2, NULL); + + //Инициализируем потоки + pthread_create(&t1, NULL, thread1, NULL); + pthread_create(&t2, NULL, thread2, NULL); + + //Ожидаем завершения работы потоков + pthread_join(t1, NULL); + pthread_join(t2, NULL); + + //Уничтожаем мьютексы + pthread_mutex_destroy(&mutex1); + pthread_mutex_destroy(&mutex2); + + return 0; +} \ No newline at end of file diff --git a/lab5/src/factorial b/lab5/src/factorial deleted file mode 100755 index caa287d6d69e0ca0adc9118b89bc488b16ff5a6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17512 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 +#include #include #include -#include -#include #include +#include +#include +#include -struct somedata -{ - uint64_t* a; - uint64_t s, e; - uint64_t m; +struct FactArgs { + int begin; + int end; }; -pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; //инициализация mutex -uint64_t shared; +int factor = 1; +int modd = 0; +//pthread_mutex_t mutx = PTHREAD_MUTEX_INITIALIZER; +sem_t semaphore; -void *ThreadSum(void *args) { - struct somedata *smd = (struct somedata *)args; - for(uint64_t i = smd->s; i < smd->e; i++){ - pthread_mutex_lock(&mtx); //перехват mutex - *(smd->a) = (*(smd->a)*i)%smd->m; - pthread_mutex_unlock(&mtx); //освобождение mutex +void CountPart(void *args) { + //pthread_mutex_lock(&mutx); + sem_wait(&semaphore); + struct FactArgs *arrs = (struct FactArgs *)args; + int num = 1; + for(int i = arrs->begin; i < arrs->end; i++) + { + num = num%modd * i%modd; } - return 0; + factor = factor % modd * num % modd; + //pthread_mutex_unlock(&mutx); + sem_post(&semaphore); } -int main(int argc, char **argv) { - shared = 1; - uint32_t k = -1; - uint32_t pnum = -1; - uint32_t mod = -1; - static struct option options[] = {{"k", required_argument, 0, 0}, - {"pnum", required_argument, 0, 0}, - {"mod", required_argument, 0, 0}, - {0, 0, 0, 0}}; - - int option_index = 0; - while(1) - { - int c = getopt_long(argc, argv, "f", options, &option_index); - if (c == -1) break; - switch(c) - { - case 0: - switch(option_index) - { - case 0: - k = atoi(optarg); - if(k < 0) - printf("k is a positive number!\n"); - break; - case 1: - pnum = atoi(optarg); - if(pnum < 1) - printf("pnum is a positive number!\n"); - break; - case 2: - mod = atoi(optarg); - if(mod < 1) - printf("mod is a positive number!\n"); - break; - } - break; - default: - printf("Index %d is out of options\n", option_index); - } - } - if (optind < argc) - { - printf("Has at least one no option argument\n"); - return 1; - } - if (k == -1 || pnum == -1 || mod == -1) + +int main(int argc, char **argv) +{ + int k = 0; + int pnum = 0; + + sem_init(&semaphore, 0, 1);//semaphore + + int opt = getopt(argc,argv, "k:"); + if (opt != 'k') + { + printf("Usage: %s -k \"num\" --mod \"num\" --pnum \"num\" \n", argv[0]); + return 1; + } + else + { + k = atoi(optarg); + if (k <= 0) { - printf("Usage: %s --k \"num\" --pnum \"num\" --mod \"num\" \n", argv[0]); - return 1; - } - pthread_t threads[pnum]; //создаем потоки - struct somedata smd[pnum]; - for(uint64_t i = 0; i < pnum; i++) - { - smd[i].a = &shared; - smd[i].s = i*k/pnum + 1; - smd[i].e = (i == (pnum - 1)) ? k + 1 : (i+1)*k/pnum + 1; - smd[i].m = mod; - } - - struct timeval start_time; - gettimeofday(&start_time, NULL); - - for (uint32_t i = 0; i < pnum; i++) { - if (pthread_create(&threads[i], NULL, ThreadSum, (void *)&smd[i])) { - printf("Error: pthread_create failed!\n"); + printf("k is a positive number\n"); return 1; } } - - for (uint32_t i = 0; i < pnum; i++) { - pthread_join(threads[i], NULL); + + while (true) { + int current_optind = optind ? optind : 1; + + static struct option options[] = {{"mod", required_argument, 0, 0}, + {"pnum", required_argument, 0, 0}, + {0, 0, 0, 0}}; + + int option_index = 0; + int c = getopt_long(argc, argv, "f", options, &option_index); + + if (c == -1) break; + + switch (c) + { + case 0: + switch (option_index) + { + case 0: + modd = atoi(optarg); + if (modd <= 0) + { + printf("mod is a positive number\n"); + return 1; + } + break; + case 1: + pnum = atoi(optarg); + if (pnum <= 0) + { + printf("pnum is a positive number\n"); + return 1; + } + if (pnum > k) + { + printf("pnum must be less or equal to k\n"); + pnum = k; + printf("pnum is equal to k now\n"); + } + break; + + defalut: + printf("Index %d is out of options\n", option_index); + } + break; + + case '?': + break; + + default: + printf("getopt returned character code 0%o?\n", c); } - - struct timeval finish_time; - gettimeofday(&finish_time, NULL); - - double elapsed_time = (finish_time.tv_sec - start_time.tv_sec) * 1000.0; - elapsed_time += (finish_time.tv_usec - start_time.tv_usec) / 1000.0; - - - printf("Total: %d\n", shared); - printf("Elapsed time: %fms\n", elapsed_time); + } + + if (optind < argc) + { + printf("Has at least one no option argument\n"); + return 1; + } + + if (modd == 0 || pnum == 0) + { + printf("Usage: %s -k \"num\" --mod \"num\" --pnum \"num\" \n", argv[0]); + return 1; + } + + int ars = k/pnum; + int left = k%pnum; + struct FactArgs args[pnum]; + for(int i = 0; i < pnum; i++) + { + args[i].begin = ars*i + (left < i ? left : i) + 1; + args[i].end = ars*(i+1) + (left < i+1 ? left : i+1) + 1; + } + + pthread_t threads[pnum]; + for(int i = 0; i < pnum; i++) + { + if(pthread_create(&threads[i], NULL, (void*)CountPart, (void *)&(args[i])) != 0)//no problem + { + printf("pthread error\n"); + return 1; + } + } + + for(int i = 0; i < pnum; i++) + { + pthread_join(threads[i], NULL); + } + +sem_destroy(&semaphore);// delete + + factor %= modd; + printf("Factorial %d by mod %d = %d\n", k, modd, factor); + + return 0; -} +} \ No newline at end of file diff --git a/lab5/src/factorial1 b/lab5/src/factorial1 new file mode 100755 index 0000000000000000000000000000000000000000..beb6d66fea65bf6f6e8c45d42ddaba41d9464919 GIT binary patch literal 17584 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 j9J^&{{jS|zxw=%Os7alxUgk1zvEsi0%QaT3 literal 0 HcmV?d00001 diff --git a/lab6/src/client.c b/lab6/src/client.c index 91b35af32..71b4457e2 100755 --- a/lab6/src/client.c +++ b/lab6/src/client.c @@ -17,18 +17,7 @@ struct Server { int port; }; -uint64_t MultModulo(uint64_t a, uint64_t b, uint64_t mod) { - uint64_t result = 0; - a = a % mod; - while (b > 0) { - if (b % 2 == 1) - result = (result + a) % mod; - a = (a * 2) % mod; - b /= 2; - } - return result % mod; -} bool ConvertStringToUI64(const char *str, uint64_t *val) { char *end = NULL; @@ -46,9 +35,10 @@ bool ConvertStringToUI64(const char *str, uint64_t *val) { } int main(int argc, char **argv) { + uint64_t ret = 1; uint64_t k = -1; uint64_t mod = -1; - char servers[255] = {'\0'}; // TODO: explain why 255 + char servers[255] = {'\0'}; while (true) { int current_optind = optind ? optind : 1; @@ -69,14 +59,11 @@ int main(int argc, char **argv) { switch (option_index) { case 0: ConvertStringToUI64(optarg, &k); - // TODO: your code here break; case 1: ConvertStringToUI64(optarg, &mod); - // TODO: your code here break; case 2: - // TODO: your code here memcpy(servers, optarg, strlen(optarg)); break; default: @@ -91,28 +78,24 @@ int main(int argc, char **argv) { fprintf(stderr, "getopt returned character code 0%o?\n", c); } } - if (k == -1 || mod == -1 || !strlen(servers)) { fprintf(stderr, "Using: %s --k 1000 --mod 5 --servers /path/to/file\n", argv[0]); - return 1; + return 1;12 } - // TODO: for one server here, rewrite with servers from file - unsigned int servers_num = 1; + unsigned int servers_num = 2; struct Server *to = malloc(sizeof(struct Server) * servers_num); - // TODO: delete this and parallel work between servers to[0].port = 20001; memcpy(to[0].ip, "127.0.0.1", sizeof("127.0.0.1")); - - // TODO: work continiously, rewrite to make parallel + to[1].port = 20002; + memcpy(to[1].ip, "127.0.0.1", sizeof("127.0.0.1")); for (int i = 0; i < servers_num; i++) { struct hostent *hostname = gethostbyname(to[i].ip); if (hostname == NULL) { fprintf(stderr, "gethostbyname failed with %s\n", to[i].ip); exit(1); } - struct sockaddr_in server; server.sin_family = AF_INET; server.sin_port = htons(to[i].port); @@ -128,11 +111,8 @@ int main(int argc, char **argv) { fprintf(stderr, "Connection failed\n"); exit(1); } - - // TODO: for one server - // parallel between servers - uint64_t begin = 1; - uint64_t end = k; + uint64_t begin = (k * i) / servers_num; + uint64_t end = (k * (i + 1)) / servers_num; char task[sizeof(uint64_t) * 3]; memcpy(task, &begin, sizeof(uint64_t)); @@ -149,16 +129,16 @@ int main(int argc, char **argv) { fprintf(stderr, "Recieve failed\n"); exit(1); } - - // TODO: from one server - // unite results uint64_t answer = 0; memcpy(&answer, response, sizeof(uint64_t)); - printf("answer: %llu\n", answer); - + if (answer) { + ret = (ret * answer) % 10; + } else { + ret = 1; + } close(sck); } free(to); - + printf("Answer: %llu\n", ret); return 0; -} +} \ No newline at end of file diff --git a/lab6/src/libMultModulo.a b/lab6/src/libMultModulo.a new file mode 100644 index 0000000000000000000000000000000000000000..c3b2309b9860edfb2904786dede681c3f23c3c8b GIT binary patch literal 1644 zcmbtUL2DCH5S~qHt1)U6!9Yc}Cl%~739(p_vJhhTU`2#LF2!!rZ38CRuz3ruPz8%Z z$i-jd!BfD42QT%OV=h9#i{hcdi_W}#Z+%(gr4G!_%s2DRy!ZC)F5P$hdSfkh+nko1 z7KXn5G|fU(u$2M;1GTylH2H?N9W*@v=`&9@j>@sG-f5*+6qEAB)s=AMR_bN>;e&)h zEkiM2O$<=6vcrV(04(8JkcPAHZmIyNSr{TU~qIXoCa@D7oQR&uoY0oF^Ud*+Qw zEok$=TxCU;Th0d}%D*V&SgyzlH$xm?4%d}IJ%zgdr~p|pq=gr8$EkBxSNBldNt1FYw1cT#uLzucxvJ5^cCuZaP>zJqObW;8;mA!*WfH>JjG?7JqjLfhFf(p+FPaHbO3< PH;dnq{N1QBbmIKq@k^%a literal 0 HcmV?d00001 diff --git a/lab6/src/multfact.c b/lab6/src/multfact.c new file mode 100644 index 000000000..13dd10282 --- /dev/null +++ b/lab6/src/multfact.c @@ -0,0 +1,13 @@ +#include + +u_int64_t MultModulo(u_int64_t a, u_int64_t b, u_int64_t mod) { + u_int64_t result = 0; + a = a % mod; + while (b > 0) { + if (b % 2 == 1) + result = (result + a) % mod; + a = (a * 2) % mod; + b /= 2; + } + return result % mod; +} \ No newline at end of file diff --git a/lab6/src/server b/lab6/src/server new file mode 100755 index 0000000000000000000000000000000000000000..c80db99d6f71c342a8efabdfcde82821e6f0b388 GIT binary patch literal 17960 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 dQbm955^}k$OP8xlMT-7lnbMf