Einzelnen Beitrag anzeigen

Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#18

Re: Gedankenleser :-D

  Alt 3. Aug 2007, 17:08
NEIN

Da mus ich dir wiedersprechen.

Was passiert wenn du die erste Zahl Negativ brauchst ??

Ich fand das so witzig das ich es mal Geproggt hab, geht ja schnell.

Nur kriege ich es einfach nicht Rekursiv hin.

Hier also meine Itterative Lösung.


Edit 1 - 5 die Zahlen Edit 6 das Erg
Label7 die Ausgabe

Delphi-Quellcode:

Procedure TForm1.Button1Click(Sender: TObject);
Var
  j, i: Integer;
  zahlen: Array[0..5] Of integer;
  erg: Integer;
Begin
  For i := 1 To 6 Do
    Zahlen[i - 1] := strtoint(Tedit(findcomponent('Edit' + inttostr(i))).text);
  For i := 0 To 31 Do Begin
    erg := 0;
    // Berechnen des Ergebnisses
    For j := 0 To 4 Do Begin
      If i And (1 Shl j) = (1 Shl j) Then
        erg := erg + Zahlen[j]
      Else
        erg := erg - Zahlen[j];
    End;
    // Prüfen
    If erg = Zahlen[5] Then Begin
      // Ausgabe
      Label7.caption := '';
      // Berechnen des Ergebnisses
      For j := 0 To 4 Do Begin
        If i And (1 Shl j) = (1 Shl j) Then
          label7.caption := label7.caption + '+' + inttostr(Zahlen[j])
        Else
          label7.caption := label7.caption + '-' + inttostr(Zahlen[j])
      End;
      label7.caption := label7.caption + '=' + inttostr(Zahlen[5]);
      // Fertig
      break;
    End;
  End;
End;
[Edit]

Also ein Kumpel von mir dem ich grad Proggen bei Bringe hat hier mal nen Mega Krassen Ansatz gebracht.

Der ist im Mittel sogar schneller, schauts euch einfach mal an.

Nur wie man schnell sehen kann, terminiert dieser Algorithmus nicht wenn man das Ergebnis nicht Korreckt eingibt
Delphi-Quellcode:
Procedure TForm1.Button3Click(Sender: TObject);
Var
  j, i: Integer;
  zahlen: Array[0..5] Of integer;
  erg: Integer;
Begin
  c := 0;
  erg := 0;
  Label7.caption := '';
  For i := 1 To 6 Do Begin
    Zahlen[i - 1] := strtoint(Tedit(findcomponent('Edit' + inttostr(i))).text);
    If i < 6 Then
      erg := erg + Zahlen[i - 1];
  End;
  While erg <> Zahlen[5] Do Begin
    inc(c);
    i := random(5);
    Zahlen[i] := Zahlen[i] * -1;
    erg := 0;
    For j := 0 To 4 Do
      erg := erg + Zahlen[j];
  End;
  // Ausgabe
  For j := 0 To 4 Do Begin
    If Zahlen[j] > 0 Then
      label7.caption := label7.caption + '+' + inttostr(Zahlen[j])
    Else
      label7.caption := label7.caption + inttostr(Zahlen[j])
  End;
  label7.caption := label7.caption + '=' + inttostr(Zahlen[5]);
End;
[Edit2]

Endlich hab ichs auch Rekursiv hinbekommen, da ists aber net so hübsch wie ich finde.

Delphi-Quellcode:
Procedure TForm1.Button4Click(Sender: TObject);
Var
  j, i: Integer;
  zahlen: Array[0..5] Of integer;
  erg: Integer;

  Procedure Rekursion(Tiefe: Integer);
  Var
    j: Integer;
  Begin
    If Tiefe < 5 Then Begin
      Rekursion(Tiefe + 1);
      erg := 0;
      For j := 0 To 4 Do
        erg := erg + Zahlen[j];
      If erg <> Zahlen[5] Then Begin
        Zahlen[Tiefe] := Zahlen[Tiefe] * -1;
        Rekursion(Tiefe + 1);
      End;
    End;
  End;

Begin
  Label7.caption := '';
  erg := High(Integer);
  For i := 1 To 6 Do
    Zahlen[i - 1] := strtoint(Tedit(findcomponent('Edit' + inttostr(i))).text);
  Rekursion(0);
  // Ausgabe
  If Erg = Zahlen[5] Then Begin
    For j := 0 To 4 Do Begin
      If Zahlen[j] > 0 Then
        label7.caption := label7.caption + '+' + inttostr(Zahlen[j])
      Else
        label7.caption := label7.caption + inttostr(Zahlen[j])
    End;
    label7.caption := label7.caption + '=' + inttostr(Zahlen[5]);
  End;
End;
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat