Ich nehme mal an du meinst du die ermittleMittelwert Funktion. Die sieht
an sich richtig aus. Irgendwie geht es aber mit deinen Variablen ein
wenig drunter und drüber. Daher kommt wohl nicht das raus was du
erwartest. Was z.B. soll int value[100] in deiner main Funktion sein?
Das wird nur von ermittleMittelwert benutzt aber nirgendwo gefüllt. Dann
gibt ermittleMittelwert natürlich nur quatsch aus. Es gibt aber auch
noch einen zweiten Aufruf von ermittleMittelwert in deiner
eingabeMesswerte Funktion. Dort füllst du int anzMw[100] mit double
Werten die dann natürlich zu int konvertiert werden. Kommt daher
eventuell was anderes als erwartet raus?
Malvin schrieb:> kann mir jemand sagen warum der Rückgabewert der Funktion nicht stimmt?
Die Funktion "eingabeMesswerte(int &anz, double &wert)" sieht nach C++
aus. Jedenfalls speichert sie die eingegebenen Werte in einer lokalen
Variable, die geht bei Beendigung der Funktion verloren.
Der Parameter "wert" wird nicht verwendet - vermutlich soll auch
"eingabeMesswerte" dort den Mittelwert retournieren?
Sebastian V. O. schrieb:> Dort füllst du int anzMw[100] mit double> Werten die dann natürlich zu int konvertiert werden.
wie so werden die Werte zu int konvertiert? Hier wird doch nur der
Messwert an der Speicherstelle gespeichert oder nicht?
Sebastian V. O. schrieb:> Was z.B. soll int value[100] in deiner main Funktion sein?
Die Funktion "ermittleMittelwert(variable, array)", damit ich den in
Main aufrufen kann habe ich hier eine leere Array geladen.
Kann das der Fehler sein?
Mitlesa schrieb:> Deklariere deine Variable so:> static double mittelWert;>> sonst geht der Inhalt beim Rücksprung verloren.
nein, bitte nicht. Auch wenn das Programm damit eventuell funktioniert,
ist diese Lösung nicht sinnvoll erweiterbar.
Der Ansatz vom Programm ist ja schon richtig, andere haben den Fehler ja
schon gefunden, es wird einfach das falsche Array verwendet.
Mitlesa schrieb:> Deklariere deine Variable so:> static double mittelWert;>> sonst geht der Inhalt beim Rücksprung verloren.
Hab die Variable als static definiert, trotzdem ist der Rückgabewert
undefiniert--> -858993460.00
Malvin schrieb:> Hab die Variable als static definiert, trotzdem ist der Rückgabewert> undefiniert--> -858993460.00
lies dir die anderen Kommentare durch, du hast 2 Array und sie irgendwie
vertauscht.
Gehe einfach schritt für Schritt im Debugger mal durch, und schau dir
den Inhalt deiner Variablen an,
Malvin schrieb:> Hab die Variable als static definiert, trotzdem ist der Rückgabewert> undefiniert--> -858993460.00
habs oben schon geschrieben, die eingegebenen messwerte sind weg sobald
"eingabeMesswerte" zurückspringt.
Malvin schrieb:> ist eigentlich gewollt. Der soll so lange durch laufen, bis die anfrage> mit nein bewertet wird.
das steht dort aber nicht. Du solltest auch die Warnung vom Compiler
beachten.
Malvin schrieb:> Sebastian V. O. schrieb:>> Dort füllst du int anzMw[100] mit double>> Werten die dann natürlich zu int konvertiert werden.>> wie so werden die Werte zu int konvertiert? Hier wird doch nur der> Messwert an der Speicherstelle gespeichert oder nicht?
Nochmal der relevante Code:
1
intanzMw[100];
2
doublemessW=0;
3
...
4
for(i=0;i<anz;i++)
5
{
6
printf("Geben Sie bitte den %i. Messwert ein: ",i+1);
7
scanf("%lf",&messW);
8
anzMw[i]=messW;
9
10
}
Du lässt den Benutzer hier eine Zahl eintippen und speicherst diese in
messW. messW ist ein double also kann man auch Zahlen mit
Nachkommastellen eingeben. Wenn du diese aber mit anzMw[i]=messW in
einem Array aus ints speicherst werden die Nachkommastellen einfach
verworfen. Wenn du die double Werte behalten willst musst du schon ein
double anzMw[100] Array erstellen. Gleiches für die ermittleMittelwert
Funktion die auch ein Array von ints erwartet.
rm-rf schrieb:> habs oben schon geschrieben, die eingegebenen messwerte sind weg sobald> "eingabeMesswerte" zurückspringt.
Ja ist richtig, ich glaube es liegt daran dass ich hier 2 verschiedene
Arrays verwende.
Ich probier es nochmal aus und gebe euch morgen bescheid.
DAnke euch allen.
Gruß
Malvin
printf("Geben Sie bitte den %i. Messwert ein: ",i+1);
7
scanf("%lf",&messW);
8
wert[i]=messW;
9
}
10
}
Diese Funktion ließt so viele Messwerte ein wie anz angibt und speichert
die Werte in dem zweiten Parameter wert. Achte hier auf die Art wie die
Parameter übergeben werden. Der erste Parameter ist ein einfacher int,
keine Referenz auf ein int wie in deinem Beispiel. Eine Referenz auf ein
int macht nur dann Sinn wenn die Funktion den originalen Wert verändern
soll. Der zweite Parameter ist ein Pointer und zeigt auf das erste
Element von einem Array. Darüber kannst du dann das Array was irgendwo
in der main Funktion steht mit Daten füllen.