Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Suchen einer Lösung in mehrdimensinalen array

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ]
010
20.08.2003, 09:25 Uhr
~andreasK
Gast


Hallo danke für die Tipps!
Hat mir geholfen!

Gruß
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
20.08.2003, 09:31 Uhr
~Anfänger00
Gast


ich wollte ja nur sagen das das mit dem define nicht von mir kommt,ich wustte auch das zerbst keine guten stiel hat,aber ich dachte ein paar Sachen müsste der doch richtig machen..
Aber würde das Programm jetzt schneller werden?
bei 4Gewinnt in 2d kommt es zwar bei den heutigen rechnenrn nicht drauf an,aber man sollte halt wissen wie man schnelleren code schreibt.. wird das vom compiler nicht eh wegoptimiert?

@virtual
ich peil jezt deinen code,der ist wircklich logischer und übersichtlicher.
Logik war noch nie meine Stärke...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
20.08.2003, 10:11 Uhr
virtual
Sexiest Bit alive
(Operator)


@Anfäner00
Stellt man sich einen Algo vor, der das Spielfeld von links oben nach rechts unten durchscannt um nach einer 4er Kette zu suchen, dann markieren die * mal die überhaupt möglichen Startpositionen einer solchen Kette:
12 Mögliche Startfelder eines 4er bei Diagonale links oben -> rechts unten

Code:
****___
****___
****___
_______
_______
_______


12 Mögliche Startfelder eines 4er bei Diagonale rechts oben -> links unten

Code:
___****
___****
___****
_______
_______
_______


24 Mögliche Startfelder bei waagerechte

Code:
****___
****___
****___
****___
****___
****___


21 Mögliche Startfelder bei senkrechte

Code:
*******
*******
*******
_______
_______
_______


In einem Worstcase szenario benötigt also der Algorithmus 4*(12+12+24+21) 276 Vergleiche, zum zu ermitteln, ob zu einer Farbe eine 4er Kette vorliegt. Mit weiterführenden Überlegungen kann man diese Zahl noch weiter eingrenzen, weil das Worstcase Szenario ja bedeutet, daß von jedem Punkt eine 3er Kette losgeht, nur vom letzten ggf. eine 4er Kette. Dies ist eigentlich sowohl gemäß den Spielregeln unmöglich, alsoauch hinsichtlich der potentiellen Verteilung der 3er Ketten: die müssten sich ja irgendwo zu einer 4er Kette summieren. Ein naiver algo sollte also mit deutlich weniger als 276 verleichen auskommen.
Die Schleifenlösung von dir dürfte so auf 400-500 vergeliche kommen; meine Lösung ist da auch nicht viel besser.
Ich würde wohl - wenn es wirklich drauf ankommen würde, das ganz performant zu gestalten (zB weil das Spielbrett gigantische Ausmasse hat) - wahrscheinlich eh komplett andere Algos anwenden.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
20.08.2003, 10:34 Uhr
~Anfänger00
Gast


Aha ich dichte die geschwinkeit hägt von der zahl der schleifen ab,aber
es läuft ja hier auf die zahl der Vergleiche hinaus...
Also ich habs jetzt verstanden:nachdenken dann kommt automatisch drauf.
Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
20.08.2003, 10:48 Uhr
0xdeadbeef
Gott
(Operator)


@Pablo: scanf und printf können allerdings zu ziemlich bösen Fehlern führen. Schau dir das hier an:

C++:
printf("%d%\n", prozentzahl); /* <- Hoppla, Tipfeeler... */


Kompiliert, aber baut Mist. Oder noch schöner:

C++:
printf("%c%c%c%c%c", a, b, c, d); /* <-- 5 %cs auf 4 Zeichen */


Oder nimm scanf:

C++:
scanf("%s %s %s %s", s1, s2, s3); /* SIGSEGV vorprogrammiert */


Wenn du solche Fehler an einer Stelle im Programm hast, an der man nur selten vorbeikommt, ist das nicht gut. Oder noch besser - lass es sscanf oder fscanf sein. Vertipp dich da, und du kriegst keine Ausgabe, mit der du was anfangen kannst. Damit kriegst du die schönsten Heisenbugs, und das Debuggen macht nachher richtig Spaß. Und jetzt die Äquivalente, C++-Stil:

C++:
cout << prozentzahl << "%";
cout << a << b << c << d;
cin >> s1 >> s2 >>s3; // Wenn du sichergehen willst (willst du) nimmst du hier std::strings.


Wenn du dich da vertippst, kriegt es schon der Compiler mit. Generell gilt sowieso: Wenn du es irgendwie zur Compilezeit festzurren kannst, dann mach es auch. Es vermeidet Fehler und ist tendenziell performanter.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 20.08.2003 um 10:49 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
20.08.2003, 11:22 Uhr
Pablo
Supertux
(Operator)


Ich weiiß, dass man solche Fehler gerne immer wieder macht. Mir sind solche Sachen schon Mal passiert und es dauert lange, bis man sie findet. Aber wenn man sie immer benutzt, vergisst man das nicht mehr. Ich hab heute kaum Probleme damit, ich meine, solche Probleme hatte ich nur am Anfang. Trotzdem gefällt mir scanf und printf besser.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
20.08.2003, 11:49 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat:
Pablo Yanez Trujillo postete
Ich weiiß, dass man solche Fehler gerne immer wieder macht. Mir sind solche Sachen schon Mal passiert und es dauert lange, bis man sie findet. Aber wenn man sie immer benutzt, vergisst man das nicht mehr. Ich hab heute kaum Probleme damit, ich meine, solche Probleme hatte ich nur am Anfang. Trotzdem gefällt mir scanf und printf besser.

rotfl. Wer nicht hören will, muß fühlen, sagt der Volksmund
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
20.08.2003, 11:49 Uhr
Pablo
Supertux
(Operator)



--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
20.08.2003, 12:51 Uhr
0xdeadbeef
Gott
(Operator)


Naja. Ich finde, wenn man die Wahl hat, kann man diese Arbeit ruhig dem Compiler überlassen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
20.08.2003, 12:56 Uhr
~wissender
Gast


@Pablo
Die Frage ist, was man will.
Wenn man C++ programmiert, dann sollte man schon aus Prinzip *nur* C++ verwenden (gilt dann auch für Bibliotheken, wenn machbar).
Das sorgt für robustere, sichere und eventuell sogar für schnellere Programme.
Oder mischt du auch malloc und delete (war unfair, ok, aber das zeigt das Problem)?

Gruß
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: