WinFuture-Forum.de: C-programmierung - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

C-programmierung


#1 Mitglied ist offline   Triale 

  • Gruppe: aktive Mitglieder
  • Beiträge: 132
  • Beigetreten: 13. September 05
  • Reputation: 0

geschrieben 30. Januar 2009 - 02:13

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 :smokin:

Gruß
Triale
0

Anzeige



#2 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.947
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 30. Januar 2009 - 07:34

Wäre nett, wenn du einfach die konkrete Aufgabe posten würdest. :smokin:

Es finden sich immer welche, die dir helfen können.
0

#3 Mitglied ist offline   Triale 

  • Gruppe: aktive Mitglieder
  • Beiträge: 132
  • Beigetreten: 13. September 05
  • Reputation: 0

geschrieben 30. Januar 2009 - 13:12

Es ging nur darum das dies eine Zulassungsaufgabe ist und ich die eigtl nicht öffentlich posten wollte.. deswegen :smokin:

Gruß Triale
0

#4 Mitglied ist offline   Triale 

  • Gruppe: aktive Mitglieder
  • Beiträge: 132
  • Beigetreten: 13. September 05
  • Reputation: 0

geschrieben 30. Januar 2009 - 16:23

Beitrag anzeigenZitat (Triale: 30.01.2009, 14:12)

Es ging nur darum das dies eine Zulassungsaufgabe ist und ich die eigtl nicht öffentlich posten wollte.. deswegen :smokin:.. wäre nett wenn mir wie schon gesagt mal einer helfen könnte ;D

Gruß Triale

0

#5 Mitglied ist offline   Triale 

  • Gruppe: aktive Mitglieder
  • Beiträge: 132
  • Beigetreten: 13. September 05
  • Reputation: 0

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 :smokin:

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

0

#6 Mitglied ist offline   Mr. Floppy 

  • Gruppe: VIP Mitglieder
  • Beiträge: 4.126
  • Beigetreten: 01. Juli 08
  • Reputation: 271
  • Geschlecht:Männlich

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 :rofl:

#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 :rofl:

Dieser Beitrag wurde von Mr. Floppy bearbeitet: 30. Januar 2009 - 18:41

0

#7 Mitglied ist offline   Triale 

  • Gruppe: aktive Mitglieder
  • Beiträge: 132
  • Beigetreten: 13. September 05
  • Reputation: 0

geschrieben 30. Januar 2009 - 20:00

danke schonmal :rofl:.. muss mir den code erstmal nochmal genauer angucken
0

#8 Mitglied ist offline   hanussen 

  • Gruppe: aktive Mitglieder
  • Beiträge: 103
  • Beigetreten: 02. November 08
  • Reputation: 0

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.

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;
}

Dieser Beitrag wurde von hanussen bearbeitet: 31. Januar 2009 - 19:06

There is method to my madness.
0

#9 Mitglied ist offline   Triale 

  • Gruppe: aktive Mitglieder
  • Beiträge: 132
  • Beigetreten: 13. September 05
  • Reputation: 0

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
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0