Avatar billede chrsj Nybegynder
09. december 2008 - 20:50 Der er 15 kommentarer

if if if?

Hej jeg er igang med at lave et program til at tegne forskellige former for grafer til min skriftlige matematikopgave.. Jeg har et formentlig simpelt problem..

Mit problem er i updater(), kun den første sande if-sætning bliver udført.. Jeg vil gerne have alle sande betingelser til at blive udført.. da den skal omplacere alle aktive grafer når jeg zoomer. Håber i kan hjælpe

her er noget af koden:


function zoomout(){
            zoomindex--;
            if(zoomindex==0){enhed=0.5;}
            if(zoomindex==1){enhed=1;}
            if(zoomindex==2){enhed=2;}
            if(zoomindex==3){enhed=5;}
            if(zoomindex==4){enhed=10;}
            if(zoomindex<0){zoomindex=0;}
            document.getElementById("x10").innerHTML=10*enhed;
            document.getElementById("x5").innerHTML=5*enhed;
            document.getElementById("x1").innerHTML=1*enhed;
            document.getElementById("x-5").innerHTML=-5*enhed;
            document.getElementById("x-10").innerHTML=-10*enhed;
            document.getElementById("y-10").innerHTML=-10*enhed;
            document.getElementById("y-5").innerHTML=-5*enhed;
            document.getElementById("y1").innerHTML=1*enhed;
            document.getElementById("y5").innerHTML=5*enhed;
            document.getElementById("y10").innerHTML=10*enhed;
            updater();
            }
           
           
            function updater(){
           
            if(graphActive==true){
            makeGraph();
                }
           
            if(eulerActive==true){
            resetGraph2();
            makeGraph2();
                }
           
            if(feulerActive==true){
            resetGraph3();
            makeGraph3();
                }
            }
Avatar billede olebole Juniormester
09. december 2008 - 20:58 #1
<ole>

Det må du forklare nærmere. Som koden ser ud nu, kan ingen af de tre udtryk i 'updater' afvikles, da de tre variabler 'graphActive', 'eulerActive' og 'feulerActive' ikke kan ses inde fra funktionen, da de ikke er globale.

Af disse if-sætninger:

            if(zoomindex==0){enhed=0.5;}
            if(zoomindex==1){enhed=1;}
            if(zoomindex==2){enhed=2;}
            if(zoomindex==3){enhed=5;}
            if(zoomindex==4){enhed=10;}
            if(zoomindex<0){zoomindex=0;}

- kan naturligvis kun være én opfyldt ad gangen.

/mvh
</bole>
Avatar billede chrsj Nybegynder
09. december 2008 - 21:13 #2
sorry, jeg kan godt se at man ikke kan danne et fuldt billede ud fra dette.. men jeg har så meget (og lidt rodet) kode..
jeg har erklæret variablerne længere oppe:

                        var graphActive = false;
            var eulerActive = false;
            var feulerActive = false;
           
            function makeGraph(){
            graphActive = true;
            var fx = document.getElementById("function").value;
            var x = -(enhed*10);
            var y = 0;
            var prevy = 0;
            var ident = 0;
            var prevident = 0;
            var pointspace = 0;
            while(x<=enhed*10+1){
            y=-(eval(fx))*20/enhed; 
            y=Math.round(y); //y afrundes til fordel for grafens visning, men kan nu ikke bruget i en tabel.
           
            pointspace = y-prevy;
            if(pointspace>0){
            document.getElementById("fgraph"+prevident).style.height=pointspace+'px';
osv...


når jeg så kører makeGraph() bliver graphActive sand, det samme gælder for de to andre grafer..
Jeg skal ha updater() til at køre alle de aktive..
Avatar billede chrsj Nybegynder
09. december 2008 - 21:15 #3
Denne del virker som den skal:
            if(zoomindex==0){enhed=0.5;}
            if(zoomindex==1){enhed=1;}
            if(zoomindex==2){enhed=2;}
            if(zoomindex==3){enhed=5;}
            if(zoomindex==4){enhed=10;}
            if(zoomindex<0){zoomindex=0;}
Avatar billede olebole Juniormester
09. december 2008 - 21:18 #4
Hvis de tre variabler er sande, vil de tre betingelser i 'updater' være opfyldt - og de tre udtryk vil derfor blive afviklet. Fejlen ligger et andet sted  =)
Avatar billede chrsj Nybegynder
09. december 2008 - 21:33 #5
jeg har lagt den her hvis du vil kigge på den...
http://www.chrisweb.dk/projects/euler/

hvis man klikker på vis graf kan man zoome.
det samme gælder hvis du kun klikker på vis euler.
men hvis du klikker på både vis graf og vis euler zoomer den kun for grafen.

brug zoom ind, da zoom ud kun virker under nogle omstændigheder
Avatar billede olebole Juniormester
09. december 2008 - 21:44 #6
Min browser melder fejl ligegyldigt, hvad jeg prøver at klikke på. Du sidder vel ikke og prøver at lave JavaScript med fejlmeddelelser slået fra i IE - eller uden at kikke i fejlkonsollen i Firefox?
Avatar billede olebole Juniormester
09. december 2008 - 21:54 #7
Det kan jo ikke passe, du f.eks. skriver:
    document.getElementById("fgraph"+prevident).style.height=pointspace+'px';

- nogle linjer inden du indskriver elementerne. Jeg kan ikke rigtig få sammenhæng i din kode  =)
Avatar billede chrsj Nybegynder
09. december 2008 - 21:58 #8
Jeg har godt set fejlene, men indtil nu har det virket alligevel, fejlkonsollen i firefox giver ikke nok detaljer til at jeg kan finde fejlene og rette dem..
Nu får jeg stress, det skal være klar til i overmorgen, virkede det ikke bare lidt hos dig?

hvad vil det sige når fejlkonsollen skriver:
document.getElementById("fgraph"+ident) is null
Avatar billede olebole Juniormester
09. december 2008 - 22:20 #9
Elementet eksisterer jo ikke, når du forsøger at kalde det. Du skriver det først ud flere linjer senere  =)
Avatar billede chrsj Nybegynder
09. december 2008 - 22:24 #10
tuside tak Ole!

jeg har løst det ved at kigge på browsernes fejlrapporter som du sagde..
det var en while-løkke der rullede en tand for langt og som derfor prøvede at tilgå elementer som ikke var oprettet.. formentlig det denne fejl også kan betyde:
"document.getElementById("fgraph"+ident) is null", ikke?

det er min første post her på eksperten.dk... Hvordan får du dine point?
Avatar billede mireigi Novice
09. december 2008 - 22:28 #11
document.getElementById("fgraph"+ident) is null

Betyder at det element du prøver at finde, ikke eksisterer eller ikke blev fundet. Prøv at skrive variablerne ud efterhånden som du skal bruge dem, fx:
alert("ident: "+ident);

så kan du se om dine variable bliver tildelt værdier.

Koden virker fint nok hos mig i FF3.
Avatar billede chrsj Nybegynder
09. december 2008 - 22:52 #12
Tak det er godt at vide.. nu funker det hele også her:-)
bedst i FF3.
IE7 viser funktion-grafen meget underligt, dette skyldes vidst overløb.. er der nogen der ved hvordan man omgår det?
Avatar billede mireigi Novice
09. december 2008 - 23:55 #13
Ingen anelse, plejer ikke at optimere til IE da jeg syntes deres markup fortolkning er noget fis :)

Olebole kan sikker svare på det, han ved så meget underligt :)

Hvad angår grafen på din side, så viser den pt. (stadig?) euler forkert ved zoom.
Avatar billede olebole Juniormester
10. december 2008 - 01:27 #14
For det første har du nogen vilde værdier af 'pointspace', som resulterer i alle de warnings, du får i FF, og som siger noget i retning af "Fejl i tolkningen af 'top'. Erklæring droppet.".
Værdien af pointspace kommer f.eks. op på 6*10^23 - hvilket ikke giver mening i udtrykket:
    if(pointspace>0){
    document.getElementById("fgraph"+prevident).style.height=pointspace+'px';
    }

Derudover har du ged i dine løkker. Enten dem, der laver elementerne eller dem, der sætter dimensioner. Jeg fik fjernet fejlene ved at ændre nogle løkker:
    while(x<=enhed*10){

- og denne her i 2'eren og 3'eren:
    while(xpoint<400){

Som sagt fjernede det fejlen, men den kan ligeså godt bestå i, at du har lavet et element for lidt(?)
Avatar billede olebole Juniormester
10. december 2008 - 01:34 #15
Du kan prøve at skrive:
   
    pointspace = y-prevy;
   
    if (confirm("Vil du se flere alerts?")) alert(pointspace)
    else break;

- så du kan se, hvor stor pointspace bliver. Confirm'en har jeg sat ind, da du ellers skal køre tusindvis af alerts igennem - eller ind og lukke browseren i TaskManager  ;o)
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