Podziaª pracy. Cz ± II. 1 Tablica sortuj ca. Rozwi zanie

Podobne dokumenty
Rozwi zania klasycznych problemów w Rendezvous

Programowanie wspóªbie»ne

Programowanie wspóªbie»ne

Programowanie wspóªbie»ne

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Algorytmy grafowe 2. Andrzej Jastrz bski. Akademia ETI. Politechnika Gda«ska Algorytmy grafowe 2

Bash i algorytmy. Elwira Wachowicz. 20 lutego

Wska¹niki, tablice dynamiczne wielowymiarowe

Programowanie wspóªbie»ne

Zestaw 1 ZESTAWY A. a 1 a 2 + a 3 ± a n, gdzie skªadnik a n jest odejmowany, gdy n jest liczb parzyst oraz dodawany w przeciwnym.

Vincent Van GOGH: M»czyzna pij cy li»ank kawy. Radosªaw Klimek. J zyk programowania Java

Metodydowodzenia twierdzeń

Grafy. Andrzej Jastrz bski. Akademia ET I. Politechnika Gda«ska

Lab. 02: Algorytm Schrage

Wst p teoretyczny do wiczenia nr 3 - Elementy kombinatoryki

ANALIZA NUMERYCZNA. Grzegorz Szkibiel. Wiosna 2014/15

Metody dowodzenia twierdze«

Relacj binarn okre±lon w zbiorze X nazywamy podzbiór ϱ X X.

Programowanie wspóªbie»ne

Algorytmy zwiazane z gramatykami bezkontekstowymi

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Laboratorium Podstawy Przetwarzania Rozproszonego SPRAWOZDANIE z zadania SERWIS KOMPUTEROWY

Ukªady równa«liniowych

Mnożenie macierzy. Systemy z pamięcią współdzieloną Systemy z pamięcią rozproszoną Efektywność

JAO - J zyki, Automaty i Obliczenia - Wykªad 1. JAO - J zyki, Automaty i Obliczenia - Wykªad 1

1 Bª dy i arytmetyka zmiennopozycyjna

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Maszyny Turinga i problemy nierozstrzygalne. Maszyny Turinga i problemy nierozstrzygalne

Interpolacja funkcjami sklejanymi

Wojewódzki Konkurs Matematyczny

Zadania z kolokwiów ze Wst pu do Informatyki. Semestr II.

1 Stos: Stack i Stack<T>

Przetwarzanie sygnaªów

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Tytuł. Autor. Dział. Innowacyjne cele edukacyjne. Czas. Przebieg. Etap 1 - Wprowadzenie z rysem historycznym i dyskusją

Macierze i Wyznaczniki

c Marcin Sydow Przepªywy Grafy i Zastosowania Podsumowanie 12: Przepªywy w sieciach

ARKUSZ EGZAMINACYJNY ETAP PRAKTYCZNY EGZAMINU POTWIERDZAJ CEGO KWALIFIKACJE ZAWODOWE CZERWIEC 2012

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Architektury systemów komputerowych

Systemy Wyszukiwania Informacji: Metoda list inwersyjnych

Strategia "dziel i zwyciężaj"

VI OIG, Etap II konkurs dru»ynowy. 10 III 2012 Dost pna pami : 32 MB.

Problemy optymalizacyjne - zastosowania

Temat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika.

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Programowanie i struktury danych

Programowanie i struktury danych 1 / 44

Prosta aplikacja klient - serwer na bazie protokoªu UDP. Sprawozdanie.

API transakcyjne BitMarket.pl

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

ARKUSZ EGZAMINACYJNY ETAP PRAKTYCZNY EGZAMINU POTWIERDZAJ CEGO KWALIFIKACJE ZAWODOWE CZERWIEC 2012

ALGORYTMY SORTOWANIA DANYCH

P tle. Rozdziaª Wst p. 4.2 P tle P tla for(...);

Lekcja 9 - LICZBY LOSOWE, ZMIENNE

Ekonometria. wiczenia 1 Regresja liniowa i MNK. Andrzej Torój. Instytut Ekonometrii Zakªad Ekonometrii Stosowanej

14.Rozwiązywanie zadań tekstowych wykorzystujących równania i nierówności kwadratowe.

wiczenie 1 Podstawy j zyka Java. Instrukcje warunkowe

Arkusz zawiera informacje prawnie chronione do momentu rozpocz cia egzaminu.

det A := a 11, ( 1) 1+j a 1j det A 1j, a 11 a 12 a 21 a 22 Wn. 1 (Wyznacznik macierzy stopnia 2:). = a 11a 22 a 33 +a 12 a 23 a 31 +a 13 a 21 a 32

Podstawy logiki i teorii zbiorów wiczenia

Dzi kuj za uwag! Spotkania z Pythonem. Cz ± 1 - podstawy - rozwi zania zada« Michaª Alichniewicz. Gda«sk Studenckie Koªo Automatyków SKALP

Funkcja kwadratowa, wielomiany oraz funkcje wymierne

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Regulamin Usªugi VPS

3. (8 punktów) EGZAMIN MAGISTERSKI, Biomatematyka

Podstawy modelowania w j zyku UML

x y x y x y x + y x y

Macierze i Wyznaczniki

Algorytmy tekstowe. Andrzej Jastrz bski. Akademia ETI

Spis treści INTERFEJS (WEBSERVICES) - DOKUMENTACJA TECHICZNA 1

INSTRUKCJA DLA UCZESTNIKÓW ZAWODÓW ZADANIA

Architektury systemów rozproszonych LABORATORIUM. Ćwiczenie 1

Algorytmy i Struktury Danych. Anna Paszyńska

tablica: dane_liczbowe

Arkusz zawiera informacje prawnie chronione do momentu rozpocz cia egzaminu.

Podpis os. przyjmującej: FORMULARZ ZGŁOSZENIOWY

do instrukcja while (wyrażenie);

ZARZĄDZENIE NR 155/2014 BURMISTRZA WYSZKOWA z dnia 8 lipca 2014 r.

Algorytmy i Struktury Danych

Regulamin Projektów Ogólnopolskich i Komitetów Stowarzyszenia ESN Polska

G PROGRAMMING. Part #4

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Ćwiczenia IV - Kontenery (pojemniki)

KOLEJKA (QUEUE) (lista fifo first in, first out)

System Zarządzania Relacyjną Bazą Danych (SZRBD) Microsoft Access 2010

Granular Computing 9999 pages 15 METODY SZTUCZNEJ INTELIGENCJI - PROJEKTY

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

1 Klasy. 1.1 Denicja klasy. 1.2 Skªadniki klasy.

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Rozdział 6. Pakowanie plecaka. 6.1 Postawienie problemu

Liniowe zadania najmniejszych kwadratów

SZCZEGÓŁOWY OPIS PRZEDMIOTU ZAMÓWIENIA

ARKUSZ EGZAMINACYJNY ETAP PRAKTYCZNY EGZAMINU POTWIERDZAJ CEGO KWALIFIKACJE ZAWODOWE CZERWIEC 2012

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Lekcja 12 - POMOCNICY

Warszawa, dnia 6 listopada 2015 r. Poz ROZPORZĄDZENIE MINISTRA ROLNICTWA I ROZWOJU WSI 1) z dnia 23 października 2015 r.

Przewodnik u»ytkownika

Wstęp do programowania

Zbiory i odwzorowania

Transkrypt:

Cz ± II Podziaª pracy 1 Tablica sortuj ca Kolejka priorytetowa to struktura danych udost pniaj ca operacje wstawienia warto±ci i pobrania warto±ci minimalnej. Z kolejki liczb caªkowitych, za po±rednictwem funkcji void wstaw ( int x ) ; int usu«min( int i ) ; korzystaj procesy: process P[ id : 1..K] { int x ; wstaw ( x ) ; x = usu«min( id ) ; Zakªadamy,»e próba pobrania elementu z kolejki pustej lub wstawienia do kolejki peªnej powinna powodowa zawieszenie procesu w oczekiwaniu na mo»- liwo± wykonania tej operacji. Zrealizuj kolejk priorytetow liczb caªkowitych przechowuj c maksymalnie N elementów. Implementacja powinna si skªada z funkcji wstaw i usu«min oraz tablicy poª czonych w ruroci g procesów pomocniczych, przechowuj cych po jednej liczbie. Rozwi zanie process P[ id : 1..K] { int x ; wstaw ( x ) ; x = usu«min( id ) ; void wstaw ( int x ) { send Q[ 1 ]. x ; int usu«min( int i ) { int x ; send Q[ 1 ]. daj ( i ) ; receive x ; return x ; 1

process Q[ id : 1..N] { int i l e = 0 ; int moja, nowa, k ; while ( true ) select { i f 2 Firma ( i l e < N id + 1) on nowa i f (++ i l e == 1) moja = nowa ; else { i f ( moja > nowa ) { int s = moja ; moja = nowa ; nowa = s ; send Q[ id + 1 ]. nowa ; i f ( i l e > 0) on daj ( k ) { i f ( id == 1) send P[ k ]. moja ; else send Q[ k ]. moja ; i f ( i l e > 0) { send Q[ id + 1 ]. daj ( id ) ; receive moja ; W pewnej rmie pracuje N pracowników. Poziom umiej tno±ci ka»dego z nich jest wyra»ony dodatni liczb caªkowit, któr pracownik poznaje, wywoªuj c funkcj int mó jpoziom ( ) ; Firma obsªuguje zlecenia K klientów, reprezentowane przez warto±ci typu zlecenie. Jedno zlecenie jest wykonywane przez grup pracowników, których suma poziomów umiej tno±ci jest równa co najmniej P > 0, a poziom ka»dego pracownika jest mniejszy od P. Pracownicy przydzieleni do zlecenia wykonuj je sekwencyjnie, zgodnie z kolejno±ci, w jakiej zgªaszali si do pracy, wywoªuj c funkcj void przetw ó rz ( z l e c e n i e &z ) ; Pierwszy pracownik dostaje zlecenie od klienta i, po przetworzeniu, przekazuje je dalej. Ostatni pracownik, po odebraniu i przetworzeniu zlecenia, oddaje je klientowi. Klient wykonuje algorytm podany w rozwi zaniu. Firma chce obsªu»y jak najwi cej zlece«klientów, w zwi zku z czym gorliwy pracownik mo»e uczestniczy parokrotnie w przetwarzaniu jednego zlecenia. Zapisz tre± procesów Pracowników oraz Firmy zarz dzaj cej ich prac. Rozwi zanie 2

type z l e c e n i e ; void i n i c j u j ( z l e c e n i e &z ) ; void konsumuj ( z l e c e n i e z ) ; int mó jpoziom ( ) ; void przetw ó rz ( z l e c e n i e &z ) ; process Klient [ id : 1..K] { z l e c e n i e z ; int pierwszy ; i n i c j u j ( z ) ; send Firma. zg ª o s z e n i e K l i e n t a ( id ) ; receive pierwszy ; send Pracownik [ pierwszy ]. z ; receive z ; konsumuj ( z ) ; process Pracownik [ id : 1..N] { z l e c e n i e z ; int komu ; bool j e s t O s t a t n i ; int poziom = mó jpoziom ( ) ; send Firma. zg ª oszeniepracownika ( id, poziom ) ; receive (komu, j e s t O s t a t n i ) ; receive z ; przetw ó rz ( z ) ; i f ( j e s t O s t a t n i ) send Klient [ komu ]. z ; else send Pracownik [ komu ]. z ; process Firma { // w e r s j a b a r d z i e j wspó ª b i e» na int suma, nk, np, poziom, pierwszy ; suma = 0 ; poprzedni = 0 ; // b r a k pracownika nk = 0 ; // b r a k k l i e n t a while ( ( suma < P) && ( nk == 0 ) ) { select { i f ( nk == 0) on zg ª o s z e n i e K l i e n t a ( nk ) { i f ( poprzedni!= 0) send Klient [ nk ]. pierwszy ; i f ( suma < P) on zg ª oszeniepracownika (np, poziom ) { suma += poziom ; i f ( poprzedni == 0) { // p i e r w s z y pracownik 3

pierwszy = np ; i f ( nk > 0) send Klient [ nk ]. pierwszy ; else send Pracownik [ poprzedni ]. ( np, f a l s e ) ; poprzedni = np ; send Pracownik [ poprzedni ]. ( nk, true ) ; // o s t a t n i process Firma { // w e r s j a z e s z ª oroczna int suma, nk, np, poziom ; // (» ywcem z Ady ) suma = 0 ; poprzedni = 0 ; receive zg ª o s z e n i e K l i e n t a ( nk ) ; while ( suma < P) { receive zg ª oszeniepracownika (np, poziom ) ; suma += poziom ; i f ( poprzedni == 0) { send Klient [ nk ]. np ; else send Pracownik [ poprzedni ]. ( np, f a l s e ) ; poprzedni = np ; send Pracownik [ poprzedni ]. ( nk, true ) ; 3 Gra w ycie Gra w ycie (ang. Life) to automat komórkowy w dwuwymiarowym ±wiecie. Komórki zorganizowane s w torus, który ma W > 1 wierszy o numerach 0.. W 1 i K > 2 kolumn o numerach 0.. K 1. Zakªadamy,»e W i K s parzyste. Przyjmujemy,»e komórka o wspóªrz dnych (a, b) s siaduje z komórk (c, d), je±li a i c ró»ni si, modulo W, nie wi cej ni» o 1 oraz b i d ró»ni si, modulo K, nie wi cej ni» o 1. Z ka»d komórk s siaduje wi c osiem innych. Komórki moga by w jednym z dwóch stanów»ywe lub martwe. Š czny stan wszystkich komórek ±wiata nazywamy generacj. W kolejnej generacji komórka jest»ywa wtedy i tylko wtedy, gdy: w poprzedniej generacji byªa»ywa i miaªa dwóch lub trzech»ywych s siadów albo, w poprzedniej generacji byªa martwa i miaªa trzech»ywych s siadów. Proces ycie czyta pocz tkow generacj. Nast pnie, korzystaj c z tablicy procesów Komórka, wyznacza generacj numer N i wypisuje j. Podaj tre± procesów Komórka przy zaªo»eniu,»e proces ycie wykonuje algorytm podany w rozwi zaniu. 4

Rozwi zanie void c z y t a j ( bool [ ] [ ] &± wiat ) ; void p i s z ( bool [ ] [ ] ± wiat ) ; process y c i e { bool [ ] [ ] ± wiat ; int i, j, ai, a j ; c z y t a j ( ± wiat ) ; for ( i = 0 ; i < W; ++i ) for ( j = 0 ; j < K; ++j ) send Komó rka [ i ] [ j ]. ± wiat [ i ] [ j ] ; for ( i = 0 ; i < W K; ++i ) { bool x ; receive ( ai, aj, x ) ; ± wiat [ a i ] [ a j ] = x ; p i s z ( ± wiat ) ; int wymien ( int di, int dj, int e, bool w) { int z = 0 ; for ( int y = 0 ; y < 2 ; ++y ) for ( int s = 0 ; s < 4 ; ++s ) i f ( y == e ) { // j a n a j p i e r w wysy ªam send Komó rka [ ( i + di + W) % W] [ ( j + dj + K) % K]. w; int d = di ; di = dj ; dj = d ; else { // a j a n a j p i e r w odbieram bool x ; receive x ; i f ( x ) ++z ; return z ; process Komó rka [ i : 0..W 1][ j : 0..K 1] { bool w; receive w; for ( int g = 0 ; g < N; ++g ) { int z = wymien (1, 0, ( i + j ) % 2, w) ; z += wymien (1, 1, i % 2, w) ; w = ( z == 3) ( z == 2 && w) ; send y c i e. ( i, j, w) ; 5

4 Mno»enie macierzy System skªadaj cy si z procesu Serwer oraz N > 0 procesów Pracownik liczy kwadraty wczytywanych macierzy rozmiaru K x K, gdzie K > 1 i K K <= N. Proces Serwer dziaªa w niesko«czonej p tli. Wczytuje w niej, funkcj void c z y t a j ( f l o a t [ ] [ ] &m) ; macierz M o rozmiarze K x K. Zgªaszaj cym si do niego procesom Pracownik przekazuje po jednym elemencie macierzy M. Nast pnie odbiera od nich elementy kwadratu macierzy M i, po zebraniu wszystkich, wypisuje wynik funkcj void p i s z ( f l o a t [ ] [ ] m) ; Pracownik, równie» w niesko«czonej p tli, odpoczywa wykonuj c void wª asnesprawy ( ) ; a nast pnie zgªasza Serwerowi gotowo± wykonania oblicze«. Otrzymuje od niego jeden element macierzy M, z wiersza i, kolumny j a od pozostaªych pracowników zdobywa wszystkie elementy z tego wiersza i kolumny. Nast pnie liczy warto± z wiersza i kolumny j w macierzy wynikowej i przekazuje j do Serwera. Zapisz tre±ci procesów Serwer i Pracownik. Postaraj si zminimalizowa rozmiar pami ci ka»dego z procesów, liczb przesyªanych komunikatów i ich rozmiar. Rozwi zanie #define N 1000 #define K 20 void wª asnesprawy ( ) ; void c z y t a j ( f l o a t [ ] [ ] &m) ; void p i s z ( f l o a t [ ] [ ] m) ; void r o z d a j ( ) { int i, j, n ; int o s t a t n i W i e r s z [K] ; int ostatniakolumna [K] ; int poprzedni [K] ; for ( i = 0 ; i < K; ++i ) { receive zg ª aszamsi (n ) ; o s t a t n i W i e r s z [ i ] = poprzedni [ i ] = n ; for ( i = 0 ; i < K 1 ; ++i ) receive zg ª aszamsi ( ostatniakolumna [ i ] ) ; ostatniakolumna [K 1 ] = o s t a t n i W i e r s z [K 1 ] ; for ( i = K 2 ; i >= 0 ; i ) { poprzedni [K 1 ] = ostatniakolumna [ i ] ; for ( j = K 2 ; j >= 0 ; j ) { receive zg ª aszamsi (n ) ; send Pracownik [ n ]. ( i, j, poprzedni [ j ], poprzedni [ j + 1 ], m[ i ] [ j ] ) ; poprzedni [ j ] = n ; 6

send Pracownik [ ostatniakolumna [ i ] ]. ( i, K 1, n, ostatniakolumna [ i + 1 ], m[ i ] [K 1 ] ) ; for ( j = 0 ; j < K 1 ; ++j ) send Pracownik [ o s t a t n i W i e r s z [ j ] ]. ( K 1, j, poprzedni [ j ], o s t a t n i W i e r s z [ j + 1 ], m[k 1 ] [ j ] ) ; send Pracownik [ o s t a t n i W i e r s z [K 1 ] ]. (K 1, K 1, poprzedni [K 1 ], poprzedni [ 0 ], m[k 1 ] [K 1 ] ) ; process Serwer { f l o a t [ ] [ ] m; c z y t a j (m) ; r o z d a j (m) ; for ( int i = 0 ; i < K K; ++i ) { int ai, a j ; f l o a t w; receive ( ai, aj, w) ; m[ a i ] [ a j ] = w; p i s z (m) ; process Pracownik [ n : 1..N] { int i, j, ni, nj ; f l o a t moja ; f l o a t [ ] wiersz, kolumna ; bool mamwiersz, mamkolumn ; wª asnesprawy ( ) ; send Serwer. zg ª aszamsi (n ) ; receive ( i, j, ni, nj, moja ) ; i f ( i == 0) { f l o a t nowakolumna [K] ; nowakolumna [ 0 ] = moja ; send Pracownik [ nj ]. budowanakolumna ( nowakolumna ) ; i f ( j == 0) { f l o a t nowywiersz [K] ; nowywiersz [ 0 ] = moja ; send Pracownik [ ni ]. budowanywiersz ( nowywiersz ) ; mamwiersz = f a l s e ; mamkolumn = f a l s e ; while (! ( mamwiersz && mamkolumn ) ) select { on budowanywiersz ( w i e r s z ) { 7

w i e r s z [ j ] = moja ; i f ( j < K 1) { send Pracownik [ nj ]. budowanywiersz ( w i e r s z ) ; else send Pracownik [ nj ]. gotowywiersz ( w i e r s z ) ; on budowanakolumna ( kolumna ) { kolumna [ i ] = moja ; i f ( i < K 1) { send Pracownik [ ni ]. budowanakolumna ( kolumna ) ; else send Pracownik [ ni ]. gotowakolumna ( kolumna ) ; on gotowywiersz ( w i e r s z ) { mamwiersz = true ; i f ( j < K 1) send Pracownik [ nj ]. gotowywiersz ( w i e r s z ) ; on gotowakolumna ( kolumna ) { mamkolumn = true ; i f ( i < K 1) send Pracownik [ ni ]. gotowakolumna ( kolumna ) ; wynik = 0. 0 ; for ( int p = 0 ; p < K; ++p) wynik += w i e r s z [ p ] kolumna [ p ] ; send Serwer. ( i, j, wynik ) ; 8