Buchstabensalat -- Hilfe

Tutorials.at
Verfügbare Informationen zu "Buchstabensalat -- Hilfe"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: Kimi - wirthi - Xin
  • Forum: Tutorials.at
  • Forenbeschreibung: Programmierforum
  • aus dem Unterforum: C / C++
  • Antworten: 6
  • Forum gestartet am: Mittwoch 19.04.2006
  • Sprache: deutsch
  • Link zum Originaltopic: Buchstabensalat -- Hilfe
  • Letzte Antwort: vor 16 Jahren, 3 Monaten, 16 Tagen, 8 Stunden, 10 Minuten
  • Alle Beiträge und Antworten zu "Buchstabensalat -- Hilfe"

    Re: Buchstabensalat -- Hilfe

    Kimi - 10.12.2007, 19:31

    Buchstabensalat -- Hilfe
    Hi ich habe folgende Aufgabe auf:


    Finden Sie per Algorithmus alle Zahlenkombinationen, die
    folgender „Formel“ genügen: EINS + EINS = ZWEI.
    Dabei stehen gleiche Buchstaben für gleichen Zahlen und unterschiedliche
    Buchstaben für unterschiedliche Zahlen.
    Beispiel: 4271 + 4271 = 8542 (E=4, I=2, N=7, S=1, Z=8, W=5)

    es gibt 12 Kombinationen.

    Zusatz:Der Benutzer kann einen „Satz“ eingeben und der Rechner findet
    die entsprechenden Lösungen für die Zahlen.





    Code: # include <stdio.h>                                                      // Bibos

    main(void)
    {
    // Vars
       int bs1=0,bs2=0,bs3=0,bs4=0,bs5=0,bs6=0;
       int i1, i2, i3, i4, i5, i6;
       int zahl1, zahl2, zahl3, links;
    // Eingabeaufforderung
       printf("\n\nBuchstabenzahlen\n\n");
    // erste Zahl
       for (i1=0;i1<10;i1++)
          {bs1=i1;for (i2=0;i2<10;i2++)
             {bs2=i2;for (i3=0;i3<10;i3++)
                {bs3=i3;for (i4=0;i4<10;i4++)
                   {bs4=i4;for (i5=0;i5<10;i5++)
                      {bs5=i5;for (i6=0;i6<10;i6++)
                         {
                            bs6=i6;
                            if (bs1!=bs2 && bs2!=bs3 && bs3!=bs4 && bs4!=bs5 && bs5!=bs6 && bs2!=bs4 && bs3!=bs5 && bs4!=bs6 && bs6!=bs1 && bs1!=bs3 && bs1!=bs4 && bs1!=bs5 && bs2!=bs5 && bs2!=bs6 && bs3!=bs6)
                               {
                                  zahl1=bs1*1000+bs2*100+bs3*10+bs4;
                                  zahl2=zahl1;
                                  links=zahl1+zahl2;
                                  zahl3=bs5*1000+bs6*100+bs1*10+bs2;
                                  if (links==zahl3) {printf("Die Zahlen gehen: %d + %d = %d\n", zahl1, zahl2, zahl3);};
                               }
                         }
                      }
                   }
                }
             }
          }
       getch();
    }

    So ich habe mal meine Teillösung gepostet aber irgendwas stimmt da nicht mit der if bedingung bzw bs!=bs da habe ich was vedreht deswegen bin ich momentan bissle ratlos.

    Eine andere frage wie kann ich eine eingabe des benutzer erfolgen lassen sodass das programm dieses dann auch berechnet.

    Danke.



    Re: Buchstabensalat -- Hilfe

    wirthi - 10.12.2007, 22:45


    Hi,
    Code: bs2!=5 && bs2!=6 && bs3!=6
    Sicher, dass das stimmt? Willst du da nicht Variablen mit Variablen vergleichen?

    Frage: wozu brauchst du die bs1-bs6-Variablen überhaupt? Du kannst doch ohnehin die Werte i1-i6 verwenden?


    Zur zweiten Teilaufgabe: wie du siehst, lässt sich die Aufgabe (zumindest der erste Teil) so "relativ" einfach lösen. Wirklich gut geht es aber nur mit einen Array. Ich würd für die Lösung sogar zwei Arrayr vorschlagen: eines, in dem du speicherst, welcher Buchstabe welchen Wert hat, und ein Zweites, indem gespeichert ist, welche Buchstaben überhaupt verwendet werden (d.h. im vom benutzer eingegebenen Satz überhaupt vorkommen).



    Re: Buchstabensalat -- Hilfe

    Kimi - 10.12.2007, 23:39


    Ich habe es jetzt abgeändert aber hmmm mit arrays puhh damit tuhe ich mich schwer muss mir das mal im buch anschauen bzw. nochmals durchlesen.



    Re: Buchstabensalat -- Hilfe

    Xin - 11.12.2007, 00:55

    Re: Buchstabensalat -- Hilfe
    Kimi hat folgendes geschrieben: Hi ich habe folgende Aufgabe auf:


    Finden Sie per Algorithmus alle Zahlenkombinationen, die
    folgender „Formel“ genügen: EINS + EINS = ZWEI.
    Dabei stehen gleiche Buchstaben für gleichen Zahlen und unterschiedliche
    Buchstaben für unterschiedliche Zahlen.
    Beispiel: 4271 + 4271 = 8542 (E=4, I=2, N=7, S=1, Z=8, W=5)

    es gibt 12 Kombinationen.

    Redundanter Sourcecode voller Schleifen in abenteuerlicher Formatierung... :-\
    Drei Zeichen, dass man die Herangehensweise vielleicht mal überdenken sollte.
    Schleifen, die innerhalb von Schleifen ausgeführt werden, verbrauchen massiv Leistung. Du hast 5 Schleifen ineinander verschachtelt. Damit kannst Du problemlos Großrechner lahm legen.

    Zur Aufgabe: Du hast einen Haufen Heu, in dem ein paar Nadeln sind.

    Ich denke, dass die Aufgabe leichter wird, wenn Du Dich nicht darauf konzentrierst nach Lösungen suchst, lass sie Dir doch einfach in den Schoß fallen, in dem Du Dir ein paar einfachere Aufgaben suchst.

    Man kann das ganze Heu einzeln anzufassen und sich die Finger schmutzig machen (siehe Sourcecode) oder sich erstmal einen anständigen Magneten besorgen.

    Du hast viele Bedingungen zu erfüllen. Manche sind offensichtlich, für manche muss man sich auch etwas anstrengen. So ein Magnet fällt schließlich nicht vom Himmel.
    Ein Beispiel: Sind die Worte gleichlang, muss die erste Ziffer kleiner 5 sein. Dein Sourcecode arbeitet für EINS+EINS=ZWEI die Hälfte der Zeit gegen Möglichkeiten, die definitiv keine Lösung werden können.


    Was von dem Heuhaufen übrig bleibt kannst Du sieben:

    Zahlen, die eine Bedingung nicht erfüllt findest Du vermutlich sehr schnell, womit Du das Programm weiterhin beschleunigen kannst. Du kannst die Bedingungen der Reihe nach aufschreiben und prüfen, schlägt die erste Bedingung fehl, wirfst Du den Kandidaten weg, Du kannst Du Dir jede weitere Prüfung sparen.

    Was alle Prüfungen besteht, muss eine Nadel sein.

    Das ist vielleicht etwas mehr zu tippen, aber zum einen lesbar, verständlich und bedarf nicht derart vieler verschachtelter Schleifen. Damit ist es auch massiv schneller.

    Statt der Nadel im Heuhafen jagen Informatiker auch gerne Elefanten in Afrika:
    http://www.hrz.uni-dortmund.de/computerPostille/Dezember2001/016.html



    Re: Buchstabensalat -- Hilfe

    wirthi - 11.12.2007, 10:38

    Re: Buchstabensalat -- Hilfe
    Xin hat folgendes geschrieben: Schleifen, die innerhalb von Schleifen ausgeführt werden, verbrauchen massiv Leistung. Du hast 5 Schleifen ineinander verschachtelt. Damit kannst Du problemlos Großrechner lahm legen.
    Prinzipiell hast du absolut recht Xin. Im vorliegenden Fall allerdings: 1.000.000 Durchläufe sollte ein aktueller PC in deutlich unter einer Sekunde schaffen :-)



    Re: Buchstabensalat -- Hilfe

    Xin - 11.12.2007, 12:33

    Re: Buchstabensalat -- Hilfe
    wirthi hat folgendes geschrieben: Xin hat folgendes geschrieben: Schleifen, die innerhalb von Schleifen ausgeführt werden, verbrauchen massiv Leistung. Du hast 5 Schleifen ineinander verschachtelt. Damit kannst Du problemlos Großrechner lahm legen.
    Prinzipiell hast du absolut recht Xin. Im vorliegenden Fall allerdings: 1.000.000 Durchläufe sollte ein aktueller PC in deutlich unter einer Sekunde schaffen :-)

    Hmm... sind sogar 6 Schleifen.

    Die Programmierweise ist falsch - auch wenn das Ergebnis (auf modernen!) Rechnern binnen 1 Sekunde da ist. Moderne Rechner 1 Sekunde lahm zu legen, sollte mit einer entsprechenden Rechnung begründet sein, nicht mit sowas. Vielleicht sollte man als Programmieranfänger nicht gleich ganz selbstverständlich die Rechenleistung mehrerer Crays beanspruchen.

    Wenn ich Leuten das Programmieren beibringe, lasse ich sie gerne Fibunaccizahlen ausrechnen.

    fib( 0 ) = 0;
    fib( 1 ) = 1;
    fib( n ) = fib( n-1 ) + fib( n-2 );

    Das legt jeden Rechner beliebiger Leistung schon bei kleinen n lahm. Bei einem P4 wird's bei n um die 40 schon langsam langweilig.
    Mit ein wenig (und es verlangt wirklich nicht viel) Überlegung löst jeder 64er (8 Bit CPU mit um die 950 ->Kilo<-Hertz) die Aufgabe schneller als ein moderner Computer.

    Es gibt Probleme, da spielt es einfach keine Rolle, ob der Computer schnell oder langsam ist, weil die Probleme so groß sind, dass auch Hochleistungscluster keine Chance haben. Also bleibt keine Rechenzeit, um sie zu vergeuden.
    BruteForce ist die Kapitulation des Geistes, keine Strategie ein Problem zu lösen.



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Tutorials.at

    TIMER - gepostet von Martix391 am Dienstag 20.06.2006
    Turbo C? - gepostet von G_0_M am Sonntag 25.11.2007
    TutorialSammlung für FAQ - gepostet von AQE89 am Montag 30.04.2007
    cygwin ?? - gepostet von Dirty Oerty am Sonntag 25.02.2007
    Geschachtelte Schleifen - gepostet von Kimi am Donnerstag 29.11.2007
    PC-Spiele programmieren - gepostet von Dominik92 am Mittwoch 13.09.2006
    Brauche Headerdatei graphics.h - gepostet von mitti am Freitag 18.05.2007
    TASM Compiler - auch mit ohne OBJ? - gepostet von r00tnix am Freitag 20.10.2006
    Wichtige Frage zu Pascal - gepostet von Akira am Montag 25.06.2007



    Ähnliche Beiträge wie "Buchstabensalat -- Hilfe"

    Rogue Char Punkte verteilung Hilfe! - Th3_PuNiSh3r (Dienstag 01.11.2005)
    Hilfe zu euren Signaturen, Avataren usw. - Aurora DeGardo (Donnerstag 09.08.2007)
    DF 4 Hauptrahmen gebrochen Hilfe!!!!!!!!! - offre (Dienstag 05.09.2006)
    Hilfe, ich werd Angegriffen... - kleinergrizzly (Donnerstag 28.12.2006)
    Kriege den DF 5 nicht eingestellt,... HILFE - Adamski (Sonntag 30.09.2007)
    Hilfe ich brauche dringend Getreide - susan (Donnerstag 19.07.2007)
    Happy Birthday liebe Sandra - Nicole (Sonntag 07.12.2008)
    Hilfe -.- - Bianca (Dienstag 12.12.2006)
    Hilfe, ich bin DaWanda süchtig... - IM307 (Freitag 31.08.2007)
    hilfe - Claudio (Donnerstag 20.07.2006)