You are on page 1of 4

AiSD Lab 2

Wyszukiwanie liniowe/sekwencyjne z wartownikiem


Wyszukiwanie liniowe ( linear search ), zwane również sekwencyjnym polega na przeglądaniu kolejnych
elementów zbioru Z. W algorytmie tym sprawdzamy kolejne elementy zbioru aż do napotkania
poszukiwanego elementu. Wartownik jest dodawany na końcu zbioru, element równy jest poszukiwanemu
elementowi (=klucz). Dzięki temu uzyskujemy zawsze pewność znalezienia poszukiwanego elementu w
zbiorze. Jeśli jest to wartownik, to elementu poszukiwanego w zbiorze nie ma i zwracamy pozycję -1.
Jeśli nie jest to wartownik, to znaleźliśmy poszukiwany element w zbiorze i zwracamy jego pozycję i.
//Kod programu wyszukiwania:
#include <iostream>
//#include <time>
#include <ctime>
#include <cstdlib>
using namespace std;

int WySzukaj (int Z[], int n, int k)


{ int i;
for( i = 0; i <= n; i++ )
if( Z[i] == k ) break;
if (i ==n) return -1;
else return i+1;
}
int main( )
{
int *D, n, k, i, p;
cout <<"Podaj rozmiar tablicy: "<<endl;
cin >> n;
D = new int [n+1];
cout <<"Podaj elementy tablicy: "<<endl;
for( i = 0; i < n; i++ ) { cin >> D[i]; }
cout << "Podaj klucz: ";
cin >> k;
D[n]=k; // wstaw wartownika
//Algorytm wyszukania liniowego klucza „k”
p= -1; //pozycja - brak klucza w tablicy
// for( int i = 0; i <= n; i++ ){
// if ( D[i] == k ) //jeśli jest klucz w tablicy
// { p=i+1; break; //to zapamiętaj pozycję (indeks) klucza
// }
// }
// if (p-1 ==n) p=-1; // wykrycie wartownika
p= WySzukaj( D, n, k );
cout << "Szukany element jest na pozycji: " << p << endl << endl;

delete [ ] D;
return 0;
}
Zadanie 1. WLzW.
a) Przenalizować kod powyższego programu i sprawdzić jego działanie z użyciem funkcji
b) Zakomentować wywołanie funkcji oraz odkomentować instrukcje wyszukiwania liniowego w programie
głównym. Przeanalizować działanie programu.
c) Zmodyfikować program, tak aby wyświetlał elementy tablicy (wiersz lub kolumnie) oraz oznaczył
wartość klucza za pomocą gwizdki „*”.
d) Zmodyfikować program, tak aby zwracał wszystkie pozycje klucza z pomocą tablicy logicznej.
1
Zliczanie wg kryterium
Algorytm zliczania (ang. counting) bazuje na algorytmie wyszukiwania. Tworzymy licznik elementów,
który zerowej wartości początkowej. Następnie przeglądamy kolejne elementy zbioru w poszukiwaniu
tych, które spełniają zadane kryterium (tj.. klucz). Gdy znajdziemy odpowiedni element, zwiększamy
stan licznika i wyszukiwanie kontynuujemy od następnego elementu. Wynikiem jest zawartość licznika,
czyli liczba elementów w zbiorze spełniających podane kryterium.
Algorytm występuje w dwóch wariantach – z wyszukiwaniem liniowym oraz z wyszukiwaniem liniowym
z wartownikiem. W tym drugim przypadku zawsze zliczamy o jeden element za dużo (zliczamy
wartownika, który jest tymczasowo wstawiony do zbioru ). Dlatego zwracamy zawartość licznika
pomniejszoną o 1.

Zadani 2. ZLzW
a) Zmodyfikować program z zadania 1 , tak aby zliczał ilość wystąpienia klucza w tablicy.
b) Zmodyfikować program, tak aby zwracał pierwsze wystąpienie (pierwszą pozycję) klucza w pierwszej
połowie tablicy.
c) Zmodyfikować program, tak aby zwracał pierwsze wystąpienie (pierwszą pozycję) klucza w drugiej
połowie tablicy

Wyszukiwanie wartości maksymalnej i/lub minimalnej w zbiorze


W n-elementowym zbiorze Z znaleźć element maksymalny i/lub minimalny. To typowe zadanie
wyszukiwania, które może być zrealizowane przy pomocy algorytmu wyszukiwania liniowego.
• Za tymczasowy maksymalny (minimalny) element przyjmujemy pierwszy element zbioru.
• Następnie element tymczasowy porównujemy z kolejnymi elementami.
• Jeśli któryś z porównywanych elementów jest większy (mniejszy) od elementu tymczasowego, to za
nowy tymczasowy element maksymalny (minimalny) przyjmujemy porównywany element zbioru.
• Gdy cały zbiór zostanie przeglądnięty, w elemencie tymczasowym otrzymamy element maksymalny
(minimalny) w zbiorze.

Zadanie 3. WM. Wyszukanie wartości min/max w zbiorze


a) Przeanalizować i uzupełnić poniższy program. Sprawdzić działanie programu.
b) Wyszukać pozycję klucza. Kluczem jest wartość maksymalna (max).
c) Zliczyć ile razy wystąpiła wartość max.
d) Wyszukać wszystkie pozycje wartości max
e) Wyszukać pozycję klucza. Kluczem jest min_dod (najmniejsza wartość dodatnia)
f) Wyszukać pozycję klucza. Kluczem jest min

Program – wyszukanie /min.max


#include <iostream>
#include <cstdlib>
#include <time>
using namespace std;
const int N = 20;

int main() {
int Z[N];
int i, maxZ, minZ, p=-1;
srand(time(NULL));
for(i = 0; i < N; i++)
Z[i] = rand() % 1000;
2
maxZ =
//minZ =
for(i = 1; i < N; i++) {
if(Z[i] > maxZ) maxZ = Z[i];
// if(Z[i] < minZ) minZ = Z[i];
}
for(i = 0; i < N; i++)
cout << Z[i] << endl;
//cout << " Min= " << minZ << endl;
cout << " Max= " << maxZ << endl;
// cout << "Szukany element jest na pozycji: " << p << endl << endl;
return 0;
}

Zadanie 4. WMM. Jednoczesne wyszukanie wartości min I max w zbiorze.


a) Przeanalizować i uzupełnić poniższy program. Sprawdzić działanie programu.
b) Wyszukać pozycję kluczy. Kluczem jest wartość maksymalna (max/min). (pierwsze wystąpienie)
c) Zliczyć ile razy wystąpiła wartość max oraz min. Podać która wartość wystąpiła częściej.
d) Podać która z wartości wystąpiła wcześniej.
e) Obliczyć różnicę pozycji między min i max.
f) Zmodyfikować program tak aby rozpocząć wyszukiwanie pozycji min i max od kończ tablicy.

// Jednoczesne min / max


#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
const int N = 15;
int main() {
int Z[N+1], minZ, maxZ, i;
srand(time(NULL));
for(i = 0; i < N; i++) Z[i] = rand() % 1000;
if(N % 2) Z[N] = Z[N-1];
minZ = 10000; maxZ = -1;
for(i = 0; i < N; i += 2)
if(Z[i] > Z[i+1]) {
if(Z[i] > maxZ) maxZ = Z[i];
if(Z[i+1] < minZ) minZ = Z[i+1];
} else {
if(Z[i] < minZ) minZ = Z[i];
if(Z[i+1] > maxZ) maxZ = Z[i+1];
}
for(i = 0; i < N; i++) cout << setw(4) << Z[i] << endl;
cout << endl << minZ << " : " << maxZ << endl;
return 0;
}

3
Sprawozdanie

1. Temat, data , autorzy, grupa


2. Tematy zadań,
3. Kod programu (lub fragment poprzedniego po zmianach),
4. Przykładowe wyniki, (kopia z konsoli, ewentualnie Print Screan)
5. Komentarze,
6. Wnioski.
7. Format tekstu .docx, lub pdf z możliwością zaznaczania tekstu.

You might also like