Autor Zpráva
Miloš
Profil
„Nemaje co dělat“ opět jsem si hrál.
Výsledkem jsou nové názvy čísel v šestnáctkové soustavě (namísto prozaických A–F); ale o to nejde.
Protože jsem „programátor–amatér–věčný začátečník“, který se touto činností ani neživí, ani soustavně nezabývá, uložil jsem si malé algoritmické cvičení, abych se alespoň trochu udržoval ve formě (jakož nezapomínal syntaxi).

Výsledkem měl být co nejúspornější kód, který by v HTML vypsal tabulku o třech sloupcích:
<td>desítkové číslo</td><td>šestnáctkové číslo číslo</td><td>slovní pojmenování</td>
Tu jsou odkazy: výsledné html, php kód a includované pole.

V poli jsem vypsal všechny výrazy od X0 do X100. Uvažoval jsem sice o dvou polích (jednotky a desítky; v případě delšího výpisu pak ještě pole pro stovky, tisíce…), ale s ohledem na složitost Češtiny jsem rezignoval(*)

Pro přehlednost uvádím klíčovou část výše odkazovaného kódu i zde:
<table border="1" cellpadding="3">
<thead><tr><th>%d</th><th>%X</th><th>%s</th></tr></thead>
<tfoot><tr><th>%d</th><th>%X</th><th>%s</th></tr></tfoot>

<?php
require 'pole.php'; // $pole = array("nula", "jedna", "dva", … "tyqadesát tykef", "sto");
for ($i = 0, $sl = 1; $i < count($pole); $sl++) { // $i = obecné počítadlo, ale $i++ až ve vnořeném cyklu *** $sl = sudá/lichá
   echo '<tbody class="n'.($sl%2).'">'."\n"; // tbody (po 16  <tr> ) mají class="n0" nebo n1, protože $sl%2
   for ($j=0; $j < 16 && $i < count($pole); $j++, $i++){ // $j = obecné počítadlo vnořeného cyklu
      printf ("\t<tr><th>%d</th><td>%X</td><td>$pole[$i]</td></tr>\n", $i, $i); // vypsání řádku tabulky
   }
   echo "</tbody>\n";
}
?>
</table>

A nyní otázky:
1) Vadí mi, že 2× testuji (tedy v obou cyklech for) jestli $i < count($pole). Nešlo by to jen jednou?
2) Šel by tento kód ještě nějak vylepšit (zjednodušit)?
3) Napadl by někoho z vás jiný (a zároveň úspornější) algoritmus?


(*) Víte mimochodem, že má Čeština krom duálu i „kvartál“ (či „semiplirál“)?
jedno sto (singulár)
dvě stě (duál)
tři, čtyři sta („kvartál“)
pět… set (plurál)
(V případě vyšších řádů duál chybí a je nahrazen „kvartálem“: dva, tři, čtyři tisíce, miliony…)
nightfish
Profil
Warning: require(pole.php) [function.require]: failed to open stream: No such file or directory in /storage/www2/8/site26648/wwwroot/hexa/index.php on line 15

Fatal error: require() [function.require]: Failed opening required 'pole.php' (include_path='/www/8/site26648/:.:/usr/lib/php:/usr/share/php5/:/usr/ share/php/') in /storage/www2/8/site26648/wwwroot/hexa/index.php on line 15

...nic to nevypíše, takže bohužel nechápu, k čemu jsou tam ty <tbody>...
Miloš
Profil
pole.php jsem zapomněl nahrát na server, už tam je.
A pak význam tbody pochopíš (střídání barevných oddílů po 16 řádcích; něco jako div nebo span, jenže v tabulce).
nightfish
Profil
co takhle?
<?php
require 'pole.php'; // $pole = array("nula", "jedna", "dva", … "tyqadesát tykef", "sto");
$pocet = count($pole);
for ($i = 0; $i < $pocet; $i++) {
  if (!($i % 16)) echo "<tbody class='nl".(($i / 16) %2)."'>";
  printf ("\t<tr><th>%d</th><td>%X</td><td>$pole[$i]</td></tr>\n", $i, $i); // vypsání řádku tabulky
  if (!($i % 16)) echo "</tbody>";
}
?>
Miloš
Profil
Vypadá to lidštěji, ale </tbody> se vypisuje na špatném řádku – hned po tom prvním, u kterého je <tbody>.
To ale půjde upravit.
nerozumím ale zápisu if (!($i % 16)) –> jestliže není pravda, že $i modulo šestnácti co??? rovná se kolik???
nightfish
Profil
Miloš
Vypadá to lidštěji, ale </tbody> se vypisuje na špatném řádku
ajo, vidíš...
upravu tu druhou podmínku na
if (!(($i + 1) % 16)) echo "</tbody>";

...teď už je problém jen s chybějícím </tbody> na konci tabulky

nerozumím ale zápisu if (!($i % 16)) –> jestliže není pravda, že $i modulo šestnácti co??? rovná se kolik???
hodnotou výrazu $i % 16 je buď 0 (což je false) nebo 1-15 (což je true)
Miloš
Profil
nightfish
tomu +1 jsem se nakonec dopídil taky; ináč díky za osvětu.

Mimochodem – jak se ti líbí nové číslovky?



Doplňuji:
...teď už je problém jen s chybějícím </tbody> na konci tabulky
jo, to jsem teď taky přehlédnul; z pohledu HTML to (v transitionalu) nevadí, ukončovací značka není povinná, ale z hlediska programu to není nejčistší. Ale s tím si budu lámat hlávku až zítra, teď už jdu spat.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: