Mam oto takie zadanie do wykonania :
Wczytaj z klawiatury długość tablicy (N) i N liczb całkowitych do tablicy.
Następnie wczytaj z klawiatury liczbę K. Dla danej liczby K wypisz 3 różne liczby "bezpośrednio" mniejsze od niej (od największej). Gdy nie ma takich liczb, wypisz stosowny komunikat. Powtarzaj operacje związane z liczbą K aż K=0 (dla którego też wykonaj wyszukiwanie).
Liczby "bezpośrednio" mniejsze, są to liczby, dla których nie istnieje liczba większa, która jest mniejsza od liczby K i nie jest w tym zbiorze.
Przykład:
N = 7
T = 1 2 3 3 5 6 7
K = 6
5 3 2
K = 4
3 2 1
K = 3
2 1
K = 0
brak
Jestem poczatkujacym jesli chodzi o programowanie, wiec licze z waszej strony na wyrozumialosc. Ponizej przedstawiam Wam kod jaki dotychczas udalo mi sie wklepac:
program merge_sort;
uses crt;
//Wstepna deklaracja.
var N:integer;
T,A:array [1..100] of integer;
i:integer;
K:integer;
//START: Procedura wczytania liczby N.
procedure wczytaj(var N:integer);
begin
write('Podaj liczbe N: ');
read(N);
writeln('N = ',N);
writeln('Podaj ', N, ' liczb(y) do tablicy: ');
for i:=1 to N do
begin
T[N]:=i;
write('Podaj liczbe ',i,': ');
read(T[i]);
end;
end;
//KONIEC.
//START: Procedura wczytania liczby K.
procedure wczytaj1 (var K:integer);
begin
write('Podaj liczbe K: ');
readln(K);
writeln('K = ', K);
end;
//KONIEC.
//START: Procedura jesli K=0.
procedure warunek(var K:integer);
begin
if K=0 then
begin
writeln('Brak.');
end;
end;
//KONIEC.
//START: Procedura sortujaca.
procedure MergeSort(poczatek,koniec : integer);
var srodek,i1,i2,i : integer;
begin
srodek := (poczatek + koniec + 1) div 2;
if srodek - poczatek > 1 then MergeSort(poczatek, srodek - 1);
if koniec - srodek > 0 then MergeSort(srodek, koniec);
i1 := poczatek;
i2 := srodek;
for i := poczatek to koniec do
if (i1 = srodek) or ((i2 <= koniec) and (A[i1] > A[i2])) then
begin
T[i] := A[i2];
inc(i2);
end
else
begin
T[i] := A[i1];
inc(i1);
end;
for i := poczatek to koniec do A[i] := T[i];
end;
//KONIEC.
//START: Procedura liczb bezposrednio mniejszych.
procedure mniejsze (var K:integer);
begin
if A[i]<K then
begin
for i:=K downto 1 do write(A[i],' ');
end;
end;
//KONIEC.
//PROGRAM GLOWNY.
begin
wczytaj(N);
//Wypisujemy T=...
write(' T = ');
for i := 1 to N do
begin
A[i]:=T[i];
end;
for i := 1 to N do write(A[i],' ');
writeln;
//Sortujemy.
MergeSort(1,N);
//Wynik sortowania.
write('Posortowane liczby wpisane z tablicy: ');
for i := 1 to N do write(A[i],' ');
writeln;
//Petla do K.
repeat
wczytaj1(K);
warunek(K);
mniejsze(K);
until K=0;
end.
//KONIEC PROGRAMU.
Zrobilem tu dodatkowo sort przez scalanie, gdyz chcialem pozniej wypisac liczby bezposrednio mniejsze od K. Ma wypisywac to tak jak podano w przykladzie zadania. Jednak po dlugich rozmyslaniach doszedlem do wniosku, ze nie mam pojecia jak dalej z tym ruszyc. Moglbym liczyc na jakas podpowiedz z Waszej strony? Z gory dzieki za wszystkie pozytywne komentarze. (Mam nadzieje, ze za bardzo mnie tu nie zwyzywacie, ale staram sie czegos nauczyc).