Wstaw kod w bloczek c/c++, w plaintext czyta się to średnio. Pierwsze co rzuca się w oczy to:
Zad 1)
Nie zwalniasz pamięci.
Przechodząc do wypełniania kolejnego wiersza tablicy dodajesz x = x+8; Myślę, że zgodnie ze schematem powinieneś dodawać 10.
zad 2)
w If'ie nie sprawdzasz, czy wartość x jest równa tab[i] tylko przypisujesz tą wartość do x. Powinieneś użyć operatora == zamiast =.
Dalej zmienną typu bool porównujesz z wartością tab[i], czyli tym razem na odwrót zamiast = jest ==.
Poza tym wiedząc, że tablica jest posortowana, można trochę zoptymalizować kod, żeby nie przeszukiwał całej tablicy.
Zad 3)
Twoja funkcja nie jest odpowiedzią na zadanie. Niepotrzebnie zamieniasz elementy w tablicy, to nie pomoże. Masz znaleźć drugą największą i najmniejszą wartość. Do znalezienie najmniejszego elementu wystarczy prosty warunek podobny do tego z zadania drugiego. Do znalezienia drugiego największego elementu powinieneś zapamiętywać też największy i jak znajdziesz największy to aktualizować sobie wartości obu.