Zum Inhalt springen

Berechnung liefert falsches Ergebnis (war: bin ratlos :-()


Empfohlene Beiträge

Geschrieben

hallo,

ich versuche mich derzeit an einem programm welches von einer zahlenreihe den mittelwert und die standardabweichung berechnen soll, das programm ist syntaktisch richtig und scheint auch zu funktionieren aber ich verstehe nicht warum folgendes ergebnis auftritt wenn ich es ausführe:

Wie viele Messwerte sollen eingelesen werden?

4

Geben Sie bitte 4 Zahlen ein;

Mittelwert: 0.000000

Standardabweichung: 0.000000

mein quelltext dazu sieht wie folgt aus:

main.cpp

#include "globals.h"

#include "calc.h"

void main ()

{

int i;

int n;

float *feld = NULL;

double mw = 0; // an dieser stelle wurde immer gewarnt dass mw und std nicht

initialisiert seien

double std = 0;

printf("Wie viele Messwerte sollen eingelsen werden?\n");

scanf_s("%d", &n);

printf("Geben Sie bitte %d Zahlen ein:\n", n);

feld =(float *)malloc (n*sizeof(float));

//ab hier bricht das programm ab

for (i = 0; n < i; i++)

{

scanf_s("%f", feld+1);

}

//Diese Abfrage wollte ich eigentlich auch verwenden allerdings hatte ich auch

hier fast das selbe Ergebnis bei der Ausgabe

/*if (feld != NULL)

{

mw = fkt_mw(feld,n);

std = fkt_std (feld,n);

}*/

printf("Mittelwert: %lf\n", mw);

printf("Standardabweichung: %lf\n", std);

free (feld);

getchar ();

getchar ();

}

calc.cpp

#include "calc.h"

#include "globals.h"

double fkt_mw (float *feld, int n)

{

int i;

double mw; // Zuvor war mw hier auf 0 gesetzt das habe ich mal hier rausgenommen

for (i = 0; i < n; i++)

{

mw += (feld);

}

mw = mw / n;

return (mw);

}

double fkt_std (float *feld, int n)

{

int i;

double mw, std;

//std = 0;

mw = fkt_mw(feld, n);

for (i = 0; i < n; i++)

{

std += (feld - mw) * (feld - mw);

}

std = std / n;

std = sqrt(std);

return (std);

}

globals.h

#ifndef GLOBALS_INC

#define GLOBALS_INC

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

#endif

calc.h

#ifndef CALC_INC

#define CALC_INC

#include "globals.h"

double fkt_mw (float *feld, int n);

double fkt_std (float *feld, int n);

#endif

wäre toll wenn da jemand für mich einen rat hätte.

gruß glen

Geschrieben (bearbeitet)
for (i = 0; n < i; i++)

{

scanf_s("%f", feld+1);

}

Ich vermute mal dort soll i<n stehen und nicht n<i.

Sicher dass "feld+1" richtig ist?

Bearbeitet von Servior
Geschrieben

wahnsinn dass hätte mir auffallen sollen! vor lauter wald die bäume nimmer gesehn^^

nun werden die werte eingelesen aber mittelwert und standardabweichung werden mit 0.000000 angegeben. nun konnte ich die initialisierung in der calc.cpp vornehmen für mw und std.

das feld+1 müsste eigentlich deshalb richtig sein weil ich ja mehrere werte einlesen will oder hast du da ne andere idee?

Geschrieben
das feld+1 müsste eigentlich deshalb richtig sein weil ich ja mehrere werte einlesen will
Das sollte wohl feld+i heißen. Falsch abgeschrieben?

Und fürs nächte Mal: Lass dir bitte einen aussagekräftigen Threadtitel einfallen. Ratlos ist hier so ziemlich jeder, der hier eine Frage stellt, sonst würde er ja nicht fragen.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...