Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Dedek 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
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
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
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
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
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
-
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)
?
-
? To jsem nepobral :(
-
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
-
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.
-
c = ((d-1) % a) +1
to % je modulo
-
kdyz clovek vidi obcas nejaky ten kod profiku rika si aha tak tady mi mizi ramka a hreje se mi cpu
-
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?
-
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
-
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
-
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
-
oprava:
tj. číslo souboru zobrazeného v nejhornějším řádku minus 1
-
? 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.
-
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)