Entwickler-Ecke
Sonstiges (Delphi) - Zahlenliste Aufgaben
Dude566 - So 24.08.08 20:52
Titel: Zahlenliste Aufgaben
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.
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:
| 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 - 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; |
Yogu - 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 - Mo 25.08.08 09:10
Titel: Re: Zahlenliste Aufgaben
Dude566 hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5:
| 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; | |
Das kannst du beides zusammen in eine Schleife packen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button1Click(Sender: TObject); begin for i := 1 to 100 do begin zahlen[i] := random(1000)+1; ListBox1.Items.Add(IntToStr(zahlen[i])); end; end; |
Ausserdem ist "zahlen" ein Array mit 1.000 Einträgen, von 1 bis 1.000, du verwendest aber immer nur 1 bis 100. Dann kannst du das Array auch entsprechend definieren - spart Platz.
Dude566 - Mo 25.08.08 16:40
Danke Yogu aber die Theorie hab ich auch so verstanden. :wink: :D
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 :oops: .
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: 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. - 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. ;)
Dude566 - 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?
Marc. - Mo 25.08.08 16:51
Dude566 hat folgendes geschrieben: |
Ja, das mit der Größten das ist mir auch ein Rätsel. |
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. ;)
Alternativ siehe zwei Postings weiter oben. Ich hatte ohne zu aktualisieren editiert. :?
LexXis - Mo 25.08.08 16:59
15277848 ist doch der Wert, den nicht-initialisierte Integer immer annehmen, oder? :gruebel:
Marc. - Mo 25.08.08 17:03
LexXis hat folgendes geschrieben: |
15277848 ist doch der Wert, den nicht-initialisierte Integer immer annehmen, oder? :gruebel: |
Der ist IMHO zufällig. Stimmt aber. ;)
Dude566 - Mo 25.08.08 17:05
So und wieder ein Problem gelöst, und das Programm läuft Rund.
Vielen Dank an euch!
Delete - Mo 25.08.08 22:34
LexXis hat folgendes geschrieben: |
15277848 ist doch der Wert, den nicht-initialisierte Integer immer annehmen, oder? :gruebel: |
nööööööö
sie nehmen eine zahl zwischen
Quelltext
1:
| minint <= zahl <= maxint |
an...
welche...? das ist bei einer nicht initialisierten zahl, dem zufall überlassen...
Yogu - 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. :idea:
Delete - Mo 25.08.08 23:18
Yogu hat folgendes geschrieben: |
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. :idea: |
fast :-) . aber die speicherstelle wird willkürlich ausgewählt... :-)
halt diejenige, welche grad frei ist ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!