Prosze o pomoc! - Jak zamienic ...

0

Blagam, niech ktos pomoze, bo nie mam juz sily.
Jak zamienic ponizsze dwie funkcje na procedury ? POnizsze dwie dzialaja bez zarzutu, ale maja to byc FUNKCJE, a nie procedury...

---------------------------------- 1 ------------------------------------------
Procedura oblicza sumę liczb zapisanych w komórkach o indeksie nieparzystym w tablicy 40-elementowej wypełnionej wartościami losowanymi z przedziału . Parametrem wejściowym jest wypełniona tablica, a wyjściowym suma liczb z komórek o indeksie nieparzystym.

type
typ_tab40int=array [1..40] of integer;

function nieparzyste(tab40int:typ_tab40int):byte;
var
il_nieparzystych:byte;
nr_komorki:byte;
begin
il_nieparzystych:=0;
for nr_komorki:=1 to 40 do
if tab40int[nr_komorki] mod 2=1 then
il_nieparzystych:= il_nieparzystych+1;
result:=il_nieparzystych;
end;

I procedura onclick dla przycisku wywolujacego zdarzenie :

procedure TForm1.Button6Click(Sender: TObject);
var
tab_liczb:typ_tab40int;
k,il:byte;
begin
lb.Clear;
for k:=1 to 40 do
begin
tab_liczb[k]:=random(1000);
lb.items.add(inttostr(tab_liczb[k]));
end;
il:=nieparzyste(tab_liczb);
edit7.text:='suma nieparzystych='+inttostr(il);
end;

---------------------------------- 2 ------------------------------------------
Procedura sortująca tablice 30 elementową wypelnioną liczbami losowanymi z zakresu . Parametrem wejściowym jest wypełniona nieposortowana tablica, a parametrem wyjściowym tablica posortowana.

type
typ_tab30int=array[1..30] of integer;

function ilosc(tab30int:typ_tab30int):byte;
var
ilosc_dz:byte;
nr_komorki:byte;
begin
ilosc_dz:=0;
for nr_komorki:=1 to 30 do
if tab30int[nr_komorki] mod 1=0 then
ilosc_dz:=ilosc_dz+1;
result:=ilosc_dz;
end;
end.

Pierwsze zdarzenie onclick dla funkcji (wypisanie 30):

procedure TForm1.Button4Click(Sender: TObject);
var
tab_liczb:typ_tab30int;
k,il:byte;
begin
lb.clear;
for k:=1 to 30 do
begin
tab_liczb[k]:=random(100)-20;
lb.items.add(inttostr(tab_liczb[k]));
end;
il:=ilosc(tab_liczb);
end;

Drugie zdarzenie onclick dla funkcji (sortowanie wypisanych wczesniej 30):

procedure TForm1.Button7Click(Sender: TObject);
begin
lb.Sorted := true;
end;

Czy jakaś dobra dusza mogłaby napisać jak w przykładzie 2 zrobic, aby jedno zdarzenie onclick odpowiadało za wypiysanie i posortowanie ?
Z gory WIELKIE dzieki dla wszystkich za pomoc!
[cya]

0

Jak zamienic ponizsze dwie funkcje na procedury ? POnizsze dwie dzialaja bez zarzutu, ale maja to byc FUNKCJE, a nie procedury...

Może niedokładnie czytałem, co ta ma w końcu być: funkcje czy procedury, sam sobie zaprzeczasz. Napisz to postaram się pomóc.

0

Nie bardzo łapię czy to mają być funkcje czy procedury, więc napiszę 2 wersje.

---------------------------------- 1 ------------------------------------------
Procedura oblicza sumę liczb zapisanych w komórkach o indeksie nieparzystym w tablicy 40-elementowej wypełnionej wartościami losowanymi z przedziału . Parametrem wejściowym jest wypełniona tablica, a wyjściowym suma liczb z komórek o indeksie nieparzystym.

Zacznijmy od tego, że ta funkcja jest zła. Jeżeli ma liczyć tylko nieparzyste indeksy to trzeba tak:

type
typ_tab40int=array [1..40] of integer;

function nieparzyste(tab40int:typ_tab40int):Integer;//lepiej integer, bo byte to może być za mało.
var
suma:integer;
k:byte;
begin
suma := 0;
for k:=1 to 20 do
suma := suma + tab40int[2*k-1];
result:=suma;
end;

procedure nieparzyste(tab40int:typ_tab40int; var suma:Integer);
var
k:byte;
begin
suma := 0;
for k:=1 to 20 do
suma := suma + tab40int[2*k-1];
end;

Reszta później, bo musżę lecieć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1