![]() |
4 Variablen sollen = 1302 sein.
Hey ihr Delphi- Kenner,
ich habe das Problem, dass ich 4 Variablen habe, die zusammen 1302 sollen:
Delphi-Quellcode:
Wenn ich das Programm starten möchte sagt Delphi :
w * x - y + z = 1302;
Der linken Seite kann nichts zugewiesen werden Weiß einer von euch, wie ich das Problem beheben kann? Euer Dave |
Re: 4 Variablen sollen = 1302 sein.
Ich habe nicht die geringste Ahnung, was du da tun willst. Soll das eine Zuweisung sein oder willst du die Variablen auf irgendetwas überprüfen?
|
Re: 4 Variablen sollen = 1302 sein.
w, x, y und z sollen zusammen 1302 sein...
z.B. 1 * 1302 - 2 + 2 = 1302 |
Re: 4 Variablen sollen = 1302 sein.
Sieht sehr nach einem Konstrukt mit vier For-Schleifen aus, die solange ausprobieren, bis was gefunden wurde.
|
Re: 4 Variablen sollen = 1302 sein.
Genau das meine ich :)
Wie aber kann ich das machen? |
Re: 4 Variablen sollen = 1302 sein.
Zitat:
Code:
Das ist aber nicht korrekt, da es eigentlich unendlich viele Lösungen gibt (es sei denn, Du schränkst den Wertebereich ein, so wie ich es hier getan habe).
var
w, x, y, z: Integer [...] for w := Low(Integer) to High(Integer) do begin for x := Low(Integer) to High(Integer) do begin for y := Low(Integer) to High(Integer) do begin for z := Low(Integer) to High(Integer) do begin if w * x - y + z = 1302 then begin ShowMessageFmt("%0:d * %1:d - %2:d + %3:d", [w, x, y, z]); end; end; end; end; end; // Edit: Natürlich kann man das noch optimieren, ist halt ein Quick-and-Dirty-Ansatz, der Deinen Rechner und Dich einige Zeit lang beschäftigen dürfte. |
Re: 4 Variablen sollen = 1302 sein.
Hallo,
kann es sein, das "DAS" eine Primfaktoren-Analyse werden soll ? |
Re: 4 Variablen sollen = 1302 sein.
also erstmal geht soeine Zuweisung garnicht, da es mehrere Lösungen gibt und woher soll Delphi wissen wie was da zugewiesen werden soll.
schon alleine für Folgendes gibt es 13533 Lösungen
Delphi-Quellcode:
und das obwohl ich die Wertebereiche eingeschrenkt und doppelte Lösungen ignoriert hab.
var
x, y, z: Integer; begin for x := -1000 to 1000 do for y := x to 1000 do for z := -1000000 to 1000000 do if x * y + z = 1302 then Memo1.Lines.Add(Format('%d * %d + %d = 1302', [x, y, z])); Memo1.Lines.Add(Format('%d Lösungen', [Memo1.Lines.Count])); end; x und y kann hier ja getauscht werden, was dann sozusagen fast doppelt soviele Lösungen Ergäbe. jo, und je mehr Variablen und um so größer der wertebereich .... um so mehr wird es du kannst ja mal schauen wie lange dieses hier braucht, um alles auszutesten und wie viel Lösungen es dann gibt :angel2:
Delphi-Quellcode:
wobei es hierfür schon eine sehr einfache vereinfachung gibt ... siehe erster Code ... ohne z2 prüfen und dann z nochmals in z-z2 zwelegen
procedure TForm1.Button1Click(Sender: TObject);
var x, y, z, z2, q: Integer; begin q := 0; for x := -1000 to 1000 do for y := -1000 to 1000 do for z := -1000000 to 1000000 do for z2 := -1000000 to 1000000 do if x * y + z - z2 = 1302 then begin if (q < 1000) or (q and $ff = 0) then Memo1.Lines.Add(Format('%d * %d + %d - %d = 1302', [x, y, z, z2])); Inc(q); end; Memo1.Lines.Add(Format('%d Lösungen', [q])); end; |
Re: 4 Variablen sollen = 1302 sein.
// Edit: Ah, da war wohl einer schneller als ich :) (siehe oben)
trotzdem sende ich meine Antwort nochmal ;) Zitat:
Muss ich mal machen ... :) Aber diesmal wird es keine Primfaktorenanalyse... ;) So, jetzt nochmal 'ne Rückmeldung:
Delphi-Quellcode:
Das habe ich jetzt geschrieben, man kann das Programm auch starten, wenn man allerdings auf den Button1 klickt passiert nichts und dann kann man garnichts mehr machen, das komplette Programm bleibt stehen und man kann es nicht mehr übers "X" schließen
procedure TForm1.Button1Click(Sender: TObject);
var w, x, y, z : Integer; begin for w := Low(1) to High(9) do begin for x := Low(1) to High(9999) do begin for y := Low(1) to High(9999) do begin for z := Low(1) to High(9999) do begin if w * x - y + z = 1302 then begin Label1.Caption := IntToStr(w); Label2.Caption := IntToStr(x); Label3.Caption := IntToStr(y); Label4.Caption := IntToStr(z); end; end; end; end; end; end; end. :gruebel: mhhhhh.... komisch... aber vielleicht kann mir ja nochmal jemand helfen ;) Wäre cool, Euer Dave |
Re: 4 Variablen sollen = 1302 sein.
Low(1) ist wahrscheinlich -2^31 und High(9) ist wahrscheinlich 2^31-1. Das heißt, deine Berechnung braucht seeeehr lange. ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz