michal_s Opublikowano 20 Lipca 2006 Zgłoś Opublikowano 20 Lipca 2006 (edytowane) 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 20 Lipca 2006 przez michal_s Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 20 Lipca 2006 Zgłoś Opublikowano 20 Lipca 2006 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. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
lukasrz Opublikowano 20 Lipca 2006 Zgłoś Opublikowano 20 Lipca 2006 (edytowane) 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 20 Lipca 2006 przez lukasrz Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
MeHow Opublikowano 20 Lipca 2006 Zgłoś Opublikowano 20 Lipca 2006 jesli chodzi o C to starczy tab[TABLEN/2] i mamy gotowe Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
michal_s Opublikowano 21 Lipca 2006 Zgłoś Opublikowano 21 Lipca 2006 (edytowane) 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 21 Lipca 2006 przez michal_s Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
SGJ Opublikowano 21 Lipca 2006 Zgłoś Opublikowano 21 Lipca 2006 writeln(d[(MAX_N - 1) div 2 +1]); Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Yacho Opublikowano 22 Lipca 2006 Zgłoś Opublikowano 22 Lipca 2006 pamietajcie ze jesli mamy mediane z 20 elementow to bierzemy 10 i 11 dodajemy do siebie dzielimy przez dwa i to jest mediana ! Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...