Summenberechnung

Status
Nicht offen für weitere Antworten.
S

Snoddy

Gast
Hi Leute,

Ich habe gerade ein Programm geschrieben, dass die folgenden Summen berechnet:

1. i=1 und es soll n eingegeben werden. 1/i wird solange berechnet bis i = n ist.
2. i=1 und es soll n eingegeben werden. 1/i² wird solange berechnet bis i=n ist.

Das habe ich hinbekommen. Hier mein Code:

Code:
public class Summe
{
double n,ergebnis;
double i;
double m = 1.0;

    
    public Summe(int zahl)
    {
        n = zahl;       
    }
    
    void summenberechnung()
    {
        System.out.println("Berechnung der Summe mit Hilfe der ersten Formel");
        for(i=1;i<=n; i++)
                           {
               ergebnis = m/i;  
     System.out.println(ergebnis);
       }
        
       System.out.println("\nBerechnung der Summe mit Hilfe der zweiten Formel");
        for(i=1;i<=n; i++)
             
                {
              ergebnis= m/Math.pow(i,2.0);  
     System.out.println(ergebnis);
       }
}
}

Beide Summen sollten in einer Methode berechnet werden.

Jetzt mein Problem:

Ich soll noch eine Methode schreiben die nur die 2. Summe berechnet und zwar solange, solange die Differenz von einem Ergebnis zum anderen größer als 0.000000005 ist.

Wie gebe ich das jetzt ein?


Code:
 for(i=1;i<=n; i++)     //hier müsste ich ja das n ändern, nur weiß ich nicht wie   
            
                {
              ergebnis= m/Math.pow(i,2.0);  
     System.out.println(ergebnis);
 
S

Snoddy

Gast
Code:
void summenberechnung2()
{

            while(ergebnis-ergebnis >=zahl) { //zahl ist oben als double Variable deklariert mit dem Wert 0.000000005
           ergebnis= m/Math.pow(i,2.0); 

           
            }
     System.out.println(ergebnis);
}}

Was stimmt denn hier nicht?
 
S

SlaterB

Gast
ergebnis-ergebnis ist immer 0,
du musst doch zwei verschiede Zahlen vergleichen,
z.B. das letzte und das vorletzte Ergebnis,
die müssen dann in verschiedenen Variablen stehen,

überhaupt ADDIERT dein Programm nie etwas,
du weist ergebnis in jedem Durchlauf einen neuen Wert zu,

ergebnis ist immer = m/Math.pow(i,2.0);

wenn du eine while-Schleife verwendest musst du dich außerdem noch manuell um das i kümmern,
also dieses am Anfang mit 0 oder 1 starten und dann in der Schleife hochzählen

i*i ist übrigens auch das Quadrat von i
 

DaKo

Bekanntes Mitglied
1. Zeile 4
ergebnis - ergebnis wird immer 0 (Null) sein und somit nie größer als 0.000000005 und somit wird deine while-Schleife nie betreten

2.
Du musst i innerhalb der while-Schleife hochzählen.

3.
ergebnis muss initialisiert werden.

4.
Du brauchst auch das Ergebnis des vorherigen Durchlaufs
 
S

Snoddy

Gast
Am besten wärs ja wenn ich ein Array für die Ergebnisse benutze oder?
 
S

Snoddy

Gast
Hmm ich weiß nicht wie ich das mache, dass er die Ergebnisse in verschiedenen Variablen speichert.
 

DaKo

Bekanntes Mitglied
Code:
do{
   ergebnis_alt = ergebnis_neu;
   ergebnis_neu = ...;
   ...
}while(<Bedingung>);
 
S

Snoddy

Gast
Wie mach ich das, dass ich in ergebnis_alt dann auch das alte ergebnis drin stehen hab und in ergebnis_neu das neue?
 
S

SlaterB

Gast
so:
Code:
do{
   ergebnis_alt = ergebnis_neu;
   ergebnis_neu = ...;
   ...
}while(<Bedingung>);

tja, mehr kann man da nicht antworten.. ;)

"Wie mach ich das, dass ich in xy die Zahl 4 drin stehen hab?"

xy = 4;

> Wie mach ich das, dass ich in ergebnis_alt dann auch das alte ergebnis drin stehen hab?

ergebnis_alt = ergebnis_neu;

> und in ergebnis_neu das neue?

ergebnis_neu = was auch immer, musst selber berechnen;
 
S

Snoddy

Gast
Code:
public class Summe
{
    
double n;
double zahl =0.000000005;
double i,ergebnis_neu, ergebnis;
double m = 1.0;

        public Summe(int zahl)
    {
        n = zahl;

    }
   
    
    void summenberechnung()
    {
        System.out.println("Berechnung der Summe mit Hilfe der ersten Formel");
        for(i=1;i<=n; i++)
                   
                {
      
               System.out.println(m/i);
       }
       
       System.out.println("\nBerechnung der Summe mit Hilfe der zweiten Formel");
        for(i=1;i<=n; i++)
             
                {

     System.out.println(m/Math.pow(i,2.0));
       }
}

void summenberechnung2()
{
do{
  ergebnis = ergebnis_neu;
  ergebnis_neu = m/Math.pow(i,2.0);

  System.out.println(ergebnis);
}while(ergebnis -ergebnis_neu >= zahl);
}
}

Das klappt immernoch nicht. Please help me?[/quote]
 

FelixB

Bekanntes Mitglied
wie rufst du denn die Funktionen auf? ich sehe jetzt keinen Zusammenhang zwischen "summenberechnung()" und "sumenberechnung2()"...
 

DaKo

Bekanntes Mitglied
Was klappt denn nicht?
Eine genauere Fehlerbeschreibung wäre hilfreich ;)

nebenbei:
Zeile 42
Ich würde sicherheitshalber Math.abs verwenden
 
S

Snoddy

Gast
Also die zweite Methode soll immer wieder 1/i² rechnen und zwar solange, solange das alte ergebnis-das neue Ergebnis größer oder gleich0.000000005 sind. Ich tu mich da grad echt schwer dran.

Der gibt mir nur 1 ergebnis aus und das ist auch noch falsch, da er im moment bei ergebnis und ergebnis_neu ein und den selben wert drin stehen hat. Was ja so nicht sein soll.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben