[ 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 | 2
NapísalOffline : 20.10.2012 19:25 | Pascal - posun prvkov pola

Č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 | 3
NapísalOffline : 20.10.2012 19:59 | Pascal - posun prvkov pola

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 | 2
Napísal autor témyOffline : 20.10.2012 20:34 | Pascal - posun prvkov pola

č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 | 3
NapísalOffline : 20.10.2012 20:41 | Pascal - posun prvkov pola

Ď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 | 2
Napísal autor témyOffline : 20.10.2012 21:53 | Pascal - posun prvkov pola

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 | 3
NapísalOffline : 20.10.2012 22:15 | Pascal - posun prvkov pola

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 | 2
Napísal autor témyOffline : 20.10.2012 23:42 | Pascal - posun prvkov pola

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 | 3
NapísalOffline : 21.10.2012 0:12 | Pascal - posun prvkov pola

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 | 96
Bydlisko: Bratislava,...
NapísalOffline : 21.10.2012 0:15 | Pascal - posun prvkov pola

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 | 2
Napísal autor témyOffline : 21.10.2012 9:09 | Pascal - posun prvkov pola

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 | 3
NapísalOffline : 21.10.2012 9:18 | Pascal - posun prvkov pola

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 | 96
Bydlisko: Bratislava,...
NapísalOffline : 21.10.2012 11:39 | Pascal - posun prvkov pola

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 | 2
Napísal autor témyOffline : 21.10.2012 11:39 | Pascal - posun prvkov pola

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 | 3
NapísalOffline : 21.10.2012 11:44 | Pascal - posun prvkov pola

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 | 96
Bydlisko: Bratislava,...
NapísalOffline : 21.10.2012 11:55 | Pascal - posun prvkov pola

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 | 2
Napísal autor témyOffline : 21.10.2012 13:38 | Pascal - posun prvkov pola

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 | 0
NapísalOffline : 22.10.2012 9:00 | Pascal - posun prvkov pola

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 | 2
NapísalOffline : 22.10.2012 17:40 | Pascal - posun prvkov pola

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


 [ Príspevkov: 18 ] 


Pascal - posun prvkov pola



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
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

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

Zlucenie prvkov pola

v PHP, ASP

3

404

23.03.2012 11:39

exoomer

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

1026

22.12.2010 11:55

Forty-

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

nasobenie pola Pascal

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

8

472

15.06.2013 22:47

dany2281995

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

Free Pascal a Turbo Pascal

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

0

385

19.12.2014 13:18

Styracoz

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

posun

v HTML, XHTML, XML, CSS

3

679

24.12.2008 14:02

dedko45

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

Načítavanie prvkov

v JavaScript, VBScript, Ajax

8

468

31.05.2010 18:29

DARSON

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

Posun času

v Krčma

9

1573

04.11.2010 21:20

Jeffo

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

posun casu...

v Správy pre vedenie fóra

6

3134

26.03.2006 14:10

JanoF

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

vyber prvkov - POLIA

v PHP, ASP

5

498

23.04.2010 10:48

stenley

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

zoradenie prvkov databazy

v PHP, ASP

1

854

05.11.2007 16:04

GoodWill

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

monitor--posun obrazu

v Monitory, televízory a projektory

2

2512

24.01.2007 20:42

alien123

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

posun po stranach

v Redakčné systémy

0

547

22.03.2007 21:56

Tom@S

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

posun v riadku

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

15

1261

12.10.2009 7:12

pizet

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

JS posun thumbov

v JavaScript, VBScript, Ajax

1

498

20.04.2009 10:06

stenley

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

Usporiadanie prvkov v poli

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

4

490

13.04.2017 12:21

neutroN



© 2005 - 2024 PCforum, edited by JanoF