Avatar billede dark_unicorn Nybegynder
20. august 2007 - 19:29 Der er 19 kommentarer

Kode der tager input, vælger resultat, og sammensætter

Jeg sidder og skal lave noget php kode (helst) der kan tage flere sæt input fra brugeren, behandle dem til et resultat og til sidst opstille de forskellige mulige resultater med en benævnelse fra en liste. Jeg vil helst at de mulige kombinationer kan vælges fra en drop-down menu (der er normalt 4 muligheder for hvert dyr, men nogle har flere muligheder)

Eksempelvis skal den kunen tage genkoder og udregne de mulige udfald for forskellige forældre.

Eksempelvis:
Moderdyr:
Aa bb CC Dd

Faderdyr:
aa Bb cc Dd

Kan give resultaterne

Aa, Aa, aa og aa for det første sæt
Bb, bb, Bb og bb for andet sæt
Cc, Cc, Cc og Cc for tredje sæt
DD, Dd, Dd og dd for det fjerde sæt.

Derefter skal det sættes op i de 12 mulige udfald og hente benævnelsen for hvert i en liste.

Jeg burde selv kunen tilføje og udbygge med de input muligheder jeg har behov for.
Avatar billede jakobdo Ekspert
20. august 2007 - 21:18 #1
Jeg tror ikke helt jeg forstår hvad input er og hvad output skal være?
Kan du prøve med en forklaring igen? :o) (jeg er ikke så klog på gener)
Avatar billede dark_unicorn Nybegynder
21. august 2007 - 07:29 #2
input skal vælges i en dropbox (er min tanke) og er f.eks. AA, Aa, aa eller A-

Der skal være 2 sæt input (et for faderdyr og et for moderdyr) hvor informationerne er samme type (Altså A'er, B'er osv) og hver gruppe skal "regnes ud", Aa x AA f.eks.)

Output skal være af samme type som input (Altså genetiske koder) men skal sættes sammen af alle mulighederne og gerne kunne regne ud i procent (eller dele af 1)hvor stor sandsynligheden er for hvert udfald

Så input med 2 gener f.eks. er

AA Bb (første sæt)
AA Bb (andet sæt)

Resultaterne er

AA BB (0.25 eller 25%)
AA Bb (0.5 eller 50%)
AA bb (0.25 eller 25%)

Udregningen er:
AB (faderdyr)
CD (moderdyr)

AC, AD, BC, BC ved AB x CD (bortset fra at alle bogstaverne ville være det same hvor der ikke er varianter, så det ville være AA x Aa f.eks.), men jeg regner med selv at skulle indtaste de forskellige kombinationsmuligheder - eller kan programmet selv udregne det?) og så skal der bare være mulighed for flere Loci (som et genbogstav hedder)

(hjalp det?)
Avatar billede jakobdo Ekspert
22. august 2007 - 07:56 #3
Jeg er stadig meget i tvivl. :o)
Men er det en form ala dette: http://www.codebreaker.dk/exp/792607exp.php ?
Bare for at starte et sted.
Avatar billede dark_unicorn Nybegynder
22. august 2007 - 20:36 #4
Ja, sådan noget lignende (bortset fra at bogstaverne gruppevis skal være ens for faderdyr og moderdyr)

Der er for hver kombination (hvor der ikke er særlige tilfælde) 4 mulige udfald

Hvis du kan lave den med 3 sæt kan jeg ret sikkert selv udvide efter behov (bogstaver A, B, C og D f.eks.)

Anden del er så at få de forskellige kombinationer sat sammen med en procentchance (eller decimal chance), og sidste punkt er at "hente" information om hvad en kombination "hedder" fra en liste (jeg vil meget gerne give 200 point for hver del - men vil helst holde det samlet i ét indlæg :))
Avatar billede jakobdo Ekspert
22. august 2007 - 21:02 #5
Er det noget i denne stil vi så snakker: http://www.codebreaker.dk/exp/792607exp.php
Altså til at starte med?
Det er ikke flere point jeg er ude efter, men jeg forstår bare ikke hvordan man regner med gener! :o)
Avatar billede dark_unicorn Nybegynder
23. august 2007 - 11:12 #6
Nej, det andet var mere rigtigt.

Hurtig intro til at regne med gener:

Alle gen positioner (det heder locus og loci i flertal) har 2 gener.
Hver locus har et bogstav, og generne der optræder på den plads betegnes derfor med det bogstav (i nogle tilfælde 2 bogstaver, og i nogle tilfælde et bogstav med et andet i nogle kombinationer, ørkenrotter har f.eks. på C locus generne C, c, c(b) og c(h), hvor bogstaverne i parantes betegner en særlig udgave af genet).

Når man regner gener sammen skal man bruge de samme genpar hos begge dyr - også selvom der ikke er noget kendt, og man regner dem gennem det de rhedder punett squares:

Faderdyret langs X aksen (øverste linie) og Moderdyret langs Y aksen (længst til venstre)

_|A_|a_|
A|AA|Aa|
a|Aa|aa|

Faderdyrets og moderdyrets genpar deles op og stilles i sådan et skema (et Punett square) og krydses ind for at give de 4 statistiske muligheder. Det er den første del af "problemet". Hver af de 4 muligheder skal samtidigt tildeles værdien 0.25 og så skal de der er ens samles (eller omvendt)- i eksemplet her skulle det være AA (0.25) Aa (0.5) og aa (0.25) - så der kan regnes ud hvor stor sandsynligheden er for hvert muligt udfald når vi propper flere gener på
Avatar billede jakobdo Ekspert
23. august 2007 - 12:07 #7
Avatar billede dark_unicorn Nybegynder
23. august 2007 - 14:37 #8
Jeg tror det er lidt tættere på (jeg kan ikek helt huske foregående version mere ;))

Første dropdown (for begge9 skal have indholdet AA, Aa og aa og nummer 2 skal være BB, Bb og bb.

Men ellers, jo så passer det, der skal så ende med én beregning pr dropdown sæt (fader og moder), men jo, det ser bestemt ud til at være noget som det jeg eftersøger :) (hvis det er for besværligt at lave det i én dropdown kan de også sagtens deles i 2 sæt så der er 2 dropdown til hver locus (A, B, C, whatever) :)
Avatar billede jakobdo Ekspert
23. august 2007 - 14:51 #9
Avatar billede dark_unicorn Nybegynder
23. august 2007 - 22:01 #10
Ja, bortset fra at den nu beregner A koderne sammen med B koderne, hvor de skal regnes sammen A'er for sig og B'er for sig osv :)
Avatar billede jakobdo Ekspert
24. august 2007 - 11:13 #11
Den forstod jeg så ikke! :o)
Avatar billede dark_unicorn Nybegynder
24. august 2007 - 16:27 #12
En genkode består af mange bogstaver, (loci), og hver locus skal beregnes for sig.

En locus er f.eks. A og en danden er B, så AA, Aa og aa er A-locus osv.

Lige nu regner den A'erne sammen med B'erne men uden at beregne A'erne for sig (giver det mening?)
Avatar billede jakobdo Ekspert
24. august 2007 - 17:56 #13
Jeg vil desværre stadig ikke kalde mig gen-ekspert. :o)

Prøv at fang mig på msn: jakobdo [at] hotmail /dot\ com
Avatar billede dark_unicorn Nybegynder
26. august 2007 - 18:40 #14
Jeg sad lige og tænkte over at det med at tilrette til generne specifikt kan jeg nok godt selv - så hvis du lægger det op du har lavet som et svar giver jeg dig point, så kan jeg bakse lidt videre med det, og så oprette et nyt spørgsmål til det jeg har brug for når jeg har fikset den del med bogstaverne sammen :)
Avatar billede jakobdo Ekspert
26. august 2007 - 19:11 #15
Det muligt det kan laves smartere, men dette er koden så langt:

<?php
//http://www.eksperten.dk/spm/792607

if(isset($_POST['save']))
{
    $fader_count = count($_POST['fader']);
    $moder_count = count($_POST['moder']);
   
    $hack = array();
   
    if($fader_count > 0 && $moder_count > 0)
    {
        for($j = 1; $j <= $moder_count; $j++)
        {
            for($i = 1; $i <= $fader_count; $i++)
            {
                $var1 = $_POST['fader'][$i];
                $var2 = $_POST['moder'][$j];
                $hack[] = ($var1 < $var2) ? $var1 . $var2 : $var2 . $var1;
            }
        }
       
        natsort($hack);
        $counts = array_count_values($hack);
       
        echo '<table border="1"><tr><td></td>';
        for($i = 1; $i <= $fader_count; $i++)
        {
            echo '<td><b>'.$_POST['fader'][$i] . '</b></td>';
        }
        echo '</tr>';
       
        for($j = 1; $j <= $moder_count; $j++)
        {
            echo '<tr><td><b>' . $_POST['moder'][$j] . '</b></td>';
            for($i = 1; $i <= $fader_count; $i++)
            {
                $var1 = $_POST['fader'][$i];
                $var2 = $_POST['moder'][$j];
               
                $var3 = ($var1 < $var2) ? $var1 . $var2 : $var2 . $var1;
               
                echo '<td>'. $var3 . ' ('. (($counts[$var3]/count($hack))*100) .'%)</td>';
            }
            echo '</tr>';
        }
        echo '</table>';
    }
}

function printOptions($options=array())
{
    $output = '';
    foreach($options AS $option)
    {
        $output .= '<option>' . $option . '</option>';
    }
    return $output;
}

echo '<form action="792607exp.php" method="post">';
echo '<table>';
echo '<tr><td>Faderdyr</td>';
echo '<td><select name="fader[1]">';
echo printOptions(array('AA','Aa','aa'));
echo '</select></td>';
echo '<td><select name="fader[2]">';
echo printOptions(array('BB','Bb','bb'));
echo '</select></td></tr>';
echo '<tr><td>Moderdyr</td>';
echo '<td><select name="moder[1]">';
echo printOptions(array('AA','Aa','aa'));
echo '</select></td>';
echo '<td><select name="moder[2]">';
echo printOptions(array('BB','Bb','bb'));
echo '</select></td></tr>';
echo '<tr><td colspan="4"><input type="submit" name="save" value="Beregn" /></td></tr>';
echo '</form>';

?>
Avatar billede dark_unicorn Nybegynder
27. august 2007 - 15:53 #16
Så kommer jeg med lidt spørgsmål :)

er der en måde at dele Arrayet på inden koden udfører natsort($hack) (jeg går ud fra det er den funktion der laver selve udregningen til punett square'et) så den udgave du har haft før med et arrray der så nogenlunde sådan her ud:

echo '<form action="792607exp.php" method="post">';
echo '<table>';
echo '<tr><td>Faderdyr</td>';
echo '<td><select name="fader[1]">';
echo printOptions(array('A','a'));
echo '</select></td>';
echo '<td><select name="fader[2]">';
echo printOptions(array('A','a'));
echo '</select></td></tr>';
echo '<tr><td>Moderdyr</td>';
echo '<td><select name="moder[1]">';
echo printOptions(array('A','a'));
echo '</select></td>';
echo '<td><select name="moder[2]">';
echo printOptions(array('A','a'));
echo '</select></td></tr>';
echo '<tr><td colspan="4"><input type="submit" name="save" value="Beregn" /></td></tr>';
echo '</form>';

Kan komme til at se ud som den gør lige nu, men hvor det kun er de arrays der er A'er i de rbliver udregnet (på samme måde som det jeg lige har kopieret ind) ?
Avatar billede jakobdo Ekspert
27. august 2007 - 18:21 #17
Jeg forstår ikke hvad du mener?
Avatar billede dark_unicorn Nybegynder
27. august 2007 - 18:38 #18
I den del jeg har kopieret ind ovenfor består hver dropdown af ét bogstav, fordi den så regner dem sammen rigtigt.

Kan jeg samle det i én dropdown så arrayet kommer til at se sådan ud:

echo '<td><select name="fader[1]">';
echo printOptions(array('AA','Aa','aa'));

Og få den samme beregning som når de 2 bogstaver vælges individuelt, altså dele den.

'A#A','A#a','a#a' f.eks. (hvis # så deler den)?
Avatar billede jakobdo Ekspert
27. august 2007 - 18:55 #19
Kan du ikke vende: < til > i linierne:
$hack[] = ($var1 < $var2) ? $var1 . $var2 : $var2 . $var1;
og
$var3 = ($var1 < $var2) ? $var1 . $var2 : $var2 . $var1;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester