PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie geht das ?


Gast
2005-11-05, 10:24:06
Hallo zusammen !

Ich bin C(++) Anfänger und habe grad folgenden Code im Visual Studio .NET 2003 getippt:

#include <stdio.h>
#include <math.h>

void main()
{
float m,q;
float a,b,c;

printf("Geben Sie einen Wert ein: ");
scanf("%f",&a);
printf("Geben Sie einen Wert ein: ");
scanf("%f",&b);
printf("Geben Sie einen Wert ein: ");
scanf("%f",&c);

m=(a+b+c)/3;
q=(pow(a, 2))+(pow(b, 2))+(pow(c, 2));

printf("--------------------------------------\n");

printf("Mittelwert: %f\n",m);
printf("Quadratsumme: %f\n",q);
}

Bis dahin klappt auch alles. Nun hab ich aber das Problem, dass ich zum Schluss (über der Mittelwert-Ausgabe) noch angeben muss, wie viele Werte ich oben eingegeben hab. Die Zahl 0 soll dabei dem Programm das Ende der Eingabe signalisieren. Wie ihr seht, hab ich oben die Werte a,b,c, also maximal drei Werte. Gebe ich z.b. beim dritten Wert eine 0 ein, dann muss mir die Ausgabe sagen, dass ich 2 Werte eingegeben hab.

Wie stell ich das am besten an ?

Gast
2005-11-05, 10:28:10
Ich sollte vieleicht noch anmerken, dass ich erst bei den for-Schleifen angekommen bin. Ihr solltet euren Lösungsvorschlag also bitte so einfach wie möglich machen :)

Monger
2005-11-05, 11:08:53
Ich würde an deiner Stelle nicht erst zum Ende Mittelwert und Quadratsumme berechnen, sondern immer zwischendrin.

Also z.B.


int anzahlErgebnisse = 0;
int mittelwert = 0;
int quadratsumme = 0;

if(a != 0){
anzahlErgebnisse++;
mittelwert += a;
quadratsumme += pow(a, 2);
}

// für b und c ebenso

mittelwert /= anzahlErgebnisse;


Natürlich kann man es noch cleverer und schöner machen, aber ich denke du weißt was ich meine.

Gast
2005-11-05, 11:32:04
Also so funktioniert es auf jeden Fall, danke dir !
Nun hab ich aber das Problem, dass ich die "if-Funktion" noch gar nicht kann, d.h. ich hätte von selber nie darauf kommen können.
Geht es vieleicht nicht doch irgendwie auf dem Niveau, mit dem ich angefangen hab und auf dem ich mich befinde ?

Gast
2005-11-05, 11:42:37
Ich versuche aber trotzdem deinen Code zu verstehen, mit den != usw. bin ich auch noch nicht wirklich vertraut:

int anzahlErgebnisse = 0;
int mittelwert = 0;
int quadratsumme = 0;

if(a != 0) <-- steht doch für "wenn a nicht gleich 0" ?
{
anzahlErgebnisse++; <-- wird das Ergebnis um 1 erhöht ?
mittelwert += a; <-- Mittelwert 0 + 1 = a ?
quadratsumme += pow(a, 2); <-- wie bei mittelwer
}

mittelwert /= anzahlErgebnisse; <-- hab da grad nen Hänger :D

Ist das so korrekt ?

bulla
2005-11-05, 12:45:27
Programmierer sind faul! Lern das am besten noch vor den while-Schleifen :D

+=, -=, /= usw. sind Abkürzungen für z.b.
a /= b <=> a = a/b; a += b <=> a = a+b usw.
Das sind auch beliebte Klausurfragen ;)
Der Rest ist korrekt

Marscel
2005-11-05, 12:51:02
if(a != 0) <-- steht doch für "wenn a nicht gleich 0" ?

Richtig.

anzahlErgebnisse++; <-- wird das Ergebnis um 1 erhöht ?

Ja, der Wert wird inkrementiert.

mittelwert += a; <-- Mittelwert 0 + 1 = a ?

mittelwert = mittelwert + a;

quadratsumme += pow(a, 2); <-- wie bei mittelwer

Ja.

mittelwert /= anzahlErgebnisse; <-- hab da grad nen Hänger :D

mittelwert = mittelwert / anzahlErgebnisse;

Senior Sanchez
2005-11-07, 10:42:40
Ich würde an deiner Stelle nicht erst zum Ende Mittelwert und Quadratsumme berechnen, sondern immer zwischendrin.

Also z.B.


int anzahlErgebnisse = 0;
int mittelwert = 0;
int quadratsumme = 0;

if(a != 0){
anzahlErgebnisse++;
mittelwert += a;
quadratsumme += pow(a, 2);
}

// für b und c ebenso

mittelwert /= anzahlErgebnisse;


Natürlich kann man es noch cleverer und schöner machen, aber ich denke du weißt was ich meine.


Wenn man es aber mal aus mathematischer Sicht betrachtet, ist das nicht ganz sauber. Denn durch sowas können Rundungsfehler entstehen, was vllt für diesen Fall nicht wichtig ist, aber doch gesagt werden sollte ;)