Autor Beitrag
elle333
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Sa 15.01.11 23:45 
Hey ich hab ein problem
Im Informatikunterricht haben wir die ListBox kennengelernt
dazu haben wir ein prgramm gemacht, dass die Fibonaccizahlen in einer listbox anzeigt

ausblenden volle Höhe 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:
47:
48:
49:
50:
51:
52:
53:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    EdN: TEdit;
    BuRechne: TButton;
    EdSumme: TEdit;
    LaSumme: TLabel;
    LaN: TLabel;
    LaResultat: TLabel;
    ListBox: TListBox;
    procedure BuRechneClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BuRechneClick(Sender: TObject);
var n, i: Integer;
a, b, c: Int64;
begin
  n := StrToInt(EdN.Text);
  b := 0;
  c := 1;
  ListBox.Clear;

  for i := 1 to n do
    begin
    a := b + c;
    c := b;
    b := a;
    ListBox.Items.Add (IntToStr(a));
    end;


  EdSumme.Text := IntToStr(a);
end;

end.


Als Hausaufgabe sollen wir folgendes machen:

Zitat:
Schreibe ein Delphi-Programm, dass bei Eingabe von Kapital (Euro), Zinssatz (%) und Laufzeit (Jahre) in einer Listbox jeweils den Gesamtkapitalstand einschließlich Zinsen und Zinseszinsen nach Ablauf jedes Jahres ausgibt.

Benutze eine for-Schleife mit variabler Obergrenze.



Bisher habe ich folgendes gemacht

ausblenden volle Höhe 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:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    BuRechne: TButton;
    EdLaufzeit: TEdit;
    Label4: TLabel;
    Label3: TLabel;
    ListBox: TListBox;
    Label1: TLabel;
    Label2: TLabel;
    EdZinsen: TEdit;
    EdKapital: TEdit;
    EdGesamt: TEdit;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    procedure BuRechneClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BuRechneClick(Sender: TObject);
var n ,i ,k , z, l, g, g2: Integer;

begin

  n := StrToInt(EdGesamt.Text) ;
  k := 0;
  z := 1;
  ListBox.Clear;

  for i := 1 to n do

    begin

    k := StrToInt (EdKapital.Text) ;
    z := StrToInt (EdZinsen.Text) ;
    l := StrToInt (EdLaufzeit.Text) ;
    g := k * z ;
    g2 := g - k ;
    ListBox.Items.Add (IntToStr(g));
    EdGesamt.Text := IntToStr(g2);
    end;

    EdSumme.Text := IntToStr(g2);



end.


kann mir vllt jemand sagen was speziell dieser abschnitt bewirkt, unabhängig vom programm
dann komme ich sicher auch von selber drauf was ich falsch gemacht hab:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
 n := StrToInt(EdGesamt.Text) ;
  k := 0;
  z := 1;
  ListBox.Clear;

  for i := 1 to n do

    begin



Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Sa 15.01.2011 um 22:50
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Sa 15.01.11 23:50 
user profile iconelle333 hat folgendes geschrieben Zum zitierten Posting springen:

Bisher habe ich folgendes gemacht

[...]

kann mir vllt jemand sagen was speziell dieser abschnitt bewirkt, unabhängig vom programm
dann komme ich sicher auch von selber drauf was ich falsch gemacht hab:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
 n := StrToInt(EdGesamt.Text) ;
  k := 0;
  z := 1;
  ListBox.Clear;

  for i := 1 to n do

    begin


Du willst uns jetzt n bisschen verarschen, oder? DU hast bisher das geschrieben, weißt aber selbst nicht was das Ding macht? Hast du leicht mit deinem Kopf solange gegen das Keyboard gedroschen bis etwas rausgekommen ist das man kompilieren konnte?

Nun zu deiner frage:
du liest in die Integervariable 'n' eine Zahl ein, aus dem Editfeld 'EdGesamt'. Dann setzt du die beiden Variablen k und z 0 bzw 1. Und dann Löscht du mal den gesamten Inhalt von der ListBox. Die letzten Zeilen sind eine Listbox, mit der Laufvariablen 'i'. Diese geht von 1 bis zu der Zahl 'n', die du ja voher eingelesen hattest. Klar soweit?

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
elle333 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: So 16.01.11 02:12 
user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconelle333 hat folgendes geschrieben Zum zitierten Posting springen:

Bisher habe ich folgendes gemacht

[...]

kann mir vllt jemand sagen was speziell dieser abschnitt bewirkt, unabhängig vom programm
dann komme ich sicher auch von selber drauf was ich falsch gemacht hab:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
 n := StrToInt(EdGesamt.Text) ;
  k := 0;
  z := 1;
  ListBox.Clear;

  for i := 1 to n do

    begin


Du willst uns jetzt n bisschen verarschen, oder? DU hast bisher das geschrieben, weißt aber selbst nicht was das Ding macht? Hast du leicht mit deinem Kopf solange gegen das Keyboard gedroschen bis etwas rausgekommen ist das man kompilieren konnte?

Nun zu deiner frage:
du liest in die Integervariable 'n' eine Zahl ein, aus dem Editfeld 'EdGesamt'. Dann setzt du die beiden Variablen k und z 0 bzw 1. Und dann Löscht du mal den gesamten Inhalt von der ListBox. Die letzten Zeilen sind eine Listbox, mit der Laufvariablen 'i'. Diese geht von 1 bis zu der Zahl 'n', die du ja voher eingelesen hattest. Klar soweit?

lg elundril


weiss zwar nicht wieso ich leute verarschen sollte, aber egal.
Ich hatte nur die Frage wie ich die Gesamtkontostände nach jedem jahr in die listbox bekomme.
Wie man das ohne mach weiss ich.

Deine Antwort hätte also auch ein bisschen freundlicher ausfallen können.

ich habe das was wir im unterricht gemacht haben als vorlage genommen haben und hab versucht es so abzuändern, dass es eben die bedingungen erfüllt.
und da ich nach 2 h nicht mehr weiter kam und ich gewisse teile nicht verstanden habe, dachte ich ich stell die frage mal im forum.

trotzdem danke für deine antwort


Zuletzt bearbeitet von elle333 am So 16.01.11 12:33, insgesamt 1-mal bearbeitet
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 16.01.11 11:20 
Na, an welcher Stelle in deinem Programm wird denn für jedes Jahr das Kapital berechnet?
elle333 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: So 16.01.11 12:55 
so hab es mal verändert
will ich jetzt aber eine kommazahl für die prozente eingeben, dann sagt es mir, dass die kommazahl kein gültiger Integerwert ist.
wie kann ich das beheben.

und wenn ich das ganze in den quelltext schreibe, dann sagt er [Fehler] Unit1.pas(53): Inkompatible Typen: 'Integer' und 'Extended'

Also versuche ich da wohl mit zwei verschiedenen Rechentypen zu arbeiten.


ausblenden volle Höhe 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:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    BuRechne: TButton;
    EdLaufzeit: TEdit;
    Label4: TLabel;
    Label3: TLabel;
    ListBox: TListBox;
    Label1: TLabel;
    Label2: TLabel;
    EdZinsen: TEdit;
    EdKapital: TEdit;
    EdGesamt: TEdit;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    procedure BuRechneClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BuRechneClick(Sender: TObject);
var i ,k , z, l, g, g2: Integer;

begin

  l := StrToInt(EdLaufzeit.Text) ;
  ListBox.Clear;

  for i := 1 to l do

    begin

    k := StrToInt (EdKapital.Text) ;
    z := StrToInt (EdZinsen.Text) ;
    g := k * (0.01*z) ;
    g2 := g - k ;
    ListBox.Items.Add (IntToStr(g2));
    EdGesamt.Text := IntToStr(g2);
    end;


end;

end.


Und mein Programm spuckt leider immernochnicht die zwischenwerte aus.
woran liegt das
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: So 16.01.11 13:48 
Folende Zeile:

ausblenden Delphi-Quelltext
1:
g := k * (0.01*z) ;					


Wenn du Ganzzahlen (=Integer) mit Kommazahlen (=Double, Float, Extended) multiplizierst, dann ist das Ergebnis wiederum eine Kommazahl. Du versuchst aber in dieser Zeile, eine Kommazahl (das Ergebnis der Berechnung) in eine Ganzzahl (g) zu speichern, was natürlich schief geht. Für dich bietet sich hier übrigens als Variablentyp 'currency' (=Währung) an, da hier auf zwei Nachkommastellen genau gespeichert wird.

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)

Für diesen Beitrag haben gedankt: elle333
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 16.01.11 14:22 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
for i := 1 to l do
  begin
    k := StrToInt (EdKapital.Text) ;
    z := StrToInt (EdZinsen.Text) ;

Warum liest du immer wieder die Eingabe ein? Und "l" als Variable zu benutzen ist eher unglücklich. Zählen Sie alles "l"s:
ausblenden Quelltext
1:
lll11ll1l111l1lll11111ll111ll111ll111l1l1l1lll11l					
elle333 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: So 16.01.11 14:36 
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
for i := 1 to l do
  begin
    k := StrToInt (EdKapital.Text) ;
    z := StrToInt (EdZinsen.Text) ;

Warum liest du immer wieder die Eingabe ein? Und "l" als Variable zu benutzen ist eher unglücklich. Zählen Sie alles "l"s:
ausblenden Quelltext
1:
lll11ll1l111l1lll11111ll111ll111ll111l1l1l1lll11l					


das mit dem l ist mir auch schon aufgefallen hab jetzt L als variable
Die Eingabe muss ich doch einlesen, sonst kann ich doch gar nicht mit den Werten rechnen, oder hab ich da was falsch verstanden.

Das einzige problem ist bei mir momentan, dass es irgenwie diese Zeile nicht beachtet

ausblenden Delphi-Quelltext
1:
  for i := 1 to L do					


er rechnet nur das erste jahr (L = Laufzeit)
ab dem zweiten jahr kommt jedes mal der wert des ersten jahres raus also steht dann in der listbox zum beispiel 5 mal 120
wenn ich die die laufzeit 5 eingegben hab
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 16.01.11 15:48 
Benutze eindeutige, aussagekräftige Bezeichner. Bezeichner bestehend aus einem Buchstaben sind das selten. Besser wäre laufzeitJahre oder so was.

Klar musst du sie einlesen, aber doch nur einmal. Das Ausgangsstartkapital ändert sich doch nicht.

Übrigens: www.delphipraxis.net...mit-do-schleife.html. Seid ihr in der gleichen Klasse oder wie?
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: So 16.01.11 16:11 
Darf ich die diese beiden "Bücher" ans Herz legen?

Christians Crashkurs
Delphi-Wikibook

Damit solltest du sicher weiterkommen.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.

Für diesen Beitrag haben gedankt: elle333
elle333 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: So 16.01.11 16:21 
So hab jetzt die varibalen umbenannt
das problem ist immernoch das gleiche die schleife läuft leider nicht ab.

wenn ich zb. sage kapital 100 € Zins 5% laufzeit 3 Jahre
zeigt es in der Listbox an :

105
105
105

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:
procedure TForm1.BuRechneClick(Sender: TObject);
var i ,Kapital , Zins, Laufzeit : Integer;
var Gesamtkapital: Real;

begin

  Laufzeit := StrToInt(EdLaufzeit.Text) ;
  ListBox.Clear;

  for i := 1 to Laufzeit do

    begin

    Kapital := StrToInt (EdKapital.Text) ;
    Zins := StrToInt (EdZinsen.Text) ;
    Gesamtkapital:= Kapital * (1+ (Zins/100)) ;
    ListBox.Items.Add (FloatToStr(Gesamtkapital));
    EdGesamt.Text := FloatToStr(Gesamtkapital);
    end;


end;

end.
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: So 16.01.11 16:42 
ausblenden Delphi-Quelltext
1:
2:
3:
Kapital:= StrToInt(EdKapital.Text);
Zins:= StrToInt(EdZinsen.Text);
Gesamtkapital:= Kapital * (1+ (Zins/100));


Fällt dir da nichts auf? Du rechnest doch mit Konstanten. Das Gesamtkapital wird immer wieder mit den selben Werten berechnet, wie soll da was anderes rauskommen? :nixweiss:

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 16.01.11 16:44 
Du wirst diese Zeile Gesamtkapital:= Kapital * (1+ (Zins/100)) ; tausendmal aufrufen können und es wird nichts anderes rauskommen. Auch wenn ich 2 x 2 tausend mal rechen wird 4 rauskommen. Du musst ja noch irgendwie die Jahre einfließen lassen. Den Fehler hat übrigen auch dein Kollege aus der Delphipraxis gemacht. Da du den von mir verlinkten Thread anscheinend nicht durchgelesen hast, hier noch mal meine Lösung:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function ZinsesZins(StartKapital, Zins: Double; Jahre: Integer): Double;
var
  i: Integer;
begin
  if Zins <= 0 then
    Raise ERangeError.Create('Zins ist kleiner/ gleich Null');
  if StartKapital <= 0 then
    Raise ERangeError.Create('Startkapital ist kleiner/gleich Null');
  if Jahre < 0 then
    Raise ERangeError.Create('Jahre ist kleiner Null');
  Result := StartKapital;
  for i := 1 to Jahre do
  begin
    Startkapital := Result;
    Result := Result*(Zins/100)+StartKapital;
  end;
end;

Für diesen Beitrag haben gedankt: elle333
elle333 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: So 16.01.11 19:02 
danke leute habs jetzt hinbekommen