AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Gedankenleser :-D
Thema durchsuchen
Ansicht
Themen-Optionen

Gedankenleser :-D

Ein Thema von Christian18 · begonnen am 2. Aug 2007 · letzter Beitrag vom 4. Aug 2007
Antwort Antwort
Seite 2 von 2     12   
Christian18
Registriert seit: 9. Dez 2003
Hallo,

ich bins mal wieder. Ich habe ebend ein bisschen langeweile gehabt und wollte mal wissen was man mit Turbo Delphi so machen kann. Ich habe ein kleines Tool geschrieben, welches 5 Zahlen und ein Ergebnis einließt und anschließen sagt wie Ihr diese zahlen mit + und - verknüpft habt.

Ich habe es ja schon fast verraten, aber ich mache es tortzdem nochmal.

Ihr gebt 5 Zahlen ein verbindet diese mit + und -. Dann berechnet Ihr das Ergebnis. Das Ergebnis gebt Ihr dann auch noch ein. Eigentlich nicht schwer. Duch einen klick auf den Button "Los", sagt Euch das Programm wie Ihr die 5 Zahlen mit + und - verknüpft habt.

Falls Euch irgendwas merkwürdig vorkommt oder Ihr einen Fehler entdeckt, würde ich mich über ein kurzes Feedback freuen.

PS: Freue mich natürlich auch, wenn ihr mal kurz erwähnen könntet wie Ihr das Tool findet.

Also dann viel Spaß mit diesem kleinen Tool!!!

MFG Christian18
Miniaturansicht angehängter Grafiken
screenshot_442.jpg  
Angehängte Dateien
Dateityp: zip gedankenlesen_118.zip (223,5 KB, 75x aufgerufen)
 
Benutzerbild von ArmyMan
ArmyMan
 
#11
  Alt 3. Aug 2007, 09:26
Zitat von Christian18:
naja ich denke nicht wirklich falsch!!!

Denn man kann ja Summanden vertauschen.
Sowie ich das gesehen habe, rechnest du ja nur mit +/-
Da kommt es doch gar nicht drauf an in welcher Reihenfolge die Summanden sind. => Da kann man tauschen wie man will und bekommt immer noch das gleiche. Man tauscht einfach das Vorzeichen mit.

Oder habe ich dich jetzt falsch verstanden?

Greetz
ArmyMan
  Mit Zitat antworten Zitat
Christian18
 
#12
  Alt 3. Aug 2007, 09:33
Hallo,

ok, irgendwie habe ich gerade quatsch erzählt. Ok, das Programm hat einen fehler. der dürfte aber nur bei 1 auftauchen odeR?
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

 
Delphi XE5 Professional
 
#13
  Alt 3. Aug 2007, 09:41


Ich bin echt zu blöd... sorry! Ja klappt... aber du könntest ja ne Meldung machen, wenn das Ergebnis nicht möglich ist!
Richard Mahr
  Mit Zitat antworten Zitat
Christian18
 
#14
  Alt 3. Aug 2007, 12:55
Ok mache ich in der nächsten Version...

Falls es überhaupt eine nächste version geben wird, denn wie schon gesagt das war ein spaß projekt was ich in 10 minuten zusamenn gebaut habe.

MFG Chris
  Mit Zitat antworten Zitat
fLaSh11
 
#15
  Alt 3. Aug 2007, 14:34
Gibt's dazu nen Algorithmus oder haste jede Kombi durchprobiert?
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

 
Delphi XE2 Professional
 
#16
  Alt 3. Aug 2007, 16:17
Also nachdem er nur 5 Zahlen Hat und jede Zahl mit entweder + oder - Berechnet wird gibt das einen Mögöäichkeit von 2 ^5 kombinationen 2^5 = 32 das BrudeForced ein Rechner in null komma Nix geschwind aus .
Uwe
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh
 
#17
  Alt 3. Aug 2007, 16:37
5 Operanden => 4 Operatoren => 2^4 Kombinationen
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

 
Delphi XE2 Professional
 
#18
  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
  Mit Zitat antworten Zitat
Christian18
 
#19
  Alt 4. Aug 2007, 12:19
Hallo Leute,

ich habe das Programm mal ein bisschen erweitert. Und das nur durch das eingeben einer Zahl xD.

MFG Christian18
Angehängte Dateien
Dateityp: zip gedankenlesen_407.zip (273,2 KB, 13x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:59 Uhr.
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