Forum Coders' city Strona Gwna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UytkownicyUytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj si, by sprawdzi wiadomociZaloguj si, by sprawdzi wiadomoci   ZalogujZaloguj 

Potrzebuj szybkiej odpowiedzi na moje pytanie... Zasady

Pokazanie funkcji random



 
Odpowiedz do tematu    Forum Coders' city Strona Gwna -> Pole do popisu (beta testy)
Zobacz poprzedni temat :: Zobacz nastpny temat  
Autor Wiadomo
Adept
Go





PostWysany: Wto Sty 24, 2017 11:29 pm  OP    Temat postu: Pokazanie funkcji random Odpowiedz z cytatem Pisownia

Witajcie
O to mj may programik :). Niniejszy program pokazuje zastosowanie funkcji random. Program przy pomocy wyszukiwania binarnego sprawdza czy dana liczba jest w tablicy. Jeli jest to losuje ponownie. Jeli nie to zapisuje j do tablicy w odpowiednim miejscu. Zapraszam do oceniania i komentowania :).

Kod:
program test_los;
uses crt;
type
tablica = array[1..7] of integer;
var
p,k,srod,wylos,krok,l,i: integer;
powtarzaj: boolean;
t:tablica;
begin
clrscr;
k := 1;
p := 1;
randomize;
while k <= 7 do
      begin
           write('krok = ',k,' ');
           if k = 1 then
              begin
                  wylos := random(7);
                  t[p] := wylos
              end
           else
              begin
                  repeat
                       powtarzaj := false;
                       wylos := random(7);
                       if wylos = t[p] then
                        begin
                            writeln('taka liczba jest na miejscu pierwszym:');
                            powtarzaj := true;
                        end
                       else
                          begin
                              l := k - 1;
                              if wylos < t[p] then
                               begin
                                   writeln('najmniejsza wylosowana liczba do tej pory');
                                   repeat
                                        t[l + 1] := t[l];
                                        l := l - 1;
                                   until l = 0;
                               t[l+1] := wylos
                               end
                              else
                                 if wylos > t[l] then
                                  t[l + 1] := wylos
                                 else
                                    begin
                                        if l >= 2 then
                                         begin
                                             repeat
                                                  srod := (p + l) div 2;
                                                  if wylos < t[srod] then
                                                   l := srod - 1;
                                                  if wylos > t[srod] then
                                                   p := srod + 1;
                                             until (p > l) or (wylos = t[srod]);
                                             if p > l then
                                              begin
                                                  writeln('wstawienie nowej liczby do tablicy:');
                                                  l := k - 1;
                                                  while wylos < t[l] do
                                                      begin
                                                          t[l + 1] := t[l];
                                                          l := l - 1
                                                      end;
                                                  t[l + 1] := wylos
                                              end
                                             else
                                                begin
                                                    writeln('taka liczba jest w tablicy, wczytaj liczbe ponownie :)');
                                                    powtarzaj := true
                                                end;
                                             p := 1
                                         end
                                    end;
                              l := k - 1
                          end;
                  until not (powtarzaj)
              end;
           k := k + 1
      end;
writeln;
writeln;
writeln;
writeln('    SIEDEM PIERWSZYCH POSORTOWANYCH LICZB WYLOSOWANYCH PRZEZ FUNKCJE RANDOM :)    ');
writeln;
writeln;
writeln;
for i := 1 to 7 do
    write(t[i]:4);
readln;
end.


Ze wzgldu na tre temat przeniesiony do tego dziau - Samlot

Dodane przez moderatora (czenie postw)

Wersja druga programu, niby to samo, ale rnic wida przy dwch tysicach losowanych liczb. W pierwszej wersji program potrzebuje ptorej minuty aby wygenerowa liczby zakresu od 0 do 1999 a w drugiej za 40 - 45 sekund.

Kod:
program test_los;
uses crt;
type
tablica = array[1..7] of integer;
var
p,k,srod,wylos,krok,l,i: integer;
powtarzaj: boolean;
t:tablica;
begin
clrscr;
k := 1;
p := 1;
randomize;
while k <= 7 do
      begin
           write('krok = ',k,' ');
           if k = 1 then
              begin
                  wylos := random(7);
                  t[p] := wylos
              end
           else
              begin
                  repeat
                       powtarzaj := false;
                       wylos := random(7);
                       if wylos = t[p] then
                        begin
                            writeln('taka liczba jest na miejscu pierwszym:');
                            powtarzaj := true;
                        end
                       else
                          begin
                              l := k - 1;
                              if wylos < t[p] then
                               begin
                                   { writeln('najmniejsza wylosowana liczba do tej pory'); }
                                   repeat
                                        t[l + 1] := t[l];
                                        l := l - 1;
                                   until l = 0;
                               writeln('wstawienie nowej liczby do tablicy:');
                               t[l+1] := wylos
                               end
                              else
                                  if wylos = t[l] then
                                   begin
                                       writeln('wylosowana liczba jest na miejscu ostatnim');
                                       powtarzaj := true
                                   end
                                  else
                                     if wylos > t[l] then
                                      begin
                                      writeln('wstawienie nowej liczby do tablicy:');
                                      t[l + 1] := wylos
                                      end
                                     else
                                        begin
                                            if l >= 2 then
                                         begin
                                             repeat
                                                  srod := (p + l) div 2;
                                                  if wylos < t[srod] then
                                                   l := srod - 1;
                                                  if wylos > t[srod] then
                                                   p := srod + 1;
                                             until (p > l) or (wylos = t[srod]);
                                             if (p > l) then
                                              begin
                                                  writeln('wstawienie nowej liczby do tablicy:');
                                                  l := k - 1;
                                                  while wylos < t[l] do
                                                      begin
                                                          t[l + 1] := t[l];
                                                          l := l - 1
                                                      end;
                                                  t[l + 1] := wylos
                                              end
                                             else
                                                begin
                                                    writeln('taka liczba jest w tablicy, wczytaj liczbe ponownie :)');
                                                    powtarzaj := true
                                                end;
                                             p := 1
                                         end
                                    end;
                              l := k - 1
                          end;
                  until not (powtarzaj)
              end;
           k := k + 1
      end;
writeln;
writeln;
writeln;
writeln('    SIEDEM PIERWSZYCH POSORTOWANYCH LICZB WYLOSOWANYCH PRZEZ FUNKCJE RANDOM :)    ');
writeln;
writeln;
writeln;
for i := 1 to 7 do
    write(t[i]:4);
readln;
end.
Powrt do gry
Adept
Go





PostWysany: Wto Sty 31, 2017 1:01 am      Temat postu: Algorytm losowania bez powtrze Odpowiedz z cytatem Pisownia

Kod:
program random_no_repeat;

uses crt; { dolaczenie modulu crt; }

const

m = 25; { ilosc elementow w tablicy glownej }
n = 25;  { ilosc elementow w tablicy wynikowej }

type

zakres_1 = 1..m; { zakres tablicy glownej }
zakres_2 = 1..n; { zakres tablicy wynikowej }
tablica = array[zakres_1] of integer; { tablicowa struktura danych przechowujaca zbior liczb }
tablica_sort = array[zakres_2] of integer; { tablicowa struktura danych sluzaca do
                                             zapisywania wylosowanych liczb }
var
i, { zmienna iteracyjna w petlach for }
krok, { zmienna krokowa w petlii while }
wylosowany_indeks, { zmienna okreslajaca wylosowany indeks w tablicy glownej }
wylosowana_liczba, { zmienna przyjmujaca wartosc wylosowanej liczby z tablicy glownej }
ilosc_liczb: { zmienna okreslajaca ilosc liczb w tablicy glownej }
             integer;
tab: tablica; { zmienna - jako struktura danych w postaci tablicy glownej }
tab_sort: tablica_sort; { zmienna - jako struktura danych w postaci tablicy wynikowej }

begin

clrscr; { funkcja z modulu crt sluzaca do czyszczenia ekranu }
randomize;

writeln;
writeln;

writeln(' Zawartosc tablicy glownej na poczatku programu :)');
writeln;
for i := 1 to 25 do
    begin
        tab[i] := i;
        write(tab[i]:4)
    end;

writeln;
writeln;
writeln(' Zawartosc tablicy wynikowej na poczatku programu :)');
writeln;

for i := 1 to 25 do
    write(tab_sort[i]:4);

ilosc_liczb := 25;   krok := 1;

writeln;
writeln;
writeln(' Pokazanie dzialania algorytmu losowania bez powtorzen :)');
writeln;
writeln;

  
while krok <= 25 do { algorytm losowania bez powtorzen }
      begin
           write(' Ilosc liczb w tablicy glownej ',ilosc_liczb);

           wylosowany_indeks := random(ilosc_liczb)+1;

           writeln(' Wylosowany indeks ',wylosowany_indeks);

           wylosowana_liczba := tab[wylosowany_indeks];

           tab[wylosowany_indeks] := tab[ilosc_liczb];

           if krok = 1 then
              tab_sort[krok] := wylosowana_liczba
           else
               begin
                    i := krok - 1;
                    if wylosowana_liczba < tab_sort[i] then
                      begin
                           repeat
                                 tab_sort[i + 1] := tab_sort[i];
                                 i := i - 1;
                           until (wylosowana_liczba > tab_sort[i]) or (i = 0);
                           tab_sort[i + 1] := wylosowana_liczba
                      end
                    else
                        tab_sort[i + 1] := wylosowana_liczba
               end;
           ilosc_liczb := ilosc_liczb - 1;
           krok := krok + 1
      end;

writeln;
writeln;

writeln(' Zawartosc tablicy glownej po przetworzeniu jej przez algorytm :)');
writeln;
for i := 1 to 25 do
    write(tab[i]:4);

writeln;
writeln;

writeln(' Zawartosc tablicy wynikowej po przetworzeniu jej przez algorytm :)');
writeln;
for i := 1 to 25 do
    write(tab_sort[i]:4);

readln

end.
Powrt do gry
Wywietl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Gwna -> Pole do popisu (beta testy) Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Moesz pisa nowe tematy
Moesz odpowiada w tematach
Nie moesz zmienia swoich postw
Nie moesz usuwa swoich postw
Nie moesz gosowa w ankietach
Moesz dodawa zaczniki na tym forum
Moesz pobiera pliki z tego forum




Debug: strone wygenerowano w 0.12786 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |