Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - FRAGE: was genau macht dieses Programm ?


pro_vieh - Do 29.11.07 15:59
Titel: FRAGE: was genau macht dieses Programm ?

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:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
procedure TForm1.FormShow(Sender:TObject);
   begin
        Edit1.Text:='6'
        Edit2.Text:='27'
   end;

procedure TForm1.Button1Click(Sender:TObjekt);
VAR Zahl:Integer;
   begin
        Zahl:=StrToInt(Edit1.Text);
        Zahl:=6+5*Zahl-3*Zahl*Zahl;
        Label1.Caption=IntToStr(Zahl);
   end;

procedure TForm1.Button2Click(Sender:TObjekt);
VAR Zahl1,Zah2,i:Integer;
   begin
        Zahl1:=StrToInt(Edit1.Text);
        Zahl2:=1;
        FOR  i:=1 TO Zahl1 DO
           Zahl2:=Zahl2*i;
        Label1.Caption:=IntToStr;
   end;

procedure TFrm1.Button3Click(Sender:TObjekt);
VAR i,j, Zahl1,Zahl2; Hilf:Integer;
begin
     Zahl1:=StrToInt(Edit1.Text);
     Zahl2:=Zahl:=StrToInt(Edit2.Text);
     IF Zahl1>Zahl2  THEN
     begin
          Hilf:=Zahl1;
          Zahl1:=Zahl2;
          Zahl2:=Hilf;
     end;
     i:=0;
     REPEAT
        i:=i+1
        j:=0;
        REPEAT
           j:=j+1
        Until (i*Zahl2) <= (j*Zahl1);
     Until   i*Zahl2=j*Zahl;
     Label3.Caption:=IntToStr(i*Zal2);
end;
END.


Bin gerade in der 10ten Klasse und versuche für nächstes
Jahr schonal ein bißchen Info zu lernen (dieses Formular von meiner Schwester)
und...

ich wäre euch unendlich dankbar, wenn ihr mir sagen könntet , was das programm macht, und forallem erklärt was passiert wenn ich auf Button 1,2,3 klicke das mit der Repeatschleife versteh ich nicht
danke fürs übersetzen

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt


freak4fun - Do 29.11.07 16:13

Lass es dir doch von deiner Sis erklären. :roll:

Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.FormShow(Sender:TObject);
begin
  Edit1.Text:='6'
  Edit2.Text:='27'
end;

Wenn das Formular angezeigt wird, steht in Edi1 der Wert 6 und in Edit2 der Wert 27.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Button1Click(Sender:TObjekt);
VAR Zahl:Integer;
begin
Zahl:=StrToInt(Edit1.Text);
Zahl:=6+5*Zahl-3*Zahl*Zahl;
Label1.Caption=IntToStr(Zahl);
end;

Es wird eine lokale Variable zahl vom Typ integer angelegt. Dieser wird der Wert aus Edit1 zugewiesen. Anschließend wird damit ein wenig gerechnet. o.O Am Ende wird die Zahl über Label1 ausgegeben.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button2Click(Sender:TObjekt);
VAR Zahl1,Zah2,i:Integer;
begin
Zahl1:=StrToInt(Edit1.Text);
Zahl2:=1;
FOR i:=1 TO Zahl1 DO
Zahl2:=Zahl2*i;
Label1.Caption:=IntToStr(Zahl2);
end;

Zahl1 wird zugewiesen und als Schleifenmaximum benutzt. Zahl2 ist 1 und wird Zahl1 mal mit sich selbst multipliziert.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TFrm1.Button3Click(Sender:TObjekt);
VAR i,j, Zahl1,Zahl2; Hilf:Integer;
begin
Zahl1:=StrToInt(Edit1.Text);
Zahl2:=Zahl:=StrToInt(Edit2.Text);
IF Zahl1>Zahl2 THEN
begin
Hilf:=Zahl1;
Zahl1:=Zahl2;
Zahl2:=Hilf;
end;
i:=0;
REPEAT
i:=i+1
j:=0;
REPEAT
j:=j+1
Until (i*Zahl2) <= (j*Zahl1);
Until i*Zahl2=j*Zahl;
Label3.Caption:=IntToStr(i*Zal2);
end;
END.

Erst wird die größere zahl in Zahl2 geschrieben, dann die Zahlen jeweils mit i bzw. j multipliziert.

Hoffe das hilft. Und nächstmal Delphi-Tähcks benutzen! :mrgreen: Saonst muss ich wieder die grünen Männchen holen. :twisted:


zuma - Do 29.11.07 16:33


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:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
procedure TForm1.FormShow(Sender:TObject);  // bei Formularanzeige
begin                 
Edit1.Text:='6'      // Editfeld1 mit Text 6 beschreiben
Edit2.Text:='27'     // Editfeld1 mit Text 27 beschreiben
end;

procedure TForm1.Button1Click(Sender:TObjekt);
VAR Zahl:Integer;
begin
Zahl:=StrToInt(Edit1.Text);       // Text (6) in zahl 6 wandeln
Zahl:=6+5*Zahl-3*Zahl*Zahl;       // 6 + 5 * 6 - 3 * 6 * 6 rechnen
Label1.Caption=IntToStr(Zahl);    // ergebnis der Berechnung (2268) anzeigen
end;

procedure TForm1.Button2Click(Sender:TObjekt);
VAR Zahl1,Zah2,i:Integer;   // Fehler, Zah2 wird in der procedure zahl2 genannt
begin
Zahl1:=StrToInt(Edit1.Text); // Text 6 in Zahl 6 wandeln
Zahl2:=1;            // zahl2 den wert 1 zuweisen 
FOR i:=1 TO Zahl1 DO // von 1 bis 6 mache
Zahl2:=Zahl2*i;      // zahl2 das ergebnis von zahl2 * Anzahl schleifendurchläufe zuweisen
Label1.Caption:=IntToStr; // Fehler, inttostr erwartet einen Parameter (gewollt ist wahrscheinlich IntToStr(zahl2) )
end;

procedure TFrm1.Button3Click(Sender:TObjekt);
VAR i,j, Zahl1,Zahl2; Hilf:Integer;
begin
Zahl1:=StrToInt(Edit1.Text);       // schon beschrieben
Zahl2:=Zahl:=StrToInt(Edit2.Text); // zahl2 = zahl = Text aus Edit2 als Zahl
IF Zahl1>Zahl2 THEN       // wenn zahl1 größer zahl2
begin
Hilf:=Zahl1;               // zahl1 in hilf merken
Zahl1:=Zahl2;              // zahl1 = zahl2
Zahl2:=Hilf;               // zahl2 = gemerkte zahl1 (zu deutsch, zahlen getauscht)  
end;
i:=0;        // schleifenzähler i mit 0 initialisieren
REPEAT     // 1te schleife beginnen
i:=i+1   // schleifenzähler i um 1 erhöhen
j:=0;    // schleifenzähler j mit 0 initialisieren
REPEAT  // 2te Schleife beginnen
j:=j+1  // schleifenzähler j um 1 erhöhen
Until (i*Zahl2) <= (j*Zahl1);  // 2te schleife durchlaufen, bis (schleifenzähler i * zahl2) kleiner oder gleich (schleifenzähler j * Zahl1)
Until i*Zahl2=j*Zahl; // 1te schleife durchlaufen, bis (schleifenzähler i * zahl2) gleich (schleifenzähler j * zahl)
Label3.Caption:=IntToStr(i*Zal2);  schleifenzähler 1 * zal2 zu Text wandeln und anzeigen
end;
END.


da war einer schneller ... ;)


freak4fun - Do 29.11.07 16:36

Dafür warst du grüner ;) ...


pro_vieh - Do 29.11.07 17:02

vielen vielen Dank, alles verstanden

super schnelle antwort

danke freakfun, zuma

@zuma bist du bielefeld fan ? tor am letzten spieltag war bombe^^


GTA-Place - Do 29.11.07 17:15

user profile iconzuma hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
Zahl:=6+5*Zahl-3*Zahl*Zahl;       // 6 + 5 * 6 - 3 * 6 * 6 rechnen
Label1.Caption=IntToStr(Zahl);    // ergebnis der Berechnung (2268) anzeigen
end;

Wobei hier natürlich nicht 2268 rauskommt, sondern -72. Typische 9Live-Aufgabe :-P


pro_vieh - Do 29.11.07 17:33

eine Frage hätte ich noch: und zwar

was bringt das Programm ?

soll das ein schlechter MiniTaschenrechner sein oder wie?

und warum benutzt man da eine SChleife?


zuma - Do 29.11.07 17:38

@GTA:
tipp das mal nackig (d.h. ohne Klammerung) in einen taschenrechner ...
meiner sagt 2268 ...

@pro-vieh:
das programm ist recht sinnfrei, dient wohl lediglich als lernhilfe
(wenn ich frech wäre, würde ich sagen: typische Frauenlogik ... :mrgreen:)

so, und nu is feierabend


pro_vieh - Do 29.11.07 17:56

eine letzte frage sry :oops: :roll:

beim programmieren bekam ich folgende fehlermeldung

hab schon überall gesuch aber nichts gefunden

4:=i ist unzulässig
aber i:=4 ist zulässig //warum is das so?


Christian S. - Do 29.11.07 17:59

":=" ist eine Zuweisung. Das heißt, das was links steht hat hinterher den Wert von dem, was rechts steht. "4 := i" hieße, dass die Zahl 4 hinterher den Wert von i hätte. Das wäre doof und würde unsere ganze Mathematik über den Haufen werfen, wenn die 4 nicht mehr den Wert 4 hätte, daher darf man das nicht *g*

Psssst: Crashkurs [http://www.christian-stelzmann.de/index_tutorials_crashkurs.html], Crashkurs Reloaded [http://www.christian-stelzmann.de/index_tutorials_crashkurs_reloaded.html]


Leuchtturm - Do 29.11.07 18:19

user profile iconzuma hat folgendes geschrieben:
@GTA:
tipp das mal nackig (d.h. ohne Klammerung) in einen taschenrechner ...
meiner sagt 2268 ...

@pro-vieh:
das programm ist recht sinnfrei, dient wohl lediglich als lernhilfe
(wenn ich frech wäre, würde ich sagen: typische Frauenlogik ... :mrgreen:)

so, und nu is feierabend


meiner sagt -72 :!: Punkt vor Strichrechung, also erst multiplizieren dann addieren/subtrahieren

Ich wette du hast das in einen billigen Taschenrechner eingegeben.
Bei meinem biliigen Taschenrechner kommt bei mir auch 2268 raus :mrgreen:
Leuchtturm


GTA-Place - Do 29.11.07 20:04

Sogar der Windows-Taschenrechner macht das beim nackigen Eintippen korrekt. Und Delphi erst recht. :mrgreen:


Wolle92 - Do 29.11.07 20:44
Titel: Re: FRAGE: was genau macht dieses Programm ?
Delphi sowieso...

user profile iconpro_vieh hat folgendes geschrieben:
Bin gerade in der 10ten Klasse und versuche für nächstes
Jahr schonal ein bißchen Info zu lernen (dieses Formular von meiner Schwester)


xD... soll jetzt nichts gegen dich sein, ist nur ne Feststellung...
Ich bin in der 10. Klasse, habe Diff Info und arbeite mit 3 Programmiersprachen (falls man Brainfuck als Programmiersprache ansieht, 4, falls ich Java nicht dazuzähle, weil ich es doof finde, dann wieder nur 3 bzw. 2), außerdem mit PHP und HTML... Soll jetzt keine Angeberei sein, nur ein Vergleich, eine Feststellung... (Dabei hab ich sogar noch eine Klasse übersprungen)


kalmi01 - Do 29.11.07 20:49

user profile iconChristian S. hat folgendes geschrieben:
":=" ist eine Zuweisung. Das heißt, das was links steht hat hinterher den Wert von dem, was rechts steht. "4 := i" hieße, dass die Zahl 4 hinterher den Wert von i hätte. Das wäre doof und würde unsere ganze Mathematik über den Haufen werfen, wenn die 4 nicht mehr den Wert 4 hätte, daher darf man das nicht *g*
Mega-Grins.
Gut, das wir in Pascal arbeiten !
Und nicht in PostScript, da geht sowas !
OK, der dann nachfolgende Code funktioniert vielleicht nicht ganz so, wie es Programmierer aus anderen Sprachen gewohnt sind, das ist aber nachvollziehbar.
Redefinitionen sind in PS Gang und Gäbe und gehören dank Adobe zum guten Stil.
EPS, PDF sind nichts Anderes als vergewaltigter PS-Code.


zuma - Fr 30.11.07 11:29

@Leuchtturm und GTA:

habt mich erwischt, der Taschenrechner, den ich gerade zur hand hatte, ist wirklich ein billiges Werbegeschenk ...

tja, immer wenn's mal zwischendurch schnell gehen soll ...

have a nice day ;)