AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

kuerzen von 3 werten

Ein Thema von glkgereon · begonnen am 28. Okt 2004 · letzter Beitrag vom 29. Okt 2004
Antwort Antwort
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

kuerzen von 3 werten

  Alt 28. Okt 2004, 20:15
also, ich hab drei werte zu einem record zusammengefasst und das in einen array gepackt...nun will ich den ganzen kram kürzen, nur irgendwas stimmt da nicht...

die werte können minimal 1 sein und höchstens 20

es soll nur gekürzt werden wenns bei allen geht

also im Button2Click wird jedes element erst gekürzt, und dann in die listbox geschrieben
nur in der listbox steht dann 100mal "0:0:0"

gesamt is die anzahl der elemente
results is der array

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
  procedure kuerzen(i:integer);
  var j:integer;
  begin
    for j:=20 downto 2 do
      if (results[i].metall mod j=0) and
          (results[i].kristall mod j=0) and
          (results[i].tritium mod j=0)
      then begin
            results[i].metall:=results[i].metall div j;
            results[i].kristall:=results[i].kristall div j;
            results[i].tritium:=results[i].tritium div j;
            end;
  end;
begin
ListBox1.Clear;
  for i:=1 to gesamt do
    begin
    kuerzen(i);
    ListBox1.Items.Add(inttostr(results[i].metall)+':'
                      +inttostr(results[i].kristall)+':'
                      +inttostr(results[i].tritium));
    end;
end;
also ich find das eigentlich total logisch, aber irgendwie haut das nicht hin....

auch wenn ichs in kuerzen nur von 2 bis 2 laufen lasse kommt der fehler...

nochma edit:

folgender code funzt:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var t1,t2,i:integer;
begin
  t1:=strtoint(Edit1.Text);
  t2:=strtoint(Edit2.Text);
  for i:=20 downto 2 do
    if (t1 mod i=0) and (t2 mod i=0)
    then begin
          t1:=t1 div i;
          t2:=t2 div i;
          end;
  showmessage(inttostr(t1)+':'+inttostr(t2));
end;
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#2

Re: kuerzen von 3 werten

  Alt 29. Okt 2004, 09:10
Wie ist denn das Array results definiert?
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: kuerzen von 3 werten

  Alt 29. Okt 2004, 10:10
Hast du mal "kuerzen" weggelassen und nachgeschaut, was dann in der ListBox steht?

Delphi-Quellcode:
    begin
    //kuerzen(i);
    ListBox1.Items.Add(inttostr(results[i].metall)+':'
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#4

Re: kuerzen von 3 werten

  Alt 29. Okt 2004, 11:46
also, das array is wie folgt definiert:

Delphi-Quellcode:
type
  TKurs = record
            metall, kristall, tritium:integer;
          end;
var
  results: array[1..155] of TKurs;
und zum zweiten..ähhhh, da kommt auch 0...das KANN nicht sein


also hier nochma der gesamte code:

Delphi-Quellcode:
var
  Form1: TForm1;
  results: array[1..155] of TKurs;
  gesamt:integer;

implementation

{$R *.dfm}

//"tripel" suchen
procedure TForm1.Button1Click(Sender: TObject);
var metall,kristall,tritium,i:integer;
begin
ListBox1.Clear;
gesamt:=0;
for metall:=1 to 20 do
  for kristall:=1 to 20 do
    for tritium:=1 to 20 do
      begin
//wenn es passt dann eintragen
      if abs(metall/kristall-2.2)<0.5
      then if abs(metall/tritium-2.1)<0.5
            then if abs(kristall/tritium-1)<1
                  then begin
//in listbox
                        ListBox1.Items.Add(inttostr(metall)+':'+inttostr(kristall)+':'+inttostr(tritium));
                        inc(gesamt);
                        label1.Caption:=inttostr(gesamt);
//und in array
                        results[i].metall:=metall;
                        results[i].kristall:=kristall;
                        results[i].tritium:=tritium;
                        end;
      end;
end;

//kuerzen
procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
  procedure kuerzen(i:integer);
  var j:integer;
  begin
    for j:=20 downto 2 do
      if (results[i].metall mod j=0) and
          (results[i].kristall mod j=0) and
          (results[i].tritium mod j=0)
      then begin
            results[i].metall:=results[i].metall div j;
            results[i].kristall:=results[i].kristall div j;
            results[i].tritium:=results[i].tritium div j;
            end;
  end;
begin
ListBox1.Clear;
  for i:=1 to gesamt do
    begin
    kuerzen(i);
    ListBox1.Items.Add(inttostr(results[i].metall)+':'
                      +inttostr(results[i].kristall)+':'
                      +inttostr(results[i].tritium));
    end;
end;

end.
so, ich hab ma ausprobiert ob in results[i].xxx überhaupt was drinsteht....
bei folgendem code in Button1Click kommt das richtige ergebnis:

Delphi-Quellcode:
results[i].metall:=metall;
results[i].kristall:=kristall;
results[i].tritium:=tritium;
ListBox1.Items.Add(inttostr(results[i].metall)+':'+inttostr(results[i].kristall)+':'+inttostr(results[i].tritium));
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#5

Re: kuerzen von 3 werten

  Alt 29. Okt 2004, 12:02

Ich glaube in button1Click solltest du auch mal i erhöhen. Sonst schreibt er die Werte immer auf den ersten Eintrag und das möchtest du doch nicht, oder?
Zum dem solltest du i überhaupt mit einem Wert initsialisiern. Am besten 1.
P.S: Alles auf Button1Click bezogen!
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#6

Re: kuerzen von 3 werten

  Alt 29. Okt 2004, 12:05
hi,

results wird nicht initialisiert!

Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#7

Re: kuerzen von 3 werten

  Alt 29. Okt 2004, 12:34


ich musste in Button1Click i durch gesamt ersetzen ARGHHHHH


aba jetzt funzt es...

danke für den hinweis..
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:13 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