AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

4 Variablen sollen = 1302 sein.

Ein Thema von Dave_lernt_Delphi · begonnen am 26. Apr 2009 · letzter Beitrag vom 1. Mai 2009
Antwort Antwort
Seite 1 von 3  1 23   
Dave_lernt_Delphi

Registriert seit: 19. Mär 2009
29 Beiträge
 
Delphi 7 Enterprise
 
#1

4 Variablen sollen = 1302 sein.

  Alt 26. Apr 2009, 17:04
Hey ihr Delphi- Kenner,
ich habe das Problem, dass ich 4 Variablen habe, die zusammen 1302 sollen:

w * x - y + z = 1302; Wenn ich das Programm starten möchte sagt Delphi :
Der linken Seite kann nichts zugewiesen werden
Weiß einer von euch, wie ich das Problem beheben kann?
Euer Dave
Ich hoffe, dass ihr mir helfen könnt.
Viele Grüße aus dem Kreis Hildesheim
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: 4 Variablen sollen = 1302 sein.

  Alt 26. Apr 2009, 17:05
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?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Dave_lernt_Delphi

Registriert seit: 19. Mär 2009
29 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: 4 Variablen sollen = 1302 sein.

  Alt 26. Apr 2009, 17:08
w, x, y und z sollen zusammen 1302 sein...

z.B.
1 * 1302 - 2 + 2 = 1302
Ich hoffe, dass ihr mir helfen könnt.
Viele Grüße aus dem Kreis Hildesheim
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#4

Re: 4 Variablen sollen = 1302 sein.

  Alt 26. Apr 2009, 17:12
Sieht sehr nach einem Konstrukt mit vier For-Schleifen aus, die solange ausprobieren, bis was gefunden wurde.
  Mit Zitat antworten Zitat
Dave_lernt_Delphi

Registriert seit: 19. Mär 2009
29 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: 4 Variablen sollen = 1302 sein.

  Alt 26. Apr 2009, 17:13
Genau das meine ich
Wie aber kann ich das machen?
Ich hoffe, dass ihr mir helfen könnt.
Viele Grüße aus dem Kreis Hildesheim
  Mit Zitat antworten Zitat
Benutzerbild von rwachtel
rwachtel

Registriert seit: 26. Aug 2004
Ort: Köln
530 Beiträge
 
RAD-Studio 2010 Pro
 
#6

Re: 4 Variablen sollen = 1302 sein.

  Alt 26. Apr 2009, 17:19
Zitat von Dave_lernt_Delphi:
Genau das meine ich
Wie aber kann ich das machen?
Code:
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;
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).

// 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.
Robert Wachtel
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
569 Beiträge
 
Delphi XE8 Professional
 
#7

Re: 4 Variablen sollen = 1302 sein.

  Alt 26. Apr 2009, 17:45
Hallo,
kann es sein, das "DAS" eine Primfaktoren-Analyse werden soll ?
Markus H.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.011 Beiträge
 
Delphi 12 Athens
 
#8

Re: 4 Variablen sollen = 1302 sein.

  Alt 26. Apr 2009, 17:55
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:
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;
und das obwohl ich die Wertebereiche eingeschrenkt und doppelte Lösungen ignoriert hab.
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
Delphi-Quellcode:
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;
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Dave_lernt_Delphi

Registriert seit: 19. Mär 2009
29 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: 4 Variablen sollen = 1302 sein.

  Alt 26. Apr 2009, 18:01
// Edit: Ah, da war wohl einer schneller als ich (siehe oben)
trotzdem sende ich meine Antwort nochmal


Zitat von markus5766h:
Hallo,
kann es sein, das "DAS" eine Primfaktoren-Analyse werden soll ?
Hey, das ist ne gute Idee
Muss ich mal machen ...
Aber diesmal wird es keine Primfaktorenanalyse...

So, jetzt nochmal 'ne Rückmeldung:

Delphi-Quellcode:
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.
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
mhhhhh.... komisch... aber vielleicht kann mir ja nochmal jemand helfen Wäre cool,
Euer Dave
Ich hoffe, dass ihr mir helfen könnt.
Viele Grüße aus dem Kreis Hildesheim
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: 4 Variablen sollen = 1302 sein.

  Alt 26. Apr 2009, 18:16
Low(1) ist wahrscheinlich -2^31 und High(9) ist wahrscheinlich 2^31-1. Das heißt, deine Berechnung braucht seeeehr lange.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:03 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