Autor | Zpráva | ||
---|---|---|---|
Nat Profil * |
#1 · Zasláno: 18. 6. 2009, 13:18:06
Zdravím, jak by se dalo zapsat pomocí cyklu toto:
if ($a == ($b - 1)) { $c = ($d2 / 2) + ($d1 / 2); } if ($a == ($b - 2)) { $c = ($d3 / 2) + $d2 + ($d1 / 2); } if ($a == ($b - 3)) { $c = ($d4 / 2) + $d3 + $d2 + ($d1 / 2); } ... |
||
nightfish Profil |
#2 · Zasláno: 18. 6. 2009, 13:24:37
blbě... ale kdybys ty $d1, $d2, ..., $d4 měl v poli, tak by to jít mohlo
|
||
tiso Profil |
#3 · Zasláno: 18. 6. 2009, 13:32:10
Nat - o čo ide? Čo majú tie premenné a výpočty znamenať?
|
||
Nat Profil * |
#4 · Zasláno: 18. 6. 2009, 13:51:05
Nightfish: všechny hodnoty jsou v array
Tiso: Zkusím dát příklad: Mám 4 pole (ne array, prostě se to jmenuje pole) Pole s číslem 2 je největší, a znám u něj hodnotu F. Podle níže zapsaných rovnic potřebuji zjistit i hodnoty pro ostatní pole. V array mám uloženy hodnoty h. Rovnice: Pro pole s číslem 1 F1 = F2 - q * (h2/2 + h1/2) Pro pole s číslem 4 F4 = F2 + q * (h2/2 + h3 + h4/2) Je doufám zřejmé, že pokařdé může být největší jiné pole a počet polí může být libovolný tedy například může být polí 8 a největší bude 4 atd. |
||
tiso Profil |
#5 · Zasláno: 18. 6. 2009, 15:00:55
Nat - ako vysvetlenie čo to má byť mi to bohužiaľ nestačí...
|
||
Alphard Profil |
#6 · Zasláno: 18. 6. 2009, 23:33:33 · Upravil/a: Alphard
Nenapsal jste to moc jasně. Možná nějak takhle (jen ukázka, bez úprav to asi fungovat nebude)
$p = count ($d); // jestli je indexovano od 0, je nutné odecist 1 $c = ($d[$p] / 2) + ($d[1] / 2); for ($j = $p - 1; $p > 1; $p--) $c += $d[$j]; |
||
Nat Profil * |
#7 · Zasláno: 19. 6. 2009, 13:46:35
Ono není zrovna jednoduché to popsat :-) každopádně tady je kód, který funguje a který jsem chtěl dát do cyklu:
function koef_for_Soi ($scale_factor, $rosko_So, $height_field_y, $height_field, $height_field_level, $field) { $number_of_field = count($height_field_y); for ($i = 0; $i <= count($height_field); $i++) { if ($height_field_level[$i]['height_level'] == max($height_field)) { $number_of_long_field = $height_field_level[$i]['number_field']; } } if ($field == 1 AND $number_of_long_field == 2) { $koef_for_Soi = (($height_field_y[0] / $scale_factor) / 2) + (($height_field_y[1] / $scale_factor) / 2); } if ($field == 1 AND $number_of_long_field == 3) { $koef_for_Soi = (($height_field_y[0] / $scale_factor) / 2) + (($height_field_y[1] / $scale_factor)) + (($height_field_y[2] / $scale_factor) / 2); } if ($field == 1 AND $number_of_long_field == 4) { $koef_for_Soi = (($height_field_y[0] / $scale_factor) / 2) + (($height_field_y[1] / $scale_factor)) + (($height_field_y[2] / $scale_factor)) + (($height_field_y[3] / $scale_factor) / 2); } if ($field == 1 AND $number_of_long_field == 5) { $koef_for_Soi = (($height_field_y[0] / $scale_factor) / 2) + (($height_field_y[1] / $scale_factor)) + (($height_field_y[2] / $scale_factor)) + (($height_field_y[3] / $scale_factor)) + (($height_field_y[4] / $scale_factor) / 2); } if ($field == 2 AND $number_of_long_field == 1) { $koef_for_Soi = (($height_field_y[1] / $scale_factor) / 2) + (($height_field_y[0] / $scale_factor) / 2); } if ($field == 2 AND $number_of_long_field == 3) { $koef_for_Soi = (($height_field_y[1] / $scale_factor) / 2) + (($height_field_y[2] / $scale_factor) / 2); } if ($field == 2 AND $number_of_long_field == 4) { $koef_for_Soi = (($height_field_y[1] / $scale_factor) / 2) + (($height_field_y[2] / $scale_factor)) + (($height_field_y[3] / $scale_factor) / 2); } if ($field == 2 AND $number_of_long_field == 5) { $koef_for_Soi = (($height_field_y[1] / $scale_factor) / 2) + (($height_field_y[2] / $scale_factor)) + (($height_field_y[3] / $scale_factor)) + (($height_field_y[4] / $scale_factor) / 2); } if ($field == 3 AND $number_of_long_field == 1) { $koef_for_Soi = (($height_field_y[0] / $scale_factor) / 2) + ($height_field_y[1] / $scale_factor) + (($height_field_y[2] / $scale_factor) / 2); } if ($field == 3 AND $number_of_long_field == 2) { $koef_for_Soi = (($height_field_y[2] / $scale_factor) / 2) + (($height_field_y[1] / $scale_factor) / 2); } if ($field == 3 AND $number_of_long_field == 4) { $koef_for_Soi = (($height_field_y[2] / $scale_factor) / 2) + (($height_field_y[3] / $scale_factor) / 2); } if ($field == 3 AND $number_of_long_field == 5) { $koef_for_Soi = (($height_field_y[2] / $scale_factor) / 2) + (($height_field_y[3] / $scale_factor)) + (($height_field_y[4] / $scale_factor) / 2); } if ($field == 4 AND $number_of_long_field == 1) { $koef_for_Soi = (($height_field_y[0] / $scale_factor) / 2) + ($height_field_y[1] / $scale_factor) + ($height_field_y[2] / $scale_factor) + (($height_field_y[3] / $scale_factor) / 2); } if ($field == 4 AND $number_of_long_field == 2) { $koef_for_Soi = (($height_field_y[1] / $scale_factor) / 2) + ($height_field_y[2] / $scale_factor) + (($height_field_y[3] / $scale_factor) / 2); } if ($field == 4 AND $number_of_long_field == 3) { $koef_for_Soi = (($height_field_y[2] / $scale_factor) / 2) + (($height_field_y[3] / $scale_factor) / 2); } if ($field == 4 AND $number_of_long_field == 5) { $koef_for_Soi = (($height_field_y[3] / $scale_factor) / 2) + (($height_field_y[4] / $scale_factor) / 2); } return abs($koef_for_Soi); } |
||
tiso Profil |
#8 · Zasláno: 19. 6. 2009, 14:14:54 · Upravil/a: tiso
Nat
1. načo máš v tej funkcii premennú $rosko_So? Nevyužívaš ju. 2. načo tam máš riadok 3? Premennú $number_of_field nevyužívaš. 3. prečo nevyjmeš $scale_factor? Stačí ho dať na koniec: return abs($koef_for_Soi/$scale_factor); 4. výsledok pri podmienke if ($field == 1 AND $number_of_long_field == 2) je rovnaký ako pri podmienke if ($field == 2 AND $number_of_long_field == 1) A poprosil by som upresniť čo znamenajú jednotlivé premenné. |
||
AM_ Profil |
#9 · Zasláno: 19. 6. 2009, 14:31:19
Nat
Myslím, že není tak složité si algoritmus vymyslet sám, hlavně když sám nejlíp víš, oč běží. Tu hromadu řádků jsi jistě sepsal podle nějakých pravidel co se s čím sčítá. Zkus si tato pravidla sepsat vlastními slovy, uvidíš, že přepsání do kódu je pak jen rutinní záležitost. Nebo sem zkus alespoň napsat slovně (tedy ne pomocí vzorečků), o jaký výpočet jde, když to člověk vidí takto tak se algoritmus vymýšlí dost ztěžka, když řekneš, že máš např. určité pole souřadnic ze kterého chceš spočítat hodnotu pro nějaké dané něco za určitých pravidel, tak bude někdo vědět spíš. |
||
Nat Profil * |
#10 · Zasláno: 20. 6. 2009, 10:48:17
Tiso Ty pozůstatky jsou tam ze situace kdy jsem ukládal výsledek jako pole a byly v něm i ty ostatní hodnoty. Ta připomínka se Scale_factorem je dobrá díky is podmínkou.
AM_ toto je jen pracovní verze, kterou jsem vytvořil právě proto abych viděl kde se tam dá vložit cyklus, během dneška se na to ještě podívám a zkusím to případně slovně popsat. Zatím díky |
||
Nat Profil * |
#11 · Zasláno: 22. 6. 2009, 12:12:15
Tak nakonec takhle, doufám, že z tohoto už se dá lépe pochopit co jsem chtěl
function koef_for_Soi ($scale_factor, $height_field_y, $height_field, $height_field_level, $field) { for ($i = 0; $i <= count($height_field); $i++) { if ($height_field_level[$i]['height_level'] == max($height_field)) { $number_of_long_field = $height_field_level[$i]['number_field']; } } $different = $number_of_long_field - $field; if ($different == 1 OR $different == -1) { $koef_for_Soi = ($height_field_y[$number_of_long_field-1] / 2) + ($height_field_y[$field-1] / 2); } if ($different > 1) { for ($i = 2; $i <= $different; $i++) { $koef_for_Soi_i = $koef_for_Soi_i + $height_field_y[$number_of_long_field-$i]; } $koef_for_Soi = ($height_field_y[$number_of_long_field-1] / 2) + ($height_field_y[$field-1] / 2) + + $koef_for_Soi_i; } if ($different < 1) { for ($i = 2; $i <= $different; $i++) { $koef_for_Soi_i = $koef_for_Soi_i + $height_field_y[$number_of_long_field+$i]; } $koef_for_Soi = ($height_field_y[$number_of_long_field-1] / 2) + ($height_field_y[$field-1] / 2) + $koef_for_Soi_i; } return abs($koef_for_Soi / $scale_factor); } |
||
AM_ Profil |
#12 · Zasláno: 22. 6. 2009, 12:52:44
„Nebo sem zkus alespoň napsat slovně (tedy ne pomocí vzorečků), o jaký výpočet jde“
ještě že jsi to udělal, z tohohle zdrojového kódu už určitě všichni chápeme, co to má dělat. Zjevně počítáš jakýsi koeficient, tak to zkus vysvětlit. |
||
Časová prodleva: 15 let
|
0