Autor |
Beitrag |
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: So 24.08.08 20:52
Hallo liebe EE-Gemeinde,
ich komme wieder mit einem Problem.
Die Aufgabe des Programms ist es eine Liste von Zufallszahlen in einer Listbox auszugeben.
Durch das Verwenden weiterer Buttons sollen alle Zahlen: addiert werden, der durchschnitt errechnet werden,
die kleinste Zahl ermitteln, die größte Zahl aus der Liste.
Der erste Fehler tritt schon beim Addieren auf, und bei den weiteren Dingen weis ich nicht wie ichs machen soll.
Bin erst seit kurzer Zeit mit Delphi zugange, und unser Infolehrer gab auch nicht viel zur Lösung an.
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; Button2: TButton; Button3: TButton; Edit1: TEdit; Button4: TButton; Edit2: TEdit; Button5: TButton; Edit3: TEdit; Button6: TButton; Edit4: TEdit; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private public end;
var Form1: TForm1; zahlen : array [1..1000] of integer; i : integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin for i := 1 to 100 do zahlen[i] := random(1000)+1; for i := 1 to 100 do ListBox1.Items.Add (IntToStr (zahlen[i])); end;
procedure TForm1.Button2Click(Sender: TObject); begin ListBox1.Clear; end;
procedure TForm1.Button3Click(Sender: TObject); begin for i := 1 to 100 do add := add + zahlen[i]; Edit1.Text := IntToStr (add); end;
end. |
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: So 24.08.08 22:31
Wenn beim Addieren ein Fehler auftritt, dann schreib doch BITTE auch dazu, was für einer..
Ich vermute mal, dass er "add" nicht kennt, weil du es noch nirgends deklariert hast.
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.Button3Click(Sender: TObject); var add: integer; begin for i := 1 to 100 do add := add + zahlen[i]; Edit1.Text := IntToStr (add); end; |
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: So 24.08.08 22:36
Dude566 hat folgendes geschrieben: | Durch das Verwenden weiterer Buttons sollen alle Zahlen: addiert werden, der durchschnitt errechnet werden, die kleinste Zahl ermitteln, die größte Zahl aus der Liste. [...] bei den weiteren Dingen weis ich nicht wie ichs machen soll. |
- Durchschnitt
Wie berechnet man einen Notendurchschnitt? Man zählt alle Werte zusammen und teilt sie durch die Anzahl. Genau das musst du hier auch machen.
- Kleinste Zahl
Dazu brauchst du eine neue Variable. Dann gehst du alle Zahlen nacheinander durch und vergleichst sie mit der Startvariablen (die am Anfang auf High(Integer initialisiert wurde, das ist die höchst mögliche Zahl). Wenn die Zahl kleiner als die Variable ist, weist du ihr die neue Zahl zu. Am Schluss hast du die kleinste Zahl in der Variablen.
- Größte Zahl
Genauso wie die kleinste Zahl - nur eben umgekehrt. 
|
|
baka0815
      
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: Mo 25.08.08 09:10
|
|
Dude566 
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mo 25.08.08 16:40
Danke Yogu aber die Theorie hab ich auch so verstanden.
Also ich hab das Programm jetzt fertig und es läuft weist aber noch ein paar Fehler auf.
Er gibt mir bei der kleinsten Zahl grundsätzlich "1" an auch wenn sie nicht in der Liste ist,
und bei der größten die "15277848", obwohl die Zahlen nur bis maximal 1000 gehen.
Ich bin mir sicher ich hab irgendwo nen peinlichen Denkfehler  .
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: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; Button2: TButton; Button3: TButton; Edit1: TEdit; Button4: TButton; Edit2: TEdit; Button5: TButton; Edit3: TEdit; Button6: TButton; Edit4: TEdit; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); private public end;
var Form1: TForm1; zahlen : array [1..100] of integer; i : integer; min : integer; max : integer; summe : single; big : integer; small : integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin for i := 1 to 100 do zahlen[i] := random(1000)+1; for i := 1 to 100 do ListBox1.Items.Add (IntToStr (zahlen[i])); end;
procedure TForm1.Button2Click(Sender: TObject); begin ListBox1.Clear; end;
procedure TForm1.Button3Click(Sender: TObject); begin for i := 1 to 100 do summe := summe + zahlen[i]; Edit1.Text := FloatToStr (summe); end;
procedure TForm1.Button4Click(Sender: TObject); begin Edit2.Text := FloatToStr (summe / 100); end;
procedure TForm1.FormCreate(Sender: TObject); begin big := 999999; small := 1; end;
procedure TForm1.Button5Click(Sender: TObject); begin for i := 0 to 100 do if zahlen[i] < small then small := zahlen[i]; Edit3.Text := IntToStr (small); end;
procedure TForm1.Button6Click(Sender: TObject); begin for i := 0 to 100 do if zahlen[i] > big then big := zahlen[i]; Edit4.Text := IntToStr (big); end;
end. |
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mo 25.08.08 16:45
1. Randomize vergessen.
2. Small ist 1 und damit IMMER die kleinste Zahl in deinem Beispiel. Random(1000)+1 -> Bereich von 1 bis 1000.
3. Weshalb Big "15277848" annimmt ist mir momentan ein Rätsel. Wobei wohl keine Deiner Zahlen größer als Big sein kann. Random(1000)+1 < 999.999 !!
€:
Delphi-Quelltext 1:
| for i := 0 to 100 do if zahlen[i] > big then big := zahlen[i]; |
Da liegt der Fehler! In der Prozedur darüber übrigens auch. 
Zuletzt bearbeitet von Marc. am Mo 25.08.08 16:50, insgesamt 4-mal bearbeitet
|
|
Dude566 
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mo 25.08.08 16:48
Also ich hab gerade selber nochmal über den Text geschaut und da ist mir das mit der 1 aufgefallen und Randomize,
hab ich auch schon behoben.
Ja, das mit der Größten das ist mir auch ein Rätsel.
Weiß jemand was dazu?
Zuletzt bearbeitet von Dude566 am Mo 25.08.08 16:51, insgesamt 1-mal bearbeitet
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mo 25.08.08 16:51
|
|
LexXis
      
Beiträge: 170
Erhaltene Danke: 3
|
Verfasst: Mo 25.08.08 16:59
15277848 ist doch der Wert, den nicht-initialisierte Integer immer annehmen, oder? 
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mo 25.08.08 17:03
|
|
Dude566 
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mo 25.08.08 17:05
So und wieder ein Problem gelöst, und das Programm läuft Rund.
Vielen Dank an euch!
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 25.08.08 22:34
LexXis hat folgendes geschrieben: | 15277848 ist doch der Wert, den nicht-initialisierte Integer immer annehmen, oder?  |
nööööööö
sie nehmen eine zahl zwischen
Quelltext 1:
| minint <= zahl <= maxint |
an...
welche...? das ist bei einer nicht initialisierten zahl, dem zufall überlassen...
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mo 25.08.08 22:51
Grenzgaenger hat folgendes geschrieben: | welche...? das ist bei einer nicht initialisierten zahl, dem zufall überlassen... |
Nicht dem Zufall, sondern dem Wert, der vorher dort im Speicher lag. Delphi initialisiert die Variable, die jetzt den Platz einnimmt, absichtlich nicht, um Zeit zu sparen. Deswegen muss das immer von Hand geschehen. 
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 25.08.08 23:18
|
|