Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Variablen Algoritmus (https://www.delphipraxis.net/121524-variablen-algoritmus.html)

netscanner 29. Sep 2008 19:00


Variablen Algoritmus
 
Hallo Leute,
ich verzweifel gerade an einer Aufgabe,,,,

Aufgabe: Give-More-Money-Problem
• Entwirf einen Algorithmus für das Give-More-Money-Problem, d.h. finde alle gültigen Variablenbelegungen
∈ {0, . . . , 9} und (M ungleich 0), so dass folgende Gleichung erfüllt wird:

G I V E
+ M O R E
---------
M O N E Y

Mir ist klar, dass es am sinnvollsten ist mit verschachtelten for Schleifen, die die einzelnen Variablenwertbereiche durchlaufen zu arbeiten.
Danach müsste ich die "Ergebnisse" der For schleifen jedoch irgendwie auswerten...und da stoße ich im Moment an meine grenze. Kann mir jemand helfen?

Corpsman 29. Sep 2008 19:07

Re: Variablen Algoritmus
 
Nachdem dir die Idee ja schon klar ist wird dir wohl keiner Helfen, hier werden Grundsätzlich keine Hausaufgaben gemacht.

netscanner 29. Sep 2008 19:10

Re: Variablen Algoritmus
 
hey...
mir ist 1. nur ein Teil der Idee klar. Der eigentliche Algo fehlt mir aber noch (die Auswertung).
2. sind das keine Hausaufgaben sondern Übungen, die man freiwillig machen kann. Wollte mich wieder ein bisschen auf die Uni vorbereiten. Habe also keinen "Druck" eine Lösung zu bekommen...trotzdem wär es schön wenn mir jemand nen Gedankenanstoß geben könnte...würd einfach gerne wissen, wie das funktioniert...

Corpsman 29. Sep 2008 19:14

Re: Variablen Algoritmus
 
OK,

Also ich hab da mal dran rumprobiert.

M = 1 ist klar

denn das entsteht aus dem Übertrag.

Von da an rechnest du Rückwärts

so komme ich auf z.b.

Delphi-Quellcode:
 9341
+1071
-----
10412
Du siehst bei Rückwärtsgehn sehr schnell das du recht viele Freuheiten hast und es daher sehr viele Lösungen gibt.


Wirklich fest ist damit nur der Anfang. Der rest ergibt sich dann aus einem Unterbestimmten gleichungsystem.
Delphi-Quellcode:
 9
+10
--------
10
ich hoffe das hilft dir ;)

[Edit]

Da du alle Gültigen Varianten ausprobieren sollst ist dieser Ansatz aber nicht so Optimal.

Bau dir eine Function die die 8 Variablen bekommt und zurückgibt ob die Gleichuzng damit erfüllt ist.

Dann kannst du einen Brute Force machen.

netscanner 29. Sep 2008 19:16

Re: Variablen Algoritmus
 
jepp hat mir geholfen danke :) jetzt wird es mir so langsam klar ^^

Corpsman 29. Sep 2008 19:21

Re: Variablen Algoritmus
 
Die Funktion ist also

Delphi-Quellcode:

(*
die Zahlen entsprechen der Variablennummer :

 1234
+5674
-----
56849
*)

type Tfrage = array [1..9] of Integer;

Function isValid(const a:Tfrage):Boolean;
var s1,s2,s3:string;
begin
  s1 := a[1]+a[2]+a[3]+a[4];
  s2 := a[5]+a[6]+a[7]+a[4];
  s3 := inttostr(strtoint(s1)+strtoint(s2));
  if length(s3) = 5 then
    result := (s3[1] = a[5]) and (s3[2] = a[6]) and (s3[3] = a[8]) and (s3[4] = a[4]) and (s3[5] = a[9])
  else
    result := false;
end;

netscanner 29. Sep 2008 19:22

Re: Variablen Algoritmus
 
joa genauso könnt man's in Delphi realisieren :D
Jetzt muss ich den Mist nur noch in Java umformen :wall: ...mach ich aber selber...will ja den Lerneffekt haben :)
Aber herzlichen Dank!

LinuxFan 1. Okt 2008 00:01

Re: Variablen Algoritmus
 
Erwischt!

Haha, ich bin erstaunt, wie schnell der Google-Bot war.

Habe gerade im I-Net nach dem "More Money Problem" gesucht und bin hierher gestoßen, nach dem ich feststellen musste, dass es wohl kein "wirkliches" Problem ist (wie z.B. das mit den 3 Toren mit 2 Ziegen und einem Hauptgewinn) sondern eher etwas ausgedachtes.

Informatik Vorkurs, TU-Darmstadt, ja? :-D

Warum so kompliziert und erst in Delphi?

Gruß
Victor

WS1976 1. Okt 2008 05:38

Re: Variablen Algoritmus
 
Hallo,

entstschuldige aber das kann so nie gelaufen sein!

Delphi-Quellcode:
type Tfrage = array [1..9] of Integer;

Function isValid(const a:Tfrage):Boolean;
var s1,s2,s3:string;
begin
  s1 := a[1]+a[2]+a[3]+a[4];
  s2 := a[5]+a[6]+a[7]+a[4];
  s3 := inttostr(strtoint(s1)+strtoint(s2));
  if length(s3) = 5 then
    result := (s3[1] = a[5]) and (s3[2] = a[6]) and (s3[3] = a[8]) and (s3[4] = a[4]) and (s3[5] = a[9])
  else
    result := false;
end;
Du solltest schon die einfachsten Regeln der Variablen bzw der Typdefinition kennen!
s1, s2 sind als Strings deklariert. Du weist ihnen (den Variablen) aber Integers zu.
Bitte überprüfe das nocheinmal.

Delphi-Quellcode:
    result := (s3[1] = a[5]) and (s3[2] = a[6]) and (s3[3] = a[8]) and (s3[4] = a[4]) and (s3[5] = a[9])
Erklär mir doch bitte mal diese Zeile. Vielleicht kann ich was dazulernen.

Grüsse
Rainer

LinuxFan 5. Okt 2008 15:49

Re: Variablen Algoritmus
 
Zitat:

Zitat von WS1976
Hallo,

entstschuldige aber das kann so nie gelaufen sein!

Delphi-Quellcode:
type Tfrage = array [1..9] of Integer;

Function isValid(const a:Tfrage):Boolean;
var s1,s2,s3:string;
begin
  s1 := a[1]+a[2]+a[3]+a[4];
  s2 := a[5]+a[6]+a[7]+a[4];
  s3 := inttostr(strtoint(s1)+strtoint(s2));
  if length(s3) = 5 then
    result := (s3[1] = a[5]) and (s3[2] = a[6]) and (s3[3] = a[8]) and (s3[4] = a[4]) and (s3[5] = a[9])
  else
    result := false;
end;

Ich denke, an dieser Stelle wurde das Prinzip erklärt. Der Code muss ja nicht unbedingt funktionstüchtig sein. Nur von der Logik muss er ja stimmen.

Zitat:

Zitat von WS1976
Delphi-Quellcode:
    result := (s3[1] = a[5]) and (s3[2] = a[6]) and (s3[3] = a[8]) and (s3[4] = a[4]) and (s3[5] = a[9])
Erklär mir doch bitte mal diese Zeile. Vielleicht kann ich was dazulernen.

Grüsse
Rainer

"(...) and (...) and (...)" ist nichts anderes als ein Boolean-Wert.
Die Zeile sollte so sogar stimmen, obwohl ich das persönlich so nie hinschreibe. Weiß jetzt nicht genau, ob Delphi da meckert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:14 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz