Kolokwium 1
1. Należy zmodyfikować tabelki kosztu algorytmów sortowania bąbelkowego, przez selekcję i wstawianie, jeśli wiadomo, że liczby sortowane są już posortowane rosnąco.
Czy czas sortowania się zmniejszył, czy zwiększył – podaj oszacowanie, o ile się zmienił?
2. Należy zmodyfikować tabelki kosztu algorytmów sortowania bąbelkowego, przez selekcję i wstawianie, jeśli wiadomo, że liczby sortowane są już posortowane malejąco. Czy czas sortowania się zmniejszył, czy zwiększył – podaj oszacowanie, o ile się zmienił?
3. Lider jest takim elementem zbioru, który występuje więcej niż n/2, gdzie n jest liczbą elementów zbiorze.
a. zastosuj algorytm zliczania liczby poszczególnych wartości w zbiorze nieposortowanym (podobnie jak w algorytmie sortowania przez zliczanie) ).
b. wyznacz wartość lidera, jeśli taki istnieje.
c. wykonaj tabelkę kosztu algorytmu zapisanego w pseudokodzie lub języku C/C++.
Kolokwium 2
1. Napisz algorytm sortowania pozycyjnego dla ciągu Lp.3, Lp.2,Lp.1 …..,Lp.100. (Ciąg wyjściowy: Lp.1….Lp.K). Wykonaj tabelkę kosztu algorytmu napisanego w pseudokodzie lub w języku C/C++.
2. Napisz algorytm sortowania pozycyjnego dla ciągu A+, A-, …5-,2-,2+,5+,Z-,Z+
(Ciąg wyjściowy: 0-,0+,…,5-,5+…Z-,Z+ ). Wykonaj tabelkę kosztu algorytmu napisanego w pseudokodzie lub w języku C/C++.
Kolokwium 3.
Dany ciąg liczbowy umieszczony w pliku zawiera n danych np. 12 0 3 7 3 5 14 1 18 1 1 3 17 12 2).
Przedstaw przebieg tworzenia serii za pomocą algorytmu stogowego w nowym pliku zgodnie z algorytmem podanym na ćwiczeniach.
Kolokwium 4
. Zaprojektuj funkcje Abstrakcyjne typu danych o nazwie Max, który:
Zawsze wstawia liczbę przed równą liczbą, jeśli ta jest już w ciągu. W przeciwnym wypadku wstawia ją na początku ciągu.
Usuwa dany element- jeśli jest wiecej tych elementów, usuwa wszystkie równe zadanej wartości
Wyszukuje zadany element.
Należy zdefiniować nagłówki funkcji oraz wyspecyfikować je wg zadanego wzoru:
void Nazwa funkcji(parametry funkcji);
{działanie:
warunki wstępne:
warunki końcowe: }
np.
void Inicjalizacja(stos & Stos);
{działanie: inicjuje stos
warunki wstępne: Stos wskazuje na pierwszy element warunki końcowe: stos zostaje zainicjowany jako pusty}
Uwaga:
Aby otrzymać oceną 5.0, należy wykonać implementację przynajmniej jednej funkcji zaprojektowanego typu danych w postaci funkcji działających na tablicy. Podczas wstawiania należy rozsuwać elementy, natomiast podczas usuwania należy zsuwać elementy tablicy.
. Przykład
Stos – algorytm
Stos jest jednym z najważniejszych typów danych, które wstawiają i usuwają dane ze zbioru danych w tym samym miejscu zwanym szczytem stosu
1. ETAP 1 - OPIS ADT
Nazwa typu: Stos elementów
Własności typu: Potrafi przechować ciąg elementów o dowolnym rozmiarze Dostępne działania:
Inicjalizacja stosu
Określenie, czy stos jest pusty Dodanie elementu do stosu, Usuwanie ze stosu,
Etap 2 - Budowa interfejsu
typedef int dane;
{typ informacji umieszczanej na stosie}
const long N=11;
struct stos { int pierwszy;
dane tab[N];
};
void Inicjalizacja(stos & Stos);
{działanie: inicjuje stos
warunki wstępne: Stos wskazuje na pierwszy element warunki końcowe: stos zostaje zainicjowany jako pusty}
inline int Pusty(stos Stos) { return Stos==NULL; } {działanie: określa, czy stos jest pusty; typ inline, bo często wywoływana
warunki wstępne: Stos jest zainicjowany,
warunki końcowe: funkcja zwraca 1, jeśli stos pusty, w przeciwnym wypadku 0}
int Wstaw( stos& Stos, dane Dana);
{działanie: dodaje element na początek ciągu, zwany szczytem stosu Stos
warunki początkowe: Dana jest daną do wstawienia na szczyt zainicjowanego stosu
warunki końcowe: jeśli to możliwe, funkcja dodaje daną Dana na szczyt stosu i zwraca wartość 1, w przeciwnym wypadku 0 }
dane Usun(stos& Stos);
{działanie: jeśli stos nie jest pusty, usuwa element ze szczytu stosu, czyli element ostatnio wstawiony do stosu warunki początkowe: Stos jest zainicjowanym niepustym stosem
warunki końcowe: funkcja usuwa element na szczycie stosu i zwraca umieszczoną tam daną}
Etap 3. Implementacja stosu za pomocą tablicy
Założenie: najefektywniejsze rozwiązanie stosu za pomocą tablicy – szczyt stosu to ostatni element wstawiony tablicy począwszy od miejsca o indeksie 0 (jeśli liczba elementów w tablicy jest równa pierwszy, to kolejny element jest wstawiany na pozycji pierwszy, o ile jest miejsce w tablicy)
void Inicjalizacja(stos& Stos) { Stos.pierwszy = 0; } inline int Pusty(stos Stos)
{ return Stos.pierwszy==0; } //stos jest pusty, gdy liczba elementów jest równa zero int Wstaw(stos& Stos, dane Dana)
{ if (Stos.pierwszy==N) return 0; //nie można wstawić do stosu, gdy jest pełen Stos.tab[Stos.pierwszy++]= Dana;
return 1;
}
dane Usun(stos& Stos) {
int pierwszy= --Stos.pierwszy; //wyznaczenie indeksu elementu usuwanego ze stosu dane d= Stos.tab[pierwszy];
return d;}