Autor Beitrag
DQ
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Sa 02.10.10 20:09 
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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Sa 02.10.10 20:18 
Hi und :welcome: im Forum!

ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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?


Zuletzt bearbeitet von DQ am Sa 02.10.10 23:31, insgesamt 1-mal bearbeitet
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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:
ausblenden 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 03.10.10 02:11 
immernoch nich ganz so wie gewollt
aber ich bin zufrieden^^

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: So 03.10.10 13:44 
ausblenden 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.