1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

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

Dieses Thema im Forum "OS X-Developer" wurde erstellt von webpixels, 27.12.05.

  1. webpixels

    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
     
  2. Squart

    Squart Pomme Etrangle

    Dabei seit:
    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.
     
  3. stoebe

    stoebe Uelzener Rambour

    Dabei seit:
    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
     
    #3 stoebe, 27.12.05
    Zuletzt bearbeitet: 27.12.05
  4. webpixels

    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!!!
     

Diese Seite empfehlen