Galtonbrett - Habe ein kleines Problem ! (Ich bitte um schnelle A.)



  • Hallo!
    Ich bin neu hier und habe auch schon ein Problem... 😞
    Ich bin gerade dabei, in der Schule C++ programmieren zu lernen... 👍 (im Borland 6)
    Also lacht nicht, wenn ich es etwas "anders" geschrieben habe als ihr ;-).
    Kennt wer das Galton Prinzip mit dem Fächer, wo die Kugeln reinfallen? 😕
    Unser Lehrer gibt uns immer irgendwelche Aufgaben, wo er uns die Bedingungen etc. nicht erklärt... 😡
    Ich hoffe, ich habe dieses Programm auch richtig automatisiert...
    Das Problem ist, dass, wenn eine Kugel am Boden ankommt, die andere verschlingt. 😮
    Das heißt, sie bleibt nicht darauf liegen...
    Ich wäre euch wirklich sehr dankbar ⚠ , wenn ihr mir helfen könntet, denn unser Lehrer hilft uns auch nicht weiter...
    Am besten wäre es, glaube ich, wenn ihr es mit einer exe. Datei ausprobiert.
    Ich weiß, ich sags immer wieder, aber ich wäre euch sehr dankbar! ⚠
    DANKE IM VORAUS!
    Hier das Programm...

    //---------------------------------------------------------------------------
    
    #include <iostream.h>
    #include <conio.h>
    #include <stdio.h>
    #include <iomanip.h>
    #include <dos.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>
    #include <vcl.h>
    #pragma hdrstop
    #pragma argsused
    
    //------Variablendeklaration---------------------------------------------------
    
    int lr, x=40, y=1, speed, Row, Zahl;
    int Fach[70];
    void Naegel(int Col, int Row);
    void Kugeln(int x, int y);
    
    //---Unterprogramm--------------------------------------------------------------
    
    void Naegel(int Col, int Row)
    {
        for(int i=y; i<=Row; i++)
        {
            int x=Col-i-y;
            for (int k=y; k<=i; k++)
            {
                gotoxy(x+2*k,i+y);
                cout<<".";
            }
        }
    }
    
    void Kugeln(int x, int y)
    {
            gotoxy(x,y);
            cout<<"o";
            Sleep(speed);
            gotoxy(x,y);
            cout<<'\x20';
    
            for(int i=y; i<=Row; i++)
                {
                    lr=random(2);
    
                    if(lr==0)
                        {
                            gotoxy(x+1,y+1);
                            cout<<"o";
                            Sleep(speed);
                            gotoxy(x+1,y+1);
                            cout<<'\x20';
                            x++; y++;
                        }
    
                    if(lr==1)
                        {
                            gotoxy(x-1,y+1);
                            cout<<"o";
                            Sleep(speed);
                            gotoxy(x-1,y+1);
                            x--; y++;
                            cout<<'\x20';
                        }
                }
    
                for(int k=y; k<70; k++)
                {
                Fach[k]=23;
                }
    
                for(int i=y; i<=Fach[x]; i++)
                {
                    gotoxy(x,y+1);
                    cout<<"o";
                    Sleep(speed);
                    gotoxy(x,y+1);
                    cout<<'\x20';
                    y++;
                }
    
                Fach[x]++;
                gotoxy(x,Fach[x]);
                cout<<"o";
    }
    
    //-----------------------------------------------------------------------------
    
    int main(int argc, char **argv)
    {
        _setcursortype(_NOCURSOR);
    
        clrscr();
    
        do
        {
    
            gotoxy(1,1);
            cout<<"Reihen der Naegel (max. 15): ";
            cin>>Row;
    
            if(Row<1)
                {
                    gotoxy(14,12);
                    cout<<"Sie muessen mindestens eine Reihe im Plusbereich setzen!";
                    gotoxy(27,14);
                    cout<<"Das Programm wird beendet...";
                    sleep(4);
                    return 0;
                }
    
            if(Row>15)
                {
                    gotoxy(23,12);
                    cout<<"Sie haben zu viele Reihen verlangt!";
                    gotoxy(27,14);
                    cout<<"Das Programm wird beendet...";
                    sleep(4);
                    return 0;
                }
    
            gotoxy(1,3);
            cout<<"Anzahl der Kugeln (max. 50): ";
            cin>>Zahl;
    
            if(Zahl<0)
                {
                    gotoxy(20,12);
                    cout<<"Seit wann gibt es Kugeln im Minusbereich?";
                    gotoxy(27,14);
                    cout<<"Das Programm wird beendet...";
                    sleep(4);
                    return 0;
                }
    
            if(Zahl>50)
                {
                    gotoxy(23,12);
                    cout<<"Sie haben zu viele Kugeln verlangt!";
                    gotoxy(27,14);
                    cout<<"Das Programm wird beendet...";
                    sleep(4);
                    return 0;
                }
    
            gotoxy(1,5);
            cout<<"Geschwindigkeit in ms: ";
            cin>>speed;
    
            if(speed<1)
                {
                    gotoxy(21,12);
                    cout<<"Wie kann man die Zeit ins Minus zaehlen?";
                    gotoxy(27,14);
                    cout<<"Das Programm wird beendet...";
                    sleep(4);
                    return 0;
                }
    
            if(speed>1001)
                {
                    gotoxy(28,12);
                    cout<<"Das wuerde zu lange dauern!";
                    gotoxy(27,14);
                    cout<<"Das Programm wird beendet...";
                    sleep(4);
                    return 0;
                }
    
            randomize();
            Naegel(40,Row);
    
            for(int i=1;i<=Zahl;i++)
            {
                Kugeln(40,1);
            }
    
        gotoxy(2,24);
        cout<<"Beenden mit b.";
    
        }
        while(getch()!='b');
        return 0;
    }
    

    Mit freundlichen Grüßen:
    M A R I O



  • Das ist alles sehr vage, aber vllt meint dein Lehrer ja den Herrn hier mit seinem Galtonbrett.
    Ausschauen wie ein Fächer tut es schon 😉

    Grüße
    Franz



  • franz schrieb:

    Das ist alles sehr vage, aber vllt meint dein Lehrer ja den Herrn hier mit seinem Galtonbrett.
    Ausschauen wie ein Fächer tut es schon 😉

    Genau das meint er!



  • Hallo Mario,

    In den Zeilen 70-73 initialisierst Du die Fächer immer wieder auf's Neue. Dieser Code-Teil gehört in die main-Loop z.B. bei Zeile 100.

    Innerhalb der Funktion 'Kugeln' räumt die jeweils letzte Kugel die andere, die schon da steht, immer wieder ab. Außerdem musst Du den Fach-Zähler dekrementieren statt inkrementieren, da Fach[] die Bildschirm-Position hält.

    Der Code ab Zeile 75 sollte so aussehen:

    // -- die Kugel lag zuletzt bei 'y'; es folgt der Fall bis in's Fach
        for( ++y; y < Fach[x]; ++y )
        {
            gotoxy(x,y);
            cout<<"o";
            Sleep(speed);
            gotoxy(x,y);
            cout<<'\x20';
        }
    
        gotoxy(x,Fach[x]);
        cout<<"o";
        --Fach[x]; // Fach zeigt auf FREIE Stelle und wächst nach oben also in NEGATIVE y-Richtung
    

    Gruß
    Werner

    Tipps:
    1.) benutze lokale Variablen
    2.) sei Dir immer darüber im Klaren, was die Bedeutung des Wertes einer Variable ist.



  • guck dir dringend mal diene Includes an ... die Header in der Form entsprechen nicht dem Std ...



  • Werner Salomon schrieb:

    Hallo Mario,

    In den Zeilen 70-73 initialisierst Du die Fächer immer wieder auf's Neue. Dieser Code-Teil gehört in die main-Loop z.B. bei Zeile 100.

    Innerhalb der Funktion 'Kugeln' räumt die jeweils letzte Kugel die andere, die schon da steht, immer wieder ab. Außerdem musst Du den Fach-Zähler dekrementieren statt inkrementieren, da Fach[] die Bildschirm-Position hält.

    Der Code ab Zeile 75 sollte so aussehen:

    // -- die Kugel lag zuletzt bei 'y'; es folgt der Fall bis in's Fach
        for( ++y; y < Fach[x]; ++y )
        {
            gotoxy(x,y);
            cout<<"o";
            Sleep(speed);
            gotoxy(x,y);
            cout<<'\x20';
        }
    
        gotoxy(x,Fach[x]);
        cout<<"o";
        --Fach[x]; // Fach zeigt auf FREIE Stelle und wächst nach oben also in NEGATIVE y-Richtung
    

    Gruß
    Werner

    Tipps:
    1.) benutze lokale Variablen
    2.) sei Dir immer darüber im Klaren, was die Bedeutung des Wertes einer Variable ist.

    Ich danke dir Vielmals!



  • (D)Evil schrieb:

    guck dir dringend mal diene Includes an ... die Header in der Form entsprechen nicht dem Std ...

    Genau das hat uns unser Lehrer nicht erklärt!
    Er sagete einfach, dass wir uns die includes alle kopieren sollen (er hat ne Vorlage).
    Darum kenne ich mich mit diesen gar nicht aus...
    ich weiß nur, welche ich für was brauche...


Anmelden zum Antworten