www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "C/C++" - Verfahren von Heron
Verfahren von Heron < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Verfahren von Heron: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 15:54 Sa 17.11.2007
Autor: Fibonacci-

Aufgabe
[Dateianhang nicht öffentlich]

Da ich das erstmal auf einfache Art und Weise lösen möchte (ohne Sqrt) habe ich diesen Code:
1: # include <iostream>
2: using namespace std;
3:
4: int main(){
5: double x_1,a;
6: int n;
7:
8: cout << "Geben Sie die Zahl unter der Wurzel ein: " << "\n";
9: cin >> a;
10: cout << "Geben Sie nun -n- an: " << "\n";
11: cin >> n;
12: if (a < 0){
13: cout << "Fehler/Abbruch" << "\n";
14: exit (-1);}
15: if (n < 0){
16: cout << "Fehler/Abbruch" << "\n";
17: exit (-1);}
18:
19: for (x_1=1; x_1<=n; ){
20: x_1 = 0.5*(x_1 + (a/x_1));
21: }
22: cout << x_1 <<"\n";
23: }

Wie könnte ich das jetzt in eine Art void (wie Aufgabenstellung) festlegen?

void Sqrt(double a,double x_1,int n)
Sei Vorausgesetzt... sollte ich das am besten vor "int-main()" setzen und vor der "for-schleife" beenden?

Dateianhänge:
Anhang Nr. 1 (Typ: jpg) [nicht öffentlich]
        
Bezug
Verfahren von Heron: Antwort
Status: (Antwort) fertig Status 
Datum: 16:12 Sa 17.11.2007
Autor: Martin243

Hallo,

ich fürchte, du hast den Sinn und Zweck von Funktionen noch nicht verstanden.
Du sollst die komplette Parameterüberprüfung, Berechnung und Ausgabe in dieser Funktion unterbringen. Es wäre methodisch vielleicht besser, wenn du immer erst mit der Funktion anfingst.
In der main()-Funktion (ja, das ist auch eine Funktion) sollten nur die Eingabe (ohne Prüfung der Parameter auf Gültigkeit) und der Aufruf der Sqrt-Funktion stehen.
Du nimmst also alles vom ersten if bis zur vorletzten Zeile, schneidest es aus und packst es in die Sqrt-Funktion.  Dort solltest du aber die exit-Aufrufe entfernen.
Ach ja: Du solltest noch x auf Gültigkeit prüfen! Natürlich auch in der Funktion.


Gruß
Martin

Bezug
                
Bezug
Verfahren von Heron: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 12:13 So 18.11.2007
Autor: Fibonacci-

Wieso soll man hier x auf Gültigkeit prüfen? Das muss doch ausgerechnet werden!

Und gibt es auch alternative Exit-Operationen?
Return 0 wäre ja blödsinn :(

Bezug
                        
Bezug
Verfahren von Heron: Antwort
Status: (Antwort) fertig Status 
Datum: 14:05 So 18.11.2007
Autor: Martin243

Hallo,

> Wieso soll man hier x auf Gültigkeit prüfen? Das muss doch ausgerechnet werden!

Hoppla! Mein Fehler. Ich habe übersehen, dass die Wurzel von a gesucht wird...


> Und gibt es auch alternative Exit-Operationen?

Nö!

> Return 0 wäre ja blödsinn :(

Wieso? Habe ich doch gar nicht verlangt.
Du hast hierbei mehrere Dinge nicht beachtet:
1. Die Funktion ist vom Typ void, gibt also gar nichts zurück! Sie endet einfach mit einer schließenden Klammer, also ohne exit und ohne return.
Natürlich kannst du das exit in der Funktion aufrufen, aber dafür würde dich jeder verfluchen, wenn eine Funktion einfach so aussteigt, ohne dem Programm Bescheid zu geben.
2. Wenn die Funktion nicht void wäre, dann könntest du bei Auftreten eines Fehlers einen spezifischen Code zurückgeben, der als normales Ergebnis nicht auftreten kann. Also könntest du bei ungültigem a eine -1 und bei ungültigem n eine -2 zurückgeben.
Allerdings muss man dann dafür sorgen, dass das Programm diese zusätzliche Information verarbeitet und nicht einfach als gültiges Ergebnis auffasst. Deswegen muss man hier immer Vorsicht walten lassen.
3. Da deine Funktion nun einmal void ist, hast du keine (stimmt nicht ganz) Möglichkeit, dem Programm mitzuteilen, dass der Funktionsaufruf gescheitert ist. Wenn du es trotzdem machen willst, kannst du dich mal über "errno" informieren.
4. Warum wäre return 0 Blödsinn? Eigentlich will das Programm gar nicht wissen, wie der Funktionsaufruf verlaufen ist.


Gruß
Martin

Bezug
                                
Bezug
Verfahren von Heron: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 14:35 So 18.11.2007
Autor: Fibonacci-

Ich hab die exit-Anweisungen einfach entfernt und nur die Fehlermeldung ausgeben lassen:

1: if (var < 0 ||n < 0 ){
2: cout << "Fehler/Abbruch" << "\n";
3: }


Wie sieht es denn bei "cin"-Befehlen aus? Darf man diese ohne weiteres in void einbinden?
Ansonsten müsste ich die Variablen außerhalb von void deklarieren und genau das will ich nämlich vermeiden!

Bezug
                                        
Bezug
Verfahren von Heron: Antwort
Status: (Antwort) fertig Status 
Datum: 20:51 So 18.11.2007
Autor: Martin243

Hallo,

> Wie sieht es denn bei "cin"-Befehlen aus? Darf man diese ohne weiteres in void einbinden?

Ja. Man darf (fast) alles überall benutzen. Das mit dem exit wäre nur sehr unschön gewesen und überflüssig.

> Ansonsten müsste ich die Variablen außerhalb von void deklarieren und genau das will ich nämlich vermeiden!

Deklarieren oder zuweisen?
Laut Aufgabenstellung soll die Zuweisung in der main-Funktion stattfinden und die Werte dann an deine Sqrt-Funktion übergeben werden.


Gruß
Martin

Bezug
                                                
Bezug
Verfahren von Heron: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 22:31 So 18.11.2007
Autor: Fibonacci-

1: #include <iostream>
2: using namespace std;
3:
4: void sqrt(double *x, double var, int n)
5:
6:   for(int i=1; i<=n; i++)
7:     *x = 0.5*((*x) + (var/(*x)));
8: }
9:
10: int main()
11: {
12:   double var;
13:   int n;
14:   double x;
15:
16:   cout << "Geben Sie die Zahl unter der Wurzel ein: " << endl;
17:   cin >> var;
18:  
19:   cout << "Geben Sie nun -n- an: " << endl;
20:   cin >> n;
21:  
22:   if(var < 0){
23:     cout << "Zahl unter der Wurzel < 0" << endl;
24:     return(1);}
25:    
26:   if(n < 0){
27:     cout << "n < 0" << endl;
28:     return(1);}
29:
30:   x = 1;
31:   sqrt(&x, var, n);
32:   cout <<"Das Ergebnis ist: " << x << endl;
33:  
34:   return(0);
35: }

Habe das jetzt halbwegs hinbekommen!

Mich würde noch zusätzlich interessieren ob man statt n - Schritten ein Epsilon wählen kann:

|x_approximation - [mm] \wurzel{var} [/mm] | < [mm] \varepsilon [/mm]

am besten mit einer void sqrt2 (double var;double x;double epsilon)



Bezug
                                                        
Bezug
Verfahren von Heron: Antwort
Status: (Antwort) fertig Status 
Datum: 00:39 Mo 19.11.2007
Autor: Martin243

Hallo,

> Mich würde noch zusätzlich interessieren ob man statt n - Schritten ein Epsilon wählen kann:
>
> |x_approximation - [mm] \wurzel{var} [/mm] | < [mm] \varepsilon [/mm]

Klar!
Da du allerdings den genauen Wert nicht kennst, weil ihn ja gerade erst berechnen sollst, musst du innerhalb deiner Sqrt2-Funktion eine lokale Variable x_old einführen. Dann sieht deine Abbruchbedingung so aus:
|x_approximation - x_old | < [mm] \varepsilon [/mm]


Auch wenn ich Gefahr laufe mich zu wiederholen: Deine Lösung genügt nicht der Aufgabenstellung:
1. Die Signatur der Sqrt-Funktion soll sein:
void Sqrt(double, double, int);
Deine ist:
void sqrt(double*, double, int);

2. Die Gültigkeitsprüfung der Parameter soll innerhalb von Sqrt stattfinden.

3. Das Ergebnis soll von der Sqrt-Funktion ausgegeben werden, nicht von der main-Funktion.


Gruß
Martin

Bezug
                                                                
Bezug
Verfahren von Heron: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 08:45 Mo 19.11.2007
Autor: Fibonacci-

Abbruchbedingung mit < [mm] \varepsilon [/mm] ?
Was ist dann die Variable Epsilon?

Bezug
                                                                        
Bezug
Verfahren von Heron: Antwort
Status: (Antwort) fertig Status 
Datum: 16:01 Mo 19.11.2007
Autor: Martin243

Hallo,

du hast die Variable ins Spiel gebracht, also wirst du dir auch etwas dabei gedacht haben. Vermutlich gibst du statt eines ganzzahligen n einen kleinen double-Wert für [mm] $\epsilon$ [/mm] an, der unterschritten werden muss.


Gruß
Martin

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorhilfe.de