+ Auf Thema antworten
Zeige Ergebnis 1 bis 8 von 8

Thema: C++ Algo Fehler

  1. #1
    Austria FTW! Benutzerbild von Pikes
    Registriert seit
    04.04.2007
    Ort
    Im Pälzerwald!!!!
    Beiträge
    10.298

    Standard C++ Algo Fehler

    Hey Com =),

    ich hätte eine kleine Frage an die User, die sich vllt mit C++ beschäftigen.
    Wir haben eine kleine Zusatzaufgabe bekommen, die wir doch bitte zu Hause alleine lösen sollen.

    "Dodon, der Märchenkönig, nahm bei seinem Feldzug 70 Feinde
    gefangen, die er in 70 Einzelzellen steckte. An seinem Geburtstag
    sollten einige freigelassen werden, und zwar nach einem ganz eigenartigen
    Verfahren (vom Hofmathematiker ausgedacht): Im einem
    ersten Durchgang werden alle Zellentüren geöffnet, in einem zweiten
    Durchgang wird jede zweite Tür wieder geschlossen. Im dritten
    Durchgang wird jede dritte Tür, wenn sie offenstand, geschlossen,
    und wenn sie geschlossen war, geöffnet. Und so geht es im vierten,
    fünften,... bis zum 70. Durchgang weiter. Die Frage ist, welche
    Türen schließlich offenstanden, als der Geburtstag des Königs
    anbrach."
    Hier der Code

    Code:
    //IT11b 
    //Datum 18. Dez. 2011
    
    #include <iostream>
    #include <cmath>
    #include <cstdlib>
    #include <conio.h>
    
    using namespace std;
    
    int main()
    
    {
    int z=2;
    bool Zelle[71];
    
    //1. Durchgang
    //Alle Zelltüren aufschließen
    cout<<"Durchlauf 1"<<endl;
    for(int i=0; i<71; i++)
    {
        Zelle[i] = true;
        cout<<"0";
    }
    cout<<endl;
    //Durchgänge
    for(int durchgang = 2; durchgang <= 71; durchgang++)
    {
        for(int i=1; i<71; i+=durchgang)
        {
            if(durchgang % 2 == 0) //gerade Durchgänge
            {
                Zelle[i] = false; //zuschließen
            }
            else //Ungerade Durchgänge
            {
                Zelle[i] = !Zelle[i]; //invertieren
            }
        }
       
        // Ausgabe
        cout<<"Durchlauf " <<z++<<endl;
        
        for(int i=0; i<71; i++)
        {
            if(Zelle[i]==true) cout<<'O';
            else cout<<'x';
    
        }
    
        cout<<endl;
        system("PAUSE");
      }
    
      return 0;
    }
    Funktionieren tut an sich alles. Nur die Ausgabe ist fehlerhaft glaube ich!? Unsere Lehrerin hat die ersten 3 Durchläufe angegeben:


    Durchlauf 1
    00000000000000000............
    Durchlauf 2
    0x0x0x0x0x0x0x0x0x..........
    Durchlauf 3
    0xxx000xxx000xxx000...........

    usw


    Bei mir kommt aber das raus:


    Fehlerhaft ist Durchlauf 3

    Kann mir evtl jmd. auf die Sprünge helfen!? Dürfte doch eig garnicht sein!?

    Liebe Grüße

    PS: O steht für offene Zellentür, X für geschlossene Zellentür
    Geändert von Pikes (17.12.2011 um 17:25 Uhr)

  2. #2
    Mitglied Benutzerbild von Hombre
    Registriert seit
    03.06.2008
    Beiträge
    876

    Standard AW: C++ Algo Fehler

    Ich will deine Hausaufgagen nicht machen. Aber: keine Zahl ist durch eine größere Teilbar. Für jede reicht zu prüfen, ob die kleineren ein Teiler sind.

    Ausserdem braucht man zu diesme Problem kein Programm. Jede ungerade Tür bleibt offen - bis auf die Primzahlen. Die Geraden bleiben zu.

    Update:
    Nee. Es sind nicht die ungeraden, sondern die "Quadratzahlen". Da ist mit mir der Türke durchgegengen.
    Also noch mal: nur Quadratzahlen bleiben offen: 2x2=4, 3x3=9, 16, 25, 36, 49 und 64. Ergo alle Zahlen, die ungerade Anzahl der Teiler haben.
    Geändert von Hombre (17.12.2011 um 22:58 Uhr) Grund: Alzheimer
    Freiheit braucht keine Politik :hihi:

  3. #3
    Austria FTW! Benutzerbild von Pikes
    Registriert seit
    04.04.2007
    Ort
    Im Pälzerwald!!!!
    Beiträge
    10.298

    Standard AW: C++ Algo Fehler

    Sollst Du auch nicht, hab ich ja schon getan . Und ja, ich muss dafür ein Programm schreiben, da die Übungsaufgabe aus LF6 Erstellen von Anwendersystemen, sprich Programmierung ist. Aber trotzdem danke :-P. Mir ging es eher darum, wieso im 3. Durchlauf die ersten drei Türen auf sind....meinem Algo nach dürfte nur die erste Tür auf sein.

  4. #4
    GESPERRT
    Registriert seit
    23.09.2011
    Ort
    Ost-Friesland
    Beiträge
    675

    Standard AW: C++ Algo Fehler

    Mit Ihrer Frage sind Sie meiner Meinung nach im völlig falschen Forum, aber weil bald Weihnachten ist ...

    Sie haben das mit dem Modulo Operator noch nicht richtig durchdacht. Hier muss ja irgendwie die Nummer der Tür mit der Nummer des Durchlaufs verbunden werden.
    Dann müssen Sie nur noch darauf achten, an welcher Stelle Sie natürliche Zahlen verwenden müssen, je nachdem wie Sie ihre Schleifen konstruieren.

    [Links nur für registrierte Nutzer]
    Geändert von Harry Krischner (18.12.2011 um 04:38 Uhr) Grund: Don't crack and IRC

  5. #5
    Mitglied Benutzerbild von Hombre
    Registriert seit
    03.06.2008
    Beiträge
    876

    Standard AW: C++ Algo Fehler

    @Pikes

    Dann frag dich, wo du prüfst, ob die Tür durch die verschiedenen Zahlen teilbar sind. Und ob überhaupt.
    Freiheit braucht keine Politik :hihi:

  6. #6
    Mitglied Benutzerbild von andreop
    Registriert seit
    21.06.2011
    Beiträge
    192

    Standard AW: C++ Algo Fehler

    Du hast einen falschen Ansatzpunkt. Hier gehts kaum um Teilbarkeit sondern um die Variation der Iterationsschritte.

    Hier
    for(int durchgang = 2; durchgang <= 71; durchgang++)
    soll nicht durchgang++ sondern durchang += iteration_schritt stehen
    diese iteration_schritt(sag ich mal it) wird it = 1 initialisiert (ganz oben) und am ende jeder Schleife wird it++ gemacht. Also dann gehste erstmal einer , dann zweier und dann dreier..... Schritte durch die Schleife

    In jedem it-Schritt werden die Türen auf- und zu geklappt also das heisst nicht weiter als Zelle[i] = !Zelle[i]; //invertieren, wie du auch richtig gemacht hast

    also die Lösung ist ein Vier-zeiler und nicht mehr.. wenn du nicht hinkriegst, schreibe ich hier gerne auf...

  7. #7
    forward ever Benutzerbild von Lichtblau
    Registriert seit
    14.02.2007
    Ort
    soviet solar system
    Beiträge
    19.509

    Standard AW: C++ Algo Fehler

    Zitat Zitat von Pikes Beitrag anzeigen
    Hey Com =),

    ich hätte eine kleine Frage an die User, die sich vllt mit C++ beschäftigen.
    Wir haben eine kleine Zusatzaufgabe bekommen, die wir doch bitte zu Hause alleine lösen sollen.

    Hier die Lösung in C#:

    Code:
    bool[] Zelle=new bool[71];
    
    for (int durchgang = 1; durchgang <= 70; durchgang++)
    {
        Console.WriteLine("Durchlauf " + durchgang.ToString());
    
        for (int i = 1; i <= 70; i++)
        {
            if (i % durchgang == 0) Zelle[i] = !Zelle[i];
                        
            if (Zelle[i]) Console.Write("0"); else Console.Write("x");
        }
    
        Console.WriteLine("");
    }
    
    Console.ReadKey();
    raus kommt:
    0xx0xxxx0xxxxxx0xxxxxxxx0xxxxxxxxxx0xxxxxxxxxxxx0x xxxxxxxxxxxxx0xxxxxx

+ Auf Thema antworten

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Antworten: 91
    Letzter Beitrag: 07.10.2008, 00:28
  2. „Die Europäische Union hat keine Fehler, sie ist der Fehler"
    Von aloute im Forum Internationale Organisationen
    Antworten: 18
    Letzter Beitrag: 30.06.2005, 20:38

Nutzer die den Thread gelesen haben : 0

Du hast keine Berechtigung, um die Liste der Namen zu sehen.

Forumregeln

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