ich bin auf der verzweifelnden Suche nach einer Lösung für mein Problem auf dieses Forum gestoßen und hoffe nun, hier ein wenig Hilfe,Ratschläge,Tipps oder Lösungen zu finden.
Kurz zu meiner Person:
Ich bin so gesehen ein absoluter Neuling auf dem Gebiet des Programmierens, was heißen soll, dass ich ein Student (Elektrotechnik) im zweiten Semester bin. Ich habe vorher noch nie etwas mit proggen zu tun gehabt und tue mich bei manchen Sachen oder Aufgaben somit sehr schwer, obwohl mir das Proggen Spass macht, wenn es klappt

So nun zu meinem Problem. Wir haben als Semesteraufgabe, die Aufgabe bekommen, dass wir ein Programm schreiben sollen, was den Benutzer eine beliebig gewählte Anzahl von Werten eingeben lässt und diese auswertet. Die Auswertung beinhalten, dass von den eingegebenen Werten das Minimum, Maximum, Mittelwert, Streuung Standardabweichung, Spannweite und der Modalwert ermittelt wird.
Das Problem was ich habe, ist dass ich es nicht hin bekomme den Modalwert anständig zu programmieren. Der Rest läuft eigentlich soweit. Nun hoffe ich, hier Hilfe zu finden, bei der Lösung meines Problems. Damit Ihr eine Ahnung habt, was ich meine, habe ich hier den Quellcode mal eingefügt.
Das Problem tritt ab Zeile:
for(index6=0;index6<dimension;index6++) // Modalwert
auf.
Ich hoffe mir kann jemand helfen. Vielen Dank schonmal im Voraus!
Quellcode:
Code: Alles auswählen
# include <stdio.h>
# include <stdlib.h>
# include <math.h>
# include <ctype.h>
# include <string.h>
void eingabe(float*,int);
float get_statistikwerte(float*,int,float*);
void ausgabe(float*);
int main (void)
{
float* feld;
float ergebnis[5];
int wiederholen=0;
do
{
int dimension=0;
char groeße[80];
int laenge;
int index;
int fehler;
int prüfen;
do
{
fehler=0;
prüfen=0;
printf("Bitte geben Sie die Anzahl der zu berechnenden Werte an!\n");
scanf("%s",groeße);
fflush(stdin);
laenge=strlen(groeße);
for(index=0;index<laenge;index++)
{
prüfen=isdigit(groeße[index]);
if(prüfen==0)
{
fehler++;
}
}
if(fehler!=0)
{
printf("Bei der Eingabe ist Ihnen ein Fehler unterlaufen!\n\nBitte wiederholen Sie Ihre Eingabe.\n");
}
else
{
dimension=atoi(groeße);
}
}
while(fehler!=0);
feld=(float*)malloc((int)dimension*sizeof(float));
if(feld==NULL)
{
printf("Der Speicherplatz konnte nicht reserviert werden\n");
}
else
{
printf("____________________________________________________\n");
eingabe(feld,dimension);
get_statistikwerte(feld,dimension,ergebnis);
ausgabe(ergebnis);
}
printf("Moechten Sie eine weitere Berechnung durchfuehren?\n\nDruecken Sie 1 fuer Ja oder 2 fuer Nein\n");
scanf("%i",&wiederholen);
fflush(stdin);
}
while(wiederholen==1);
printf("Das Programm wird beendet.\n");
getchar();
return(1);
}
void eingabe(float *werte,int dimension1)
{
int fehler2;
int index2;
int index3;
int index4;
int prüfen2;
char eingaben[80];
int laenge2;
double werte_zwischen;
for(index2=0;index2<dimension1;index2++)
{
do
{
fehler2=0;
prüfen2=0;
printf("Bitte geben Sie die Werte fuer die Rechnung %i ein\n",index2+1);
scanf("%s",eingaben);
fflush(stdin);
laenge2=strlen(eingaben);
for(index3=0;index3<laenge2;index3++)
{
prüfen2=isdigit(eingaben[index3]);
if(prüfen2==0)
{
fehler2++;
}
}
for(index3=1;index3<laenge2;index3++)
{
if(eingaben[index3]=='.')
{
fehler2--;
}
}
if(eingaben[0]=='-')
{
fehler2--;
}
if(fehler2!=0)
{
printf("Bei der Eingabe ist Ihnen ein Fehler unterlaufen!\n\nBitte wiederholen Sie Ihre Eingabe.\n"); // Ausgabe Befehl, bei auftreten eines Eingabe Fehlers
}
}
while(fehler2!=0);
werte_zwischen=atof(eingaben);
werte[index2]=(float)werte_zwischen;
}
printf("\nAlle Werte wurden eingelesen. Berechnung wird gestartet:\n\n");
printf("____________________________________________________________\n");
}
float get_statistikwerte(float *werte,int dimension,float *ergebnis)
{
int index5;
int index6;
float zwischen1=0;
float zwischen2=0;
float zwischen3=0;
ergebnis[0]=werte[0];
ergebnis[1]=werte[0];
for(index5=0;index5<dimension;index5++)
{
if(werte[index5]<ergebnis[0])
{
ergebnis[0]=werte[index5];
}
if(werte[index5]>ergebnis[1])
{
ergebnis[1]=werte[index5];
}
}
for(index6=0;index6<dimension;index6++)
{
zwischen1=werte[index6]+zwischen1;
}
ergebnis[2]=zwischen1/dimension;
for(index6=0;index6<dimension;index6++)
{
zwischen2=((werte[index6]-ergebnis[2])*(werte[index6]-ergebnis[2]))+zwischen2;
}
ergebnis[3]= zwischen2/(dimension-1);
ergebnis[4]=sqrt(ergebnis[3]);
/*for(index6=0;index6<dimension;index6++) // Modalwert
{
void sortierfeld(int groesse,int*feld)
{
int index;
int j;
int temp;
for(index=0;index<groesse;index++)
{
for(j=0;j<groesse-index;j++)
{
if(feld[j]>feld[j+1])
{
temp=feld[j];
feld[j]=feld[j+1];
feld[j+1]=temp;
}
}
}
}
void modalwert(int groesse,int*feld,feld*ergebnis)
{
int index;
int j=0;
int zaehler=0;
int min=0;
int max=0;
int position=0;
int abbrechen=0;
int hfeld[10]={0};
int hfeldcpy[10]={0};
for (index=0;index<groesse;index++)
{
if(feld[index]==feld[index+1])zaehler++;
if(feld[index]!=feld[index+1])
{
hfeld[j]=zaehler+1;
j++;
zaehler=0;
}
}
for(index=0;index<10;index++)
{
hfeldcpy[index]=hfeld[index];
}
for(index=0;index<10;index++)
{
if(hfeld[index]<min)min=hfeld[index];
if(hfeld[index]>max)max=hfeld[index];
}
index=0;
do
{
position=position+hfeldcpy[index];
if(hfeldcpy[index]==max)
{
abbrechen=1;
}
index++;
}
while(abbrechen==0);
}
ergebnis[5]=(float)feld[position-1];
}*/
for(index6=0;index6<dimension;index6++)
{
zwischen2=werte[index5]+zwischen1;
}
ergebnis[7]=ergebnis[1]-ergebnis[0];
return(1);
}
void ausgabe(float *lösung)
{
printf("Das Minimum der eingegebenen Werte betraegt: %f\n\n",lösung[0]);
printf("Das Maximum der eingegebenen Werte betraegt: %f\n\n",lösung[1]);
printf("Der Mittelwert der eingegebenen Werte betraegt %f\n\n",lösung[2]);
printf("Die Streuung ist: %f\n\n",lösung[3]);
printf("Die Standartabweichung der eingegebenen Werte betraegt: %f\n\n",lösung[4]);
printf("Der Modalwert der eingegebenen Werte ist: %f\n\n",lösung[5]);
printf("Dieser Wert kam insgesamt %fmal vor\n\n",lösung[6]);
printf("Die Spannweite der eingegebenen Werte beträgt: %f\n\n",lösung[7]);
}