netfuzzi Geschrieben 14. April 2011 Geschrieben 14. April 2011 Hallo alle miteinander. Habe da ein kleines Problem, und zwar habe ich von meinem Dozenten folgende Aufgabenstellung erhalten: Schreiben Sie bitte ein Programm, welches Ihnen 100 Zufallszahlen liefert. Anschließend sollen die Summe, der Mittelwert aller Zahlen berechnet werden. Auch sollen die kleinste und die Größte der Zufallszahlen ausgegeben werden. Hier nun mein Quellcode des Programmes: #include <stdio.h> #include <stdlib.h> #include <time.h> // Funktion für Minimum int minimum(int* feld, int length) { int min=feld[1]; for(int i=1; i<length; i++) { if (feld<min) { min=feld; } } return min; } // Funktion für Maximum int maximum(int* feld, int length) { int max=feld[0]; for(int i=1; i<length; i++) { if (feld>max) { max=feld; } } return max; } // Funktion für Summe int summe(int* feld, int length) { int sum=feld[1]; for(int i=1; i<length; i++) { if (feld<sum) { sum=sum+feld; } } return sum; } // Funktion für den Mittelwert float mittelwert(int* feld, int length) { float mit; mit=(float)summe(feld,length)/length; return mit; } // Ergebnisse ausgeben void anzeigen(int* feld, int length) { printf("Minimum: %d\n",minimum(feld,length)); printf("Maximum: %d\n",maximum(feld,length)); printf("Summe: %d\n",summe(feld,length)); printf("Mittelwert: %.2f\n",mittelwert(feld,length)); } void main(void) { const int anzahl=100; int feld[anzahl]; int random=0; srand ((unsigned)time(NULL)); // Array füllen for (int i=0; i<anzahl; i++) { feld=(rand()%anzahl)+1; } // Array ausgeben for(int i=0; i<anzahl; i++) { printf("%d\t3",feld); } printf("\n"); // Displayausgaben anzeigen(feld,anzahl); } Mein Problem ist, dass es mir zwar die 100 Zahlen liefert, aber nicht die korrekte summer aller, auch nicht die kleinste und nicht die größte der Zufallszahlen. 1000 Dank im vorraus. Zitieren
Hexagon Geschrieben 14. April 2011 Geschrieben 14. April 2011 1000 Dank im vorraus. Ich mag zwar gerne helfen, aber warum in Gottes Namen kann man nicht die [ code ] Tags benutzen? PS: Voraus... Zitieren
netfuzzi Geschrieben 14. April 2011 Autor Geschrieben 14. April 2011 #include <stdio.h> #include <stdlib.h> #include <time.h> // Funktion für Minimum int minimum(int* feld, int length) { int min=feld[1]; for(int i=1; i<length; i++) { if (feld[i]<min) { min=feld[i]; } } return min; } // Funktion für Maximum int maximum(int* feld, int length) { int max=feld[0]; for(int i=1; i<length; i++) { if (feld[i]>max) { max=feld[i]; } } return max; } // Funktion für Summe int summe(int* feld, int length) { int sum=feld[1]; for(int i=1; i<length; i++) { if (feld[i]<sum) { sum=sum+feld[i]; } } return sum; } // Funktion für den Mittelwert float mittelwert(int* feld, int length) { float mit; mit=(float)summe(feld,length)/length; return mit; } // Ergebnisse ausgeben void anzeigen(int* feld, int length) { printf("Minimum: %d\n",minimum(feld,length)); printf("Maximum: %d\n",maximum(feld,length)); printf("Summe: %d\n",summe(feld,length)); printf("Mittelwert: %.2f\n",mittelwert(feld,length)); } void main(void) { const int anzahl=100; int feld[anzahl]; int random=0; srand ((unsigned)time(NULL)); // Array füllen for (int i=0; i<anzahl; i++) { feld[i]=(rand()%anzahl)+1; } // Array ausgeben for(int i=0; i<anzahl; i++) { printf("%d\t3",feld[i]); } printf("\n"); // Displayausgaben anzeigen(feld,anzahl); } Zitieren
Hexagon Geschrieben 14. April 2011 Geschrieben 14. April 2011 (bearbeitet) Nicht viel besser, da einrückungen fehlen.... aber: void main(void) { const int anzahl=100; int feld[anzahl]; int random=0; srand ((unsigned)time(NULL)); // Array füllen for (int i=0; i<anzahl; i++) { feld[i]=(rand()%anzahl)+1; } // Array ausgeben for(int i=0; i<anzahl; i++) { printf("%d\t3",feld[i]); } printf("\n"); // Displayausgaben anzeigen(feld,anzahl); } Edit: Moment... Bearbeitet 14. April 2011 von Hexagon Zitieren
netfuzzi Geschrieben 14. April 2011 Autor Geschrieben 14. April 2011 (bearbeitet) #include <stdio.h> #include <stdlib.h> #include <time.h> // Funktion für Minimum int minimum(int* feld, int length) { int min=feld[1]; for(int i=1; i<length; i++) { if (feld[i]<min) { min=feld[i]; } } return min; } // Funktion für Maximum int maximum(int* feld, int length) { int max=feld[0]; for(int i=1; i<length; i++) { if (feld[i]>max) { max=feld[i]; } } return max; } // Funktion für Summe int summe(int* feld, int length) { int sum=feld[1]; for(int i=1; i<length; i++) { if (feld[i]<sum) { sum=sum+feld[i]; } } return sum; } // Funktion für den Mittelwert float mittelwert(int* feld, int length) { float mit; mit=(float)summe(feld,length)/length; return mit; } // Ergebnisse ausgeben void anzeigen(int* feld, int length) { printf("Minimum: %d\n",minimum(feld,length)); printf("Maximum: %d\n",maximum(feld,length)); printf("Summe: %d\n",summe(feld,length)); printf("Mittelwert: %.2f\n",mittelwert(feld,length)); } void main(void) { const int anzahl=100; int feld[anzahl]; int random=0; srand ((unsigned)time(NULL)); // Array füllen for (int i=0; i<anzahl; i++) { feld[i]=(rand()%anzahl)+1; } // Array ausgeben for(int i=0; i<anzahl; i++) { printf("%d\t3",feld[i]); } printf("\n"); // Displayausgaben anzeigen(feld,anzahl); } Frage, ich steh hier echt wie der Ochs vorm Berge, aber wie kann ich es machen, dass er alle Zahlen addiert, und mir später den entsprechenden Mittelwert zurück gibt? Auch die größte und Kleinste Zahl soll es ausgeben. Bin für jeden guten Tip dankbar. Und ich hoffe, das man nun den Code auch besser lesen kann. Bearbeitet 14. April 2011 von netfuzzi Zitieren
Hexagon Geschrieben 14. April 2011 Geschrieben 14. April 2011 int minimum(int* feld, int length) { int min=feld[1]; for(int i=1; i<length; i++) { if (feld[i]<min) { min=feld[i]; } } return min; } // Funktion für Maximum int maximum(int* feld, int length) { int max=feld[0]; for(int i=1; i<length; i++) { if (feld[i]>max) { max=feld[i]; } } return max; } // Funktion für Summe int summe(int* feld, int length) { int sum=feld[1]; for(int i=1; i<length; i++) { if (feld[i]<sum) { sum=sum+feld[i]; } } return sum; } Arrays beginnen mit dem 0-nthen Item und nicht mit 1 ;-) Zitieren
netfuzzi Geschrieben 14. April 2011 Autor Geschrieben 14. April 2011 Danke für den netten Hinweis, nun erhalte ich folgende Ausgabe: 26 385 336 381 395 325 365 352 390 314 345 356 378 399 313 347 335 336 329 399 376 345 357 370 362 33 345 363 375 351 318 381 350 315 315 388 398 334 386 350 333 388 344 376 311 322 320 322 391 315 394 317 317 355 359 338 377 32 350 353 315 361 358 316 312 360 363 337 380 311 319 331 391 383 338 316 389 392 351 398 377 341 396 379 325 313 364 333 336 387 364 376 360 340 312 335 379 373 318 348 3 Minimum: 26 Maximum: 99 Summe: 4645 Mittelwert: 46.45 Drücken Sie eine beliebige Taste . . . Zitieren
Hexagon Geschrieben 14. April 2011 Geschrieben 14. April 2011 Hm... stimmen denn nun die Ausgaben? Zitieren
netfuzzi Geschrieben 14. April 2011 Autor Geschrieben 14. April 2011 Nein, leider nicht. Er rechnet nicht alle 100 Zahlen zusammen, bildet demzufolge den falschen Mittelwert und mir fehlt leider immernoch die größte Zahl. Zitieren
Hexagon Geschrieben 14. April 2011 Geschrieben 14. April 2011 Nein, leider nicht. Er rechnet nicht alle 100 Zahlen zusammen, bildet demzufolge den falschen Mittelwert und mir fehlt leider immernoch die größte Zahl. Nochmal als nachfrage... Arrays beginnen mit dem 0-nthen Item und nicht mit 1 ;-) Zitieren
netfuzzi Geschrieben 14. April 2011 Autor Geschrieben 14. April 2011 Sry, aber ich habe alle auf 0 gesetzt, nun zeigt mir die ausgabe immer nur den wert der 1. stelle als kleinste Zahl an. Addiert immer noch nicht alle Zahlen des Arrays zusammen, und die größte Zahl ist die 99 Hier ein Screenshot der Ausgabe: 26 385 336 381 395 325 365 352 390 314 345 356 378 399 313 347 335 336 329 399 376 345 357 370 362 33 345 363 375 351 318 381 350 315 315 388 398 334 386 350 333 388 344 376 311 322 320 322 391 315 394 317 317 355 359 338 377 32 350 353 315 361 358 316 312 360 363 337 380 311 319 331 391 383 338 316 389 392 351 398 377 341 396 379 325 313 364 333 336 387 364 376 360 340 312 335 379 373 318 348 3 Minimum: 26 Maximum: 99 Summe: 4645 Mittelwert: 46.45 Drücken Sie eine beliebige Taste . . . Zitieren
Klotzkopp Geschrieben 14. April 2011 Geschrieben 14. April 2011 Abgesehen davon ist auch die Summenfunktion falsch. Was soll das if da? Zitieren
Hexagon Geschrieben 14. April 2011 Geschrieben 14. April 2011 Abgesehen davon ist auch die Summenfunktion falsch. Was soll das if da? Bingo! Soviel zu lesbaren code... Soll kein Vorwurf sein...:e@sy Zitieren
netfuzzi Geschrieben 14. April 2011 Autor Geschrieben 14. April 2011 Ich finde den Fehler nicht, habe das if schon entfernt, dennoch komme ich nicht weiter. Ich danke für die vielen Tipps. Habt Ihr noch einen Denkanstoß für mich? Ich stecke fest Zitieren
Hexagon Geschrieben 14. April 2011 Geschrieben 14. April 2011 Du magst doch alle Elemente des Feldes zusammenrechnen, oder? Zitieren
netfuzzi Geschrieben 15. April 2011 Autor Geschrieben 15. April 2011 ja,so sollte es sein. Alle 100 Zahlen sollen addiert werden. Die Berechnung des Mittelwertes passt. Nur es werden nicht alle Zahlen addiert. Zitieren
Klotzkopp Geschrieben 15. April 2011 Geschrieben 15. April 2011 Zeig doch mal, wie der Code jetzt aussieht. Zitieren
netfuzzi Geschrieben 15. April 2011 Autor Geschrieben 15. April 2011 Habe Ihn heut Morgen komplett neu geschrieben. #include <stdio.h> #include <stdlib.h> #include <time.h> int summe(int* feld,int laenge) { int s=0; for (int i=0;i<laenge;i++) s=s+feld[i]; return s; } float mittelwert(int* feld,int laenge) { float mw=0; mw=(float)summe(feld,laenge)/laenge; return mw; } int maximum(int* feld, int laenge) { int max=feld[0]; for (int i=1;i<laenge;i++) if (feld[i]>max) max=feld[i]; return max; } int minimum(int* feld, int laenge) { int min=feld[0]; for (int i=1;i<laenge;i++) if (feld[i]<min) min=feld[i]; return min; } void anzeigen(int* feld, int laenge, int sum, float mw, int max, int min) { printf("Die Erzeugten Zufallszahlen sind : \n\n\n"); for (int i=0;i<laenge;i++) printf("%d ",feld[i]); printf("\n\n\nDie Summe ist : %d\n",sum); printf("Der Mittelwert ist : %.2f\n",mw); printf("Maximum ist : %d\n",max); printf("Minimum ist : %d\n",min); printf("\n\n\n"); } void main (void) { const int anzahl=100; int zf[anzahl]; int sum=0,mw=0,max=0,min=0; srand((unsigned)time(NULL)); for (int i=0;i<anzahl;i++) zf[i]=rand()%100 + 1; sum=summe(zf,anzahl); mw=mittelwert(zf,anzahl); max=maximum(zf,anzahl); min=minimum(zf,anzahl); anzeigen(zf,anzahl,sum,mw,max,min); } Stand gestern echt auf der Leitung. Habe mir heut früh Gedanken gemacht, und siehe da, es funktioniert.:) Nochmals vielen Dank für Eure Mühen, aber es war gut, dass ich mir mal Gedanken gemacht habe. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.