Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 18 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.08.12
Prihlásený: 08.02.13
Príspevky: 11
Témy: 2
Príspevok NapísalOffline : 20.10.2012 19:25

Čaute, mám vyriešiť celkom jednoduchú úlohu - posunúť N-prvkové pole celých čísel o k prvkov. Čiže napr. pre n=5 a k= 3 z pola 1 2 3 4 5 vznikne takéto pole: 3 4 5 1 2
Úlohu viem v podstate vyriešiť viacerými spôsobmi, len problém je ten, že všetky sú zakázané. NESMIEM využiť pomocné pole, súbor, reťazec, ani žiadnu zložitejšiu údajovú štruktúru, ani predĺžiť pole, ani v cykle k-krát posúvať o 1 prvok.

Vedeli by ste mi poradiť, aký spôsob ešte existuje? Resp. ako sa môžem inak pozrieť na ten problém? Maturujem nad tým už 2 dni a stále neviem. Ďakujem :)


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 20.10.2012 19:59

Skús do svojích úvah zahrnúť zvyšok po celočiselnom delení (v pascale je to a MOD b) ;)







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.08.12
Prihlásený: 08.02.13
Príspevky: 11
Témy: 2
Príspevok Napísal autor témyOffline : 20.10.2012 20:34

čože, zvyšok po celočíselnom delení? čo to s tým má? akosi nevidím súvis. nenašla by sa ďalšia nápoveda? :)


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 20.10.2012 20:41

Ďalšia nápoveda:
N = 5;
K = 3;
Pole = 1,2,3,4,5

(1 + K) MOD N = ?
(2 + K) MOD N = ?
(3 + K) MOD N = ?
.
.
.

Pole = 3,4,5,1,2


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.08.12
Prihlásený: 08.02.13
Príspevky: 11
Témy: 2
Príspevok Napísal autor témyOffline : 20.10.2012 21:53

Dajme tomu, že súvis medzi delením a výsledným poradím by tu bol (teda ak moje úvahy sú správne: (1+k)-ty prvok sa posunul na pozíciu (k-1), kde tá 1 je zvyšok po delení? ) len ako tie prvky poprehadzovať len za použitia pomocných premenných tak, aby to platilo pre každé N?


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 20.10.2012 22:15

Veľmi jdenoducho :) Odpoveď si si dal v tom "poprehadzovať"


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.08.12
Prihlásený: 08.02.13
Príspevky: 11
Témy: 2
Príspevok Napísal autor témyOffline : 20.10.2012 23:42

no neviem, stále nič, vždy mi niečo vystáva - jednoducho to neviem dať do cyklu tak, aby bol konečný výsledok taký, aký má byť...


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 21.10.2012 0:12

Urob to pre posun o jedna, to nie je zloźité. Potrebuješ tam pár pomocných premenných a jeden cyklus.
A potom to jednoducho ešte celé zabaľ do cyklu od 1 do K. Len treba poriadne vypilovať ten algoritmus na posun o jedna a potom správne inicializovať premenné na začiatku toho "K cyklu"







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Pascal - posun prvkov pola

Registrovaný: 27.12.08
Prihlásený: 13.12.22
Príspevky: 1874
Témy: 96
Bydlisko: Bratislava,...
Príspevok NapísalOffline : 21.10.2012 0:15

modulo je príliš komplikované pre prípad, že n a k sú súdeliteľné. najjednoduchší spôsob ako riešiť takýto príklad je tri krát "reverznúť" pole/resp. časť poľa, skús porozmýšľať ako, nie je to až také ťažké







_________________
~Listen to your brain, not your heart~
NB1: Lenovo Y500: CPU: Intel Core i7-3630QM; GPU: nVidia GT650M 2GB SLi; RAM: 16GB DDR3; HDD: 1TB + 256GB SSD (m4); LCD: 15,6" 1920x1080; OS: Win8.1 64-bit + Arch Linux 64-bit (UEFI Powered DualBoot)
NB2: Asus K53SJ-SX093: CPU: Intel Core i3-2310M; GPU: Intel HD3000 / nVidia GT520M 1GB Optimus; RAM: 8GB DDR3; SSD: 128GB 840Evo; LCD: 15,6" 1366x768; OS: Win 8.1 Pro 64-bit (UEFI)
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.08.12
Prihlásený: 08.02.13
Príspevky: 11
Témy: 2
Príspevok Napísal autor témyOffline : 21.10.2012 9:09

nBXXL píše:
modulo je príliš komplikované pre prípad, že n a k sú súdeliteľné. najjednoduchší spôsob ako riešiť takýto príklad je tri krát "reverznúť" pole/resp. časť poľa, skús porozmýšľať ako, nie je to až také ťažké


no len nesmiem posúvať pole k-krát o 1 prvok ... inak by to bolo jednoduché

to s tým modulom stále asi dobre nechápem/zle sa na to pozerám ... koľko tam vlastne treba tých pomocných premenných? mám vymieňať prvok za prvok alebo mám posúvať celé pole? neviete to vysvetliť viac "polopate"? stačí nakopnúť začiatok cyklu - ktorý prvok treba uložiť do prvej pomocnej premennej?
ďakujem za trpezlivosť


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 21.10.2012 9:18

Jáj, som si nevšimol, že nesmieš posúvať pole o jedna.
Nevadí, každopádne platí to, že si to napíš pre jedna a potom to len trochu upravíš.
A síce tak, že si uvedomíš, že ak nebudeš v poli skákať po jednom, ale po K prvkoch, tiež navštíviš všetky pozície a to práve raz. Čiže to vlastne bude úplne to isté :)
Len si dávaj pozor, aby si cyklus naozaj vykonal N krát. To bude chcieť teda jeden cyklus od 1 do N a jednu pomocnú premennú ako krok, ktorý pôjde od 1 a zvyšovať ho budeš o K.
A v cykle ti potom stačí uložiť si nasledujúci prvok (nasl. pozíciu vypočítaš ako (krok+K) MOD N) a hneď na to na túto pozíciu šupnúť aktuálny prvok. Na to budešp otrebovať ďalšie dve pomocné premenné (pre "aktuálny" a pre nasledujúci prvok)


Offline

Užívateľ
Užívateľ
Pascal - posun prvkov pola

Registrovaný: 27.12.08
Prihlásený: 13.12.22
Príspevky: 1874
Témy: 96
Bydlisko: Bratislava,...
Príspevok NapísalOffline : 21.10.2012 11:39

prave to som chcel naznacit ze ked budes skakat po K prvkoch, tak nemusis navstivit vsetky pozicie prave raz, typicky priklad je N=6 a K=3, z 1-ky skocis na 4-ku, a odtial naspat na 1-ku, a podobny pripad nastane vzdy, ked su N a K sudelitelne (maju najvacsieho spolocneho delitela vacsieho ako 1)

a reverz nie je posuvanie pola..
napr. reverz od 1 po N je:
1 2 3 4 5 -> 5 4 3 2 1

napr. reverz od 2 po 4 je:
1 2 3 4 5 -> 1 4 3 2 5

tebou chcene preusporiadanie prvkov sa da spravit na 3 * reverz, cize dokopy nespravis viac ako 3*N vymen, cize to urcite nezavisi od velkosti K a teda to ani nemoze byt cyklus, v ktorom K-krat nieco posuvas :)

(pre info: tuto istu ulohu som uz videl 2x, raz na sutazi a raz u nas na informatike, mala presne rovnake obmedzenia a v oboch pripadoch spravne riesenie suviselo s reverzom)







_________________
~Listen to your brain, not your heart~
NB1: Lenovo Y500: CPU: Intel Core i7-3630QM; GPU: nVidia GT650M 2GB SLi; RAM: 16GB DDR3; HDD: 1TB + 256GB SSD (m4); LCD: 15,6" 1920x1080; OS: Win8.1 64-bit + Arch Linux 64-bit (UEFI Powered DualBoot)
NB2: Asus K53SJ-SX093: CPU: Intel Core i3-2310M; GPU: Intel HD3000 / nVidia GT520M 1GB Optimus; RAM: 8GB DDR3; SSD: 128GB 840Evo; LCD: 15,6" 1366x768; OS: Win 8.1 Pro 64-bit (UEFI)
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.08.12
Prihlásený: 08.02.13
Príspevky: 11
Témy: 2
Príspevok Napísal autor témyOffline : 21.10.2012 11:39

V podstate si mi poradil takéto niečo, nie? Len mi to hádže blbosti ..
Kód:
 krok:=1;
  For I:= 1 to k do
    begin

    For J:=1 to N do
      begin

      z:=((krok+k) mod N);
      x:=p[z];
      p[z]:=p[J];
      p[J]:=x;
      krok:=krok+k;
      end;

    end;             


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 21.10.2012 11:44

Nie, cyklus máš vykonať len N krát. Pritom ti ide len a len o to, aby sa tých N krát vykonal. Ty nemusíš používať tú premennú I, môžeš používať len ten krok.

Teraz sa ti to všetko vykoná N*k krát a to je trochu veľa. Jeden cyklus a výmena prvkov. Toť vše. (Len tú výmenu treba poriadne premyslieť)


Offline

Užívateľ
Užívateľ
Pascal - posun prvkov pola

Registrovaný: 27.12.08
Prihlásený: 13.12.22
Príspevky: 1874
Témy: 96
Bydlisko: Bratislava,...
Príspevok NapísalOffline : 21.10.2012 11:55

cita niekto vobec co ja pisem? pre n=5 a k=3 to fungovat bude, lebo su nesudelitelne, ale pre hocijake 2 sudelitelne cisla (napr. n=6, k=3) skakanim po K prvkoch nepreskaces vsetky cisla.. (ano, da sa to osetrit tak, ze najdes prve cislo, na ktorom si este nebol a skakat budes z neho, az pokym nepreskaces cez vsetky, ale naco, ked sa to da ovela jednoduchsie?)







_________________
~Listen to your brain, not your heart~
NB1: Lenovo Y500: CPU: Intel Core i7-3630QM; GPU: nVidia GT650M 2GB SLi; RAM: 16GB DDR3; HDD: 1TB + 256GB SSD (m4); LCD: 15,6" 1920x1080; OS: Win8.1 64-bit + Arch Linux 64-bit (UEFI Powered DualBoot)
NB2: Asus K53SJ-SX093: CPU: Intel Core i3-2310M; GPU: Intel HD3000 / nVidia GT520M 1GB Optimus; RAM: 8GB DDR3; SSD: 128GB 840Evo; LCD: 15,6" 1366x768; OS: Win 8.1 Pro 64-bit (UEFI)
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.08.12
Prihlásený: 08.02.13
Príspevky: 11
Témy: 2
Príspevok Napísal autor témyOffline : 21.10.2012 13:38

jasné, že číta, reverz mi veľmi pomohol, už to fičí tak, ako to má :-) ďakujem obom za pomoc


Offline

Užívateľ
Užívateľ
Pascal - posun prvkov pola

Registrovaný: 24.08.12
Prihlásený: 09.02.19
Príspevky: 59
Témy: 0
Príspevok NapísalOffline : 22.10.2012 9:00

Sice trochu opožděně, ale měl bych jiné řešení. Problém, jestli jsou čísla soudělná či nesoudělná, přece řeší největší společný dělitel, takže bez reverzace a výměn, jen posunem o k:

Kód:
program PosunPole;

const n=5; {pocet prvku pole}
      k=3; {krok posunu}

var i,w,odkud,kam,nsd:integer;
    p: array[1..n] of integer;

begin
{vyplneni pole}
for i:=1 to n do
    begin
    p[i]:=i*10;
    write(p[i]:4);
    end;
writeln;

{nejvetsi spolecny delitel}
i:=n;
nsd:=k;
while i<>nsd do
      if i>nsd then
         i:=i-nsd
      else
         nsd:=nsd-i;

{rotace pole}
for i:=1 to nsd do
    begin
    kam:=i;
    w:=p[kam];
    odkud:=kam+k;
    if odkud>n then
       odkud:=odkud-n;
    repeat begin
           p[kam]:=p[odkud];
           kam:=odkud;
           odkud:=kam+k;
           if odkud>n then
              odkud:=odkud-n;
           end until odkud=i;
    p[kam]:=w;
    end;

{kontrolni vypis}
for i:=1 to n do
    write(p[i]:4);
writeln;

readln
end.


Akorát k=3 bych chápal spíš jako posun o tři prvky:
1 2 3 4 5
4 5 1 2 3







_________________
"Existuje pouze jeden člověk, který má méně přátel než Bill Gates, a tím je Saddám Husajn." (Paul Grayson)
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 06.04.10
Prihlásený: 18.02.14
Príspevky: 47
Témy: 2
Príspevok NapísalOffline : 22.10.2012 17:40

frigg píše:
jasné, že číta, reverz mi veľmi pomohol, už to fičí tak, ako to má :-) ďakujem obom za pomoc

mozes sem postnut to riesenie. Mne to stale nevychadza cez to MODulo


Odpovedať na tému [ Príspevkov: 18 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Zlucenie prvkov pola

v PHP, ASP

3

403

23.03.2012 11:39

exoomer Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Presun prvkov pola

v Assembler, C, C++, Pascal, Java

2

371

18.10.2012 1:51

Gregi555 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. MAzanie prvkov z poľa v jave

v Assembler, C, C++, Pascal, Java

5

1022

22.12.2010 11:55

Forty- Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. nasobenie pola Pascal

v Assembler, C, C++, Pascal, Java

8

471

15.06.2013 22:47

dany2281995 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Free Pascal a Turbo Pascal

v Assembler, C, C++, Pascal, Java

0

384

19.12.2014 13:18

Styracoz Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. posun

v HTML, XHTML, XML, CSS

3

678

24.12.2008 14:02

dedko45 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Načítavanie prvkov

v JavaScript, VBScript, Ajax

8

466

31.05.2010 18:29

DARSON Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. posun casu...

v Správy pre vedenie fóra

6

3129

26.03.2006 14:10

JanoF Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Posun času

v Krčma

9

1567

04.11.2010 21:20

Jeffo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vyber prvkov - POLIA

v PHP, ASP

5

496

23.04.2010 10:48

stenley Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. zoradenie prvkov databazy

v PHP, ASP

1

853

05.11.2007 16:04

GoodWill Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. JS posun thumbov

v JavaScript, VBScript, Ajax

1

496

20.04.2009 10:06

stenley Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. monitor--posun obrazu

v Monitory, televízory a projektory

2

2505

24.01.2007 20:42

alien123 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. posun po stranach

v Redakčné systémy

0

546

22.03.2007 21:56

Tom@S Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. posun v riadku

v Assembler, C, C++, Pascal, Java

15

1256

12.10.2009 7:12

pizet Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. posuvanie prvkov v poli

v PHP, ASP

2

596

07.07.2009 12:23

tomast7 Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra