Entwickler-Ecke

Sonstiges (Delphi) - Problem-- Teiler von Zahlen


DQ - Sa 02.10.10 20:09
Titel: Problem-- Teiler von Zahlen
Hallo Community ich habe ein Problem bei einem Programm das die möglichen Teiler einer Zahlenreihe von 1 bis z korrekt darstellt (mit for to do schleifen)
es sollte in dieser Form aussehen ( in einer Listbox oder im memo )
-------
Zahl Teiler
1 --1
2 --1,2
3 --1,3
4 --1,2,4
5 --1,5
.
.
.
-------
die richtigen Teiler bekomme ich schon raus jedoch nicht so schön nebeneinander sondern nur untereinander und dass meistens auch noch viel zu oft...
in etwa dieser vorm siehts bei mir aus
_____
Zahl Teiler
1 -- 1
2 -- 1
2 -- 2
3 -- 1
3 -- 1
3 -- 3
4 -- 1
4 -- 1
4 -- 1
4 -- 2
4 -- 2
4 -- 4
.
.
.
______
irgendwie so....


hier mein quell text
-----------------------------
var i,j,z : integer;
s : string ;
begin
z:= strtoint(edit_z.Text);
Memo1.lines.clear ;
Memo1.Lines.Add('teiler von/ sind') ;
for i := 1 to z do
begin
for j := 1 to z do
begin
if i mod j = i then break ; //<---hier durch bessert es sich etwas aber immer noch nicht so wie gewollt...

if i mod j = 0 then

s:= ' '+inttostr (i) +' -------- '+ ' '+inttostr(j) ;

Memo1.Lines.add (s) ;

end

end;
end ;
end.
---------------------------



hoffe auf Ratschläge...


Marc. - Sa 02.10.10 20:18

Hi und :welcome: im Forum!


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  for i := 1 to z do
  begin
    for j := 1 to z do // *3
    begin
      if (i mod j) = i then // *2
        break;

      if (i mod j) = 0 then
        s:= ' '+inttostr (i) +' -------- '' '+inttostr(j);

      Memo1.Lines.add (s); // *1
    end;
  end;

Nun überlege Dir, wann eine Zeile eingefügt werden soll (*1). :idea:
Zudem ist die Abbruchbedingung (*2) redundant. Das lässt sich auch anders formulieren (*3). ;)


DQ - Sa 02.10.10 23:30

Danke fürs :welcome: und die schnelle Antwort ^^

Ich werd mich gleich dran versuchen... :)
*2 ist nur aus Verzweiflung entstand war mir klar das das nicht das Gelbe vom Ei ist ^^
eine Frage noch- wie geb ich den Quelltext in so einem Fenster wie bei dir an?


Marc. - Sa 02.10.10 23:30

user profile iconDQ hat folgendes geschrieben Zum zitierten Posting springen:
eine Frage noch- wie geb ich den Quelltext in so einem Fenster wie er bei dir ist an?

Mit den Delphi-Tags. [delphi]Code[/delphi]

Grüße


DQ - So 03.10.10 00:23

Hab jetzt immerhin geschaft , dass ich nichts mehr doppeld hab
also
1 ---- 1
2 ---- 1
2 ---- 2
3 ---- 1
3 ---- 3
4 ---- 1
4 ---- 2
4 ---- 4
.
.
.

ich weiß jedoch einfach nicht was ich schreiben soll, damit die Teiler nebeneinander auftauchen...

der Stand der Dinge:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
var i,j,z : integer;

begin
 z:= strtoint(edit_z.Text);
 Memo1.lines.clear ;
  Memo1.Lines.Add('teiler von/ sind') ;
  for i := 1 to z do
    begin
      for j := 1 to z do
        begin


          if i mod j = 0 then
          begin
         Memo1.Lines.add( inttostr (i) +' --------  '+inttostr(j))  ;



         end;
     end
  end;
 end ;
end.


Marc. - So 03.10.10 00:50

user profile iconDQ hat folgendes geschrieben Zum zitierten Posting springen:
ich weiß jedoch einfach nicht was ich schreiben soll, damit die Teiler nebeneinander auftauchen...

Wie oft soll eine Zahl auf der linken Seite auftauchen? Wie oft wird die innere Schleife jeweils durchlaufen? :roll:


DQ - So 03.10.10 02:11

immernoch nich ganz so wie gewollt
aber ich bin zufrieden^^


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
var i,j,z : integer;

begin
 z:= strtoint(edit_z.Text);
 Memo1.lines.clear ;
  Memo1.Lines.Add('Zahl/ Teiler') ;
  for i := 1 to z do
 begin
  memo1.Lines.add ( inttostr (i));

   begin
      for j := 1 to z do
        if i mod j = 0 then
          begin
         Memo1.Lines.add(' --------  '+inttostr(j))  ;
          end
          end
      end;
 end ;
end.



sieht nun so aus
1
---- 1
2
---- 1
---- 2
3
---- 1
---- 3
4
---- 1
---- 2
---- 4
.
.
.


Danke für die guten Tips!


Tranx - So 03.10.10 13:44


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
var
  i,j,z : integer;
  s, TeilerStr : string;
begin
  z:= StrToInt(edit_z.Text);
  Memo1.lines.clear ;
  Memo1.Lines.Add('Teiler von: sind') ;
  Memo1.Lines.Add('1-- 1');
  for i := 2 to z do
  begin
    s := IntToStr(i)+'-- ';
    TeilerStr := '1, ';
    begin
      for j := 2 to (i-1)  do
      begin
        if i mod j = 0 then
        begin
          TeilerStr := TeilerStr + IntToStr(j)+', ';
        end;
      end
    end;
    Memo1.Lines.Add(s+TeilerStr+IntToStr(i));
  end;
end;


(1 habe ich aus verständlichen Gründen herausgenommen, denn die Zahl ist gleich ihren Teilern, würde also immer doppelt erscheinen)

dann ist das Ergebnis:


Teiler von: sind
1-- 1
2-- 1, 2
3-- 1, 3
4-- 1, 2, 4
5-- 1, 5
6-- 1, 2, 3, 6
7-- 1, 7
:
:
:
19-- 1, 19
20-- 1, 2, 4, 5, 10, 20
:
:

Das ist dann wohl so, wie Du es wünschst.