ERLEDIGT
NEIN
NEIN
ANTWORTEN
10
10
ZUGRIFFE
842
842
EMPFEHLEN
-
Liebe Programmierfreunde,
ich habe ein Problem und zwar weiß ich nicht genau wie ich den Zufallsgenerator mit dem Wertebereich hinbekomme.
Die Aufgabe lautet wie folgt:
Durch einen Zufallsgenerator wird ein Array mit jeweils 13 Zahlen gefüllt, dies geschieht in der Funktion füllen().
Der Zahlenbereich geht von 3 bis 40. In der 2. Funktion mittel() wird der Mittelwert der Werte gebildet.
In der 3. Funktion ausgabe() werden die Werte aus dem Array ausgegeben, die kleiner als der Mittelwert sind.
Am Ende eine Wiederholungsabfrage einbauen.
Vorgegeben:
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
void fuellen()
{a[i]=100+rand()%(1+400-100)}
void main()
{srand((unsigned) time(NULL));}
Ich hoffe ihr könnt mir schnell helfen .... danke schon mal
-
Code cpp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
#include<stdio.h> #include<conio.h> #include <time.h> #include <windows.h> void fuellen(int *a) { for(int i=0;i<13;i++) a[i]=rand()%37+3; } double mittel(int *a) { double d=0; for(int i=0;i<13;i++) d+=a[i]; return(d/13.0); } void ausgabe(int *a,double mittel) { for(int i=0;i<13;i++) { if(a[i]<mittel) printf("%d ",a[i]); } } int main() { srand(time(0)); int a[13]; while(1) { fuellen(a); ausgabe(a,mittel(a)); printf("\nWiederholen? (j/n)\n"); do { a[0]=_getch(); }while(a[0]!='j'&&a[0]!='n'&&a[0]!='J'&&a[0]!='N'); if(a[0]!='j'&&a[0]!='J')break; } return 0; }
Geändert von sheel (10.06.10 um 22:07 Uhr)
-
danke , aber wie macht man das mit cout statt printf und die wiederholung mithilfe einer do-while-schleife und char antw ?
Bei mir kommt nämlich immer ein Initialisierungsfehler bei 'antw' ... hab das so
Deklaration
char antw;
do{
}while(antw=='J'||antw=='j');
und man kann doch einfach den Variablentyp in float ändern oder?
wollte dich noch darauf aufmerksam machen das der Zahlenbereich nur von 3 bis 40 gehen soll, deshalb ja auch anf=3 und ende=40 ...wäre schön wenn du mir zeigen könntest wie man das einbindet.Geändert von Redneet (10.06.10 um 21:26 Uhr)
-
Die Generierung eines wirklichen Pseudozufallswertes (ja, das klingt merkwürdig) hast du mit % gekillt. Man macht das in der Regel so:
Code cpp:1 2
float proj = ((float)rand() / RAND_MAX); int value = (int)(proj * (max - min) + min);
Also bsp: int value = (int)(proj * 37 + 3);
-
wir haben das aber nur mithilfe dieser Befehle gelernt:
for(i=0;i<anzahl;i++)
{a[i]=100+rand()%(1+400-100)}
oder so ähnlich ... versteh diesen befehl nicht wirklich, aber ich glaube 400 soll ende sein (also der Endwert ..in diesem Fall ende=40) und 100 der Wert für anf (also anf=3)
{a[i]=anf+rand()%(ende-anf+1)} oder so ... vielleicht kannst du mir helfen...wir arbeiten mit dem Buch C++ Programmierung lernen von André Willms Addison-Wesley
-
Ausserdem solltest du dir eine gewisse Basisformatierung angewöhnen:this modulo operation does not generate a truly uniformly distributed random number in the span (since in most cases lower numbers are slightly more likely)
Code cpp:1 2 3 4
for(i = 0; i < anzahl; ++i) { a[i] = ZUFALLSZAHL; }
-
ok , aber weißt du vielleicht wie ich das so hinbekomme, wie mein Prof das verlangt mit dem Befehl den ich gerade gepostet habe?
-
Wie man eine Zufallszahl generiert siehst du ja oben. Und woran scheitert bei dir die Umsetzung der Berechnung des Mittelwerts?
-
Ich habe es jetzt so , aber die Zahlen, die in die Arrays geschrieben werden sollen und der Mittelwert der ganzen Zahlen noch angezeigt werden und dann erst die zahlen, die kleiner sind als der Mittelwert.
PHP-Code:#include <iostream>
#include <stdio.h>
#include <time.h>
using namespace std;
void fuellen(int *a)
{
for(int i=0;i<13;i++)
a[i]=3+rand()%(40-3);
}
double mittel(int *a)
{
double d=0;
for(int i=0;i<13;i++)
d+=a[i];
return(d/13.0);
}
void ausgabe(int *a,double mittel)
{
for(int i=0;i<13;i++)
{
if(a[i]<mittel)
cout<<" "<<a[i];//"%d "
}
}
int main()
{
srand((unsigned) time(NULL));
int a[13];
char antw;
do{
fuellen(a);
ausgabe(a,mittel(a));
cout<<"\nWollen Sie das Programm wiederholen? (j/n)\n";
cin>>antw;
if(antw=='N'||antw=='n')
{cout<<"\nENTER\n";}
}while(antw=='J'||antw=='j');
}
-
Fragen:
- Warum bindest du iostream und stdio.h ein? iostream ist der Nachfolger von stdio.
- Warum weigerst du dich einen korrekten Algorithmus zur Zufallsgenerierung zu verwenden?
- Wo ist jetzt genau dein Problem?
-
wir haben das so von unserem prof gelernt und das mit stdio.h habe ich nur vergessen herauszunehmen..das hat sheel vorhin verwendet...
Ähnliche Themen
-
Zufallsgenerator (Lottozahlen) Doppelte Zahlen vermeiden
Von dwex im Forum PHPAntworten: 8Letzter Beitrag: 10.09.08, 07:18 -
Zufallsgenerator und Array
Von Pantalaimon im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 25.03.08, 00:18 -
Zufallsgenerator ohne best. Zahlen
Von Geordi im Forum PHPAntworten: 6Letzter Beitrag: 24.11.07, 11:04 -
Zahlen durch Leerzeichen trennen
Von pglw im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 22.09.05, 12:11 -
Zufallsgenerator, der Links anstatt Zahlen auswirft
Von Alex84 im Forum C/C++Antworten: 11Letzter Beitrag: 23.05.02, 22:56





Zitieren

Login






