Lineare Regression

Hallo,
in unserer Vorlesung C müssen wir ein Prog. schreiben,
das aus verschiedenen Messwerte eine Regressionsgerade berechnet.

Bei unserem Prog haben wir allerdings einen „kleinen“ Fehler
und kamen trotz Teamwork (noch ohne Prof.) nicht auf die
Lösung.

Bei folgendem Listing werden Messwerte in ein Mischmasch aus struct und array eingelesen.
Allerdings wird die for-Schleife nicht richtig durchlaufen.
Die Abfrage für den 1. x-Wert kommt doppelt, dessen Eingabe wird aber im 1. y-Wert gespeichert.

Falls Ihr lust habt, könnt ihr es euch ja mal anschauen…

Wir arbeiten mit dem Borland C+±Builder (aber [meist] nur C-Befehle)

Listing:

#pragma hdrstop
#include
#include
#include
#include
#include
#include
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
struct TMessen
{
double xi;
double yi;
};

void solve_2 (double arr[2][3], double *d, double *k)
/*Lösen Mithilfe der Kramerregel mit zwei Unbekannten und Abspeichern der
Lösungswerte in den Variablen d und k*/
{
double det;
/*Nennerdeterminante der Matrix arr*/
det = arr[0][0]* arr[1][1]-arr[0][1]* arr[1][0];
/*Berechnung der zweiten Lösung von der Matrix arr */
*d = arr[0][2]* arr[1][1]-arr[0][1]* arr[1][2]/det;
/* b1 * a22 - a12 * b2 */
/*Berechnung der ersten Lösung von der Matrix arr */
*k = arr[0][0]* arr[1][2]-arr[0][2]* arr[1][0]/det;
}

//---------------------------------------------------------------------------

int main(int argc, char* argv[])
{
/*Berechnung einer linearen Regression (Regressionsgerade), durch Eingabe der
Messwerte*/
/*Initialiserung der Variablen*/
int ianzahl, MessAnzahl, Stelle;
double Cramer[2][3], c, m, *n;
char cc;
TMessen Messwerte[1000];/*Deklaration von einem Messwertearray*/
printf(„Bitte geben Sie die Anzahl der vorhandenen Messwerte ein\n“);
scanf("%d",&MessAnzahl);
/*Allokieren des Speicherplatzes, dynamisch nach der Messwertanzahl*/
/*n=(double *) malloc (MessAnzahl* sizeof (double));*/
printf(„Geben Sie jetzt die Messwerte xi und yi ein\n“);
Stelle=1;

//Hier kommt die Eingabe der Messwerte mit fehlerhafter FOR-Schleife

for(ianzahl=0; ianzahl

Bei folgendem Listing werden Messwerte in ein Mischmasch aus
struct und array eingelesen.
Allerdings wird die for-Schleife nicht richtig durchlaufen.
Die Abfrage für den 1. x-Wert kommt doppelt, dessen Eingabe
wird aber im 1. y-Wert gespeichert

scanf("%lf\n", &Messwerte[ianzahl].xi);

Hallo Robert,

ich sehe, daß ihr mit scanf() arbeitet. In dem Formatstring von scanf() sollte niemals \n stehen, da die Eingabe sowieso mit Enter abgeschlossen wird. Sollte das Prgramm nach Entfernung von \n immer noch nicht funktionieren, versuchs mal mit dem Aufruf der Funktion fflush(stdin); (nach jedem scanf), um den Eingabepuffer zu leeren.
Weiterhin könnte man für diese Art Aufgabe auch cin >> Messwerte[ianzahl].xi nehmen.

Gruß Frank

Vielen Dank,

das \n war daran schuld, das die Einleserei nicht so funktioniert hat.

Robert