Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi leeres edit-Fenster auslesen (https://www.delphipraxis.net/58520-leeres-edit-fenster-auslesen.html)

siri 8. Dez 2005 11:37


leeres edit-Fenster auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!

Wir programmieren im Informatikunterricht ein Programm zur Berechnung des Notendurchschnitts im Kurshalbjahr.
Dazu haben wir eine gewisse Menge an edit-Fenstern erstellt(siehe Bild), jedoch werden nicht immer alle benötigt.

Nun ist die Frage:
Was tun, wenn ein edit-Fenster leer bleibt? Denn wir müssen ja eingegebene Notensumme durch Notenanzahl rechnen.
Da können wir ja keine feste Zahl eingeben...

Bild:
[i] *schnipp schnapp* Bild in den Anhang geschoben.

Unser Code, der aber anscheinend net geht:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var e1, e2, e3, e4, e5, e6, e7 : integer;
        mdl, sch, ges : real;
begin
e1 := strtoint(edit1.text);
e2 := strtoint(edit2.text);
e3 := strtoint(edit3.text);
e4 := strtoint(edit4.text);
e5 := strtoint(edit5.text);
e6 := strtoint(edit6.text);
e7 := strtoint(edit7.text);

if e7 >= 0 then
begin
mdl := ((e1+e2+e3+e4+e5+e6+e7)/7);
end
else
if e7 <> 0 then
begin
mdl := ((e1+e2+e3+e4+e5+e6)/6);

edit8.Text := floattostr(mdl);

end;
end;
end.
Hilfe wäre echt lieb... Es geht um unsere Zeugnisnote :(

[edit=Sharky]Hai siri. Ich habe das Bild aus dem Beitrag in den Anhang "verbannt". Es ist 250 kByte groß. Bedenke immer das es auch User gibt die mit einem Modem ins Internet gehen. Für die wäre es furchtbar wenn jedes mal das Bild geladen wird. Mfg, Sharky[/edit]

Matze 8. Dez 2005 11:40

Re: leeres edit-Fenster auslesen
 
Hallo,

sobald eines der Edits leer ist, verursacht dein Code natürlich eine Exception, da ein Leerer String nicht in einen Integer umgewandelt werden kann.

Du könntest per Delphi-Referenz durchsuchenFindComponent (oder falls du das nicht kennst, geht's auch bei so wenigen Editfeldern manuell), überprüfen, ob ein Edit leer ist:

Delphi-Quellcode:
if Editx.Text = ''
und zählen, wie viele Edits einen Wert enthaklten und durch diese Anzahl dann teilen.


Nachtrag: Herzlich willkommen.

zecke 8. Dez 2005 11:42

Re: leeres edit-Fenster auslesen
 
:hi:

Zitat:

Nun ist die Frage:
Was tun, wenn ein edit-Fenster leer bleibt? Denn wir müssen ja eingegebene Notensumme durch Notenanzahl rechnen.
Da können wir ja keine feste Zahl eingeben...
Die Notenanzahl in einer variable speichern, testen in wievielen Edits etwas drinsteht (steht ja dank matze und des roten Kastens schon da :mrgreen:) und dementsprechend durch diese anzahl speichern. Oder durch die Notenanzahl - (minus) die Anzahl in denen nichts drinsteht teilen.

edit: erst 'plötsinn' geschrieben, dann gemerkt, dass der rest etwas unklar ist :mrgreen:

freak4fun 8. Dez 2005 11:47

Re: leeres edit-Fenster auslesen
 
Hallo :hi: und herzlich Willkommen in der DP :party:,
wenn du Defaultwerte setzen möchtest wie zum Beispiel 0 kannst du folgendes machen. Du schreibst eine Function, die 3 Parameter aufnimmt. Der erste ist ein Boolean, in den schreibst du dann Editfelt.Text = '', der zweite Parameter wird zurückgegeben, wenn der erste false ist. Also zum Beispiel Editfeld.Text. Der dritte Parameter wird zurückgegeben, wenn der erste Parameter true ist. Da kann dann 0 zurückgegeben werden. :) Ich hoffe das ist verständlich.

MfG
freak

Matze 8. Dez 2005 11:47

Re: leeres edit-Fenster auslesen
 
Hab mal schnell etwas zusammengetippelt, nur als kleine Demo. Es tritt ein fehler auf, falls im Edit was andere als nichts oder eine Zahl steht, aber das kannst du dann selbst überprüfen, falls es nötig ist:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  AktuellesEdit: TEdit;
  AnzahlVollerEdits: integer;
  NotenSumme, EndNote: real;
begin
  AnzahlVollerEdits := 0;
  NotenSumme := 0.0;

  for i := 1 to ComponentCount do
  begin
    AktuellesEdit := (Findcomponent('Edit' + IntToStr(i)) as Tedit);

    if AktuellesEdit.Text <> '' then
    begin
      inc(AnzahlVollerEdits);
      NotenSumme := NotenSumme + StrToInt(AktuellesEdit.Text);
    end;
  end;
  EndNote := NotenSumme / AnzahlVollerEdits;

  ShowMessage('Endnote: ' + FloatToStr(EndNote));
end;

tomsel 8. Dez 2005 13:46

Re: leeres edit-Fenster auslesen
 
Hallo,

die vorschläge sind sicher o.k., aber m.E. für die "Zielgruppe" etwas zu kompliziert. Macht es doch ganz einfach:

Delphi-Quellcode:
Anzahl := 0;

if edit1.Text <> '' then begin
  e1 := strtoint(edit1.text);
  Anzahl := Anzahl +1;
end else
  e1 := 0;

if edit2.Text <> '' then begin
  e2 := strtoint(edit2.text);
  Anzahl := Anzahl + 1;
end else
  e2 := 0;

...

mdl := ((e1+e2+e3+e4+e5+e6+e7) / Anzahl);
Das ist zwar Anfängerstil, aber euer Programmierkurs-Lehrer kauft es euch wenigstens ab. Dass man dabei wegen fehlender Prüfung entweder gültige Noten oder garnix eingeben muss (um keinen crash zu erleiden), ist sicher akzeptabel.

Servus
tomsel

petergensfeld 8. Dez 2005 14:46

Re: leeres edit-Fenster auslesen
 
Wäre es nicht noch einfacher, StrToIntDef zu verwenden?

faux 8. Dez 2005 15:18

Re: leeres edit-Fenster auslesen
 
Hallo!

Dukannst das ganze natürlich auch per Delphi-Referenz durchsuchenval lösen. Dies erzeugt keine Excption, sondern weißtdem dritten parameter eine Zahl <> 0 zu, wenns nicht funktioniert hat.

Grüße
Faux

tomsel 8. Dez 2005 16:31

Re: leeres edit-Fenster auslesen
 
StrToIntDef ist super, aber da muss die Unit SysUtils eingebunden werden. Gehört das explizite Verwenden von Units zum Stoff in diesem Informatikunterricht?

Wenn ja: Statt

Delphi-Quellcode:
if edit1.Text <> '' then begin
  e1 := strtoint(edit1.text);
  Anzahl := Anzahl +1;
end else
  e1 := 0;
einfach

Delphi-Quellcode:
e1 := StrToIntDef(edit1.text, 0);
if e1 > 0 then
  inc(Anzahl);
einsetzen, das ist dann sogar resistent gegen Eingabefehler. Aber, wie gesagt, "uses Sysutils" nicht vergessen.

siri 8. Dez 2005 16:54

Re: leeres edit-Fenster auslesen
 
danke für eure ganzen antworten!!

Ich habe es mit Hilfe von tomsels vorschlag gelöst.
Und wie er schon sagt: das davor war wirklich recht kompliziert...

Ich denke wir müssen nur das fertige Programm vorzeigen, aber trotzdem danke! denn es war wirklich einfacher :)


Ich weiß ja nicht obs euch interessiert, aber wenn ja würde ich den quelltext hier reinstellen....

-edit-
PS:
http://www.halbjahrespartys.de/schule/Project1.exe <- fertigs Programm!

Wenn ihr noch paar Vorschläge habt: einfach posten :)
Kritik ist immer gut :)

siri 8. Dez 2005 19:18

Re: leeres edit-Fenster auslesen
 
ein Problem noch:

Wenn keine Note (mündlich) drin steht macht er einen fehler...
habe dies durch abgabe der "anzahl" dann so geregelt, dass eine Fehlermeldung kommt.

aber: danach kommt noch ne meldung... bloß die bekomm ich nicht weg.

dafür müsste ich wohl dirket prüfen ob die felder leer sind.

dies bekomme ich aber leider nicht hin (habe es mit if ... versucht zu lösen)

PS: aktuelle Version zum testen des fehlers erhaltet ihr über oberen link

zecke 8. Dez 2005 19:36

Re: leeres edit-Fenster auslesen
 
Die kommt auch von der Klausurnote (Also wenn keine eingegeben wird). Du fängst den Fehler nicht richtig ab. Wenn Du es mit "if" gelöst hast, denke dran, dass Showmessage dann einen eigenen block braucht mit begin und end (evtl auch erst bei else weiterlaufen lassen), sonst läuft es weiter und der Fehler kommt trotzdem.

edit: Ich rate dir auch einen Titel einzugeben, dann kommt danicht immer Project1 als Name einer Showmessage. Project -> Options -> Application -> Title: per Tastatur eintippen :mrgreen: (da kannste auch ein icon einfügen, macht sich immer gut :))

tomsel 8. Dez 2005 20:02

Re: leeres edit-Fenster auslesen
 
Hallo noch mal,

wenn gar keine Note eingegeben wird, ist die Anzahl = 0 und es kommt zu einem division by zero - error bei der Division der Notensumme durch die Anzahl. Ihr müsst prüfen, ob Anzahl > 0 ist und nur dann! den Mittelwert berechnen.

siri 8. Dez 2005 20:30

Re: leeres edit-Fenster auslesen
 
danke tomsel!

Deine Hilfe hat uns sehr sehr geholfen und der letzte Tipp scheint auch richtig zu sein!

weiß gar nicht was ich sagen soll :)

Vieeeeeeelen Dank :-D :-D

tomsel 8. Dez 2005 20:41

Re: leeres edit-Fenster auslesen
 
schon gut, bitte sehr. Du darfst Dich wieder von den Knien erheben ;-)
man hilft halt, wo man kann.

siri 8. Dez 2005 20:56

Re: leeres edit-Fenster auslesen
 
-edit-
hatte noch nen fehler, der ist aber un behoben.

sorry für überflüssigen post..

*kann ja nen mod mal löschen!?*


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz