Nadesłany przez Krzysztof Sośnierz, 09 marca 2011 11:37
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
szukanie_z_wartownikiem_2_c.cpp:
//Szukanie z wartownikiem zadanego elementu w tablicy
//www.algorytm.org
// Wymagane dla operacji wejscia/wyjscia
#include <iostream>
// Funkcja zwraca indeks poszukiwanego elementu "x" w tablicy wskazanej
// przez "array" o liczbie elementow "size", w przypadku gdy pasujacy
// element nie zostal odnaleziony, funkcja zwraca -1.
// Przyjete zostalo zalozenie ze faktyczny rozmiar tablicy to size + 1.
template<typename T> int gsearch(const T& x, T* array, size_t size)
{
// Aktualny indeks w tablicy wskazuje na pierwszy element
size_t i = 0;
// Inicjalizacja wartownika
array[size] = x;
// Powtarzaj dopoki element i jest rozny od x
while (array[i] != x) ++i;
// Zwroc indeks i gdy jest mniejszy od size, w przeciwnym wypadku -1
return i < size ? i : -1;
}
// Funkcja wyswietla tablice wskazna przez "array" o rozmiarze "size"
template<typename T> void printArray(const T* array, size_t size)
{
// Dla kazdego elementu tablicy
for (size_t i = 0; i < size; ++i)
{
// Wyswietl element i, gdy indeks elementu + 1 dzieli sie
// bez reszty przez 10, wstaw znak nowego wiersza,
// w przeciwnym wypadku wstaw znak tabulacji.
std::cout << array[i] << ((i + 1) % 10 == 0 ? "\n" : "\t");
}
}
int main()
{
// Liczba elementow tablicy
const size_t size = 100;
// Przydziel pamiec na size elementow + 1 na wartownika
int *int_array = new int[size + 1];
// Inicjalizacja ziarna generatora liczb pseudo-losowych
srand(time(0));
// Losowa inicjalizacja tablicy
for (size_t i = 0; i < size; ++i)
{
// Wartosc losowa z przedzialu od 0 do 99
int_array[i] = rand() % 100;
}
// Wyswietl tablice
printArray(int_array, size);
// Bedziemy szukac losowej wartosci z przedzialu od 0 do 99
const int val = rand() % 100;
// Znajdz wylosowana wartosc w tablicy
int index = gsearch(val, int_array, size);
if (index < 0)
std::cout << "Element o wartosci " << val << " nie zostal znaleziony" << std::endl;
else
std::cout << "Element o wartosci " << val << " zostal znaleziony na pozycji " << index << std::endl;
// Zwolnij pamiec zajmowana przez tablice
delete[] int_array;
return EXIT_SUCCESS;
}

