Hilfe



  • Hallo,

    Ich bin ein ziemlicher Anfänger in C. Allerdings muss ich kurzfristig dieses Programm verstehen. Es ist ein Programm, zur Lösung des "8-Damen-Problems". Bei diesem Problem müssen 8 Damen auf einem Schachbrett so aufgestellt werden, dass sie sich nicht gegenseitig schlagen können.
    Die Funktion print() ist klar. Es geht mir eigentlich hauptsächlich um die "if" Anweisung in der Funktion is_free(). Woher kommen ix und iy und was ist ihre Bedeutung und was verlangt die if-Bediengung?

    Ich hoffe jemand kann mir das möglichst in Leihenausdrucksweise näher bringen. Vielen Dank

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

    int x[8]; /* x[i] = x coordinate of queen in row i. */

    /* prints field */
    void print ()
    {
    int i,j;
    printf ("+----------------+\n");
    for (i=0; i<8; i++) {
    printf ("|");
    for (j=0; j<8; j++)
    if (j==x[i]) printf ("<>");
    else printf (" ");
    printf ("|\n");
    }
    printf ("+----------------+\n\n");
    }

    /* tests, whether (ix, iy) is beaten by queens 0...(iy-1) */
    int is_free (int ix, int iy)
    {
    int i;
    for (i=0; i<iy; i++)
    if ((x[i]==ix) || (abs(x[i]-ix)==abs(i-iy))) return 0;
    return 1;
    }

    /* tries to place queen n on row n */
    void try (int n)
    {
    int i;
    if (n==8) print();
    else
    for (i=0; i<8; i++)
    if (is_free(i,n)) {
    x[n]=i;
    try (n+1);
    }
    }

    int main ()
    {
    try (0);
    return 0;
    }



  • Formatiere den Code mit den [cpp]-Tags und verwende sinnvolle Thread-Titel.



  • if ((x[i]==ix) || (abs(x[i]-ix)==abs(i-iy)))
    return 0;

    WENN

    (x[i]==ix)
    Array x am index i = ix ist

    ODER

    (abs(x[i]-ix)==abs(i-iy))
    Der Betrag des werte welcher sich aus Array am Index i minus ix zusammen setzt gleich der Betrag aus i minus iy ist

    DANN

    ist bedingung erfllt



  • tut mir leid, den thread titel habe ich vergessen einzugeben.

    vielen dank schonmal für die Hilfe.

    soweit hab ich das auch verstanden.
    ich verstehe nur nicht, was das ix und das iy sind. Welche Werte haben ix und iy?

    Bitte helft mir.



  • ix und iy sind Parameter der Funktion is_free. Sie haben die Werte, die beim Aufruf der Funktion is_free in der Form is_free(..., ...) in den Klammern anstelle der Punkte standen.



  • Dann schau dir mal den Aufruf der Funktion is_free() in try()
    an:

    /* tries to place queen n on row n */
    void try (int n)
    {
        int i;
        if (n==8) print();
        else
            for (i=0; i<8; i++)
                if (is_free(i,n)) {
                    x[n]=i;
                    try (n+1);
                }
    }
    

    Gruß mcr



  • Aha.

    Ich glaub jetzt versteh´ ichs. Sonst schreib ich nochmal. Ist hier echt ein verdammt gutes Forum, Vielen Dank.



  • ich wollte in c++ ein programm schreiben das
    ein Kegelvolumen mit hilfe von höhe und radius berechnet
    nur stürzt es immer ab wnn es an die berechnung geht

    #include <iostream>
    using namespace std;

    int main()
    {
    float radius;
    float hoehe;
    cout<<"Bitte geben Sie den Radius ein: ";
    cin>>radius;
    cout<<"Bitte geben Sie die Höhe ein: ";
    cin>>hoehe;
    const float PI=3.14f;
    float grundflaeche=PI*radius*radius;
    float volumen=(grundflaeche*hoehe)/3;
    cout<<"Das Volumen betraegt: "<<volumen<<endl;

    };



  • warum soll's abstürzen? keine pointer, keine division durch 0, kein garnix...
    🙂



  • HAt sich erledigt habe
    int schluss
    und am ende
    return 0 eingesetzt jetzt gehts



  • habe vergessen da ich noch cin>>schluss eingesetzt habe am ende der rechnung


Anmelden zum Antworten