Mittelwert aus Funktionswerten bestimmen
-
Hallo...
ich hänge nun schon länger an einer Aufgabe fest und hoffe,dass mir hier vielleicht jemand weiterhelfen kann.Also ich habe ein Programm zur Bestimmung von Funktionswerten in einem best. Def.bereich:
#include <stdio.h> #include <conio.h> void main() { double x, y; printf("%50s\n\n", "ROCKWELL-HAERTEMESSUNG"); printf("%55s\n\n", "Tabelle der Fkt. f(x)=100-(x/0.002)"); printf("%49s\n\n", "x = Eindringtiefe in mm"); printf("%50s\n\n", "f(x) = Rockwellhaerte HRC"); printf("%18s%40s\n", "x", "f(x)"); for( x=0.1; x < 0.2; x += 0.003 ) { y = 100-(x/0.002); printf("%20.3f %38.3f\n", x, y); } getch(); }
Nun soll ich je Datensatz den Abstand |mw-y| bestimmen, wobei mw der Mittelwert der Funktionswerte ist.
Und genau da komm ich nicht weiter
Kann mir jemand helfen?
Grüße
-
Hallo...
rechne doch erstmal den Mittelwert aus.
Dann kannst du dir eine zweite Schleife für die Abstände tippen.
-
...speicher die Ergebnisse ( y ) alle in einem double-Array, dann brauchst du die später nicht neu zu berechnen.
-
das ist klar....ich weiß nur nicht,wie ich den Mittelwert herausfinden soll...der ändert sich ja mit Änderung des Def.bereichs...also weiß ich die Anzahl der Funktionswerte ja theorethisch vorher nicht
-
Du Teilst doch die Summe aller y durch die Anzahl der x Werte.
Dann brauchst du ja nur die Anzahl der x in der Schleife zu zählen.
-
#include <stdio.h> int main() { double x, y; double Summe = 0, n = 0; for( x=0.1; x < 0.2; x += 0.003, n++ ) { y = 100-(x/0.002); Summe += y; } printf("Mittelwert: %.3f\n", Summe/n ); return 0; }
-
Vielen Dank für deine Hilfe
werd ich gleich ma probieren
-
also ich hab das jetzt so umgesetzt:
#include <stdio.h> #include <conio.h> #include <math.h> void main() { double x, y, a; double Summe = 0, n = 0; printf("%50s\n\n", "ROCKWELL-HAERTEMESSUNG"); printf("%55s\n\n", "Tabelle der Fkt. f(x)=100-(x/0.002)"); printf("%49s\n\n", "x = Eindringtiefe in mm"); printf("%50s\n\n", "f(x) = Rockwellhaerte HRC"); for( x=0.1; x < 0.2; x += 0.003, n++ ) { y = 100-(x/0.002); Summe += y; } printf(" Mittelwert: %.3f\n", Summe/n ); printf("%18s%18s%22s\n", "x", "f(x)", "Abstand"); for( x=0.1; x < 0.2; x += 0.003) { y = 100-(x/0.002); a = abs((Summe/n)-y); printf("%20.3f %16.3f %20.3f\n", x, y, a); } getch(); }
Zahlen stimmen...nur die nachkommastellen stehen noch alle bei 0
-
abs liefert eine Ganzzahl, int und schneidet Nachkommastellen ab.
Nimm fabs
-
fetzt
-
Du solltest lernen deinen Code gescheit zu formatieren.
-
jetzt will ich das ganze in einer Textdatei speichern,aber irgendwie klappts nicht
bin leider noch AnfängerAufgabenstellung ist folgende:
speichern der Wertepaare in einer Textdatei auf folgende Weise:
i+1. Datensatz: i x y |mw-y|der 1. datensatz beinhaltet den Definitionsbereich xvon xbis Schrittweite
Eingabe des Dateinamens über Tastatur.soweit bin ich bis jetzt:
#include <stdio.h> #include <conio.h> #include <math.h> #include <stdlib.h> void main() { double x, y, a; double Summe = 0, n = 0; printf("%50s\n\n", "ROCKWELL-HAERTEMESSUNG"); printf("%55s\n\n", "Tabelle der Fkt. f(x)=100-(x/0.002)"); printf("%49s\n\n", "x = Eindringtiefe in mm"); printf("%50s\n\n", "f(x) = Rockwellhaerte HRC"); for( x=0.1; x < 0.2; x += 0.003, n++ ) { y = 100-(x/0.002); Summe += y; } printf(" Mittelwert: %.3f\n", Summe/n ); printf("%18s%18s%22s\n", "x", "f(x)", "Abstand"); for( x=0.1; x < 0.2; x += 0.003) { y = 100-(x/0.002); a = fabs((Summe/n)-y); printf("%20.3f %16.3f %20.3f\n", x, y, a); FILE *fp; int i; char name[10]; printf("Dateiname:");scanf("%s",name); fp=fopen("datei.txt","w"); if(fp==NULL) {printf("Error:Dateieröffnung\n");getch(); for( x=0.1; x < 0.2; x += 0.003, i++ ); { printf("%s.Datensatz:",i); scanf("%f%f%f", &x, &y , &a); fprintf (fp,"%f%f%f\n", x, y, a); } fclose (fp); getch(); } } }
-
Merlin_1334 schrieb:
jetzt will ich das ganze in einer Textdatei speichern,aber irgendwie klappts nicht
Warum nicht.
Merlin_1334 schrieb:
bin leider noch Anfänger
MfG
ÜÜÜ
-
ok...ich bin jetzt soweit, daß alle Werte in die richtige Textdatei geschrieben werden:
FILE *fp; char name[40]; printf("Dateiname:");scanf("%s",name); fp = fopen(name,"w+"); if(fp==NULL) { printf("Error: Dateieroeffnung"); return 0; } for( x=0.1; x < 0.2; x += 0.003) { y = 100-(x/0.002); a = fabs((Summe/n)-y); printf("%20.3f %16.3f %20.3f\n", x, y, a); fprintf(fp, "%20.3f %16.3f %20.3f\n", x, y, a); } fclose (fp); return 0; }
Was aber nicht klappt,ist die richtige Formatierung:
i + 1. Datensatz: i x y awobei der 1. Datensatz den Definitionsbereich xvon xbis beinhalten soll
kann mir bitte jemand weiter helfen?
-
Merlin_1334 schrieb:
Was aber nicht klappt,ist die richtige Formatierung:
i + 1. Datensatz: i x y a
wobei der 1. Datensatz den Definitionsbereich xvon xbis beinhalten soll
kann mir bitte jemand weiter helfen?Wie ist das gemeint, gib mal ein konkretes Beispiel mit Zahlen.
-
das ist ja mein Problem, aber ich denke mal es sollte etwa so in der txt-datei aussehen:
0. Definitionsbereich: x=0.1; x < 0.2; x += 0.003 1. 0.100 50.000 24.750 2. 0.103 48.500 23.250 3. 0.106 47.000 21.750 ...usw
-
Ist doch kein Ding. Hast du ein Buch, wo die Formattierungszeichen für printf erklärt sind ?
-
ich versteh eigtl. nur nicht, wie ich den Definitionsbereich automatisch übergebe und die Nummerierung realisiere
-
Der Definitionsbereich muss ja vor der Ausgabe fest stehen.
Entweder 'fest eingebrannt' im Programm, oder vom Benutzer eingegeben, oder als irgendeine Schrittweite im Programm berechnet.In deiner Version ist der Definitionsbereich fest eingebrannt, dann könntest du den gleich in die printf Anweisung mittels entsprechender Formatierungszeichen schreiben, for dem Eintritt in die Schleife.
Die Nummerierung ist ja auch nicht weiter schwer: du brauchst eine Variable, welche die Schleifendurchläufe zählt und schreibst das entsprechende Formatierungszeichen an die erste Stelle von printf
-
Lernst du für dich allein, oder in einer Schule ?
-
Danke für die Antwort
Ma kucken,ob ich das umsetzen kann