Skocz do zawartości
michal_s

Pomoc W Znalezieniu Mediany

Rekomendowane odpowiedzi

Witam

Czy byl by ktos w stanie pomoc mi napisac procedure w pascalu ktora wyszukiwala by srodkowa liczbe posortowanego przedzialu - mediany?

Algorytm sortujacy wyglada tak:

 

rogram sortowanie;function fp(a1,a2 : integer) : boolean;begin  Result := a1 <= a2;end;const  MAX_N = 20; var  d : array[1..MAX_N] of integer;  zamiana : boolean;  i,n,x : integer;begin writeln;writeln('			  Aby wylosowac zbior 20 liczb wcisnij ENTER  ');readln;  randomize;  writeln;  for i := 1 to MAX_N do  begin	d[i] := random(100); write(d[i]:4);  end;  writeln; writeln;  writeln('   Nacisnij klawisz ENTER aby posortowac wygenerowany zbior metoda babelkowa   ');  readln;	 writeln;n := MAX_N;  repeat	if n < 2 then break;	zamiana := false;	for i := 1 to n - 1 do	  if not fp(d[i],d[i+1]) then	  begin		x := d[i]; d[i] := d[i+1]; d[i+1] := x;		zamiana := true;	  end;	dec(n);  until not zamiana;  for i := 1 to MAX_N do write(d[i]:4);  writeln; writeln;  writeln('							  Liczby posortowane'); writeln;  writeln; writeln;  write('				  Nacisnij klawisz Enter aby zakonczyc...'); readln;end.

Program ten generuje zbior liczb z przedzialu od 0 do 99, nastepnie sortuje je babelkowo. Teraz nie wiem jak zrobic aby znajdowalo jescze srodek przedzialu wylosowanych liczb czyli mediane. Pomoze ktos ?

 

Z gory dziekuje.

Edytowane przez michal_s

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Przeciez mediana to srodkowy element tablicy, wiec tutaj nie ma czego szukac...

 

writeln( d[MAX_N div 2] );

W przypadku, gdy tablica ma parzysta ilosc elementow (tak jak u Ciebie) nie ma srodkowego elementu, wiec mozna to rozwiazac na kilka sposobow, ja podalem jeden z nich.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

dokladnie =]

 

polowa kodu co masz =]

 

czyli ilosc elementow n div 2 = Me (mediana)

 

czywiscie jesli Twoj zbior wyglada tak 0,1,2,3,4,5,6....97,98,99

 

update:

 

w przypadku parzystej liczby trzeba by zrobic cos takiego Me:=( (n div 2) + ((n div 2)+1) ) div 2

 

czy cos kolos tego, nie mam teraz glowy do tego :D

Edytowane przez lukasrz

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dziekuje za odpowiedzi. Jednak popelnilem blad z tymi liczbami, bo jest ich 20 i nie ma srodka. Wiec przyjmijmy ze liczb do sortowania bedzie 21 MAX_N = 21; jaka wtedy procedure sklecic aby szukalo srodek ?

Edytowane przez michal_s

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...