Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - for-schleife anzeigen lassen (win-32)


Maisinator - Mi 05.11.08 17:08
Titel: for-schleife anzeigen lassen (win-32)
hallo,
ich hab ein kleines problem
ich soll als HA einen "rechner" programmieren, der guckt, welche 4-stellige zahl, eine bestimmte bedinung erfüllt.
Bsp: 2025-->
20+25=45
45*45=2025

meine quellcode lautet:

var
zahl, vorne, hinten, summe: integer;
begin
for zahl:= 1000 to 9999 do
begin
vorne:= zahl div 100;
hinten:= zahl mod 100;
summe:= vorne+hinten;
end;
end;

nun weiß ich jedoch net, wie ich es schaffe, wenn eine zahl die bedinung erfüllt, dass sie mir dann in meinen label1 angezeigt wird.
kann mir jemand helfen????
(bei einem if-befehl krieg ich immer die meldung: string und integer sind unkompatibel)


nagel - Mi 05.11.08 17:59

Wenn ich deine Aufgabe richtig verstehe, musst du nur noch überprüfen, ob summe*summe das gleiche ist wie zahl; dabei tauchen keine Strings auf.


Hidden - Mi 05.11.08 18:25

Hi und :welcome: im Delphi-Forum,

Du hast dir ja mit den Color-Tags ganz viel Mühe gegeben, spitze :zustimm:

Brauchst du aber nicht, es gibt Delphi-Tags ;)

Delphi-Tags:
1:
  <span class="inlineSyntax"><span class="codecomment">{PROTECTTAGdb7efc0e7442ea39a506ab97ec09eab2}</span></span>                    


Einzelne Stellen markierst du mit dem
Highlight-Tag:

[highlight] markierte Stelle [/highlight]


mfG,


demdem - Mi 05.11.08 18:41

Hi Hidden ^^

ich glaube du musst den befehl : InttoStr( 'Zahl') benutzen, damit das Label die Zahl in String konvertieren kann ...

als z.B.


If Bedingung erfüllt, dann kommt X raus ;

Form1.Label1.Caption := inttoStr(X);


glaube ich ^^ ... aber ich bin auch noch ein Anfänger in dem Bereich

Gruß demdem


Maisinator - Mi 05.11.08 23:07

schon ma danke für die antworten!


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var
zahl, vorne, hinten, summe, zahlneu:integer;
begin
for zahl:= 1000 to 9999 do
  begin
  vorne:=zahl div 100;
  hinten:= zahl mod 100;
  summe:= vorne+hinten;
  zahlneu:= summe*summe;
  end;
  if zahlneu = zahl then
  Label1.Caption:= IntToStr (zahlneu);
  end;

wenn ich es so mache, krieg ich gar keine zahl im label


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
ar
zahl, vorne, hinten, summe, zahlneu:integer;
begin
for zahl:= 1000 to 9999 do
  begin
  vorne:=zahl div 100;
  hinten:= zahl mod 100;
  summe:= vorne+hinten;
  zahlneu:= summe*summe;
  end;
  Label1.Caption:= IntToStr (zahlneu);
  end;

und wenn ichs so mache, wird mir irgendwas mit 39000 angezeigt, dabei will ich ja ne 4-stellige zahl.
weiß noch jemand einen rat????


Martok - Do 06.11.08 00:22

user profile iconMaisinator hat folgendes geschrieben Zum zitierten Posting springen:
schon ma danke für die antworten!


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var
zahl, vorne, hinten, summe, zahlneu:integer;
begin
for zahl:= 1000 to 9999 do
  begin
  vorne:=zahl div 100;
  hinten:= zahl mod 100;
  summe:= vorne+hinten;
  zahlneu:= summe*summe;
  end;
  if zahlneu = zahl then
  Label1.Caption:= IntToStr (zahlneu);
  end;

wenn ich es so mache, krieg ich gar keine zahl im label

Ist auch klar, wie ordentliche Formatierung zeigt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var
zahl, vorne, hinten, summe, zahlneu:integer;
begin
  for zahl:= 1000 to 9999 do begin
    vorne:=zahl div 100;
    hinten:= zahl mod 100;
    summe:= vorne+hinten;
    zahlneu:= summe*summe;
  end;

  if zahlneu = zahl then
    Label1.Caption:= IntToStr (zahlneu);
end;

Nach der Schleife ist das relativ sinnlos: :arrow: das if in den begin...end-Block der Schleife verschieben.

user profile iconMaisinator hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
for zahl:= 1000 to 9999 do
  begin
{...}
  end;
  Label1.Caption:= IntToStr (zahlneu);
  end;

und wenn ichs so mache, wird mir irgendwas mit 39000 angezeigt, dabei will ich ja ne 4-stellige zahl.
weiß noch jemand einen rat????

Wie gesagt... nach der Schleife bringt das nichts. Was du hier machst ist den letzten Wert von zahlneu anzuzeigen (und zwar ohne Bedingung) und das ist (99+99)^2=39204.

cu
Martok


martin300 - Do 06.11.08 01:02

Hi,
eine vierstellige Zahl geht von 0000 bis 9999. In deiner Lösung werden nicht alle Zahlen
abgedeckt. Mein Tipp die Zahlen teilen.


Martok - Do 06.11.08 01:29

Naja. Die 'umgangssprachliche' Variante von vierstellig enthält aber kein Zero-Padding...


Logikmensch - Do 06.11.08 07:03


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var  
  zahl, vorne, hinten, summe, zahlneu:integer;  
begin  
  for zahl:= 1000 to 9999 do begin  
    vorne:=zahl div 100;  
    hinten:= zahl mod 100;  
    summe:= vorne+hinten;  
    zahlneu:= summe*summe;  
    if zahlneu = zahl then begin 
      Label1.Caption:= IntToStr (zahlneu);  
      break;
    end;
  end;   
end;


Martok - Do 06.11.08 08:57

Beziehungsweise gleich in ein Memo statt ein Label ausgeben, ich vermute ja mal da gibt es mehrere Lösungen.


Maisinator - Do 06.11.08 17:29

und wofür is der brake????

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var  
  zahl, vorne, hinten, summe, zahlneu:integer;  
begin  
  for zahl:= 1000 to 9999 do begin  
    vorne:=zahl div 100;  
    hinten:= zahl mod 100;  
    summe:= vorne+hinten;  
    zahlneu:= summe*summe;  
    if zahlneu = zahl then begin 
      Label1.Caption:= IntToStr (zahlneu);  
      <span style="color: orange">break;</span>
    end;
  end;   
end;

aba sonst danke!
ps: wie wärs dann mit nem memo feld????


Martok - Do 06.11.08 18:27

Immer mal Delphi-Hilfe fragen: Cursor im Delphi-Editor auf das Wort, F1 drücken, erleuchtet werden :think:

break verlässt eine Schleife. Hat hier den Zweck dass er nach dem er was ins Label geschrieben hat nicht mehr weitergrübelt. Ansonsten würde er bei ggf. auftretenden weiteren Funden das halt wieder Überschreiben. Deswegen auch das mit dem Memo.

Damit sind wir bei Punkt 2: gleich mal Hilfe nutzen üben ;) Stichwort: TMemo.Lines