tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
10
ZUGRIFFE
842
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Redneet Redneet ist offline Mitglied
    Registriert seit
    Apr 2010
    Beiträge
    13
    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
     

  2. #2
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.506
    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)
     

  3. #3
    Redneet Redneet ist offline Mitglied
    Registriert seit
    Apr 2010
    Beiträge
    13
    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)
     

  4. #4
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    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);
     

  5. #5
    Redneet Redneet ist offline Mitglied
    Registriert seit
    Apr 2010
    Beiträge
    13
    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
     

  6. #6
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    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:
    Code cpp:
    1
    2
    3
    4
    
    for(i = 0; i < anzahl; ++i)
    {
             a[i] = ZUFALLSZAHL;
    }
     

  7. #7
    Redneet Redneet ist offline Mitglied
    Registriert seit
    Apr 2010
    Beiträge
    13
    ok , aber weißt du vielleicht wie ich das so hinbekomme, wie mein Prof das verlangt mit dem Befehl den ich gerade gepostet habe?
     

  8. #8
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    Wie man eine Zufallszahl generiert siehst du ja oben. Und woran scheitert bei dir die Umsetzung der Berechnung des Mittelwerts?
     

  9. #9
    Redneet Redneet ist offline Mitglied
    Registriert seit
    Apr 2010
    Beiträge
    13
    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((unsignedtime(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');

     

  10. #10
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    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?
     

  11. #11
    Redneet Redneet ist offline Mitglied
    Registriert seit
    Apr 2010
    Beiträge
    13
    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

  1. Antworten: 8
    Letzter Beitrag: 10.09.08, 07:18
  2. Zufallsgenerator und Array
    Von Pantalaimon im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 25.03.08, 00:18
  3. Zufallsgenerator ohne best. Zahlen
    Von Geordi im Forum PHP
    Antworten: 6
    Letzter Beitrag: 24.11.07, 11:04
  4. Zahlen durch Leerzeichen trennen
    Von pglw im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 22.09.05, 12:11
  5. Antworten: 11
    Letzter Beitrag: 23.05.02, 22:56