# Ćwiczenia 1, grupa cz. 14-16, 10 października 2024
###### tags: `PRW24` `ćwiczenia` `pwit`
## Deklaracje
Gotowość rozwiązania zadania należy wyrazić poprzez postawienie X w odpowiedniej kolumnie! Jeśli pożądasz zreferować dane zadanie (co najwyżej jedno!) w trakcie dyskusji oznacz je znakiem ==X== na żółtym tle.
**UWAGA: Tabelkę wolno edytować tylko wtedy, gdy jest na zielonym tle!**
:::danger
| | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| --------------------------:| ----- | --- | --- | --- | --- | --- | --- |
Kacper Osadowski | | X | X | X | X | X | X |
Justyna Adamczyk | | X | X | X |==X==| X | X |
Kalina Białek | X | X | X | X | X | X | |
Mateusz Budzyński | X | X |==X==| X | X | X | |
Karol Burczyk | X | X | X | X | X | X | |
Krystian Ćwikliński | X | X | X | X | X | X | X |
Jacek Długopolski | | | | | | | |
Mikołaj Dygoń | X | X | X | X | X |==X==| X |
Jose Javier Garcia Torrejon | X |X | X | X | X | X| X |
Mateusz Garncarczyk | X | X | X | X | X | X | |
Mikołaj Komarnicki | X | | | | | | |
Beata Łakoma | X | X | X | X | X | X | X |
Patryk Maciąg | | | | | | | |
Jakub Malczak | ==X== | X | X | X | X | X | X |
Wiktor Małek | X | X | X | X | X | X | X |
Piotr Stachowicz | X | X | X | X | X | X | X |
Yana Vashkevich | X | X | X | X | X | X | |
Dominik Walecko | X | X | X | X | X | X | X |
Natalia Zychowicz | X |==X==| X | X | X | X | |
:::
:::info
**Uwaga:** Po rozwiązaniu zadania należy zmienić kolor nagłówka na zielony.
:::
## Zadanie 1
:::success
Autor: Jakub Malczak
:::

$$P_1=C_1V_1^2f_1$$
Jeśli chcemy, aby algorytm wykonał się w tym samym czasie to możemy zmniejszyć częstotliwość dwukrotnie.
$$f_2=\frac{f_1}{2}$$
Wiemy, że napięcie jest liniowo zależne od częstotliwości.
$$V_2=\frac{V_1}{2}$$
Wiemy, że pojemność jest liniowo zależna od liczby tranzystorów. Założmy, że podwojenie liczby tranzystorów zwiększy nam liczby rdzeni do 2.
$$C_2=2C_1$$
$$P_2=C_2V_2^2f_2=\frac{C_1V_1^2f_1}{4}=\frac{P_1}{4}$$
Zatem możemy zaprojektować taki procesor. $\space\square$
## Zadanie 2
:::success
Autor: Natalia Zychowicz
:::



## Zadanie 3
:::success
Autor: Mateusz Budzyński
:::
Pomysł na zadanie:
Zamiast posiadania jednej puszki ze sznurkiem, trzymanym przez Alicję lub Boba możemy korzystać z dwóch jednocześnie które będą reprezentować odwrotne stany. To znaczy Alicja będzie trzymać sznurek który będzie przewracać puszkę Boba a Bob będzie trzymał sznurek przewracający puszkę Alicji. Początkowy stan puszek możemy wyznaczyć jako 0,1 reprezentujący sytuację w której jedzenie zostało podane Smokom ale smoki jeszcze nie weszły do jeziora. W przypadku zmiany sytuacji Bob szarpiąc za sznurek i wywracając puszkę Alicji spowrotem stawia swoją zmieniając jej stan na 1 a Alicji na 0. Taka sytuacja zapętla się pozwalając wykonać akcję jednej stronie tylko wtedy gdy wskazuje na to puszka oraz rozwiązanie działa w przypadku mgły, ponieważ widząc stan swojej puszki Alicja może wydedukować stan puszki Boba i na odwrót.
Wzajemne wykluczanie: Bob wchodzi do jeziora w momencie w którym widzi ,że jego puszka została przewrócona, a
Alicja przewraca puszkę Boba tylko w momencie w którym Smoki zjadły i wyszły z jeziora. W drugą stronę tak samo.
Nie zagłodzenie: W momencie skończenia wykonania akcji jednej osoby np. Alicji, natychmiast dochodzi do zmienienia
stanu puszki co rozpoczyna wykonanie akcji Boba, zaś wykonanie akcji Boba, rozpoczyna wykonanie akcję Alicji i tak w kółko.
Producent-konsument: mocno powiązane z poprzednim podpunktem, akcja Alicji i wykonuje się tylko wtedy gdy wykonała się akcja Boba a to
gwarantuje jedzenie w jeziorze. Akcja Boba wykonuje się tylko gdy wykonała się akcja Alicji a to gwarantuje puste jezioro.
## Zadanie 4
:::success
Autor: Piotr Stachowicz
### Treść
##### Które z poniższych zdań definiują własności
- bezpieczeństwa (“nigdy nic złego się nie stanie”) a które
- żywotności (“kiedyś stanie się coś pożądanego”).
### Zdania
1. Klienci są obsługiwani zgodnie z kolejnością przybycia.
2. Co idzie do góry, musi zejść na dół.
3. Jeśli co najmniej dwa wątki oczekują na wejście do sekcji
krytycznej, to przynajmniej jednemu to się udaje.
4. Jeśli nastąpi przerwanie, to w ciągu sekundy drukowany
jest komunikat.
5. Jeśli nastąpi przerwanie, to drukowany jest komunikat.
6. Koszt życia nigdy nie spada.
7. Dwie rzeczy są pewne: śmierć i podatki.
<pre>
1. bezpieczeństwo - każdy z klientów zostanie obsłużony po sobie, więc potraktowany sprawiedliwie
2. żywotność - w końcu zejdziemy na dół, po wejściu do góry. Jest to coś pożądanego co kiedyś się wydarzy.
3. żywotność - pożądane jest, że któremuś uda się kiedyś wejść do sekcji krytycznej
4. żywotność - pożądamy komunikatu o przerwaniu w ciągu sekundy
5. żywotność - pożądamy komunikatu o przerwaniu
6. bezpieczeństwo - "nigdy nic złego się nie stanie", koszt życia nigdy nie spada
7. żywotność - "kiedyś stanie się coś pożądanego", nikt z nas nie chce być chyba nieśmiertelnym
</pre>
:::
## Zadanie 5
:::success
Autor: Justyna Adamczyk
Wybieramy jedną osobę która będzie odpowiedzialna za liczenie
Wybrana osoba :
-Jeśli jest wyłączony to pozostawia wyłączony
-Jeśli jest włączony to zgasza i zlicza ilość. Kiedy doliczy do n-1 razy deklaruje że wszystkie osoby były.
Posostali:
-Jeśli jest wyłączony to włącza przełącznik ale tylko raz
-Jeśli jest włączony to zostawia w takim stanie
:::
## Zadanie 6
:::success
Autor: Mikołaj Dygoń

Rozwiązanie 1:
Lider:
- zaczyna z sumą = 0
- jeżeli widzi dźwignię włączoną - opuszcza ją i do sumy dodaje 1
- w p.p. nic nie robi
- jeżeli suma wynosi 2 (n - 1) ogłasza zwycięstwo
Pozostali:
- jeżeli widzą opuszczoną dźwignię i zrobili to wcześniej co najwyżej raz - włączają dźwignię
- w p.p. nic nie robią
Rozwiązanie 2:
Lider:
- zaczyna z sumą = 0
- jeżeli widzi włączoną dźwignię i nie włączał jej ostatnio - dolicza 1 do sumy i wyłącza dźwignię
- w.p.p zmienia położenie dźwigni
- jeżeli suma wynosi n - 1 ogłasza zwycięstwo
Pozostali:
- jeżeli podczas poprzednich wizyt widział dźwignię w obydwu stanach oraz dźwignia jest wyłączona i nigdy wcześniej tego nie robił - włącza ją
- w.p.p. nic nie robi
:::
## Zadanie 7
:::success
Autor: Krystian Ćwikliński
:::

#### Zakleszczenie może nastąpić gdy wszystkie pałeczki są wolne a kazdy filozof zacznie kolejno brać pałeczki, wówczas każdy z nich weźmie do ręki lewą pałeczkę tym samym zmuszając filozofa po lewej do czekania na tą samą pałeczkę (dla niego to prawa)
Pozbędziemy się tego problemu przypisując parzystym filozofom inną kolejność brania pałeczek:
- Filozofowie parzyści będą najpierw brać pałeczkę z prawej strony a potem czekać na lewą
- Filozofowie nieparzyści będą najpierw brać pałeczkę z lewej strony i czekać na prawą
#### Kod orginalny:
```java
public void run() {
Random random = new Random();
while (true) {
try {
sleep(random.nextInt(1000));
sleep(100);
System.out.println("Philosopher " + id + " is hungry");
left.get();
right.get();
left.put();
right.put();
} catch (InterruptedException ex) {
return;
}
}
}
```
#### Kod po modyfikacji:
```java
public void run() {
Random random = new Random();
while (true) {
try {
sleep(random.nextInt(1000));
System.out.println("Philosopher " + id + " is hungry");
if (id % 2 == 0) {
right.get();
left.get();
} else {
left.get();
right.get();
}
System.out.println("Philosopher " + id + " is eating");
sleep(100);
left.put();
right.put();
System.out.println("Philosopher " + id + " finished eating");
} catch (InterruptedException ex) {
return;
}
}
}
```