Krzysztof Diks, Marcin Kubica |
Tłumaczenie |
W nowym eksperymencie kosmicznym wykorzystanych jest N obiektów ponumerowanych od 1 do N. Wiadomo, że N jest liczbą nieparzystą. Każdy obiekt charakteryzuje się inną, ale nieznaną wagą, wyrażaną liczbą naturalną. Dla każdej wag Y mamy . Obiekt o środkowej wadze to taki obiekt, dla którego mamy tyle samo obiektów od niego cięższych, co lżejszych. Napisz program, który wyznaczy obiekt o środkowej wadze. Niestety jedyny sposób na porównywanie wagi obiektów, to użycie narzędzia, które dla zadanych trzech różnych obiektów wyznacza, który spośród tych trzech obiektów ma środkową wagę.
Dana jest biblioteka device udostępniająca trzy operacjie:
Biblioteka device tworzy dwa pliki tekstowe: MEDIAN.OUT i MEDIAN.LOG. Pierwszy wiersz pliku MEDIAN.OUT zawiera jedną liczbę całkowitą - numer obiektu, który był argumentem Answer. Drugi wiersz jedną liczbę całkowitą - liczbę wywołań funkcji Med3 wykonywanych przez Twój program. Komunikacja pomiędzy Twoim programem i biblioteką jest opisana w pliku MEDIAN.LOG.
Instrukcja dla programujących w Pascalu: Wstaw do kodu źródłowego programu
następujące polecenie dołączające bibliotekę:
uses device;
Instrukcja dla programujących w C/C++: W kodzie źródłowym Twojego
programu użyj polecenia:
\#include
stwórz projekt MEDIAN.PRJ i dodaj do niego pliki
MEDIAN.C ( MEDIAN.CPP) oraz DEVICE.OBJ.
Możesz przetestować swój program tworząc plik tekstowy DEVICE.IN. Plik ten musi zawierać dwa wiersze. W pierwszym wierszu musi być zapisana jedna liczba całkowita: liczba obiektów N. Drugi wiersz musi zawierać liczby całkowite od 1 do N podane w pewnej kolejności - i-ta liczba reprezentuje wagę obiektu nr i.
DEVICE.IN:
5 2 5 4 3 1
Powyższy plik DEVICE.IN opisuje 5 danych obiektów o następujących wagach:
Oto poprawna sekwencja 5-ciu wywołań biblioteki:
function GetN : integer; function Med3 (x, y, z : integer) : integer; procedure Answer (m : integer);
int GetN (void); int Med3 (int x, int y, int z); void Answer (int m);