| | |
| Stránka: 1 z 1
| [ Príspevkov: 18 ] | |
Autor | Správa |
---|
Registrovaný: 21.08.12 Prihlásený: 08.02.13 Príspevky: 11 Témy: 2 | Napísal frigg: 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
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 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! |
|
Registrovaný: 21.08.12 Prihlásený: 08.02.13 Príspevky: 11 Témy: 2 | Napísal autor témy frigg: 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?
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 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
|
|
Registrovaný: 21.08.12 Prihlásený: 08.02.13 Príspevky: 11 Témy: 2 | Napísal autor témy frigg: 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?
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 20.10.2012 22:15 | |
|
Veľmi jdenoducho Odpoveď si si dal v tom "poprehadzovať"
|
|
Registrovaný: 21.08.12 Prihlásený: 08.02.13 Príspevky: 11 Témy: 2 | Napísal autor témy frigg: 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ť...
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 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! |
|
Registrovaný: 27.12.08 Prihlásený: 13.12.22 Príspevky: 1874 Témy: 96 Bydlisko: Bratislava,... | Napísal nBXXL: 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) |
|
Registrovaný: 21.08.12 Prihlásený: 08.02.13 Príspevky: 11 Témy: 2 | Napísal autor témy frigg: 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ť
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 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)
|
|
Registrovaný: 27.12.08 Prihlásený: 13.12.22 Príspevky: 1874 Témy: 96 Bydlisko: Bratislava,... | Napísal nBXXL: 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) |
|
Registrovaný: 21.08.12 Prihlásený: 08.02.13 Príspevky: 11 Témy: 2 | Napísal autor témy frigg: 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;
|
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 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ť)
|
|
Registrovaný: 27.12.08 Prihlásený: 13.12.22 Príspevky: 1874 Témy: 96 Bydlisko: Bratislava,... | Napísal nBXXL: 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) |
|
Registrovaný: 21.08.12 Prihlásený: 08.02.13 Príspevky: 11 Témy: 2 | Napísal autor témy frigg: 21.10.2012 13:38 | |
|
jasné, že číta, reverz mi veľmi pomohol, už to fičí tak, ako to má ďakujem obom za pomoc
|
|
Registrovaný: 24.08.12 Prihlásený: 09.02.19 Príspevky: 59 Témy: 0 | Napísal faraon: 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) |
|
Registrovaný: 06.04.10 Prihlásený: 18.02.14 Príspevky: 47 Témy: 2 |
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
|
|
| Stránka: 1 z 1
| [ Príspevkov: 18 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| Zlucenie prvkov pola v PHP, ASP | 3 | 403 | 23.03.2012 11:39 exoomer | | Presun prvkov pola v Assembler, C, C++, Pascal, Java | 2 | 371 | 18.10.2012 1:51 Gregi555 | | MAzanie prvkov z poľa v jave v Assembler, C, C++, Pascal, Java | 5 | 1022 | 22.12.2010 11:55 Forty- | | nasobenie pola Pascal v Assembler, C, C++, Pascal, Java | 8 | 471 | 15.06.2013 22:47 dany2281995 | | Free Pascal a Turbo Pascal v Assembler, C, C++, Pascal, Java | 0 | 384 | 19.12.2014 13:18 Styracoz | | posun v HTML, XHTML, XML, CSS | 3 | 678 | 24.12.2008 14:02 dedko45 | | Načítavanie prvkov v JavaScript, VBScript, Ajax | 8 | 466 | 31.05.2010 18:29 DARSON | | posun casu... v Správy pre vedenie fóra | 6 | 3129 | 26.03.2006 14:10 JanoF | | Posun času v Krčma | 9 | 1567 | 04.11.2010 21:20 Jeffo | | vyber prvkov - POLIA v PHP, ASP | 5 | 496 | 23.04.2010 10:48 stenley | | zoradenie prvkov databazy v PHP, ASP | 1 | 853 | 05.11.2007 16:04 GoodWill | | JS posun thumbov v JavaScript, VBScript, Ajax | 1 | 496 | 20.04.2009 10:06 stenley | | monitor--posun obrazu v Monitory, televízory a projektory | 2 | 2505 | 24.01.2007 20:42 alien123 | | posun po stranach v Redakčné systémy | 0 | 546 | 22.03.2007 21:56 Tom@S | | posun v riadku v Assembler, C, C++, Pascal, Java | 15 | 1256 | 12.10.2009 7:12 pizet | | posuvanie prvkov v poli v PHP, ASP | 2 | 596 | 07.07.2009 12:23 tomast7 |
| 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
|
|