Pointer Problem
-
Ich verzeweifle fast weiß nicht weiter, habe glaube ich das Thema Pointer noch nich tso ganz verstanden. Habe Problem bei diesem Programm. Also es läuft schon einwandfrei. Möchte nur noch eine zusätzliche Funktion reinprogrammieren.
Das quasi das Ergebnis gerundet ausgegeben wird. Hier das Programm// messwert2.h #ifndef _MESSWERT2_H_INC #define _MESSWERT2_H_INC //Funktionsdeklarationen void eingabe (double& strom); void verarbeitung(double* celsius, double& strom); void ausgabe (double* ausgeben); #endif//messwert2.cpp #include "stdafx.h" #include <iostream> #include "messwert2.h" using namespace std; //Eingabe mit Call by reference void eingabe (double& strom) { cout << "Willkommen zur Messwerterfassung" << endl; cout << "Stromwert zwischen 4 und 20 mA eingeben: "; cin >> strom; } //Verarbeitung mit Call by Pointer, danach Call by Pointer void verarbeitung(double* celsius, double& strom) { *celsius = 70.0/16.0*(strom-4)-20; } //Ausgabe Call by Pointer void ausgabe(double* ausgeben) { cout << "Die Temperatur betraegt " << *ausgeben << " Grad Celsius" << endl; }// Filename: messwert.main2.cpp #include "stdafx.h" #include <iostream> #include "messwert2.h" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { char zeichen = '\0'; do{ double strom = 0.0; // Übergabe der Eingabe mit Call by Reference eingabe(strom); if (strom == 4 || strom <=20) { double celsius = 0.0; //Verarbeitung mit Call by Reference verarbeitung(&celsius, strom); //Ausgabe der Temperatur mit Call by Reference ausgabe (&celsius); cout << "Weiter mit j, Abbruch sonst: "; cin >> zeichen; }else { cout << "Fehler Messwerterfassung" << endl; cout << "Weiter mit j, Abbruch sonst: "; cin >> zeichen; } }while (zeichen == 'j'); return 0; }So jetzt muss ich jetzt nur noch in die Funktionsdefiniton das runden einbaun. Nur wie geht das? ISt es sinnvoll noch eine runden Funktin zu erstellen?
-
ich glaube du hast auch nich den sinn von der übergabe per referenz an eine funktion verstanden.
Sinn ist, das du deiner Funktion eine Referenz auf einen Wert übergibst und somit gleich mit dem Original aus der Main arbeitest, es bringt recht wenig wenn du deinervoid eingabeeine Referenz übergibst aber dann in der Funktion nochmal eine Eingabe machst, mach doch die Eingabe in der Main und übergebe diese Variable als Referenz an deine anderen Funktionen.
-
Du solltest in C++ soweit es geht auf Pointer verzichten und stattdessen Referenzen verwenden (wie du es ja schon mit der Funktion eingabe(double &strom) gemacht hast).
Und ich nehme an, du willst nur die Ausgabe gerundet haben. Dafür gibt es die Stream-Methode precision():
double x = 1.234567890; cout.precision(4); // vier Stellen insgesamt gerundet ausgeben cout << x; // 1.235
-
Danke.
Und wie geht das in dem Fall ohne dieses precision??
-
da musste dir deine rundenfunktion selber schreiben

-
Das ist schon klar.
*ausgeben = int(100*(strom+0.005))/100.0;
muss sowas irgendwie einbinden weiß nur nicht wie ich das mache??
-
ich verstehe gerade nicht so ganz was du mit dem letzten bezwecken willst, reicht dir das precision nicht aus oder was meinst du?
-
Problem schrieb:
... if (strom == 4 || strom <=20) { ...sollte nicht besser
... if (strom >= 4 && strom <=20) { ...geschrieben werden.

-
Ich soll das von Hand machen. Und nicht irgendwelche vorgefertigten Dinge nutzen