c++

Dieses Thema im Forum "Programmieren" wurde erstellt von Dackel, 9. April 2003.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Dackel

    Dackel Byte

    Registriert seit:
    6. September 2001
    Beiträge:
    85
    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

    Registriert seit:
    6. September 2001
    Beiträge:
    85
    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

    Registriert seit:
    3. Februar 2003
    Beiträge:
    110
    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

    Registriert seit:
    6. September 2001
    Beiträge:
    85
    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

    Registriert seit:
    6. Juni 2002
    Beiträge:
    56
    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
     
Status des Themas:
Es sind keine weiteren Antworten möglich.

Diese Seite empfehlen