AikaLaskin

coaster 07.09.05 17:37

Lasketaan matkaan käytetty aika eri nopeuksilla. http://koti.mbnet.fi/villix/aikalaskin.php

 Tekstiversio  Arvo: -6 (8 ääntä)  Äänestä: +  -
<?php
/*
        aika = nopeus * matka
        nopeus min/km
        matka km
        aika min

        Lasketaan eri nopeuksille ja matkoille ajat.

        Pointti tässä koodissa on varmaankin tuo ajan muotoilu
        muotoon tunnit:minuutit:sekunnit, kun laskettu aika on minuutteina.
*/

?>
<html>
<head>
<style type="text/css">
td
{
        width: 3.5em;
        text-align: right;
}
</style>
</head>
<body>

<table border="1">
<?php

/*
        Matkaan käytetty aika muodossa h:min:s
*/

function Aika($vauhti, $matka)
{
        $aika = $vauhti * $matka;
       
        $tunnit = "";
       
        // Erotellaan ajasta minuutit ja tarvittaessa lasketaan myös tunnit
        $minuutit = (int)$aika;
       
        $sekunnit = number_format(60 * ($aika - $minuutit),0);
       
        if($minuutit >= 60)
        {
                $tunnit = (int)($minuutit / 60);
               
                $tunnit .= ":";
                       
                $minuutit = $minuutit - (60 * $tunnit);
               
                if(strlen($minuutit) == 1)
                        $minuutit = "0".$minuutit;
        }
       
        if(strlen($sekunnit) == 1)
                $sekunnit = "0".$sekunnit;
       
        return $tunnit.$minuutit.":".$sekunnit;
}

// Asetetaan alkuarvot

// halutut matkat (km)
$matkat = array(0.05, 0.1, 0.4, 0.8, 1, 1.5, 2, 5, 10, 11.6, 15);
$nopeusa = 2.5; // alku (min/km)
$nopeusl = 10;   // loppu
$nopeusd = 0.5; // muutos

// taulukoon matka-arvot
print "<tr>\n\t<th>&nbsp;</th>\n";

for($q=0; $q<count($matkat); $q++)
        print "\t<th>{$matkat[$q]}</th>\n";
       
print "</tr>\n";

for($nopeus=$nopeusa; $nopeus<=$nopeusl; $nopeus += $nopeusd)
{
        print "<tr>\n";
        print "\t<th>".number_format($nopeus,1)."</th>\n";
       
        for($i=0; $i<count($matkat); $i++)
        {
                print "\t<td>";
               
                print Aika($nopeus,$matkat[$i]);
               
                print "</td>\n";
        }
       
        print "</tr>\n";
}

?>
</table>

</body>
</html>
 

coaster 20:23 7.9.05 
Juu tämän koodin idea lähti ihan siitä että laskin eri juoksunopeuksien vaikutusta aikaan halutulla matkalla. No siinä paperille niitä laskiessa tuli mieleen, että voishan tämän koneellakin tehdä. Jolloin sitten otin mukaan erimatkoja ja nopeuksia.

Niin tosiaan tuota nopeutta tässä kuvataan minuuttia/kilometri, joka sopii hyvin juurikin juoksun nopeuden mittaamiseen.
Kuten tohon koodin lisäsin kommenttina, niin pointti varmaankin on tuo ajan muotoilu.

editoitu: 00:07 8.9.05
chiman 00:03 8.9.05 
Ensinnäkin kaava on väärin:

PHP
$aika = $vauhti * $matka;
Sen pitää olla:

PHP
$aika = $matka / $vauhti;
EDIT: Näkyy se olevan oikein, mutta vauhti on määritelty oudolla tavalla. Suosittelen muuttamaan sen esim. km/h-muotoon.

Toisekseen koodissa on turhan paljon tyhjiä rivejä. Käytä niitä säästeliäämmin, erottamaan suuremmat loogiset kokonaisuudet toisistaan.

Kolmanneksi: Opettele foreach:n käyttö. Kirjoittamasi koodi

PHP
        for($i=0; $i<count($matkat); $i++)
        {
                print "\t<td>";
               
                print Aika($nopeus,$matkat[$i]);
               
                print "</td>\n";
        }

Siistiytyy sillä muotoon

PHP
        foreach($matkat as $m)
        {
                print "\t<td>" . Aika($nopeus, $m) . "</td>\n";
        }

Sama juttu toisaalla koodissa.
coaster 09:08 8.9.05 
1. Vauhtia ei ole määritelty mitenkään hassusti. Se on juurikin tarkoituksella noin eli min/km, joka soveltuu juurikin juoksunopeuden mittaamiseen huomattavasti paremmin kuin km/h. Syystä että nopeuden ilmoittaminen km/h ei ole kuvaavaa, vaan jopa sekavaa, kun kyse on juurikin juoksemisesta.

2. tyhjät rivit... Makuasia

3. Juu kävi mielessä, että olis voinut tehdä foreachilla, mutta päädyin kuitenkin pelkkään foriin.
Sitten tuo siistiminen, sekin on vähän makuasia ja tapauskohtainen. Tuo mun tapa kirjoittaa tuo juontaa siitä, kun yleensä siinä saattaa tehdä kaikenlaista muutakin kuin vaan tuon funktiokutsun, mutta joo...


Mutta hyvää palautetta :)
editoitu: 13:05 8.9.05
chiman 12:52 8.9.05 
Aika-funktion tekisin näin:

PHP
function Aika($vauhti, $matka)
{
    $aika = intval(round($matka * $vauhti * 60))// aika sekunneissa

    $sek  = $aika % 60;
    $aika = $aika / 60;
    $min  = $aika % 60;
    $h    = $aika / 60;

    return sprintf("%02d:%02d:%02d", $h, $min, $sek);
}
coaster 21:55 8.9.05 
Kas kas, sitä oppii vieläkin uusia aisioita :)

Toi näytti aika näppärältä toi sun versiosi, voiskin varmaan päivittää tota omaa vähäsen.