c++ code

Alles Wissenswerte über Skripte, Browser, Makros, PhP, HTML...

Moderatoren: Moderatoren, Redakteure

Benutzeravatar
Levi 
Beiträge: 44988
Registriert: 18.03.2009 15:38
Persönliche Nachricht:

Beitrag von Levi  »

wenn er dann immernoch rummeckert, liegts sehr wahrscheinlich nicht an sqrt ;) ... und du benutzt es wahrscheinlich eh schon richtig
gibt er denn irgend ne verwertbare fehlermeldung aus?
(sollte eigentlich so sein)


ansonnsten: vll mal auf ne Variable Zwischenspeichern das Ergebnis und diese dann als return wert benutzen.
Benutzeravatar
Raeyz-x
Beiträge: 1856
Registriert: 02.11.2008 15:25
Persönliche Nachricht:

Beitrag von Raeyz-x »

C:\Users\Tim\Documents\C++\pqformeln.cpp In function `float berechneNullstelle1(float, float, float)': <-- Das ist die Zeile mit der Formel.

80 C:\Users\Tim\Documents\C++\pqformeln.cpp declaration of 'float b' shadows a parameter

80 C:\Users\Tim\Documents\C++\pqformeln.cpp invalid operands of types `float' and `float' to binary `operator^'

80 C:\Users\Tim\Documents\C++\pqformeln.cpp expected unqualified-id before numeric constant

80 C:\Users\Tim\Documents\C++\pqformeln.cpp expected `,' or `;' before numeric constant

Code: Alles auswählen

float berechneNullstelle1(float p,float q, float b)
{
      float b = -p/2 - (p^2/4 - q)^0,5;
      return b;
      }   
Benutzeravatar
Levi 
Beiträge: 44988
Registriert: 18.03.2009 15:38
Persönliche Nachricht:

Beitrag von Levi  »

:D ... ich weiß nicht, ob das dein eigentliches Problem behebt ... aber:

du hast als Paramet b übergeben. deklarierst in der Formel selber aber nochmal b. ... das würde auf jedenfall schonmal nicht funktionieren (zumindest nicht so, wie man es im normalfall wollte)

btw: verstehe das konzept von parametern contra localen variablen.


ich dachte eher an ein:

Code: Alles auswählen

float berechneNullstelle1(float p,float q)
{
      float erg = -p/2 - (p^2/4 - q)^0,5;
      return erg;
      }   
aber nun zum eigentlichen:
80 C:\Users\Tim\Documents\C++\pqformeln.cpp invalid operands of types `float' and `float' to binary `operator^'

kann es sein, dass '^' nicht funktioniert.
oder funktioniert das jetzt nur mit den 0.5 (einen float wert) nicht?
was mich wundern sollte:

kannst ja mal zur überprüfung einmal:

Code: Alles auswählen

     float erg = -p/2 - (p^2/4 - q);
und einmal

Code: Alles auswählen

     float erg = -p/2 - ((p*p)/4 - q);
rechnen lassen
und walls so schön ist:

Code: Alles auswählen

 float erg = -p/2 - sqrt((p*p)/4 - q);
Benutzeravatar
Raeyz-x
Beiträge: 1856
Registriert: 02.11.2008 15:25
Persönliche Nachricht:

Beitrag von Raeyz-x »

Danke für deine Hilfe :) Es lag tatsächlich an dem ^.

Komisch was für Kleinigkeiten einem die Nerven rauben ;)

Kleiner Fehler besteht aber immernoch:

[Linker error] undefined reference to `eingabe(std::string)'
[Linker error] undefined reference to `eingabe(std::string)'
ld returned 1 exit status

hat auf jeden fall was mit dem "float eingabe(string s);" zu tun, da ich das mit den strings eh noch nicht verstehe und string s einfach genommen hab, da es in unsrem letzten programm stand :oops:

Hier nochmal der komplett aktuelle Code:

Code: Alles auswählen

#include <cstdlib>
#include <iostream>
#include <cmath>

using namespace std;

float eingabe(string s);
float berechneNullstelle1(float p, float q);
float berechneNullstelle2(float p, float q);
void linie();
void linie2();
void ausgabeNullstellen(float x1, float x2);


int main()
{
    float wahl;
    
    
    cout << "Willkommen zur Nullstellenberechnung von quadratischen Funktionen!" << endl;
    linie();
    cout << "1.Nullstellenberechnen" << endl;
    linie();
    cout << "2.Programm beenden" << endl;
    linie2();
    cin >> wahl;
    linie2();
    
    if (wahl == 1)
    {
             float p, q, x1, x2;
             
             cout << "Sie haben sich für die Nullstellenberechnung entschieden." << endl;
             
             p = eingabe ("p");
             q = eingabe ("q");
             
             x1 = berechneNullstelle1(p,q);
             
             x2 = berechneNullstelle2(p,q);
             
             ausgabeNullstellen(x1,x2);
             
             
             
             
             
           
             
             
          
    }
                      
    if (wahl == 2)
    {
             cout << "Das Programm wird beendet." << endl;
             return EXIT_SUCCESS;
             }  
   
    
    
    system("PAUSE");
    return EXIT_SUCCESS;
    
         
}         
         
void linie()
{
     cout << "_____________________________" << endl;
     }         
         
void linie2()
{
     cout << "_____" << endl;
     }   
         
float berechneNullstelle1(float p, float q)
{
      float erg = -p/2 - (p*p/4 - q);
      return erg;
      }         
         
float berechneNullstelle2(float p, float q)
{
      float erg2 = -p/2 + sqrt(p*p/4 - q);
      return erg2;
      }         
         
void ausgabeNullstellen(float x1, float x2)
{
     cout << "Die Nullstelle 1 ist " << x1 << endl;
     cout << "Die Nullstelle 2 ist " << x2 << endl;
     }
                
EDIT:Ich hab einfach unten ein "float eingabe(string s)" hingemacht,jetzt funktioniert das Prog,ist nur noch ein bisschen komisch aber ich glaub jetzt komm ich allein klar.Danke für eure Hilfe,wenn ich nicht weiterkomme meld ich mich nochmal :wink:
Zuletzt geändert von Raeyz-x am 16.10.2009 12:07, insgesamt 1-mal geändert.
Benutzeravatar
Sylence
Beiträge: 1154
Registriert: 10.07.2007 00:02
Persönliche Nachricht:

Beitrag von Sylence »

^ ist der Operator for ein XOR. Nicht für eine Potenz. So einen Operator hat C++ nicht.

Du musst schon die pow() oder exp() funktion bentutzen.

EDIT:
Die funktion eingabe() existiert nicht. Du hast dem compiler nur mitgeteilt, dass es irgendwo so eine funktion gibt, aber du hast ihm nicht gesagt, wie diese funktion aussieht, oder wo er sie finden kann.
Zuletzt geändert von Sylence am 16.10.2009 12:09, insgesamt 1-mal geändert.
Benutzeravatar
Levi 
Beiträge: 44988
Registriert: 18.03.2009 15:38
Persönliche Nachricht:

Beitrag von Levi  »

er sagt dir doch immer wo dein fehler ist. diesmal: eingabe... wo steht die funktion. du rufst sie auf, aber nirgends ist definiert was sie tun soll.


ihr fehlt die implementation :)

@^ ... da sieht man mal, was man damit anrichtet, wenn man mit c-ähnlichen sprachen arbeitet X) ... ich hab das echt total vergessen, dass es nicht als exponential-funktion funktioniert :D
Benutzeravatar
Raeyz-x
Beiträge: 1856
Registriert: 02.11.2008 15:25
Persönliche Nachricht:

Beitrag von Raeyz-x »

Grad noch den vorherigen Beitrag editiert,danke für eure Hilfe ;)
Benutzeravatar
Scorcher24_
Beiträge: 15527
Registriert: 11.11.2004 14:31
Persönliche Nachricht:

Beitrag von Scorcher24_ »

Alpha-x hat geschrieben:Grad noch den vorherigen Beitrag editiert,danke für eure Hilfe ;)
Das kann nicht funktionieren... verstehe ich das richtig, dass Du nur oben
"float eingabe(string);" hingemacht hast und es jetzt geht? Aber eingeben kannst Du nix oder?
Dann ist der Compiler scheisse :P. Welchen nutzt Du denn? Eigentlich sollte hier eine undefined reference auftreten bei sowas.
Das "eingabe(string)" ist denke ich eine selbst definierte Funktion aus eurem letzten Projekt.. mir scheint es das beste Du nimmst nochmal ein C++-Tutorial zur Hand. So ganz verstanden hast Du das scheinbar noch nicht :D.
rya.
Benutzeravatar
Raeyz-x
Beiträge: 1856
Registriert: 02.11.2008 15:25
Persönliche Nachricht:

Beitrag von Raeyz-x »

ich habe nicht nur oben float eingabe(string) stehen.

ich seh grad,das war nicht der aktuelle code und der ist auch irgentwie total durcheinander.

mein prog läuft jetzt jedenfalls und eingaben kann ich auch machen,scorcher ;)

danke nochmals.

mfg