Avatar billede Slettet bruger
31. januar 2012 - 02:10 Der er 36 kommentarer og
1 løsning

Problemer med beregnings side (lang forklaring følger)

Nu må jeg så give lidt fortabt igen.
Vil gerne starte med at sige undskyld for stavefejl og dårlig formulering. Er ikke så stærk i det. Så håber i vil bære over med det.

Jeg har i løbet af den sidste uge været i gang med et større projekt.
Jeg troede jeg havde fundet fidusen, men ak, det havde jeg vidst slet ikke.

Jeg har været ved at leve et regne script der skal gøre noget arbejde meget lettere. Men det er som om at det spænder ben for sig selv.

Jeg har en masse forskellige benævnelser.
Til dem har jeg lavet en masse inputfelter hvor jeg kan indsætte de benævnelser jeg får oplyst.
Der er en knap der sender data videre bare ved hjælp af:

$a_givet = $_POST['a'];

Dette virker perfekt.

Nu skal det laves sådan, at jeg kan vælge hvilken som helst benævnelser jeg ikke har fået oplyst, og så regner siden resultatet ud og der kommer en formel.

Til hver benævnelse er der en helt masse formler.

Jeg har indsat formlerne for alle benævnelserne i hver deres fil.
FX. a.php indholder alle formler for a.
b.php indholder alle formler for b osv.

Måden disse filer ser ud på er som følger [a.php]:

//---- BEREGNINGS DEL
if($a_oplyst == ""){
if($b != "" && $c != ""){
    $a_beregnet1 = $b/$c;
    $a_beregnet = $a_beregnet1;
}
elseif($b != "" && $d != ""){
    $a_beregnet2 = $b*$d;
    $a_beregnet = $a_beregnet2;
}

//-----Sørger for at der kun er et tal for benævnelsen
if($a_oplyst != "" && $a_beregnet == ""){$a = $a_oplyst;}
elseif($a_oplyst == "" && $a_beregnet != ""){$a = $a_beregnet;}
elseif($a_oplyst != "" && $a_beregnet != ""){
    if($a_oplyst == $a_beregnet){$a = $a_oplyst;}else{echo"A oplyst og beregnet er ikke ens";

//-----FIND MANGLENDE DATA
if($a_beregnet1 == "" && $aberegnet2 == ""){
  if($a_beregnet1 == ""){
    echo"<br>";
    if($b == ""){include("b.php");}
    echo"<br>";
    if($c == ""){include("c.php");}
    echo"<br>";
  }
  elseif($a_beregnet2 == ""){
    echo"<br>";
    if($b == ""){include("b.php");}
    echo"<br>";
    if($d == ""){include("d.php");}
    echo"<br>";
  }
}

//--- UDSKRIV DEN BRUGTE FORMEL
if($a_beregnet1 != ""){echo"Formel1 for A udskrives her";}
elseif($a_beregnet2 != ""){echo"Formel2 for A udskrives her";}


Jeg vil fx i dette tilfælde bedt min side om at finde $a.
Men da $b ikke er beregnet eller oplyst, vil jeg gerne have at den selv regner $b ud.

Derfor har "//-----FIND MANGLENDE DATA" delen inde midt i.
de php sider der includes er bygget op helt op samme måde som a.php

Meningen er nu den, at når jeg ber min side om at beregne $a,
Så beregner den først beregne $b og der efter $a

Til sidst i "udskrift delen" skal den først skrive formlen for $b op og dernæst formlen for $a. Samme rækkefølge som scriptet gør. Og kun en formel for hver udregning.

Det mener jeg jo så at jeg gør på den måde der. Men det virker på ingen måde efter hensigten og jeg ender med at få denne fejl:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 77824 bytes)


Det er lidt svært og indviklet at beskrive. Så håber i kan forstå hvad jeg mener.

Nogen der kan fortælle mig om det overhovedet kan lade sig gøre. Og evt hvordan. Føler lidt at de sidste 7 dages arbejde er ved at gå tabt :(
Avatar billede DeeDawg Nybegynder
31. januar 2012 - 09:09 #1
Det er muligt at dine andre filer er opbygget på samme måde, men det ville stadigvæk gøre det lettere for os at hjælpe dig, hvis vi har hele din kode. Også din form. Du kan evt. benytte http://pastebin.com, så dit indlæg ikke bliver 5km langt.

Derudover, ville det være rart med en mere præcis forklaring af, hvad det er du prøver at regne ud. Når vi ved det, kunne det jo være vi kunne finde på en bedre måde at gøre det på. :)
Avatar billede Slettet bruger
31. januar 2012 - 13:28 #2
Altså det jeg skal beregne er en helt masse forskellige ting. Blandt andet nogle strømme og spændninger osv.. Det er til en helt masse.

Selve hovedsiden hvor filerne bliver inkluderet er her:
http://pastebin.com/hBLV8eSe
Avatar billede olebole Juniormester
31. januar 2012 - 13:30 #3
<ole>

Jeg har ikke kikket i dine filer, men der er helt tydeligt et eller andet, der går i 'ring' - eller 'selvsving', om du vil. Ellers ville dit script umuligt kunne æde så meget RAM. Det kan umuligt skyldes dine beregninger

/mvh
</bole>
Avatar billede Slettet bruger
31. januar 2012 - 13:44 #4
Jeps.. Det er jeg også kommet frem til. Men har ikke lige kunne lure hvordan jeg undgår det.
Avatar billede olebole Juniormester
31. januar 2012 - 13:54 #5
Nu har jeg kikket på PasteBin - og det er dog en af de værste koder, jeg har set. Hvorfor i alverden udskriver du meget HTML med mange kald til echo? Det er komplet misforstået og ineffektiv PHP!

Det er ikke det, der vælter serveren, men du bør helt klart tillægge dig en ordentlig kodestil
Avatar billede olebole Juniormester
31. januar 2012 - 13:56 #6
Hvad det er, der væter serveren, er stadig ikke til at sige. Du må vise hele koden
Avatar billede Slettet bruger
31. januar 2012 - 14:05 #7
Jamen har sådan set vist hele koden.

Hvad ang hele echo sagen.
Jeg spurgte en gang om det virkelig var nødvendigt at bruge echo hver gang. For jeg er selv pænt træt af det.
Og der fik af afvide at det ville være sådan det køre bedst.
Så er glad for at der endelig er en der siger det ikke passede.
Avatar billede olebole Juniormester
31. januar 2012 - 14:23 #8
Hvis du har vist alle de filer, du har, skal du slette alle dine includes i bunden - for så er der ikke noget at bruge dem til.

Derudover er der ingen grund til, at vi skal sidde og quizze. Skriv noget tekst udfor dine formfelter, så vi ved, hvad vi tester på, hvis vi tester din kode ... og med dens opbygning er det nok måden at finde fejl i den på.

Ethvert kald til en funktion kræver ressourcer. Selvom echo ikke er en alm. funktion, kræver den også kræfter - hvorfor den skal bruges, når den er nødvendig.

Er der nogen, der har fortalt dig, at den anvendte fremgangsmåde skulle 'køre bedst', har personen været helt og aldeles støvsuget for kompetencer!
Avatar billede Slettet bruger
31. januar 2012 - 14:33 #9
Jamen alle mine filer... Jeg troede ikke det var nødvendigt efter som at de alle er bygget 100% op som a.php jeg har vist.

Lige nu der har jeg bare lavet det hele som en test side for at kunne få det til at virke.
Jeg har jo mange forskellige ting at regne ud. Og ville ikke til at indsætte alle de formler hvis ikke jeg kunne få det til at køre så simpelt.

Jeg søger ikke at i skal fortælle mig hvordan man laver det hele.
Men bare hvordan man evt kan flette de der include-filer sammen så de ikke køre i loop og bruger alt det ram.
Avatar billede olebole Juniormester
31. januar 2012 - 14:52 #10
Jamen, jeg har ikke i sinde at forsøge at uddrage nogen logik af din kode. Med den foreliggende struktur er det langt hurtigere at teste og finde fejlen
Avatar billede Slettet bruger
31. januar 2012 - 14:54 #11
Ahh okay.. på den måde...
Jeg smider lige de sidste filer op når jeg kommer hjem fra fødselsdag og fodbold i aften. :)
Avatar billede Slettet bruger
31. januar 2012 - 23:04 #12
Er ked af jeg ikke har fået noget lagt op her til aften.
Men det der Pastebin er nede, så håber jeg når det inden jeg går i seng.
Avatar billede Slettet bruger
01. februar 2012 - 00:31 #13
Så lykkes det trods rigtigt mange trælse afbrydelser fordi pastebin.com konstant gik ned.

Altså der er jo ingen benævnelser på de ting jeg finder.
Men jeg har gjort det at jeg har fundet en masse gamle formler for el-beregninger, som jeg bare har lavet om, men det betyder at formlerne passer samme. Ville ikke til at lave alt muligt smart hvis jeg ikke kunne få det til at virke.

Jeg har også fjernet alle mine echo'er på hovedsiden.


Hovedside: http://pastebin.com/5yUdNVSc
a.php: http://pastebin.com/Zk06ukQH
b.php: http://pastebin.com/JdQ4bmnW
c.php: http://pastebin.com/4TvEKZwe
d.php: http://pastebin.com/xZ8AnAC0
e.php: http://pastebin.com/2Mh2qhSH
f.php: http://pastebin.com/gE2c7dgs
g.php: http://pastebin.com/4FirPxWK
h.php: http://pastebin.com/VP57xLZf
i.php: http://pastebin.com/5kaS65xR
j.php: http://pastebin.com/kq7tu2gK
k.php: http://pastebin.com/WB8cTXxR
l.php: http://pastebin.com/mUAuVyZa

Formler der bliver brugt:
http://pastebin.com/SR2SxPKD

Jeg har efterhånden prøvet en helt masse forskelligt.
Men jeg har ikke fundet noget der har virket, så dette er det jeg er endt op med.
Avatar billede olebole Juniormester
01. februar 2012 - 00:49 #14
Der står stadig ikke noget i formen. Hvad skal jeg skrive i felterne?
Avatar billede DeeDawg Nybegynder
01. februar 2012 - 06:46 #15
Okay, jeg er fuldkommen lost. Hverken din kode, eller opbygning giver mening.

"Føler lidt at de sidste 7 dages arbejde er ved at gå tabt :("

- det kan også være ligemeget, hvis du spørger mig. Du kan lige så godt starte forfra, og lave det ordentligt.

Og som olebole siger, ville det være rart at vide PRÆCIS hvad du prøver at regne ud. Det er ikke godt nok, bare at skrive hvilke variabler der hører til hvilket element. Det er sgu lidt svært at udregne ting, når man ikke aner hvad man har at arbejde med.

"Altså det jeg skal beregne er en helt masse forskellige ting. Blandt andet nogle strømme og spændninger osv.. Det er til en helt masse."

- heller ikke en forklaring vi kan bruge til specielt meget!


Er det hemmeligt? :)
Avatar billede Slettet bruger
01. februar 2012 - 08:50 #16
Ingen hemmeligheder.
[b][i]"Altså der er jo ingen benævnelser på de ting jeg finder.
Men jeg har gjort det at jeg har fundet en masse gamle formler for el-beregninger, som jeg bare har lavet om, men det betyder at formlerne passer samme. Ville ikke til at lave alt muligt smart hvis jeg ikke kunne få det til at virke."[i][b]

Det er strømme spænding, effekter og impedanser.

Da jeg startede gad jeg ikke sidde og lave benævnelser på det hele, da mange af dem ligner hinanden.
Det vil tage tid, men jeg kan godt skrive det hele om så de står der. Personligt er det ikke nemmere for mig, men sådan er vi så forskellige.

Meningen er at dette er en test side, en skabelon til at kunne beregne alt lige fra kraftværks teknik med, gas og damp turbine- og generator-beregninger, motor-beregninger,  el-beregninger.
Ideen er at jeg bare kan lave fx a.php som er en fil med beregninger og formlerne for en benævnelse.
Derfor har jeg ikke ville gå ind og specificere alle benævnelserne da det kun er en skabelon hvor jeg bruger mange formler.

Men hvis jeg laver alle benævnelserne om til el benævnelser, kan i så lave det?
Avatar billede Slettet bruger
01. februar 2012 - 08:51 #17
Flot, kiksede lige BB koderne.
Avatar billede DeeDawg Nybegynder
01. februar 2012 - 10:40 #18
Kan godt forstå du vil holde ting adskilt osv., men det du har lavet, med inkludering af flere filer på kryds og tværs, er ineffektivt og helt unødvendigt, når PHP understøtter OOP.

Og hvis du ikke har det godt i et OO miljø, så bør du i hvert fald få omskrevet meget af din kode til funktioner, siden det kun er værdierne der skifter hvor opgaven er den samme.

Uanset hvad, bør du starte med at få det til at udregne 1 ting, og når det fungerer, så kan du bygge videre med flere ting. Det er lige præcis her, OOP vil gøre det så meget lettere for dig. Tror du har smidt lidt for mange ting i baljen til at starte med, hvilket næsten altid vil resultere i problemer, medmindre du har fuldkommen kontrol over det du laver.

Skal gerne hjælpe dig med at omskrive det, men tror jeg melder mig ud, hvis du kun ønsker fejlfinding. Der er simpelthen for meget at gå igennem, og det er et stort rod.
Avatar billede Slettet bruger
01. februar 2012 - 11:05 #19
Det lyder godt.
Er ikke inde i det OO miljø. Så det vil da være fedt.
Men vil det sige at det hele skal laves i en side uden include.

Uanset hvad, bør du starte med at få det til at udregne 1 ting
Skal jeg bare starte med at lave en side der kun indholder en formel. Eller skal jeg lave en side der indholder flere formler til at regne en ting ud?
Avatar billede olebole Juniormester
01. februar 2012 - 17:36 #20
Hmmmm ... i min grønne ungdom ligger sådan cirka 5/8 færdiggjort uddannelse som svagstrømsingeniør - og efterfølgende arbejdede jeg 20 år som lydtekniker med noget nær daglige beregninger.

Du kunne sagtens have bildt mig ind, der var tale om meteorologiske beregninger - eller beregning af brystimplantaters krumning som funktion af indholdets masse og viskositet  :D

Det er helt sikkert muligt at opstille beregningerne langt mere overskueligt - og i bedre overensstemmelse med gængse programmeringsprincipper  *o)
Avatar billede Slettet bruger
01. februar 2012 - 17:47 #21
Det lyder dejligt.
Det er altid rart at lære...

Jeg har fået den holdning at jeg heller vil starte helt forfra nu. Men hvis jeg gør er det for at lære hvordan det gøres bedst.
Det betyder jo så bare at jeg nok skal guides helt fra bunden af med hvordan i ville gøre.

Vi kunne tage noget så simpelt som Ohms lov med Effekt, strøm, spænding og modstand. Det er 4 benævnelser. Og ikke så mange ligninger.

Er der en der er frisk på at hjælpe mig igennem det. Når der er lagt en basis viden på hvordan man kan arbejde med de 4, må jeg vel selv kunne finde frem til at udvide det hele lidt.
Avatar billede DeeDawg Nybegynder
01. februar 2012 - 17:50 #22
Vil du så gå OOP vejen, eller den traditionelle med selvstændige funktioner? :)
Avatar billede olebole Juniormester
01. februar 2012 - 18:00 #23
Du kunne lave en klasse for Ohm's lov med forskellige metoder - alt efter, hvad der er kendt og ukendt
Avatar billede olebole Juniormester
01. februar 2012 - 18:04 #24
- og skal vi være helt stringente, omhandler Ohm's lov ikke effekt, men kun spænding, strøm og modstand  =)
Avatar billede Slettet bruger
01. februar 2012 - 18:31 #25
Hvordan vil du så lave sådan en klasse.
Jeg har kigget lidt på nogle video guides og læst lidt om det,
Jeg kan ikke rigtigt se hvordan det skal gøres.
Avatar billede DeeDawg Nybegynder
01. februar 2012 - 22:10 #26
Ok, så starter vi på at lave din klasse. Pga. manglende fantasi, kalder jeg den for ddd_dendummedreng. Og til den tilføjer jeg en funktion kaldet Ohm().

ddd.class.php
<?php
    class ddd_dendummedreng
    {
        public function Ohm($u = 0, $r = 0, $i = 0){
            // Opret et array med alle args
            $args = func_get_args();
           
            // Opret et nyt array med de args, som ikke er = 0
            foreach($args as $key => $arg){
                if($arg !== 0){
                    $v[$key] = $arg;
                }
            }
           
            // Hvis der er angivet mindre end 2 eller = 3 args, afslut funktionen
            if(count($v) < 2 || count($v) == 3){
                return false;
            }
           
            // Selve udregningen
           
            // Hvis der ikke er angivet spænding
            if(!array_key_exists(0, $v)){
                $result = $r * $i;
                $p = ($i^2) * $r;
            }
            // Hvis der ikke er angivet modstand
            elseif(!array_key_exists(1, $v)){
                $result = $u / $i;
                $p = $u * $i;
            }
            // Hvis der ikke er angivet strømstyrke
            else{
                $result = $u / $r;
                $p = ($u^2) / $r;
            }
           
            return array("result" => $result, "effekt" => $p);
        }
    }
?>

index.php
<?php
    require_once("ddd.class.php");
   
    // Anbring en instans af vores klasse, i variablen $ddd
    $ddd = new ddd_dendummedreng();
   
    // Udregn modstanden, med en spænding på 5 og en strømstyrke på 0.1
    $result = $ddd->Ohm(5, 0, 0.1);
?>
<pre><?php print_r($result); ?></pre>

Så kan du jo lige studere den lidt, og er der noget du ikke forstår, så må du jo skrive. Ikke fordi der er så meget hokus pokus lige nu, men det kunne der sagtens komme senere. :)
Avatar billede Slettet bruger
01. februar 2012 - 23:11 #27
Okay... Det er nok guld værd at kunne ordenligt det her.
Så jeg må hellere være sikker.

public function Ohm($u = 0, $r = 0, $i = 0)

Det er her $u bliver lavet om til 5 og $i bliver lavet om til 0.1
(hvis vi ser på hvad der står i index.)

if($arg !== 0){

Hvad gør !== har aldrig set den med 2 ='er


Ellers kan jeg godt se hvad der sker.
Hvad er næste skridt så.

Hvis vi fx også kan få oplyst P?
Avatar billede DeeDawg Nybegynder
02. februar 2012 - 06:52 #28
!== er i bund og grund det samme som !=, men den er mere aggressiv. Den sørger for at de 2 værdier som er angivet, er fuldkommen ens. Dvs. at det ikke vil fungerer med 2 værdier som har den samme betydning, som det er med !=.

http://php.net/manual/en/language.operators.comparison.php

Hvis du nu kigger igen, så kan du se at effekten allerede bliver udregnet og givet med, sammen med det andet. :)
Avatar billede Slettet bruger
02. februar 2012 - 14:54 #29
Okay, så blev jeg det klogere.

Jo kan godt se at den udregner P for mig.

Men jeg tror måske du misforstår hvor det er jeg vil hen.
Nu kommer der nok meget læse stof....

Hvis jeg nu får en situation hvor jeg kun får oplyst P og I, så kan jeg jo ikke bruge denne metode. Hvis vi også siger at R=P/I^2 ikke var en kendt formel og at jeg skulle finde R udfra P og I, så ville jeg skulle starte med at finde U = P/U og bagefter finde R = U/I

Hele pointen i det jeg prøver at lave, er jo at jeg vil være næsten sikke på, at uanset hvilke oplysninger jeg får, så vil jeg kunne udregne alle data. (Ellers skulle komme med en fejlbesked)

I det jeg startede med at lave havde jeg:
4 spændinger (Un, Uf, Ur og Ux) der skulle ydre mere komme (Uxc, UN og UNf og dU)
3 impedanser (X, R og Z), igen manglede jeg (Xc).
3 strømme (I, Iw og Iwl) her manglede jeg (Im, Im0, Iw, Iw0, Iwl og Iwl0, Iny, Iwny og Iwlny) derud over havde jeg
3 effekter (P, Q og S) her manglede jeg bl.a. (P0, Pny, Q0, Qny, S0, Sny)
Jeg havde (cos(fi), fi, Sin(fi))
Der ud over manglede jeg (f, F, H, Ef, Efny og EF0)

Grunden til at jeg manglede alle de benævnelser var, at de ikke bare kunne regnes udfra 4-5 oplysninger. Mit problem var så at jeg fik scriptet til at køre i ring. Det vil sige hvis jeg skulle finde I, så gik den mine formler igennem fandt en mulighed hvor I var ukendt. Og så kan den af gode grunde ikke.

Her er et eksempel på hvad jeg gerne ville:


Jeg får oplyst Z, S, cos(fi) og Un, Im0.


Jeg vil gerne vide hvad min Im er.
Formlem for Im:

Im/Imo = Ef/Ef0 => Im = (Im0*Ef)/Ef0


Jeg har ikke Ef, så når jeg trykker på knappen beregn, skulle den gerne finde Ef først.

Vektor[Ef] = vektor[Uf]+Vektor[Ur]+Vektor[Ux]


Igen jeg har ikke Uf, Ur og Ux

Alt efter hvordan scriptet er opbygget, vil jeg nu få ca følgende udskrevet på siden:


Først vil jeg regne Uf ud:
Uf = Un/kvrod(3)

Så vil jeg finde R
R = Z*cos(fi)

Så vil jeg finde vinkel fi
Fi = cos^-1(fi)

Så vil jeg finde sinfi
sin(fi) = sin(fi)

Så vil jeg finde X
X = Z*sin(fi)

Først skal jeg regne I ud:
S = Un/(1*kvrod(3))

Så vil jeg finde Ur
Ur = R*I

Så vil jeg finde Ux
Ux = X*I

Så vil jeg finde Ef
vektor[Ef] = (Uf v 0)+(Ur v -fi)+(Ux v (90-fi))

Så vil jeg finde Ef0
Ef0 = Uf

Så vil jeg finde Im
Im = (Im0*Ef)/Efo


Det var der det gik galt for mig. Jeg kan sagtens lave Så jeg finder hver enkel, men det kræver bare at jeg hele tiden skal vælge hvad jeg nu vil, og så trykke beregn. Det hele kommer også an på hvad jeg får af oplysninger, det kunne ligeså godt ha været P, X istedet for S og Z. Eller S og I istedet for impedanser.

Planen med at include filerne i hinanden, var at hvis scriptet kom til et sted hvor det manglede fx I, så ville den tage I.php lede efter en mulighed, hvis der ikke var nogen ville den gå videre til næste formel, når den så fandt en formel den skulle bruge, ville den gemme tallet, udskrive formlen den brugte til at finde tallet, og til sidst komme med det ønskede resultat.
Okay, så blev jeg det klogere.

Jo kan godt se at den udregner P for mig.

Men jeg tror måske du misforstår hvor det er jeg vil hen.

Hvis jeg nu kun får en situation hvor jeg får oplyst P og I, så kan jeg jo ikke bruge denne metode. Hvis vi nu siger at R=P/I^2 ikke var en kendt formel. Og jeg skulle finde R udfra P og I.
Så ville jeg skulle starte med at finde U = P/U og bagefter finde R = U/I

Hele pointen i det jeg prøver at lave, er jo at jeg vil være næsten sikke på, at uanset hvilke oplysninger jeg får, så vil jeg kunne udregne alle data. (Eller komme med en fejlbesked)

I det jeg startede med at lave havde jeg:
4 spændinger (Un, Uf, Ur og Ux) der skulle ydre mere komme (Uxc, UN og UNf og dU)
3 impedanser (X, R og Z), igen manglede jeg (Xc).
3 strømme (I, Iw og Iwl) her manglede jeg (Im, Im0, Iw, Iw0, Iwl og Iwl0, Iny, Iwny og Iwlny) derud over havde jeg
3 effekter (P, Q og S) her manglede jeg bl.a. (P0, Pny, Q0, Qny, S0, Sny)
Jeg havde (cos(fi), fi, Sin(fi))
Der ud over manglede jeg (f, F, H, Ef, Efny og EF0)

Grunden til at jeg manglede alle de benævnelser var, at de ikke bare kunne regnes udfra 4-5 oplysninger. Mit problem var så at jeg fik scriptet til at køre i ring. Det vil sige hvis jeg skulle finde I, så gik den mine formler igennem fandt en mulighed hvor I var ukendt. Og så kan den af gode grunde ikke.

Her er et eksempel på hvad jeg gerne ville:


Jeg får oplyst Z, S, cos(fi) og Un, Im0.


Jeg vil gerne vide hvad min Im er.
Formlem for Im:

Im/Imo = Ef/Ef0 => Im = (Im0*Ef)/Ef0


Jeg har ikke Ef, så når jeg trykker på knappen beregn, skulle den gerne finde Ef først.

Vektor[Ef] = vektor[Uf]+Vektor[Ur]+Vektor[Ux]


Igen jeg har ikke Uf, Ur og Ux

Alt efter hvordan scriptet er opbygget, vil jeg nu få ca følgende udskrevet på siden:


Først vil jeg regne Uf ud:
Uf = Un/kvrod(3)

Så vil jeg finde R
R = Z*cos(fi)

Så vil jeg finde vinkel fi
Fi = cos^-1(fi)

Så vil jeg finde sinfi
sin(fi) = sin(fi)

Så vil jeg finde X
X = Z*sin(fi)

Først skal jeg regne I ud:
S = Un/(1*kvrod(3))

Så vil jeg finde Ur
Ur = R*I

Så vil jeg finde Ux
Ux = X*I

Så vil jeg finde Ef
vektor[Ef] = (Uf v 0)+(Ur v -fi)+(Ux v (90-fi))

Så vil jeg finde Ef0
Ef0 = Uf

Så vil jeg finde Im
Im = (Im0*Ef)/Efo


Det var der det gik galt for mig. Jeg kan sagtens lave Så jeg finder hver enkel, men det kræver bare at jeg hele tiden skal vælge hvad jeg nu vil, og så trykke beregn. Det hele kommer også an på hvad jeg får af oplysninger, det kunne ligeså godt ha været P, X istedet for S og Z. Eller S og I istedet for impedanser.

Planen med at include filerne i hinanden var at hvis jeg kom til et sted hvor jeg manglede fx Ur, så ville den tage Ur.php lede efter en mulighed, hvis der ikke var nogen ville den gå videre til næste formel, men jeg kan godt se at det ikke på nogen måde ville lykkes sådan som jeg gjorder.
Men hvis den havde fundet en metode, så ville den udregne, bagefter udskrive formlen og så ville den så regne videre og til sidst udskrive den endelig formel.

Men jeg kan godt se at det ikke på nogen måde ville lykkes sådan som jeg gjorde det. Den ville jo bare køre i loop og hvis den ikke fandt en metode, og derfor ikke komme med en fejlbesked.

Jeg kan sagtens lave det uden alt det automatik, men så skal man sidde og trykke sig igennem en masse muligheder manuelt baglæns i forløbet og det er pænt træls. Og koste mig rigtigt mange If-sætninger.
Avatar billede Slettet bruger
02. februar 2012 - 14:57 #30
Hmmmm. Hvorfor kom den 2 gange, med den gamle version sidst.
Nååå skidt med det.
Avatar billede DeeDawg Nybegynder
02. februar 2012 - 17:09 #31
Det kan jo også sagtens lade sig gøre. Vi må bare splitte funktionen op i flere dele.

Jeg har først tid til at gøre det senere i aften, så du må vente medmindre der kommer en anden på banen imellemtiden. :)
Avatar billede Slettet bruger
02. februar 2012 - 17:41 #32
Super fedt... Nej er desværre ikke selv klog nok til at komme på en anden bane.

Og jeg har masser af tid til at vente. Så længe nogen vil hjælpe er jeg glad, og så må jeg indfinde mig med at det er deres tid der styre det :) 1000 tak.
Avatar billede DeeDawg Nybegynder
03. februar 2012 - 12:40 #33
"Nej er desværre ikke selv klog nok til at komme på en anden bane."

- tror du misforstod den sætning. :)


Din forklaring herover, er lige præcis det vi gerne ville have at vide. Når vi ved præcis hvad du vil, gør det vores opgave meget lettere. Men, jeg forstår desværre stadigvæk ikke helt sammenhængen.

Men nu har jeg i hvert fald omskrevet det hele, så du kan nu bruge klassen til at udregne enkelte forhold, eller udregne alle på 1 gang.

ddd.class.php
http://pastebin.com/wThXD4TS

ohm.class.php
http://pastebin.com/BvdMhJiT

index.php
http://pastebin.com/zySV1GWC

Og nej, det er ikke en fejl at klassen ddd_dendummedreng er tom. Men da vi nu fik flere funktioner, kun relateret til Ohm's lov, så fortjente det sin egen klasse. Hvis vi nu for brug for en funktion der skal bruges af alle evt. under-klasser, kan vi definere dem i ddd_dendummedreng.

Uanset hvad, har du i hvert fald nu, værktøjerne til at lave det du har beskrevet i #29. Så kan du jo prøve dig lidt frem. :)
Avatar billede Slettet bruger
03. februar 2012 - 16:00 #34
Det ser godt nok godt ud.


Har lige leget lidt med det, og jeg tror at jeg har fattet det det meste. Ellers så opretter jeg bare et nyt spørgsmål.

Der er dog lige 1 ting..
Hvis jeg nu laver en form hvor jeg selv sætter tal ind:


if(isset($_POST['udregn'])) {
$gu = $_POST['u'];
$gi = $_POST['i'];
$gr = $_POST['r'];
}


<form action = "" method="POST"><center><table>
<tr><td>U</td><td>I</td><td>R</td></tr>
<tr><td><input type="text" name="u" value="<?php echo"$gu"; ?>"></td>
<td><input type="text" name="i" value="<?php echo"$gi"; ?>"></td>
<td><input type="text" name="r" value="<?php echo"$gr"; ?>"></td></tr>
<tr><td colspan="3"><input type="submit" name="udregn" value="Beregn"></td></tr>
</table></center></form><br><br><?php echo"$gu, $gi, $gr"; ?><br><br>


så godtager den ikke $gu og $gi i denne linje:

$result = $ohm->calc(array("u" => "$gu", "i" => "$gi"));


Hvordan kan det være?

Og ellers 1000 tak for hjælpen, du må gerne smide et svar. :)
Avatar billede DeeDawg Nybegynder
03. februar 2012 - 16:38 #35
Fordi du angiver en streng og ikke et tal. Det skal se således ud:

$result = $ohm->calc(array("u" => $gu, "i" => $gi));
Avatar billede Slettet bruger
03. februar 2012 - 17:20 #36
Det gider den heller ikke.
Avatar billede DeeDawg Nybegynder
03. februar 2012 - 18:48 #37
Bare glem mit sidste indlæg. Kæft en omgang vrøvl. Uanset hvad du gør, vil indhold fra en form, altid være en streng.

Jeg har opdateret ohm.class.php, så hvis du bruger den nye version, så skulle det gerne fungerer. :)
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