Metody programowania / Ćwiczenia 5: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
 
(Nie pokazano 3 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 149: Linia 149:


Program dźwigu składa się z ciągu instrukcji. Każda z instrukcji opisuje jeden ruch dźwigu. Instrukcja programu ma postać trójki (x,y,z), gdzie 1 < x < y < z < n+p+q, i określa numery wagonów, na które dźwig ma ustawić kontenery. Jeżeli po wykonaniu programu na każdym spośród n pierwszych wagonów pociągu znajduje się dokładnie jeden kontener, to mówimy, że program jest poprawny.
Program dźwigu składa się z ciągu instrukcji. Każda z instrukcji opisuje jeden ruch dźwigu. Instrukcja programu ma postać trójki (x,y,z), gdzie 1 < x < y < z < n+p+q, i określa numery wagonów, na które dźwig ma ustawić kontenery. Jeżeli po wykonaniu programu na każdym spośród n pierwszych wagonów pociągu znajduje się dokładnie jeden kontener, to mówimy, że program jest poprawny.
 
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
{{wskazowka| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka</span>
<div class="mw-collapsible-content" style="display:none">
Idziemy po kolei od i=1 i jesli i-ty wagon jest wolny to wstawiamy i,i+p,i+p+q (zał. że p<=q) jesli sie da, wpp. i,i+q,i+p+q. Tylko dlaczego to jest dobrze?
Idziemy po kolei od i=1 i jesli i-ty wagon jest wolny to wstawiamy i,i+p,i+p+q (zał. że p<=q) jesli sie da, wpp. i,i+q,i+p+q. Tylko dlaczego to jest dobrze?
</div>
</div>
</div>
</div>
}}
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
 
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie</span>
{{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">
  '''procedure''' Dzwig(n,p,q:integer);
  '''procedure''' Dzwig(n,p,q:integer);
  // n,p,q>=1
  // n,p,q>=1
Linia 190: Linia 191:
</div>
</div>
</div>
</div>
}}


==Zadanie 4 (Uczta kinomana)==
==Zadanie 4 (Uczta kinomana)==
Dany jest zbiór N seansów, z podanymi godzinami rozpoczęcia i zakończenia. Ile maksymalnie seansów może obejrzeć zapalony kinoman, przy założeniu, że seansy zawsze ogląda w całości, nigdy nie ogląda dwóch filmów na raz i dowolnie szybko może przejść z jednego seansu na inny?
Dany jest zbiór N seansów, z podanymi godzinami rozpoczęcia i zakończenia. Ile maksymalnie seansów może obejrzeć zapalony kinoman, przy założeniu, że seansy zawsze ogląda w całości, nigdy nie ogląda dwóch filmów na raz i dowolnie szybko może przejść z jednego seansu na inny?


{{wskazowka| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka</span>
<div class="mw-collapsible-content" style="display:none">
Należy zawsze wybierać te seanse, które najwcześniej się kończą.
Należy zawsze wybierać te seanse, które najwcześniej się kończą.
</div>
</div>
</div>
</div>
}}
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
 
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie</span>
{{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">
  '''function''' Kinoman(N:integer; S:'''array'''[1..N] '''of''' '''record''' r,z:integer; tytul:string '''end'''):integer;
  '''function''' Kinoman(N:integer; S:'''array'''[1..N] '''of''' '''record''' r,z:integer; tytul:string '''end'''):integer;
  // N>=1
  // N>=1
Linia 234: Linia 235:
</div>
</div>
</div>
</div>
}}


==Zadanie 5 (Autostrada)==
==Zadanie 5 (Autostrada)==
Linia 242: Linia 241:
Można założyć, że odległości stacji od siebie oraz od początku i końca trasy są mniejsze niż n.
Można założyć, że odległości stacji od siebie oraz od początku i końca trasy są mniejsze niż n.


{{wskazowka| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka</span>
<div class="mw-collapsible-content" style="display:none">
Należy zawsze jechać tak daleko jak się da.
Należy zawsze jechać tak daleko jak się da.
</div>
</div>
</div>
</div>
}}
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
 
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie</span>
{{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">
  '''procedure''' Autostrada(n:real; M:integer; B:'''array'''[1..M] '''of''' real);
  '''procedure''' Autostrada(n:real; M:integer; B:'''array'''[1..M] '''of''' real);
  // n>0, M>=0, B posortowane
  // n>0, M>=0, B posortowane
Linia 276: Linia 277:
</div>
</div>
</div>
</div>
}}
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
 
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Ćwiczenie</span>
{{cwiczenie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">
Jak należy zmienić powyższą procedurę, gdybyśmy zrezygnowali z założenia o dobrym rozmieszczeniu stacji? Procedura powinna wypisywać "Nie da się" lub wskazywać stacje na których należy tankować.
Jak należy zmienić powyższą procedurę, gdybyśmy zrezygnowali z założenia o dobrym rozmieszczeniu stacji? Procedura powinna wypisywać "Nie da się" lub wskazywać stacje na których należy tankować.
</div>
</div>
</div>
</div>
}}


==Zadanie 6 (Wbijanie gwoździ)==
==Zadanie 6 (Wbijanie gwoździ)==
Na nieskończenie długiej desce leżą nieskończenie cienkie (za to skończone) listewki. Jaka jest minimalna liczba gwoździ potrzebna do przybicia wszystkich listewek do deski? Zakładamy, że gwóźdź wbity w danym miejscu przybija wszystkie listewki przez które przechodzi, również jeśli jest wbity na samym końcu danej listewki. Początki i końce każdej z N listewek dane są w tablicy L rekordów o polach l i p typu real. Ponadto listewki nie moga mieć zerowej długości.
Na nieskończenie długiej desce leżą nieskończenie cienkie (za to skończone) listewki. Jaka jest minimalna liczba gwoździ potrzebna do przybicia wszystkich listewek do deski? Zakładamy, że gwóźdź wbity w danym miejscu przybija wszystkie listewki przez które przechodzi, również jeśli jest wbity na samym końcu danej listewki. Początki i końce każdej z N listewek dane są w tablicy L rekordów o polach l i p typu real. Ponadto listewki nie moga mieć zerowej długości.


{{wskazowka| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka</span>
<div class="mw-collapsible-content" style="display:none">
Należy posortować listewki wg końców i wbijać gwoździe tak daleko jak tylko się da.
Należy posortować listewki wg końców i wbijać gwoździe tak daleko jak tylko się da.
</div>
</div>
</div>
</div>
}}
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
 
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie</span>
{{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">
  '''function''' Wbijaj(N:integer; L:'''array'''[1..N] '''of''' '''record''' l,p:real '''end'''):integer;
  '''function''' Wbijaj(N:integer; L:'''array'''[1..N] '''of''' '''record''' l,p:real '''end'''):integer;
  // N>0, dla i=1..N, L[i].l<L[i].p
  // N>0, dla i=1..N, L[i].l<L[i].p
Linia 323: Linia 324:
</div>
</div>
</div>
</div>
}}

Aktualna wersja na dzień 22:10, 28 maj 2020

To są ćwiczenia z programowania zachłannego

Oglądaj wskazówki i rozwiązania __SHOWALL__
Ukryj wskazówki i rozwiązania __HIDEALL__


Zadanie 1 (Pokrycie punktów odcinkami jednostkowymi)

Podaj algorytm obliczający dla zadanego ciągu liczb rzeczywistych a1,,an opisujących punkty leżące na prostej, minimalną liczbę jednostkowych domkniętych odcinków na prostej pokrywających wszystkie punkty a1,,an.

Wskazówka

Rozwiązanie

Zadanie 2 (Planowanie zajęć w salach)

Mamy dany zbiór N zajęć (każde zajęcia, mają swój czas rozpoczęcia i większy od niego czas zakończenia) oraz nieskończony zbiór sal. Należy policzyć najmniejszą liczbę sal potrzebną aby zaplanować wszystkie zajęcia. Oczywiście w danym momencie w jednej sali mogą się odbywać tylko jedne zajęcia.

Wskazówka 1

Wskazówka 2

Rozwiązanie

Ćwiczenie

Zadanie 3 (Dźwig)

Trójramienny dźwig ustawia kontenery na wagonach kolejowych. Wagony są ponumerowane kolejno 1, 2, ... . Na każdym wagonie można postawić co najwyżej jeden kontener. W jednym ruchu dźwig pobiera ze składowiska trzy kontenery i ustawia je na wagonach o numerach i, i+p oraz i+p+q, albo na wagonach o numerach i, i+q oraz i+p+q (dla pewnych stałych p,q>=1). Dźwig trzeba zaprogramować tak, żeby załadował kontenerami pierwsze n wagonów pociągu (pociąg ma n+p+q wagonów).

Program dźwigu składa się z ciągu instrukcji. Każda z instrukcji opisuje jeden ruch dźwigu. Instrukcja programu ma postać trójki (x,y,z), gdzie 1 < x < y < z < n+p+q, i określa numery wagonów, na które dźwig ma ustawić kontenery. Jeżeli po wykonaniu programu na każdym spośród n pierwszych wagonów pociągu znajduje się dokładnie jeden kontener, to mówimy, że program jest poprawny.

Wskazówka

Rozwiązanie

Zadanie 4 (Uczta kinomana)

Dany jest zbiór N seansów, z podanymi godzinami rozpoczęcia i zakończenia. Ile maksymalnie seansów może obejrzeć zapalony kinoman, przy założeniu, że seansy zawsze ogląda w całości, nigdy nie ogląda dwóch filmów na raz i dowolnie szybko może przejść z jednego seansu na inny?

Wskazówka

Rozwiązanie

Zadanie 5 (Autostrada)

Jedziesz samochodem po autostradzie. Pełny bak benzyny pozwala na przejechanie n kilometrów. Wzdłuż autostrady rozmieszczonych jest M stacji benzynowych, których rozmieszczenie podane jest w tablicy B (odległośi kolejnych stacji od początku autostrady). Wypisz na których stacjach należy tankować, by przejechać do ostatniej stacji przy jak najmniejszej liczbie postojów na pozostałych stacjach benzynowych.

Można założyć, że odległości stacji od siebie oraz od początku i końca trasy są mniejsze niż n.

Wskazówka

Rozwiązanie

Ćwiczenie

Zadanie 6 (Wbijanie gwoździ)

Na nieskończenie długiej desce leżą nieskończenie cienkie (za to skończone) listewki. Jaka jest minimalna liczba gwoździ potrzebna do przybicia wszystkich listewek do deski? Zakładamy, że gwóźdź wbity w danym miejscu przybija wszystkie listewki przez które przechodzi, również jeśli jest wbity na samym końcu danej listewki. Początki i końce każdej z N listewek dane są w tablicy L rekordów o polach l i p typu real. Ponadto listewki nie moga mieć zerowej długości.

Wskazówka

Rozwiązanie