Krystian17 Opublikowano 3 Grudnia 2005 Zgłoś Opublikowano 3 Grudnia 2005 (edytowane) Witam mam interesujace zagadnienie w jezyku pascal interesuje mnie jak wypisac w kolejnosci rosnacej 4 liczby (np a, b, c i d) nie uzywajac wiecej niz 5 slow "if" myslalem nad tym zeby to wrzycic do tablicy jakos i posortowac to babelkowym systemem ale nie za bardzo czaje jak to zrobic - mysle ze pomysl mam dobry, ale gorzej z wykonaniem tak wiec prosze was o pomoc mile widziana jakas procedurka albe chociarz opis jak to zrobic POZDRO Edytowane 4 Grudnia 2005 przez Krystian17 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Haquim Opublikowano 3 Grudnia 2005 Zgłoś Opublikowano 3 Grudnia 2005 Witam mam interesujace zagadnienie w jezyku pascal interesuje mnie jak wypisac w kolejnosci roznacej 4 liczby (np a, b, c i d) nie uzywajac wiecej niz 5 slow "if" myslalem nad tym zeby to wrzycic do tablicy jakos i posortowac to babelkowym systemem ale nie za bardzo czaje jak to zrobic - mysle ze pomysl mam dobry, ale gorzej z wykonaniem tak wiec prosze was o pomoc mile widziana jakas procedurka albe chociarz opis jak to zrobic POZDRO Algorytm zwie się sortowanie przez zliczanie w C++ to wygląda tak //deklarujemy tablice na 32000 elementow jesli liczby sa dodatnie#define max 33000int tab[max]={0};int liczby[4];int i,j; for ( i=0;i<4;i++) { j =liczby[i]; tab[j]++; }j=-1; i=4;while( i){ while(tab[++j]<1 && j <32000) { } cout<<tab[j]; i-=tab[j];}//prosze i bez ifów Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Sam Sung Opublikowano 4 Grudnia 2005 Zgłoś Opublikowano 4 Grudnia 2005 Sortowanie przez zliczanie to kiepski pomysł. Po pierwsze, można nim sortować tylko liczby całkowite, po drugie - wymaga ono alokacji licznika dla każdej możliwej liczby. Do sortowania liczb od 0 do 31999 wymaga co najmniej 32 kB - śmieszne, jesli mamy posortować tylko 4 liczby :) Najbardziej optymalne byłoby utworzenie drzewa decyzyjnego, które zapewni najmniejszą możliwą liczbę porównań. Jesli to jednak ma być bez wielu if'ów, to doskonale nada się dowolny algorytm sortowania z wykorzystaniem porównań, np. przez wstawianie (INSERTION-SORT) lub wybór (SELECTION-SORT). Przykład - sortowanie przez wstawianie: void InsertionSort(int *t, int count){ register int j; for (j = 1; j < count; j++) { register int i; int key = t[j]; for (i = j - 1; i >= 0 && t[i] > key; i--) t[i + 1] = t[i]; t[i + 1] = key; }} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Krystian17 Opublikowano 4 Grudnia 2005 Zgłoś Opublikowano 4 Grudnia 2005 sorry chlopaki ale za bardzo nie wiem jak to przerobic na pascala :mur: mozecie to jakos "przetlumaczyc" ?? dzieki z gory Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Sam Sung Opublikowano 4 Grudnia 2005 Zgłoś Opublikowano 4 Grudnia 2005 Nie zwróciłem uwagi, że chodzi o pascala.... type TIntArray = array[0..0] of Integer; PIntArray = ^TIntArray;procedure SortowaniePrzezWstawianie(tab : PIntArray; rozmiar : Integer);var i, j, x : Integer;begin for j := 1 to rozmiar - 1 do begin x := tab^[j]; { x - pierwszy element nieposortowanej częci tablicy } i := j - 1; { i - indeks ostatniego elementu posortowanej częci } while (i >= 0) and (tab^[i] > x) do begin { robienie miejsca na x } tab^[i + 1] := tab^[i]; i := i - 1; end; { wstawienie x w odpowiednie, wygospodarowane miejsce } tab^[i + 1] := x; end;end; Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Krystian17 Opublikowano 5 Grudnia 2005 Zgłoś Opublikowano 5 Grudnia 2005 (edytowane) Zrobilem cos takiego (znaczy zmodyfikowalem ;) ) program rosnace;uses crt;var liczby : array[1..4] of byte; i, pom : byte; ileliczb : byte; zamiana : boolean; procedure WTablice;var i:byte;begin for i := 1 to 4 do write(Liczby[i],' '); writeln;end;begin clrscr; randomize; for i:=1 to 4 do liczby[i] := random(100)+1;writeln; ileliczb:=4; repeat zamiana := false; ileliczb:=ileliczb-1; for i:=1 to ileliczb do if (liczby[i] > liczby[i+1]) then begin pom:=liczby[i]; liczby[i]:=liczby[i+1]; liczby[i+1]:=pom; zamiana :=true; end; until not zamiana; write('Tablica posortowana: '); WTablice; repeat until keypressed;end. Nie jest to moze profesjonal ale zawsze to cos ;) PS. sorry za formatowanie Edytowane 7 Grudnia 2005 przez Krystian17 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...