Avatar billede simondid Nybegynder
18. februar 2011 - 09:00 Der er 7 kommentarer og
1 løsning

lomme regner problem

hey som i nok ved er jeg ved at lave en somme regner hvis  i ikke har set dette post så kik lige på det
http://www.eksperten.dk/spm/931527 mit problem ligger lige nu i at jeg jeg gerne vil regne denne formel ud  1.1*(2+sin(0.22341*4-4+(2/4)-2*14)+sin(1))^sin(1+sin(2))*1.2356^5 det kan også lade sig gøre hvis min sin kode ser sådan her ud

  if (udtryk.startsWith("sin(") && udtryk.endsWith(")"))
// sinus-funktion
    {
      udtryk = udtryk.substring(4,udtryk.length()-1);   
// fjern 'sin(' og ')'
      double resultat = beregn(udtryk);                 
// beregn parameteren
      System.out.println("beregn("+udtryk+") = "+resultat);
      return Math.sin(resultat);
   
    // double radians = Math.toRadians(degrees);


men så får jeg fejl i en ud regning af sin(90) fx som så ikke giver en men  0.8939966636005579
men hvis jeg ændre koden til

    if (udtryk.startsWith("sin(") && udtryk.endsWith(")"))
// sinus-funktion
    {
      udtryk = udtryk.substring(4,udtryk.length()-1);   
// fjern 'sin(' og ')'
      double resultat = beregn(udtryk);                 
// beregn parameteren
      System.out.println("beregn("+udtryk+") = "+resultat);
    // Math.toRadians(resultat);
return Math.sin(Math.toRadians(resultat));
     
    }

så får jeg så 1 når jeg regner sin(90) ud men når jeg så skal regne den her formel ud  1.1*(2+sin(0.22341*4-4+(2/4)-2*14)+sin(1))^sin(1+sin(2))*1.2356^5 så bliver den så forkert og giver 3.1915826040780004 mens det burde gi 10.509136587378 kan ikke rigtig se hvad løsning på dette kunne være
Avatar billede heinzdmx Nybegynder
18. februar 2011 - 09:08 #1
Den ikke matematiske løsning ville være at tjekke om input var 90 og så lave den der virker på den og hvis det ikke er så lav den der virker på det andet.
Avatar billede simondid Nybegynder
18. februar 2011 - 11:59 #2
det fattede jeg brik af

det jeg mener er at input er forkert på alle sin(????????) udregninger når denne kode bliver brugt return Math.sin(resultat);

men hvis man bruger      return Math.sin(Math.toRadians(resultat)); så bliver alle sin(???????????) udregninger rigtig


men hvis man så bruger return Math.sin(Math.toRadians(resultat)); den her på denne formel 1.1*(2+sin(0.22341*4-4+(2/4)-2*14)+sin(1))^sin(1+sin(2))*1.2356^5 så bliver den forkert der skal man nemlig bruge Math.sin(resultat); 

jeg kan ikke rigtig se grunden til at der sker denne fejl
Avatar billede Druesukker Nybegynder
19. februar 2011 - 23:55 #3
hvis man vil lave grader om til radianer kan man også sige

radianer = grader*2*pi/360

Radianer bruges hvis man skal regne den matematiske formel

y = sin(x), eller alle andre formler hvor sin, cos eller tan indgår

Det smarte ved radianer er at omkredsen på enhedscirklen lige præcis er 2*pi målt i radianer. Det bruges derfor til at bevise et hav af formler indenfor matematik. Bl.a. formlerne for areal af cirklen og keglen.

Her er et stykke kode du kan sende din formel igennem inden du sender den igennem det første du har:

public class GraderTilRadianer{
    public static void main (String[] args){

String formel = "2*sin(3*10+60)+sin(3)^sin(30*23^sin(23))";
   
        if(formel.indexOf("sin(") != 0){
            int indexOfSin = formel.indexOf("sin(");
            int oldIndexOfSin;
            while(indexOfSin!= -1){
               
        String beforeSin = formel.substring(0, indexOfSin);
        String afterSin = formel.substring(indexOfSin+3);
            int startPar = 0;
            int slutPar = 0;
            int indexOfSlutPar = 0;
           
    while(indexOfSlutPar <= afterSin.length()){
               
                if(afterSin.substring(indexOfSlutPar,indexOfSlutPar+1).equals("("))
++startPar;
else if(afterSin.substring(indexOfSlutPar, indexOfSlutPar+1).equals(")"))
    ++slutPar;
               
if(startPar == slutPar)
    break;
               
    ++indexOfSlutPar;
    }
String radians = "(("+afterSin.substring(0, indexOfSlutPar+1)+"*2*"+Math.PI+")/360)";
afterSin = afterSin.substring(indexOfSlutPar+1);
    formel = beforeSin + "sin" + radians + afterSin;
    oldIndexOfSin = indexOfSin;
indexOfSin = formel.substring(indexOfSin+3, formel.length()).indexOf("sin(")+oldIndexOfSin+3;
    if(indexOfSin == oldIndexOfSin+2) indexOfSin = -1;
    System.out.println("formel indtil nu: "+formel);
    System.out.println("Index af sin: "+indexOfSin);
           
}// outer while end
           
}    // if(formel.indexOf("sin(") != 0) end   
       
System.out.println(formel); // din nye formel her i radianer
    }
   
}
Avatar billede Druesukker Nybegynder
19. februar 2011 - 23:57 #4
Du kan gøre det samme med cos og tan.
Avatar billede simondid Nybegynder
20. februar 2011 - 01:29 #5
hvad er det lige pracis dette stykke kode gør ???
Avatar billede Druesukker Nybegynder
20. februar 2011 - 15:14 #6
Vinkler måles i radianer eller grader. en vinkel på 2*pi målt i radianer er det samme som en vinkel på 360 målt i grader.
pi radianer er det samme som 180 grader osv osv. Der gælder at

360 grader = 2*pi radianer

Hvis vi dividerer med 360 på begge sider får vi

1 grad = (2*pi)/360 radianer

Nu er det let at se at man bare kan gange med et tal på hver side fx 180

180 grader = 180*(2*pi)/360 radianer

Hvilket er det samme som

180 grader = ((180*2)/360)* pi

hvilket er det samme som

180 grader = pi

Som jeg jo påstod var korrekt til at starte med. Hermed også bevist!


Der kommer i al almindelighed til at gælde

radianer = grader*2*pi/360

Du bliver nødt til at omregne vinkler målt i grader om til vinkler målt i radianer før du kan bruge vinkler målt i grader dem i java!

Man kan gøre det med Math.toRadians(grader) eller på den mere matematiske måde som jeg har vist dig.

Jeg har i min kode valgt at bruge den matematiske metode.

Som du kan se på output laver min kode alle vinkler om til radianer ved hjælp af

radianer = grader*2*pi/360

Jeg ved ikke om jeg kan forklare det mere tydeligt for dig hehe...
Avatar billede Druesukker Nybegynder
20. februar 2011 - 15:23 #7
sin(180 grader) giver som bekendt 0

prøv i java at output Math.sin(Math.PI) og se om det set bekendt ud

Du kan også prøve den formel jeg har givet dig

fx sin(90 grader)  = 1

prøv i java at skriv

Math.sin(90*2*Math.PI/360)
Og studer resultatet
Avatar billede simondid Nybegynder
21. februar 2011 - 01:14 #8
hey beklager jeg har været lang tid om at svare takker for svaret har
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
Kurser inden for grundlæggende programmering

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