Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Notendurchschnitt erechnen! (https://www.delphipraxis.net/93785-notendurchschnitt-erechnen.html)

vaTras 11. Jun 2007 12:29


Notendurchschnitt erechnen!
 
Hallo liebe Community,

Ich habe ein Problem bei meienem Programm, welches den Notendurchschnitt erechnen soll. Das Problem liegt dadrin, dass wenn ein
Fach nicht belegt wurde (sprich, wenn in dem Feld kein Eintrag ist), soll der Fächer Gesamtanzahl 1 Fach abgezogen werden!

Delphi-Quellcode:
var
  Form1: TForm1;
  var eng,ma,de,lat,franz,span,bio,ch,ph,poli,ge,edk,mu,ku,sp,inf,ds,anzahl,anzahl2,gesamt : integer ;
  notendurchschnitt : real;

implementation

{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);
begin
 eng:=strtoint (edit1.text) ;
 de:=strtoint (edit2.text)   ;
 ma:=strtoint (edit3.text)   ;
 lat:=StrToIntDef(Edit4.Text,0);
 franz:=StrToIntDef(Edit5.Text,0);
 span:=StrToIntDef(Edit6.Text,0);
 bio:=StrToIntDef(Edit8.Text,0);
 ch:=StrToIntDef(Edit9.Text,0);
 ph:=StrToIntDef(Edit10.Text,0);
 poli:=StrToIntDef(Edit11.Text,0);
 ge:=StrToIntDef(Edit12.Text,0);
 edk:=StrToIntDef(Edit13.Text,0);
 mu:=StrToIntDef(Edit14.Text,0);
 ku:=StrToIntDef(Edit15.Text,0);
 sp:=StrToIntDef(Edit16.Text,0);
 inf:=StrToIntDef(Edit17.Text,0);
 ds:=StrToIntDef(Edit18.Text,0);
 anzahl:=anzahl2;
 anzahl2:=17;
 if lat=0 then anzahl:=anzahl2-1 ;
 gesamt:=eng+ma+de+lat+franz+span+bio+ch+ph+poli+ge+edk+mu+ku+sp+inf+ds  ;
 notendurchschnitt:=gesamt/anzahl;
 edit7.text:=floattostr (notendurchschnitt) ;
Ich hoffe ihr könnt mir helfen.

mfg M. Botterbrodt!

SirThornberry 11. Jun 2007 12:32

Re: Notendurchschnitt erechnen!
 
ich würde sprechende Namen für die Editfelder nehmen und die Zensuren in ein Array packen. Dann einfach in dem Array alle Zensuren durchgehen und addieren. Wenn eine Zensur <> 0 angegeben wurde die Zahl der angegebenen Zahlen erhöhen. Und hinter der schleife dann einfach die Summe durch die Anzahl der Noten teilen und darauf achten das nicht durch 0 geteilt wird.

Tormentor32 11. Jun 2007 13:40

Re: Notendurchschnitt erechnen!
 
Ich würde zunächst folgenden Typ deklarieren:
Delphi-Quellcode:
type
  TSchulfaecher = (sfNone,sfEng,sfMa,sfDe{usw},sfInf,sfDs);
Dann kannst du ein Array machen machen
Delphi-Quellcode:
var
  Noten: array[TSchulfaecher] of byte;
Byte, weil es wahrscheinlich performanter ist, in Punkten und nicht in Noten zu rechnen.

PS: Ungetestet, sollte aber gehen!

Willi1960 11. Jun 2007 13:47

Re: Notendurchschnitt erechnen!
 
Hallo,

ansonsten kannst du ja es abhängig machen vom Inhalt. Ist der Inhalt =0 dann ist das Fach nicht belegt. Dann kannst du unter z.B

if ma=0 then Anzahl:=anzahl-1;

den Wert runterschrauben.

muß dann unmittelbar vor demm errechnen des Notendurchschnitts kommen

vaTras 11. Jun 2007 17:58

Re: Notendurchschnitt erechnen!
 
ich habe es nun so gemacht:

Delphi-Quellcode:
 anzahl:=0;
if eng>0 then anzahl:=anzahl +1 ;
usw.

trotzdem danke für eure Hilfe!

bitsetter 11. Jun 2007 20:25

Re: Notendurchschnitt erechnen!
 
Hi,

mit einer Schleife sieht das Ganze trotzdem übersichtlicher aus:
Delphi-Quellcode:
uses math;

procedure TForm1.Button1Click(Sender: TObject);
type
  TNote = 0..6;
  PNoteArray = ^NoteArray;
  NoteArray = Array[0..0] of TNote;

  TSchulfach = record
    eng, ma, de, lat, franz : TNote;
end;
var
  Schulfach: TSchulfach;
  PNotAr: PNoteArray;
  Loop, Anzahl, Noten: integer;
begin
  ZeroMemory(@Schulfach, SizeOf(Schulfach));
  with Schulfach do//Beispiel
  begin
    eng := 4;
    ma := 2;
    de := 1;
  end;

  PNotAr:= @Schulfach;
  Anzahl:= 0;
  Noten:= 0;
  for loop := 0 to Pred(SizeOf(Schulfach)) do
    if PNotAr^[Loop]> 0 then
    begin
      inc(Anzahl);
      inc(Noten, PNotAr^[Loop]);
    end;
  Caption:= 'Notendurchschnitt: '+ FloatToStr(RoundTo(Noten / Anzahl, -1));
end;

Thorben_Ko 12. Jun 2007 10:55

Re: Notendurchschnitt erechnen!
 
ich hab das auch mal gemacht ( mein erste prog ;) ), brauchst du wirklich für jedes fach ein Edit?

Ich poste mal wie ich es darmals gemacht habe.

Delphi-Quellcode:

procedure TForm1.Button1Click(Sender: TObject);
var
a : real;
begin
  if Edit1.Text = '' then
  Label1.Caption := 'Bitte die Noten oben eintragen.'
  else
  noten := noten + strtoint(edit1.text);
  count := count + 1;
  a := noten/count;
  label1.Caption := 'Ihr Notenschnitt ist:  ' + Formatfloat('0.##', a);
  Edit1.text := '';
  Edit1.SetFocus;
end;
count und noten sind Klassen Variabeln vom Form

Vll hillft dir das ja was ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:40 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