Tablice w C++

Transkrypt

Tablice w C++
Tablice w C++
Agnieszka Nowak - Brzezińska
29 kwietnia 2010
1
Proste programy na tablicach
1. Napisz program, który wczyta 15 liczb różnych liczb całkowitych do jednowymiarowej tablicy, a następnie znajduje największą i najmniejszą z nich,
a także ich pozycje w zbiorze.
2. Napisz program, w którym zadeklarujesz i zainicjujesz dowolnymi wartościami (inicjacja w momencie deklaracji), dwie tablice liczb (10-15 pozycji), a następnie 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 obliczający sumy kolumn, sumy wierszy i sumy obu przekątnych macierzy prostokątnej o ustalonym dowolnym wymiarze (np. 20x
20). Zawartość i analizowany zakres macierzy wczytywana ma być od użytkownika. Poza wyliczonymi sumami wyświetl również samą macierz.
4. 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, 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,
1
ˆ 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.
ˆ Koniec — powoduje zakończenie programu.
Po wybraniu odpowiedniej opcji następuje wyznaczenie odpowiednich wielkości, zgodnie z powyższym opisem.
5. 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.
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
2
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ą
3
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.
4