• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Wir haben den Frühjahrsputz beendet, Ihr auch? Welches Foto zu dem Thema hat Euch dann am Besten gefallen? Hier geht es lang zur Abstimmung --> Klick

Gauss, n-Werte, Liste; long ergebnis1=(n*(n+1))/2;

  • Ersteller webpixels
  • Erstellt am

webpixels

Gast
An alle, die es wissen:

ich versuche nun schon seit Tagen, mit dem Gauss-Java-Quellcode
alle n-Werte durchzurechnen, doch verzweifle ich inzwischen,
weil ich nicht auf die Ergebnisse:
// n=10 erg=55
// o=150 erg=11325
// p=300 erg=45150
// n=80000 erg=1052556352
komme.
Meine Aufgabe erfodert eine Auflistung der Ergebnisse aller n-Werte in ein und derselben Ausgabe.

Doch die Ausgabe bringt mir einen Minus Wert bei n=300

Hier mein code, den Ihr hoffentlich korrigieren könnt.

//
public class GaussAlle extends Object
{
public static void main (String[] args)
{
short n; short o; short p; short q;
short i=0;
short ergebnisn = 0; short ergebniso = 0; short ergebnisp = 0; short ergebnispq = 0;


n=10;
o=150;
p=300;
q=80000

for (i=1; i<=n; i++) {
ergebnisn += i;
}


for (i=1; i<=o; i++) {
ergebniso += i;
}

for (i=1; i<=p; i++) {
ergebnisp += i;
}

for (i=1; i<=q; i++) {
ergebnisq += i;
}
System.out.println ("Die Summierung der Zahlen 1 bis 10 = " + ergebnisn);
System.out.println ("Die Summierung der Zahlen 1 bis 150 = " + ergebniso);
System.out.println ("Die Summierung der Zahlen 1 bis 300 = " + ergebnisp);
System.out.println ("Die Summierung der Zahlen 1 bis 80000 = " + ergebnisq);

}
}
//

die Formel "long ergebnis1=(n*(n+1))/2;" soll hier meines Verstehens der Aufgabe nach nicht eingesetzt werden.
Vorab vielen Dank to all helpers
: ) webpixels
 

Squart

Pomme Etrangle
Registriert
29.01.04
Beiträge
910
Hi,

bist du sicher, dass alle Ergebnisse stimmen? Bei 80.000 kommt nach meiner Rechnung 3.200.040.000 heraus (ist doch (n*(n+1))/2, oder?).
Das falsche Ergebnis liegt an der Beschränktheit von short. short ist 1 oder 2 byte groß (weiß ich nicht genau), kann also höchstens +127 oder +32.767 aufnehmen.
 

stoebe

Uelzener Rambour
Registriert
23.12.05
Beiträge
371
Ich muss sagen, dass mir Java so gut wie gar nicht liegt und ich mir den Code auch
nicht richtig durchgelesen habe. Eines ist mir aber grad auf Anhieb aufgefallen:

Code:
[b]short[/b] n;[b] short[/b] o;[b] short[/b] p;[b] short[/b] q;[b]
short[/b] i=0;[b]
short[/b] ergebnisn = 0; [b]short[/b] ergebniso = 0; [b]short[/b] ergebnisp = 0; [b]short[/b] ergebnispq = 0;
Bei C++, welches mir ne Ecke besser liegt, gibt es verschiedene Zahlentypen.
Der Ganzzahltyp short, welchen du hier benutzt, belegt bei C++ lediglich 16bit,
weshalb lange Ergebnisse irgendwann durch den Zahlentyp verfälscht werden
(i.d.F. Minuswerte). Deshalb ist es, jedenfalls bei C++, von größerer Bedeutung,
int oder long int-Variablen zu verwenden, da diese 32Bit belegen.
Ich kann auch völlig falsch liegen, aber das war so das erste, was mir durchn Kopf
gegangen ist. Ich hoffe mal, dass es dir hilft.


/edit » Da war wohl jemand flotter ;(


Grüße,

stoeb :E
 
Zuletzt bearbeitet:

webpixels

Gast
Ihr habt ja recht,
eingefüger Code ist "Mein" Code.

Dieser hier bietet mir richtige Resultate:
//
public class GaussAlleLong extends Object {

public static void main (String[] args) {
int n=10;
int o=128;
int p=150;
int q=300;
int r=80000;


long ergebnis1=(n*(n+1))/2;
long ergebnis2=(o*(o+1))/2;
long ergebnis3=(p*(p+1))/2;
long ergebnis4=(q*(q+1))/2;
long ergebnis5=(r*(r+1))/2;



System.out.println ("Die Summierung der Zahlen 1 bis 10 = " + ergebnis1);
System.out.println ("Die Summierung der Zahlen 1 bis 128 = " + ergebnis2);
System.out.println ("Die Summierung der Zahlen 1 bis 150 = " + ergebnis3);
System.out.println ("Die Summierung der Zahlen 1 bis 300 = " + ergebnis4);
System.out.println ("Die Summierung der Zahlen 1 bis 80000 = " + ergebnis5);
}
}



// n=10 erg=55
// n=128 erg=8256
// n=150 erg=11325
// n=300 erg=45150
// n=70000 erg=1052556352

//


Dort habe ich dann aber auch nicht mit dem Code gearbeitet:
///
public class Gauss10 extends Object {
public static void main (String args[]) {
short n;
short i=0;
short ergebnis = 0;
n =10; // Die ersten 10 Zahlen


for (i=1; i<=n; i++) {
ergebnis += i;
}


System.out.println("Die Summe aller Zahlen von 1 bis 10 betraegt " + ergebnis);
}
}
///


All die n-Werte von 10 bis 80000 sollen in einer Liste erscheinen.
Ich schaff's nicht!

Bitte um Hilfe!!!