- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 7 von 7

Thema: Zufallsgenerator mit c-control basic

  1. #1

    Zufallsgenerator mit c-control basic

    Anzeige

    Powerstation Test
    Kann mir jemand den Quellcode eines Zufallsgenerators in cc-basic (c-control m-unit 2) geben? Er soll einen von acht Ausgängen auf Tastendruck auswählen. Danke!

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Zum Thema Zufall gab's vor kurzem nen Thread, vielleicht hilft dir das weiter:
    https://www.roboternetz.de/phpBB2/ze...ht=zufallszahl

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    05.05.2005
    Ort
    ZH-Winterthur
    Beiträge
    99
    In CC-Basic giebt es den Befel "rand" z.B. "x = rand"

  4. #4
    Mein Problem ist Folgendes:

    Der Befehl RAND gibt einen zufälligen Wert zwischen -32768 bis +32767 aus.
    Für 8 Ausgäng teilte ich diesen Bereich durch 8 und wies jedem Ausgang 1/8 zu. Wenn ich das Programm starte aktiviert sich jedoch bei jedem Durchgang standardmäßig Ausgang 6.
    Sein Bereich liegt zwischen 8191 und 16383.
    Wenn ich einen anderen Ausgang mit diesem Bereich definiere, so ist dieser andere Ausgang standardmäßig an.


    (Ich beginne den Zufallsgenerator wiefolgt:

    randomize x
    y = RAND

    x und y sind als WORD definiert.)


    Kennt einer den Grund für dieses Verhalten?

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.08.2005
    Ort
    Giessen
    Alter
    47
    Beiträge
    105
    Die Zufallszahlen aus der rand- Funktion sind keine wirklichen Zufallszahlen, eher Pseudo-Zufallszahlen. Sie wiederholen sich bei jeder Neustart der Funktion, da sie im System hinterlegt sind. Besser ist es, die rand- Funktion mit etwas veränderlichem zu verbinden, wie z.B. mit der Systemzeit.Unten ist so eine Verknüpfung zu sehen, die ich gerne benutze.
    Das ist eine etwas ausführliche Lösung, es geht natürlich auch wesentlich kompakter. Bei diesem Programm geht es eher um d. Verstehen auch für nicht C- Leute
    Bei jeder Funktionsaufruf wird srand mit der Systemzeit initialisiert, d.h. es kommen jedesmal andere Werte raus. Die Variable Zufallsgrenze gibt den grösstmöglichen Zufallswert wieder. Null kann nicht Vorkommen, wenn doch gewünscht, einfach in der Funktion Zufall_f ändern.

    Ich habe hier auf der Arbeit leider kein Visual C++, aber es müsste laufen ))


    # include <stdio.h>
    # include <stdlib.h>
    # include <time.h>

    int Zufall_f (int Zufallsgrenze);

    int Zufallsgrenze=8;
    int Zufallszahl=0;

    void main (void)
    {
    srand ((unsigned)time(NULL));
    Zufallszahl = Zufall_f (Zufallsgrenze);
    printf(„Zufallszahl: \t\t %i \n\n“, Zufallszahl);
    }


    int Zufall_f (int Zufallsgrenze)
    {
    int Grenze,Pruef=1,c, Zahl=0;

    Grenze = Zufallsgrenze+1;
    for (c=0;Pruef==1;c++)
    {
    Zahl = rand ()%Grenze;
    if (Zahl==0)
    Pruef=1;
    else
    Pruef=2;
    }

    return Zahl;
    }


    Bei Fragen einfach mailen per PN ))

    Schöne Grüße:
    Z

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    05.05.2005
    Ort
    ZH-Winterthur
    Beiträge
    99
    Ist nicht die schönste lösung aber man kann damit 8 Ports zufällig schalten.
    Code:
    define a port[1]
    define b port[2]
    define c port[3]
    define d port[4]
    define e port[5]
    define f port[6]
    define g port[7]
    define h port[8]
    define x word
    define y word
    
    randomize x
    
    y=rand
    if y>0 then y=0
    a=y
    
    y=rand
    if y>0 then y=0
    b=y
    
    y=rand
    if y>0 then y=0
    c=y
    
    y=rand
    if y>0 then y=0
    d=y
    
    y=rand
    if y>0 then y=0
    e=y
    
    y=rand
    if y>0 then y=0
    f=y
    
    y=rand
    if y>0 then y=0
    g=y
    
    y=rand
    if y>0 then y=0
    h=y
    
    end

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.08.2005
    Ort
    Giessen
    Alter
    47
    Beiträge
    105
    Noch eine Möglichkeit:

    Einen Zeiger Deklarieren, nicht initialisieren (es zeigt zufällig irgendwohin im Speicher) und dann auslesen. Müsste eigentlich auch einen Zufallswert ergeben. Beim Debuggen habe ich zumindest öfters diesen Fall

    Gruss :

    Z

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress