Tag Leute,
kennt sich jemand von euch relativ gut in C aus? Haben hier ne Aufgabe aber komm nicht so recht klar damit.. ein Teil davon war vorher die Feldberechnung aber irgendwie haut das alles nicht hin.. wäre nett wenn sich vll jemand bereit erklären könnte mir ein bisschen zu helfen
Gruß
Triale
Seite 1 von 1
C-programmierung
Anzeige
#2
geschrieben 30. Januar 2009 - 07:34
Wäre nett, wenn du einfach die konkrete Aufgabe posten würdest.
Es finden sich immer welche, die dir helfen können.
Es finden sich immer welche, die dir helfen können.
#3
geschrieben 30. Januar 2009 - 13:12
Es ging nur darum das dies eine Zulassungsaufgabe ist und ich die eigtl nicht öffentlich posten wollte.. deswegen
Gruß Triale
Gruß Triale
#4
geschrieben 30. Januar 2009 - 16:23
#5
geschrieben 30. Januar 2009 - 16:53
also dann mal zu meinem hauptproblem.. berechnung eines gleitenden mittelwertes in einer eigenen Funktion: es soll ein double feld mit max 20 werten erstellt werden das solange gefüllt wird bis mein index gleich der Ordnung o ist... danach soll der älteste wert aus dem feld heraus und der neuste von links rein.. quasi der älteste wert wird überschrieben. anz Aufrufe ist anfangs 0 und ist sozusagen ein wegweiser in welche schleife er gehen soll. k ist mein index, den ich bei (k+1)%o zurücksetze.. aber irgenwie funktioniert das ganze nicht so irgendwas passt da nicht... wäre schön wenn mir jemand helfen könnte
edit:
der wert newValNew ist ein Zufallswert und wird von einer anderen Funktion geliefert
static double values[20] = {0}, summe=0;
double gmwO=0;
static int anzAufrufe=0, k=0;
if (k < o && anzAufrufe == 0) {
values[k] = newValNew;
summe = summe + values[k];
k++;
return newValNew;
}
if (k==o && anzAufrufe==0) {
summe = summe;
gmwO = (summe / o);
anzAufrufe = 1;
return gmwO;
}
k=0;
if ((k+1) % o == 0) {
k = 0;
}
else {
summe = summe - values[k] + newValNew;
values[k] = newValNew;
gmwO = (summe / o);
}
k++;
return gmwO;
edit:
der wert newValNew ist ein Zufallswert und wird von einer anderen Funktion geliefert
static double values[20] = {0}, summe=0;
double gmwO=0;
static int anzAufrufe=0, k=0;
if (k < o && anzAufrufe == 0) {
values[k] = newValNew;
summe = summe + values[k];
k++;
return newValNew;
}
if (k==o && anzAufrufe==0) {
summe = summe;
gmwO = (summe / o);
anzAufrufe = 1;
return gmwO;
}
k=0;
if ((k+1) % o == 0) {
k = 0;
}
else {
summe = summe - values[k] + newValNew;
values[k] = newValNew;
gmwO = (summe / o);
}
k++;
return gmwO;
Dieser Beitrag wurde von Triale bearbeitet: 30. Januar 2009 - 16:55
#6
geschrieben 30. Januar 2009 - 18:35
Da Du Dir offensichtlich Gedanken gemacht hast, poste ich mal meine Lösung. Bei Dir sehe ich nicht ganz durch
Der Code errechnet den Mittelwert aus den letzten 20 Werten, sobald mindestens 20 Werte vorhanden sind. Ist nicht optimal, aber scheint zu funktionieren. Für Deine Abgabe mußt Du sicher noch einiges anpassen, aber das Prinzip sollte klar sein.
Zur Erklärung:
x += y entspricht x = x + y
x /= y entspricht x = x / y
Der Rest sollte klar sein
#include <stdio.h> int main(int argc, char** argv) { int i, j; const int k = 20; double values[k], mean; // array initialisieren!!! for(i = 0; i < k; i++) values[i] = 0.0; for(i = 0; i < 100; i++) { // Index ermitteln (i mod k) und Phantasiewert zuweisen, hier einfach i values[i%k] = (double)i; // wenn array gefüllt ... Achtung: Bedingung nicht unbedingt übertragbar => lieber mitzählen if(i >= (k-1)) { // aufsummieren; geht auch eleganter, wenn man sich merkt was ersetzt wird mean = 0.0; for(j = 0; j < k; j++) mean += values[j]; // Mittelwert berechnen mean /= (double)k; // Ausgabe printf("i = %d, mean = %.3f\n", i, mean); } } return 0; }
Der Code errechnet den Mittelwert aus den letzten 20 Werten, sobald mindestens 20 Werte vorhanden sind. Ist nicht optimal, aber scheint zu funktionieren. Für Deine Abgabe mußt Du sicher noch einiges anpassen, aber das Prinzip sollte klar sein.
Zur Erklärung:
x += y entspricht x = x + y
x /= y entspricht x = x / y
Der Rest sollte klar sein
Dieser Beitrag wurde von Mr. Floppy bearbeitet: 30. Januar 2009 - 18:41
#7
geschrieben 30. Januar 2009 - 20:00
danke schonmal .. muss mir den code erstmal nochmal genauer angucken
#8
geschrieben 31. Januar 2009 - 19:04
Ich habe zwar die Aufgabe nicht verstanden, aber mal folgendes hingehunzt, vielleicht hilft es ja:
ist zwar c++ könnte so ähnlich aber auch in c funktionieren.
ist zwar c++ könnte so ähnlich aber auch in c funktionieren.
CODE
#include "stdafx.h"
#include <iostream>
#include "stdlib.h"
int* ringbuffer;
int* pos;
const int size = 20;
int countValues;
void buffer_add(int zahl){
countValues++;
if (pos == (ringbuffer + size)){
pos = ringbuffer;
}else {
pos++;
}
*pos = zahl;
if (countValues >= 20){
int val = 0;
for (int i = 0; i < size; i++){
val += *(ringbuffer + i);
}
std::cout << "Neue Zahl: " << zahl << " -> AVG: " << (int) val / size << std::endl;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
// Array initialisieren
ringbuffer = new int[size];
for (int i = 0; i < size; i++){
*(ringbuffer + i) = 0;
}
pos = ringbuffer;
for (int i = 0; i<100; i++){
// Zufallszahl hinzufügen
buffer_add(1 + ( rand() % 100 ) );
}
return 0;
}
#include <iostream>
#include "stdlib.h"
int* ringbuffer;
int* pos;
const int size = 20;
int countValues;
void buffer_add(int zahl){
countValues++;
if (pos == (ringbuffer + size)){
pos = ringbuffer;
}else {
pos++;
}
*pos = zahl;
if (countValues >= 20){
int val = 0;
for (int i = 0; i < size; i++){
val += *(ringbuffer + i);
}
std::cout << "Neue Zahl: " << zahl << " -> AVG: " << (int) val / size << std::endl;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
// Array initialisieren
ringbuffer = new int[size];
for (int i = 0; i < size; i++){
*(ringbuffer + i) = 0;
}
pos = ringbuffer;
for (int i = 0; i<100; i++){
// Zufallszahl hinzufügen
buffer_add(1 + ( rand() % 100 ) );
}
return 0;
}
Dieser Beitrag wurde von hanussen bearbeitet: 31. Januar 2009 - 19:06
There is method to my madness.
#9
geschrieben 03. Februar 2009 - 17:23
danke für die antworten aber ich konnte meine Variante dahingehend ändern sodass es jetzt funktioniert ... danke trotzdem!
MfG
Triale
MfG
Triale
Thema verteilen:
Seite 1 von 1