Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 2 odgovora
  • 5.076 pregleda

Najnovija ↓

Josifov problem - ljudi koji obrazuju krug 02.06.2004. u 15:29 · pre 272 meseca #1
Dali neko moze da resi sledeci zadatak u Pascalu, ili da postavi barem dio koda

Neka N ljudi obelezenih redom od 1 do N (N<=100) obrazuje krug. Pocevsi od K-tog coveka krecuci se u smeru kazaljke na satu, svaki M-ti covek izlazi iz reda. Preostali ljudi u krugu zatim ponovo obrazuju manji krug. Za ucitane vrednosti N, K i M sa standardnog ulaza ispisati u datoteku Izlaz.dat redosled izlaska ljudi iz kruga. (po rednim brojevima). Kraj programa je kad svi ljudi izadju iz kruga.
Potpis
...Biti ili ne biti, pitanje je sad!
Ja bi da bijem...
Re: Josifov problem - ljudi koji obrazuju krug 02.06.2004. u 17:31 · pre 272 meseca #2
Imas mogucnost vise resenja.

Ono na koje verovatno ciljaju tim zadatkom je da napravis dvostruko povezanu listu od N elemenata u kojoj svaki element ima tri atributa: oznaku, vezu ka prethodnom elementu i vezu ka sledecem elementu.

Kretanje po listi vrsis tako sto za tekuci element vidis koji je sledeci pa predjes na njega i tako u krug.

Izbacivanje elementa vrsis tako sto je...

tekuci.prethodni.sledeci := tekuci.sledeci;
tekuci.sledeci.prethodni := tekuci.prethodni;

...nakon cega tekuci mozes da obrises a pre toga zapamtis koji je bio ili ga odmah upises u izlaznu datoteku.



Istu stvar mozes da napravis i sa nizovima ali uz mnogo vise zongliranja podacima.

Ne znam koju verziju Pascal-a koristis, u poslednjim bi trebao da postoji tip TList koji sam po sebi predstavlja povezanu listu. Ne secam se vise, mnogo je godina proslo otkad ne koristim Pascal.
Re: Josifov problem - ljudi koji obrazuju krug 02.06.2004. u 17:58 · pre 272 meseca #3
Evo ga kod koji bi trebao da odradi posao, s tim sto se pri svakom smanjenju kruga resetuju indeksi ljudi u krugu, ako trebaju da ostanu, probaj sam da doradis kod.

Program JosifovProblem;

Var
n,
k,
m,
x,
y : Integer;

Krug : String;

Izlazak : Array [1..100] Of Integer;

Begin
Write ('Upisi broj ljudi: '); ReadLn (n);
Write ('Upisi k-tog coveka: '); ReadLn (k);
Write ('Upisi korak: '); ReadLn (m);

Krug := '';
For X := 1 To n Do
Krug := Krug + 'x';

x := 1;
Y := 1;
Repeat
Krug [x] := ' ';
If (x + k - 1) > Length (Krug) Then
Izlazak [y] := x + k - 1 - Length (Krug)
Else
Izlazak [y] := x + k - 1;
Inc (y);
Inc (x, m);
If X > Length (Krug) Then
Begin
X := 1;
While Pos (' ', Krug) > 0 Do
Delete (Krug, Pos (' ', Krug), 1);
End;
If Length (Krug) < m Then
Begin
For X := y To Length (Krug) + y Do
Izlazak [x] := 1;
Krug := '';
End;
Until Length (Krug) = 0;

For X := 1 To n Do
Write (Izlazak [x], ', ');
End.

PS. Zaboravih da napravim snimanje u fajl, .... doradi i to sam. :)
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme