1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

c++

Discussion in 'Programmieren' started by Dackel, Apr 9, 2003.

Thread Status:
Not open for further replies.
  1. Dackel

    Dackel Byte

    Hallo!
    Ich habe ein Problem mit einem Code, der grötenteils nicht von mir stammte, sondern von einem Verwandten, der es mir ungefähr beschrieben hatte.
    Es lässt sich zwar kompilieren, doch rechnet der Code nicht wie gewünscht.
    Das Verfahren kann man auch umständlich aufschreiben:
    X1 = 1 Y1=a/X Wobei a der Radikant ist
    X2 = (X1+Y1)/2 Y2=a/X1
    X3 = (X2+Y2)/2 Y3=a/X2
    ...

    C++ Code:
    # include <iostream>
    void main()
    {
    long a,b,Feldx[100],Feldy[100],i;
    cin >> a;
    Feldx[1] = 1; Feldy[1]=(a / Feldx[1]);
    for (i=1; i = 100; i++);
    {
    Feldx<I>=(Feldx[i-1] + Feldy[i-1])/2;
    Feldy<I>= (a / Feldx<I>);
    cout &lt;&lt; Feldx[100] &lt;&lt; endl;
    cout &lt;&lt; Feldy[100] &lt;&lt; endl;
    cin &gt;&gt; b;
    }
    }
     
  2. Dackel

    Dackel Byte

    Vielen Dank für den Tipp.
    Mich stört aber noch die Ungenauigkeit der Berechnung.
    z.b. Ausgabe ist Ganzzahlig; die Wurzel aus 3 liegt laut Programm zwischen 1 und 3, was mir aber zu ungenau ist (Wurzel aus 3 ist 1,7..). Man mir einer sagen, wie man das Problem löst.
    Volker
    [Diese Nachricht wurde von Dackel am 11.04.2003 | 14:33 geändert.]
     
  3. interlook

    interlook Byte

    Also ehrlich gesagt komme ich mit Deiner Schleifenbedingung nicht ganz klar. Meines Wissen (so wie ich es auch anwende) übergibst Du im ersten Argument der for() Anweisung die Laufvariable und initialisierst Diese ggf. Das zweite, ist eine Bedingung, die erfüllt sein muss, damit die Schleife weiter durchlaufen wird. Bei Dir steht da i==99. Ich glaube, die Schleife soll solange laufen, bis i gleich 99 ist, dann wäre die korrekte Syntax i&lt;=99, an dieser Stelle.

    Gruß, Andreas
     
  4. Dackel

    Dackel Byte

    Hallo DVfreak!
    Vielen Dank für deine Hilfe
    cin &gt;&gt; b; hat nur den Sinn das Fenster offen zu lassen und bei Tastendruck zu schließen.Es lläuft aber immer noch nicht. Die aktuelle Version hat den Code:

    # include &lt;iostream&gt;

    void main()
    {
    int i;
    long Feldx[100],Feldy[100];
    long double a,b,c;
    cin &gt;&gt; a;
    Feldx[1] = 1;
    Feldy[1]=(a /1);
    for (i=2; i==99; i++)
    {
    Feldx<I>=(Feldx[i-1] + Feldy[i-1])/2;
    Feldy<I>= (a / Feldx<I>);
    }
    cout &lt;&lt; Feldx[99] &lt;&lt; endl;
    cout &lt;&lt; Feldy[99] &lt;&lt; endl;
    cin &gt;&gt; c;
    }

    Volker
    [Diese Nachricht wurde von Dackel am 11.04.2003 | 14:00 geändert.]
     
  5. DVfreak

    DVfreak Byte

    Hallo!

    Also, erstens reservierst du mit x[100] 100 Feldelemente. Das erste davon ist x[0] und das letzte ist x[99], daher existiert das Feld x[100] gar nicht. Der Lesezugriff ist trotzdem erlaubt, deswegen lässt sich das Programm kompilieren, aber es enthält in der Regel irgendwelchen Speicherinhalt, der dich nicht interessiert.
    In der Laufbedingung der Schleife schreibst du "i = 100". Das ist eine Zuweisung und kein Vergleich. Wenn du überprüfen willst, ob i 100 ist musst du "i == 100" schreiben.
    Der Sinn des Programms ist mir ansonsten nicht klar. Z.B. wird in der Schleife nach der Variable b gefragt, diese aber gar nicht verwendet. Außerdem wird immer das Feldelement 100 ausgegeben, das (abgesehen davon, dass es nicht existiert s.o.) gar nicht initialisiert und erst recht nicht verändert wird.

    MfG,
    Bene
     
Thread Status:
Not open for further replies.

Share This Page