Jak získat vzorec pro výpočet pozice

Dedek

Jak získat vzorec pro výpočet pozice
« kdy: 06. 05. 2015, 17:54:45 »
Ahoj chlapy, už jsem ze školy nějaké to půlstoletí pryč a nedokážu se nějak nastartovat s tímto příkladem. Mám seznam který vypisuje soubory a pomocí tlačítek nahoru / dolů v tom seznamu listuji.

Co známe
Kód: [Vybrat]
a=5   # hodnota, která určuje kolik má vypsat najednou pod sebou souborů
b=99  # celkový počet souborů které se budou zobrazovat
c=?   # pozice označeného souboru (může být hodnota minimálně 1, maximální hodnota uložená v a)
d=?   # číslo označeného souboru (může být hodnota minimálně 1, maximální hodnota uložená v b)

Jak to funguje
Spustím program a vypíše se pod sebe počet souboru z hodnoty "a" čili 5 a první soubor bude označen

Kód: [Vybrat]
1 - /home/file1 # označený soubor
2 - /home/file2
3 - /home/file3
4 - /home/file4
5 - /home/file5

Každým kliknutím na tlačítko dolů, se označený soubor posune o jeden řádek dolů až na pozici 5

Kód: [Vybrat]
1 - /home/file1
2 - /home/file2
3 - /home/file3
4 - /home/file4
5 - /home/file5 # označený soubor

Tam zůstane po celou dobu dokud nebude označen poslední soubor

Kód: [Vybrat]
95 - /home/file95
96 - /home/file96
97 - /home/file97
98 - /home/file98
99 - /home/file99 # označený soubor

To stejný platí i pro tlačítko nahoru, akorát že přesně zrcadlově. Soubor 94 směrem nahoru se označí vždy z pozice 1 z 5

Kód: [Vybrat]
94 - /home/file94 # označený soubor
95 - /home/file95
96 - /home/file96
97 - /home/file97
98 - /home/file98

Pokud budu listovat od pozice 1 - 5 tak budou vždy vypsáný stejné soubory, změny se projeví jen u pozice 1 směrem nahoru nebo u pozice 5 směrem dolů.

Co potřebuji zjistit
Potřebuji zjistit, na kterém řádku 1-5 mám zobrazit znak "X" který bude informovat uživatele jak hluboko je v celém seznamu zanořený. Přirovnal bych to třeba v prohlížeči jako postraní lišta, pokud je stránka dlouhá.


Pomůže někdo? Pokud někdo dočetl až sem :-D Děkuji


kagro

Re:Jak získat vzorec pro výpočet pozice
« Odpověď #1 kdy: 06. 05. 2015, 19:13:39 »
Hm,

nieco ako:

vstup:
smer - dole/hore
d - cislo oznaceneho suboru

if (smer == dole)
  c = min(d, 5)
else
  c = max(d - b + a, 1)

?

Dedek

Re:Jak získat vzorec pro výpočet pozice
« Odpověď #2 kdy: 06. 05. 2015, 19:22:05 »
? To jsem nepobral :(

eL

Re:Jak získat vzorec pro výpočet pozice
« Odpověď #3 kdy: 06. 05. 2015, 20:22:21 »
Citace
size = 5;
count = 100;
offset = 0; // 0 az (count-size)
current = 0; // 0 az count

on(key){
    if ( key==up ) current++;
    if ( key==down ) current--;
    if (current<0) current=0;
    if (current>count) current=count;
    if (current-offset>size) offset=current-size;
    if (current-offset<0) offset=current;
   
    clearOutput();
    for(i=offset; i<offset+size; i++){
        if (i==current)
            print("   ");
        else
            print(" x ");
        print( names + "\n");   
    }
}
Netestovany pseudokod, as is

Re:Jak získat vzorec pro výpočet pozice
« Odpověď #4 kdy: 06. 05. 2015, 20:31:35 »
Co potřebuji zjistit
Potřebuji zjistit, na kterém řádku 1-5 mám zobrazit znak "X" který bude informovat uživatele jak hluboko je v celém seznamu zanořený. Přirovnal bych to třeba v prohlížeči jako postraní lišta, pokud je stránka dlouhá.

Nevím dobře, proč se ptáš ...

Pro "horních 20%" dáš X na první řádek, pro dalších 20% na druhý řádek atd. Konkrétněji:

Pozic máš 95 (na prvním řádku může být minimálně 1. soubor, maximálně 95. soubor), takže
pokud máš na prvním řádku 1. až 19. soubor, dáš X na první řádek,
pokud máš na prvním řádku 20. až 38. soubor, dáš X na druhý řádek,
atd.
Filip Jirsák: "Úplně stejně se ale jedná o podvod, když uživatel zamlčí provozovateli webu, že blokuje reklamu."


karel

Re:Jak získat vzorec pro výpočet pozice
« Odpověď #5 kdy: 06. 05. 2015, 21:40:06 »
c = ((d-1) % a) +1
to % je modulo


karel

Re:Jak získat vzorec pro výpočet pozice
« Odpověď #6 kdy: 06. 05. 2015, 21:41:37 »
kdyz clovek vidi obcas nejaky ten kod profiku rika si aha tak tady mi mizi ramka a hreje se mi cpu

kagro

Re:Jak získat vzorec pro výpočet pozice
« Odpověď #7 kdy: 07. 05. 2015, 07:19:49 »
c = ((d-1) % a) +1
to % je modulo

c = ((94 - 1 ) % 5 ) + 1 = 4 a podla zadania to ma byt 1, ak pojde smerom hore od 99, nie?

karel

Re:Jak získat vzorec pro výpočet pozice
« Odpověď #8 kdy: 07. 05. 2015, 08:32:17 »
c = ((d-1) % a) +1
to % je modulo

c = ((94 - 1 ) % 5 ) + 1 = 4 a podla zadania to ma byt 1, ak pojde smerom hore od 99, nie?

je rozdil mezi zadanim a priklady protoze:

[1, 2, 3, 4, 5]
[6, 7, 8, 9, 10]
[11, 12, 13, 14, 15]
[16, 17, 18, 19, 20]
[21, 22, 23, 24, 25]
[26, 27, 28, 29, 30]
[31, 32, 33, 34, 35]
[36, 37, 38, 39, 40]
[41, 42, 43, 44, 45]
[46, 47, 48, 49, 50]
[51, 52, 53, 54, 55]
[56, 57, 58, 59, 60]
[61, 62, 63, 64, 65]
[66, 67, 68, 69, 70]
[71, 72, 73, 74, 75]
[76, 77, 78, 79, 80]
[81, 82, 83, 84, 85]
[86, 87, 88, 89, 90]
[91, 92, 93, 94, 95]
[96, 97, 98, 99]

a 94 nelezi na pozici 1 ale na pozici 4

karel

Re:Jak získat vzorec pro výpočet pozice
« Odpověď #9 kdy: 07. 05. 2015, 08:34:50 »
pokud tedy nechce listovat po strankach ale jen po souborech pak k tomu je nutne do vzorce zakomponovat id prvniho zobrazeneho zaznamu, tak jako tak je to uloha na modulo a ne na ifovani

Re:Jak získat vzorec pro výpočet pozice
« Odpověď #10 kdy: 08. 05. 2015, 12:30:40 »
Pořád si nejsem jistý, co měl Dedek na mysli.
Ale pokud měl na mysli to, co jsem popsal v minulem prispevku, tak se určitě nepoužije ani if ani modulo, ale dělení:

a, b, c, d ... viz úvodní příspěvek
r = b-a+1... počet rolovacích pozic, v našem příkladě 95
p = d-c...současná rolovací pozice (číslovaná od 0 do r-1), tj. číslo souboru zobrazeného v nejhornějším řádku

číslo_okřížkovaného_řádku = celočíselná_část (p/r*a) +1
Filip Jirsák: "Úplně stejně se ale jedná o podvod, když uživatel zamlčí provozovateli webu, že blokuje reklamu."

Re:Jak získat vzorec pro výpočet pozice
« Odpověď #11 kdy: 08. 05. 2015, 13:54:07 »
oprava:
tj. číslo souboru zobrazeného v nejhornějším řádku minus 1
Filip Jirsák: "Úplně stejně se ale jedná o podvod, když uživatel zamlčí provozovateli webu, že blokuje reklamu."

kagro

Re:Jak získat vzorec pro výpočet pozice
« Odpověď #12 kdy: 08. 05. 2015, 20:38:55 »
? To jsem nepobral :(

Prepac, nedomyslel som to uplne. Uvazoval som len o tych dvoch hranicnych pripadoch, ktore si spomenul.

Neviem, ci rozumiem zadaniu. Ja to chapem tak, ze chces akysi kurzor, ktory sa bude pohybovat od 1 po a.
Ak je kurzor na pozicii 1 a uzivatel stlaci "nahoru", tak zostane kurzor na 1 a zoznam suborov sa posunie k zaciatku.
Ak uzivatel vyberie "dolu" tak sa zoznam nemeni, len sa posunie kurzor na poziciu 2, potom tri, atd.
Ked bude kurzor na pozicii 5 a uzivatel vyberie "dolu" tak sa zoznam posunie smerom k suborom na konci.
Ak bude kurzor na pozicii 5 a uzivatel vyberie "nahoru", tak sa kurzor posunie na poziciu 4, potom 3,...
Dobre to chapem?

Potom by Ti malo stacit urobit toto:

Ak uzivatel vybral dole:
d = d + 1
c = min(c + 1, a)

Ak uzivatel vyberie "nahoru":
d = d -1
c = max(c - 1, 1)

Osetrenie krajnych stavov, teda ze d nemoze byt mensie ako 1 a vacsie ako b necham na Teba.

 

e3k

Re:Jak získat vzorec pro výpočet pozice
« Odpověď #13 kdy: 08. 05. 2015, 23:24:22 »
Kód: [Vybrat]
a=5   # hodnota, která určuje kolik má vypsat najednou pod sebou souborů
b=99  # celkový počet souborů které se budou zobrazovat
c=?   # pozice označeného souboru (může být hodnota minimálně 1, maximální hodnota uložená v a)
d=?   # číslo označeného souboru (může být hodnota minimálně 1, maximální hodnota uložená v b)

sipka dole = inkrementujes premenne c, d (pokial c ==a tak neinkrementujes c ale inkrementujes inicializacnu premennu loopu ktory zobrazuje tvoje riadky v pripade ze d!=b, pokial d==b neinkrementujes d)

sipka hore = dekrementujes c, d (pokial c==1 tak nedekrementujes c ale dekrementujes inicializacnu premennu loopu ktory zobrazuje tvoje riadky v pripade ze d!=1, pokial d==1 tak nedekrementujes d)

---

elegantnejsie riesenie by bolo keby pri stlaceni dole na konci listu by si zacal vidiet prve subory alebo pri stlaceni hore by ti tam sli posledne.

---

a cisto intuitivne ti mozem povedat ze ak by som sa nemusel drzat zadania tak:
d=?   # číslo prveho zobrazeneho souboru (může být hodnota minimálně 1, maximální hodnota uložená v b)