Durch Zufallsgenerator Array mit 13 Zahlen und Wertebereich

Redneet

Grünschnabel
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:
Code:
#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 ;)
 
C++:
#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;
}
 
Zuletzt bearbeitet:
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.
 
Zuletzt bearbeitet:
Die Generierung eines wirklichen Pseudozufallswertes (ja, das klingt merkwürdig) hast du mit % gekillt. Man macht das in der Regel so:
C++:
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:
Code:
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)

Code:
{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
 
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)

Ausserdem solltest du dir eine gewisse Basisformatierung angewöhnen:
C++:
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:
#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?
 

Neue Beiträge

Zurück