Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Java > Allgemeine Java-Programmierung > Versteh die Formel zu Berrechnung von PII nicht
Antwort
 
Themen-Optionen
Alt 26.09.2004, 14:31   Nach oben    #1
blackylk
Gast
 
Beiträge: n/a
Standard Versteh die Formel zu Berrechnung von PII nicht

Unser Lehrer hat uns die Hausaufgabe gegeben PI zu berechnen. Was ich allerdings nicht verstehe ist die Formel selbst. Ich Hab einen PAP gemacht der richtig ist, aber den ich nicht versteh. Ich habe den Quellcode hier gefunden:
// Pi Programm
// --------------------------------------------------

import java.math.BigDecimal;


public class pi_me // millenium edition
{
final static int ziffern = 1000;

public static void main(String[] args)
{
System.out.println("Berechnung von PI auf " + ziffern + " Nachkommastellen");
System.out.println("============================== ==============");

BigDecimal
pi = atan(5, ziffern + 1); // pi = atan(1/5)
pi = pi.multiply(new BigDecimal("4")); // pi *= 4
pi = pi.subtract(atan(239, ziffern + 1)); // pi -= atan(1/239)
pi = pi.multiply(new BigDecimal("4")); // pi *= 4

System.out.println( "pi=" + pi.toString().substring(0, ziffern + 2) );
}


private static BigDecimal atan(int _a, int ziffern)
// berechnet mit Hilfe einer unendlichen Reihe
// arctan(1/_a) auf 10^ziffern genau.
{
long nGlieder = 1;
BigDecimal _genau = (new BigDecimal( "1" )).movePointRight( ziffern );
BigDecimal _potenz = new BigDecimal(_a);
BigDecimal _glied = new BigDecimal(_a);
BigDecimal tmp;

boolean condition=true;
while ( condition )
{
nGlieder++;
_potenz = _potenz.multiply( new BigDecimal(_a * _a) );
_glied = _potenz.multiply(
new BigDecimal(Long.toString(nGlieder * 2 - 1)) );

tmp = new BigDecimal(Long.toString(nGlieder));
tmp = _genau.multiply( new BigDecimal(tmp.toString()) );
condition = _glied.compareTo(tmp) < 0;
}

int sziffern = (int)(ziffern + Math.log(nGlieder));

// erstes Glied
_potenz = new BigDecimal(Integer.toString(_a));
_glied = new BigDecimal(Integer.toString(_a));
BigDecimal summe = (new BigDecimal("1")).divide( new BigDecimal(_a),
(int)(ziffern + nGlieder + 0.5), BigDecimal.ROUND_HALF_UP );

for ( int iGlied=1; iGlied<nGlieder; iGlied++ )
{
_potenz = _potenz.multiply( new BigDecimal(-1 * _a * _a));
_glied = _potenz.multiply( new BigDecimal(Long.toString(2 * iGlied + 1)) );

summe = summe.add((new BigDecimal("1")).divide(_glied, sziffern,
BigDecimal.ROUND_HALF_UP));
}

return summe;
}
}

gefunden.
Allerdings sind da sachen drin von "math" die wie nicht hatte.
Könnt ihr mir helfen? Türrlich könnt ihr das;O Das programm sollte 3-4 Variablen haben und eine for Schleife enthalten.
Wenn ihr kein bock habt dann ist es auch nicht so wild.
Die Formel lautet pi=4*[1- 1/3 + 1/5 - 1/7+ 1/9 - ...]
Ich bin für jede Hilfestellung dankbar.
Normalerweise brauch ich keine hilfe in Java aber diese Formel ist so... .
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.09.2004, 15:39   Nach oben    #2
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 433
Standard

Hi,

erst einmal willkommen im Forum. Ich verstehe Dich jedoch nicht richtig. Du verstehst den Algorithmus zur PI-Berechnung nicht? Hast aber schon was programmiert? Der gezeigte Code ist ein anderer als der, den Du geschrieben hast? Das mit dem Math konnte ich auch nicht nachvollziehen.
Was genau willst Du? Sollen wir nur die Formel umsetzen?
Viele, viele Fragen...

P.S.: bitte nutze doch die [code-]Tags, die oben angegeben sind. Dann kann man Deinen Beitrag leicht lesen.
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.09.2004, 16:51   Nach oben    #3
blackylk
Gast
 
Beiträge: n/a
Standard

thx
Der Quelcode der oben steht den hab ich nicht selbst gemach . Hab ihn aus dem Internet gezogen um wenigstens morgen was zu haben.
Genau was ich brauche ist einfach ein Programm zur brrechnung von PI. Das oben genannte Programm enthält Befehle die die meisten aus meiner Klasse nicht kennen. Einige Dinger aus den Packages math kenn ich ja selbst nicht ^^ ja neu und werde versuchen mir Java anzueignen. Kleines "Grundwissen" hab ich. Aber wenn es darum geht so eine dumme s PI auszurechnen, dann hab ich immer ein BlackOut. Ich versteh die Formel zur berechnung von PI nicht und weis einfach nicht wie ich das Programm schreiben soll.
ich würd mit 3-4 Variablen anfangen aber irgendwie bleib ich bei der forSchleife hängen.
Auserdem bekomm ich es mit den Datentypen double und int nicht so ganz geregelt. Wieso weis ich aber wie ich das anders amchen soll... KA.
sry wegen der länge

es wäre nett wenn du deinen Vorschlag*Quelcode zur Berechnung von PI hier posten würdest.*
in der schule haben wir bisher strings,varaiblendeklaration,datentypen,leichte rechenaufgaben+verschiedene operatoren.+do for und while schleifen gemacht. arrys auch+ if anweisungen + das packages zum herstellen des konntakts mit der tastatur io ...
Das wars eigentlich. aus diesem bulshitwissen was ich noch nichtmal so ganz behersche soll ich soll ich PI berechnen :/
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.09.2004, 19:31   Nach oben    #4
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 433
Standard

Hi,

auch wenn es eigentlich nicht immer Sinne des Lehrers ist:
Code:
public class PiMaker {

    static int anz = 1000;
    static int zaehler = 3; //Schleigenindex - nicht aendern
    static int vorzeichen = 1;
    static double pi = 1;

    public static void main(String[] args) {

        if(args.length > 0) {
            try {
                anz = Integer.parseInt(args[0]);
            }
            catch(Exception ex) {
                System.out.println("Uebergebene Parameter ist kein Integer!");
            }
        }

        System.out.println("Berechne PI mit " + anz + " Schleifendurchgaengen.");

        while(zaehler < 2*anz+3) {
            vorzeichen *= (-1);
            pi += vorzeichen/((double)zaehler);
            zaehler += 2;
        }
        pi *= 4;
        System.out.println("angenaehrtes PI = " + pi);
    }
}
Das mit dem if(args.length > 0) kannst Du mir Inhalt komplett weglassen. Ist nur dafür, falls der Benutzer die Anzahl der Schleifendurchgänge mit angeben möchte.

[edit]es handelt sich dabei aber nicht um den besten Algorithmus zur Berechnung von Pi.
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 27.09.2004, 06:18   Nach oben    #5
blackylk
Gast
 
Beiträge: n/a
Standard Danke

Kann sein, aber das ist genau der Algorithmus den ich brauche. Werde mir ab heute immer 2 Stunden für Java nehmen. Das sollte zur Fortbildung reichen oder wieviel Zeit proTag würdest du mir empfehlen um Java zu lernen? danke danke danke^^ you are my hero ;O
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 27.09.2004, 10:11   Nach oben    #6
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 433
Standard

Wenn ich etwas selber lernen möchte, lege ich meist keinen Zeitrahmen fest. Wichtig ist, dass Du Dir irgendwie eine Aufgabe überlegt und die dann langsam umsetzt.
Z.B.: ein Rechenprogramm. Erst schreibst Du eine Klasse die mit den gegebenen Parametern rechnet. Dann könntest Du sowas wie ein Menü mit Eingabe implementieren. Wenn Du damit zufrieden bist, baust Du Dir dafür ne grafische Oberfläche. Evtl. noch Funktionen zeichnen, etc...
Das ergibt sich dann mit der Zeit und man lernt eine Menge.
Viel Spass.
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 27.09.2004, 22:05   Nach oben    #7
blackylk
Gast
 
Beiträge: n/a
Standard

Hi
ich bins wieder. Ich wollte mal wissen welcher Editor gut ist. Ich zum Beispiel benutze in der Schule BlueJay. Zu Hause hab ich Joe. Ich hab gehört das Eclipse ziemlich gut sein soll oder jbuilder oder wie das moped heißt ^^. Oder ist es am anfang am besten einfach mit einen normalen Windows Standart Editor zu arbeiten? Ich hab mal eclipse draufgepackt aber nicht vile verstanden. Ich weiß da nicht einmal wie ich eine Klasse anlege.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 27.09.2004, 22:39   Nach oben    #8
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 433
Standard

Hi,

ich würde mit einem normalen Editor, welcher auch Highlighting unterstützt, anfangen. Emacs ist dafür ganz gut. Wenn Du die Grundlagen der Javaprogrammierung verstanden hast und dann mit Packages arbeitest, würde ich Eclipse empfehlen. Aber Du wirst es wohl merken, wenn ein normaler Editor nicht mehr reicht. Bei großen Projekten macht das sehr viel Sinn.
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.10.2004, 14:34   Nach oben    #9
blackylk
Gast
 
Beiträge: n/a
Standard

das mit den gui werden wir bald machen in der schule.


Ich habe dem Programm noch eine EingabeKlasse hinzugefügt die der Lehrer uns geschreiben hat und danach hab ich etwas rumgebastelt.

Java Code:
  1. public class CalcPI extends Eingabe   {
  2.     public static void main( String [] args) { 
  3.       System.out.println("    Bitte geben sie die Genauigkeit als Zahl an ( je höher die Zahl desto genauer ) :");       //Angabe der Zahl
  4.         int n=Eingabe.liesInt();                                             
  5.         int i=0;
  6.         double sum=0,x=0;
  7.         for(i=0; i<=n; i++) {
  8.         if(i%2==0)
  9.           x=Math.pow(-1,i)/(2*i+1);
  10.         else
  11.           x=Math.pow(-1,i)/(2*i+1);
  12.           i=i++;
  13.           sum=sum+x;
  14.        }
  15.        sum = sum*4;
  16.        System.out.println("Summe = " +sum);           
  17.     } // main()
  18. } // class CalcPI
das ergebniss ist in etwa das selbewie bei dir
Java Code:
  1. /**********************************************************************
  2. *  Einlesen von Texten, Integer- oder Double-Werten von der Tatatur  *
  3. **********************************************************************/
  4.  
  5. import java.io.*;                     // Importiere io-Package
  6.  
  7. public class Eingabe
  8.  {
  9.    public static String liesText()
  10.     {
  11.      String input = "";               // Variablendefinition vom Typ String
  12.      
  13.       try                             // Fehler abfangen (Exeption - Ausnahme)
  14.        {                           
  15.         BufferedReader Tastatur = new BufferedReader(new InputStreamReader(System.in));
  16.         input = Tastatur.readLine()// Objekt Tastatur erhält Zuweisung über readLine
  17.        }
  18.       catch(IOException ioe)          // Ausgabe von Fehlermeldungen
  19.        {
  20.          System.out.println(ioe.toString()) ;       
  21.        }
  22.       return input;                   // Rückgabe der Tastatureingabe
  23.      }     
  24.      
  25.    public static int liesInt()        // Methodendefinition
  26.     {
  27.      int eingabezahl = 0;             // Variablendefinitionen und Umwandlung in Integer
  28.      String ein = liesText();
  29.      eingabezahl = Integer.parseInt(ein);
  30.      return eingabezahl;
  31.     }
  32.    
  33.    public static double liesDouble()  // Variablendefinitionen und Umwandlung in Double
  34.     {
  35.       double eingabezahl = 0.0;
  36.       String ein = liesText();
  37.       eingabezahl = Double.parseDouble(ein);
  38.       return eingabezahl;
  39.     }
  40.  }
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:39 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44