You are on page 1of 4

AiSD Lab 1

Tablice i wyszukanie liniowe

Zad. 1.1
Zadeklarować tablicę A N-elementową (N=10) o elementach całkowitych (int).
Wypełnianie tablicy
a) wczytywanie zdanych z klawiatury
b) generowanie liczb wg. wyrażeń arytmetycznych (np. A[i]=2*i, A[i]=i*10+1, itp.)
c) losowanie danych do tablicy
d) wyświetlanie danych w 1 wierszu
e)wyświetlanie danych w 1 kolumnie
f) wyświetlanie danych w 1 kolumnie z nazwą tablicy i indeksem (. A[0]=1, A[1]=3, itp)
g) Wypełnianie tablicy liczbami parzystymi począwszy od 2.
h) Wypełnianie tablicy liczbami nieparzystymi począwszy od 1
i) Wypełnianie liczbami pseudolosowymi z przedziału <a, b>
j) Policzyć sumę elementów tablicy
k) Policzyć średnią elementów tablicy

Zad. 1.2 Tablicę z zadaną z góry zawartością


a) Zadeklarować tablicę N-elementową (N=10) o elementach całkowitych (int).
oraz wypełnić tablicę 10-cioma wartościami początkowymi. Wyświetlić elementy tablicy.
b) Zadeklarować tablicę N-elementową (N=10) o elementach całkowitych (int).
oraz wypełnić tablicę 5-cioma wartościami początkowymi. Wyświetlić elementy tablicy.
c) Zadeklarować tablicę T (bez rozmiaru) o elementach całkowitych (int).
oraz wypełnić tablicę 7-mioma wartościami początkowymi. Wyświetlić elementy tablicy.

Zad. 1.3
Zadeklarować tablicę A N- elementową (N=10) o elementach rzeczywistych, Wczytać dane.
a) Wyznaczyć wartość maksymalną
b) wartość maksymalną modułu elementów tablicy
c) Wyznaczyć wartość minimalną
d) oblicz średnią z liczb np.>0.5

Zad. 2.1
Utworzyć dynamiczną tablicę N-elementową o elementach całkowitych (int).
a) wczytać rozmiar N
Wypełnianie tablicy
b) wczytywanie zdanych z klawiatury
c) wyświetlanie danych w 1 wierszu (przez indeks)
d) wyświetlanie danych w 1 kolumnie (przez adres i indeks)
e) wyświetlanie danych w 1 kolumnie (przez wskaźnik)
f) za pomocą wskaźnika znaleźć pierwszy element większy od 10
g) za pomocą (adres i indeks) i (pw>10 punkt f.) znaleźć minimalny element tablicy większy od 10

Zad. 2.2
Zadeklarować i wypełnić tablicę dynamiczną. Wylosować dane. (użyć adresu i/lub wskaźnika tablicy,
wyniki też przekazać do wskaźników)
a)wyznaczyć sumę elementów
b) wyznaczyć średnią elementów
c) wyznaczyć ilość elementów parzystych

d) wyznaczyć ilość elementów z przedziału <5,10>)


e) wyznaczyć średnią elementów ujemnych
f) wyznaczyć średnią elementów z przedziału <0,10

Wyszukiwanie liniowe/sekwencyjne

Wyszukiwanie liniowe ( ang. linear search ), zwane również sekwencyjnym polega na przeglądaniu
kolejnych elementów zbioru Z.
Jeśli przeglądany element posiada odpowiednie własności (np. jest liczbą o poszukiwanej wartości ), to
zwracamy jego pozycję w zbiorze i kończymy. W przeciwnym razie kontynuujemy poszukiwania aż do
przejrzenia wszystkich pozostałych elementów zbioru Z.

Algorytm wyszukiwania liniowego/sekwencyjnego

Wejście:
n – liczba elementów w tablicy Z, n ∈ N.

Z – tablica zawierająca elementy do przeszukania. Indeksy elementów rozpoczynają się od 0, a


kończą na n - 1.
p – indeks pierwszego elementu Z, od którego rozpoczniemy poszukiwania. p ∈ C.

k – poszukiwana wartość, czyli tzw. klucz, wg którego wyszukujemy elementy w Z.

Wyjście:
Pozycja elementu zbioru Z o kluczu k lub -1 w przypadku nie znalezienia elementu.

Zmienne pomocnicze:
i – przebiega przez kolejne indeksy elementów Z. i ∈ C.

Lista kroków:
K01: Dla i = p, p + 1, ..., n - 1: przeglądamy kolejne elementy w zbiorze
wykonuj K02
K02: Jeśli Z [ i ] = k, jeśli napotkamy poszukiwany element, zwracamy jego pozycję
to zakończ z wynikiem i
K03: Zakończ z wynikiem -1 jeśli elementu nie ma w tablicy, zwracamy -1
z.3.1 WL
Program odczytuje z pierwszego wiersza liczbę n. Z następnych n wierszy odczytywane jest n danych
całkowitych. W ostatnim wierszu odczytywana jest liczba k, którą należy wyszukać wśród podanych n liczb.
Program wypisuje numer pozycji w odczytanym ciągu liczb, na której znajduje się liczba k lub -1, jeśli liczby
nie odnaleziono.

#include <iostream>
//#include <time>
#include <ctime>
#include <cstdlib>

using namespace std;

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


{
for( int i = 0; i < n; i++ )
if( T[i] == k ) return i;
return -1;
}
int main( )
{
int *D, n, k, i, p;
cout <<"Podaj rozmiar tablicy: "<<endl;
cin >> n;
D = new int [n];
cout <<"Podaj elementy tablicy: "<<endl;
for( i = 0; i < n; i++ ) { cin >> D[i]; }

cout << "Podaj klucz: ";


cin >> k;

//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; //to zapamiętaj pozycję (indeks) klucza
}
}
//cout << endl << WySzukaj ( Z, n, k ) << endl << endl;
cout << "Szukany element jest na pozycji: " << p << endl << endl;

delete [ ] D;
return 0;
}

Pytania
Jeżeli klucz jest unikalny to pozycja jest jednoznaczna.
Jeżeli klucz nie jest unikalny (jest więcej niż jeden element k) to która pozycja jest zwracana?

z.3.2 WL.
a) Zmodyfikować program z.3.1, tak aby zwracał pierwsze wystąpienie (pierwszą pozycję) klucza.
b) Zmodyfikować program, tak aby wyświetlał elementy tablicy (wiersz lub kolumnie) oraz oznaczył
wartość klucza za pomocą strzałki „>” lub gwizdki „*”.
c) Zmodyfikować program, tak aby zwracał wszystkie pozycje klucza.
d) Zmodyfikować program, tak aby zwracał ostatnią pozycje klucza, wyszukanie zacząć od końca tablicy.
e) Zmodyfikować program, tak aby zwracał pierwsze wystąpienie (pierwszą pozycję) klucza w pierwszej
połowie tablicy.
f) Zmodyfikować program, tak aby zwracał pierwsze wystąpienie (pierwszą pozycję) klucza w drugiej
połowie tablicy

z.3.3 WL
Zadeklarować tablicę A N-elementową (N=10) o elementach całkowitych (int), wylosować liczby z zakresu
<-10,+10>.
a) Wyszukać pozycję klucza. Kluczem jest max.
b) Wyszukać pozycję klucza. Kluczem jest min
c) Wyszukać pozycję klucza. Kluczem jest min_dod (najmniejsza wartość dodatnia)
d) Wyszukać pozycję klucza. Kluczem jest min_parz_dod (najmniejsza wartość dodatnia)
e) Wyszukać pozycję klucza. Kluczem jest np1 (pierwsza nieparzystą liczba w tablicy)
f) Wyszukać pozycję klucza. Kluczem jest np2 (druga nieparzystą liczba w tablicy)

z.3.4 WL.
Program wypełnia 100 elementową tablicę Z całkowitymi liczbami pseudolosowymi z zakresu od 0 do 9.
Następnie losuje nową liczbę pseudolosową z tego samego zakresu i znajduje wszystkie jej wystąpienia w
Z przy pomocy wyszukiwania liniowego. Na końcu wyświetla wylosowaną liczbę oraz zawartość Z z
zaznaczonymi jej wystąpieniami. Do zapamiętywania wystąpień służy druga tablica L o elementach
logicznych. Jeśli i-ty element tej tablicy zawiera true, to w i-tym elemencie tablicy Z znajduje się
poszukiwany element.
a) zmodyfikować program by wypisać wszystkie wstąpienia klucza
b) zmodyfikować program by wszystkie wstąpienia klucza w wpisać do dynamicznej tablicy P.

You might also like