1 Proste programy na tablicach 2 Doskonalenie umiejętności pracy

Transkrypt

1 Proste programy na tablicach 2 Doskonalenie umiejętności pracy
1
Proste programy na tablicach
1. Napisz program, który wczyta 15 liczb róznych liczb całkowitych do jednowymiarowej tablicy, a nastepnie znajduje najwieksza i najmniejsza z nich,
a takze ich pozycje w zbiorze.
2. Napisz program, w którym zadeklarujesz i zainicjujesz dowolnymi wartosciami (inicjacja w momencie deklaracji), dwie tablice liczb (10-15 pozycji), a nastepnie do trzeciej tablicy wpisz odpowiednio: element pierwszy
w tablicy 3 – sume pierwszego elementu z tablicy 1 i ostatniego z tablicy 2 element drugi w tablicy 3 – sume drugiego elementu z tablicy 1 i
przedostatniego z tablicy 2, itd.
3. Napisz program obliczajacy sumy kolumn, sumy wierszy i sumy obu przekatnych macierzy prostokatnej o ustalonym dowolnym wymiarze (np. 20
x 20). Zawartosc i analizowany zakres macierzy wczytywana ma byc od
uzytkownika. Poza wyliczonymi sumami wyswietl równiez sama macierz.
2
Doskonalenie umiejętności pracy z tablicami
liczb
Ćwiczenie ma na celu zapoznanie studentów z wybranymi metodami sortowania wewnętrznego. Badane w ćwiczeniu metody sortowania to: sortowanie przez
proste wstawianie, sortowanie przez proste wybieranie, sortowanie bąbelkowe,
sortowanie szybkie (quick sort). Zakładamy, że długość tablicy podlegającej sortowaniu jest znana i wynosi n. Metody sortowania:
2.1
Sortowanie przez proste wstawianie
Sortowanie przez proste wstawianie odbywa się w następujący sposób: dla każdego i = 2, 3, ..., n trzeba powtarzać wstawianie a[i] w już uporządkowaną część
tablicy a[1] . . . a[i − 1]. W metodzie tej obiekty podzielone są umownie na dwa
ciągi: ciąg wynikowy a1 . . . ai−1 oraz ciąg źródłowy ai . . . an . W każdym kroku
począwszy od i = 2 i zwiększając i o jeden, i-ty element ciągu źródłowego przenosi się do ciągu wynikowego, wstawiając go w odpowiednim miejscu.
Algorytm:
1. Wykonaj co następuje począwszy od indeksu i = 2 do i = n
• Wskaż na i-ty element
• Wstaw i-ty element w odpowiednim miejscy w a1 ...ai
2.2
Sortowanie przez proste wybieranie
Sortowanie przez proste wybieranie polega na wyznaczeniu najmniejszego elementu w ciągu; zamianie go z pierwszym elementem w ciągu, wyznaczeniu najmniejszego elementu w a[2, n] i zamianie go z drugim elementem: wyznaczeniu
1
najmniejszego elementu w a[3, n] i zamianie go z trzecim elementem itd. aż do
posortowania całkowitego ciągu.
Algorytm:
1. Wykonaj co następuje n − 1 razy (i = 1 do i = n − 1)
• Wskaż na najmniejszy element spośród a[i]...a[n];
• Wymień go z ai
2.3
Sortowanie bąbelkowe
Sortowanie bąbelkowe polega na przeglądaniu od końca sortowanej tablicy i zamianie miejscami elementów jeśli są one w kolejności odwrotnej tj. pierwszy jest
mniejszy od drugiego. Po zakończeniu pierwszego przejścia element najmniejszy
powinien się znajdować na odpowiednim dla niego miejscu czyli na początku
tablicy.
Algorytm:
1. Wykonaj co następuje n − 1 razy (i = n − 1, ..., 1)
• Wskaż na ostatni element;
• Wykonaj co następuje i razy
(a) Porównaj wskazany element z elementem poprzednim
(b) Jeśli porównane elementy są w nie właściwej kolejności, zamień
je miejscami
(c) Wskaż na następny element
2.4
Sortowanie szybkie (Quick Sort)
Jest to metoda, w której stosuje się zasadę zamiany. W metodzie sortowania
szybkiego korzysta się z faktu, że w celu zapewnienia efektywności powinno się
wymieniać obiekty położone daleko od siebie. Załóżmy że dane jest n obiektów
ustawionych w odwrotnym porządku kluczy. Można posortować je wykonując
tylko n/2 wymian, biorąc najpierw obiekty - skrajny z lewej strony i skrajny z
prawej strony, a następnie posuwać się stopniowo do środka z obu stron. Oczywiście takie postępowanie możliwe jest tylko dlatego, że uporządkowanie było
dokładnie odwrotne.
Wybierzmy losowo jakiś obiekt i nazwijmy go x; przeglądajmy tablicę od
lewej strony aż znajdziemy obiekt ai > x, a następnie przeglądajmy tablicę od
prawej strony aż znajdziemy aj < x. Wymieńmy teraz te dwa obiekty i kontynuujmy proces przeglądania i zamiany, aż nastąpi spotkanie gdzieś w środku
tablicy. W rezultacie otrzymamy tablicę podzieloną na lewą część z kluczami
mniejszymi od x oraz prawą część z kluczami większymi od x.
Jeżeli na przykład za x wybierzemy środkowy klucz 42, to w tablicy kluczy
44 55 12 42 94 6 18 67
trzeba dokonać dwóch wymian aby otrzymać tablicę podzieloną
2
18 6 12 42 94 55 44 67
Ostatnie wartości indeksów są i = 5 oraz j = 3. Klucze a1 ...ai−1 są mniejsze
bądź równe kluczowi x = 42, klucze aj+1 ...an są większe bądź równe temu
kluczowi. Wynika stąd, że otrzymaliśmy podział na dwie części, a mianowicie
ak.klucz x.klucz dla k = 1...i − 1
ak.klucz x.klucz dla k = j + 1...n
oraz
ak.klucz = x.klucz dla k = j + 1...i − 1
Następnie powtarzamy tę operacje dla obu wcześniej utworzonych podciągów.
Algorytm
założenie: Istnieje ciąg liczb xl , xl+1 , xp ,
1. Przyjmij za element podziału element v znajdujący się w pobliżu środka
ciągu, i podziel tym elementem dany ciąg. Oznacza to, że v znajdzie się na
pozycji elementu xk , dla pewnego k spełniającego l ¬ k ¬ p, i elementy
na lewo będą od niego nie większe a elementy na prawo od niego będą nie
mniejsze.
2. Zastosuj ten sam algorytm do (l, k − 1, x)
3. Zastosuj ten sam algorytm do (k + 1, p, x)
Algorytm ten jest bardzo prosty i efektywny, ponieważ zmienne i, j oraz x mogą
być w czasie przeglądania tablicy trzymane w szybkich rejestrach maszyny cyfrowej.
3
Ćwiczenia proponowane przez wykładowcę —
przetwarzanie tablic.
1. Roczne przychody. Program ten będzie wczytywał przychody osiągnięte
przez podatnika w kolejnych miesiącach roku podatkowego. Scenariusz
działania programu: Program wyświetla informację o jego przeznaczeniu.
Program wyświetla menu główne (zobacz str. 22 wykładu o instrukcjach),
pozwalające na wybór następujących opcji:
•
•
•
•
Wczytaj — wczytanie dochodów,
Wyświetl — wyświetlenie wczytanych dochodów,
Średnia i suma — wyznaczenie dochodu średniego i sumarycznego,
Minimalny i maksymalny — wyznaczenie dochodu minimalnego i
maksymalnego,
• Od najmniejszego — wyświetlenie dochodów uporządkowanych rosnąco od najmniejszego do największego,
• Nad i pod średnią — wyświetlenie informacji ile dochodów jest większych od średniego i jaka jest ich suma, oraz ile dochodów jest mniejszych od średniego i jaka jest ich suma.
3
• Koniec — powoduje zakończenie programu.
Po wybraniu odpowiedniej opcji następuje wyznaczenie odpowiednich wielkości, zgodnie z powyższym opisem.
2. Notowania. Makler nadzoruje dzienne notowania pewnej spółki giełdowej. W ciągu dnia pracy, trwającego 8 godzin, makler spisuje kurs spółki
dwukrotnie w ciągu godziny. Należy napisać program, który pozwoli maklerowi ? na podstawie zanotowanych wartości ? na wyznaczenie średniego, minimalnego i maksymalnego kursu obserwowanej spółki. Program
powinien posiadać trzy niezależne opcje: wczytywanie wartości akcji, przeglądanie wprowadzonych wartości akcji, wyznaczanie wartości średniej,
minimalnej i maksymalnej, oraz opcje pozwalającą na zakończenie jego
działania.
4