Autor Beitrag
m1sc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Do 09.05.13 19:46 
Ich habe momentan das Problem dass ich folgenden Fehler bekomme:
imageshack.us/f/6/61766561.jpg/
Soweit ich herausgefunden habe liegt das daran dass meine edits mit dem var wert double leer sind.
Das hab ich nun teilweise so lösen können dass wenn man nur 1 zahl eingibt die anderen 2 zu einer 0 gemacht werden.
Allerdings wenn man bei irgend einem fach keine note eingibt gibt es das error.

Hier mal die source es soll ein notendurchschnittsberechner werden die source is noch lange nich fertig, allerdings will ich erstmal den fehler beheben bevor ich weiter mache da es mir doch atm zu schwierig wird mit dem fehler weiter zu machen :D:
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:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
procedure TForm1.Button_AusrechnenClick(Sender: TObject);
var
deutsch1, deutsch2, deutsch3, deutschergebnis1, deutschnote1: double;  //var 1 halbjahr deutsch
deutsch4, deutsch5, deutsch6, deutschergebnis2, deutschnote2: double;  //var 2 halbjahr deutsch
englisch1, englisch2, englisch3, englischergebnis1, englischnote1: double; //var 1 halbjahr englisch
englisch4, englisch5, englisch6, englischergebnis2, englischnote2: double; //var 2 halbjahr englisch
mathematik1, mathematik2, mathematik3, mathematikergebnis1, mathematiknote1: double; //var 1 halbjahr mathematik
mathematik4, mathematik5, mathematik6, mathematikergebnis2, mathematiknote2: double; //var 2 halbjahr mathematik
vido1, vido2, vido3, vidoergebnis1, vidonote1: double; //var 1 halbjahr vido
vido4, vido5, vido6, vidoergebnis2, vidonote2: double; //var 1 halbjahr vido
informatik1, informatik2, informatik3, informatikergebnis1, informatiknote1: double; //var 1 halbjahr informatik
informatik4, informatik5, informatik6, informatikergebnis2, informatiknote2: double; //var 1 halbjahr informatik
religion1, religion2, religion3, religionergebnis1, religionnote1: double; //var 1 halbjahr religion
religion4, religion5, religion6, religionergebnis2, religionnote2: double; //var 1 halbjahr religion
sozialkunde1, sozialkunde2, sozialkunde3, sozialkundeergebnis1, sozialkundenote1: double; //var 1 halbjahr sozialkunde
sozialkunde4, sozialkunde5, sozialkunde6, sozialkundeergebnis2, sozialkundenote2: double; //var 1 halbjahr sozialkunde

                             //variablen der teilungen 1 halbjahr
geteiltdeutsch1: double;
geteiltenglisch1: double;
geteiltmathematik1: double;
geteiltinformatik1: double;
geteiltvido1: double;
geteiltreligion1: double;
geteiltsozialkunde1: double;

                            //variablen der teilungen 2 halbjahr
geteiltdeutsch2: double;
geteiltenglisch2: double;
geteiltmathematik2: double;
geteiltinformatik2: double;
geteiltvido2: double;
geteiltreligion2: double;
geteiltsozialkunde2: double;

begin                         //variablen der teilungen auf 0 bestimmt

geteiltdeutsch1:= 0;
geteiltdeutsch2:= 0;
geteiltenglisch1:= 0;
geteiltenglisch2:= 0;
geteiltmathematik1:= 0;
geteiltmathematik2:= 0;
geteiltinformatik1:= 0;
geteiltinformatik2:= 0;
geteiltvido1:= 0;
geteiltvido2:= 0;
geteiltreligion1:= 0;
geteiltreligion2:= 0;
geteiltsozialkunde1:= 0;
geteiltsozialkunde2:= 0;

                              //leere edits auf 0 setzen bzw summe der teilungen errechnen 1halbjahr "DEUTSCH"

if (Edit1_Deutsch.Text=''OR (Edit1_Deutsch.Text= '0'then Edit1_Deutsch.Text:='0'
else
geteiltdeutsch1:= geteiltdeutsch1 + 1;
if (Edit2_Deutsch.Text=''OR (Edit2_Deutsch.Text='0'then Edit2_Deutsch.Text:='0'
else
geteiltdeutsch1:= geteiltdeutsch1 + 1;
if (Edit3_Deutsch.Text=''OR (Edit3_Deutsch.Text='0'then Edit3_Deutsch.Text:='0'
else
geteiltdeutsch1:= geteiltdeutsch1 + 1;

                                    //leere edits auf 0 setzen bzw summe der teilungen errechnen 2halbjahr "DEUTSCH"

if (Edit4_Deutsch.Text=''OR (Edit4_Deutsch.Text= '0'then Edit4_Deutsch.Text:='0'
else
geteiltdeutsch2:= geteiltdeutsch2 + 1;
if (Edit5_Deutsch.Text=''OR (Edit5_Deutsch.Text='0'then Edit5_Deutsch.Text:='0'
else
geteiltdeutsch2:= geteiltdeutsch2 + 1;
if (Edit6_Deutsch.Text=''OR (Edit6_Deutsch.Text='0'then Edit6_Deutsch.Text:='0'
else
geteiltdeutsch2:= geteiltdeutsch2 + 1;

                                //leere edits auf 0 setzen bzw summe der teilungen errechnen 1halbjahr "ENGLISCH"

if (Edit1_Englisch.Text=''OR (Edit1_Englisch.Text= '0'then Edit1_Englisch.Text:='0'
else
geteiltenglisch1:= geteiltenglisch1 + 1;
if (Edit2_Englisch.Text=''OR (Edit2_Englisch.Text= '0'then Edit2_Englisch.Text:='0'
else
geteiltenglisch1:= geteiltenglisch1 + 1;
if (Edit3_Englisch.Text=''OR (Edit3_Englisch.Text= '0'then Edit3_Englisch.Text:='0'
else
geteiltenglisch1:= geteiltenglisch1 + 1;

                                //leere edits auf 0 setzen bzw summe der teilungen errechnen 2halbjahr "ENGLISCH"

if (Edit4_Englisch.Text=''OR (Edit4_Englisch.Text= '0'then Edit4_Englisch.Text:='0'
else
geteiltenglisch2:= geteiltenglisch2 + 1;
if (Edit5_Englisch.Text=''OR (Edit5_Englisch.Text= '0'then Edit5_Englisch.Text:='0'
else
geteiltenglisch2:= geteiltenglisch2 + 1;
if (Edit6_Englisch.Text=''OR (Edit6_Englisch.Text= '0'then Edit6_Englisch.Text:='0'
else
geteiltenglisch2:= geteiltenglisch2 + 1;

                              //leere edits auf 0 setzen bzw summe der teilungen errechnen 1halbjahr "MATHEMATIK"

if (Edit1_Mathematik.Text=''OR (Edit1_Mathematik.Text= '0'then Edit1_Mathematik.Text:='0'
else
geteiltmathematik1:= geteiltmathematik1 + 1;
if (Edit2_Mathematik.Text=''OR (Edit2_Mathematik.Text= '0'then Edit2_Mathematik.Text:='0'
else
geteiltmathematik1:= geteiltmathematik1 + 1;
if (Edit3_Mathematik.Text=''OR (Edit3_Mathematik.Text= '0'then Edit3_Mathematik.Text:='0'
else
geteiltmathematik1:= geteiltmathematik1 + 1;

                           //leere edits auf 0 setzen bzw summe der teilungen errechnen 2halbjahr "MATHEMATIK"


if (Edit4_Mathematik.Text=''OR (Edit4_Mathematik.Text= '0'then Edit4_Mathematik.Text:='0'
else
geteiltmathematik2:= geteiltmathematik2 + 1;
if (Edit5_Mathematik.Text=''OR (Edit5_Mathematik.Text= '0'then Edit5_Mathematik.Text:='0'
else
geteiltmathematik2:= geteiltmathematik2 + 1;
if (Edit6_Mathematik.Text=''OR (Edit6_Mathematik.Text= '0'then Edit6_Mathematik.Text:='0'
else
geteiltmathematik2:= geteiltmathematik2 + 1;


                             //leere edits auf 0 setzen bzw summe der teilungen errechnen 1halbjahr "INFORMATIK"

if (Edit1_Informatik.Text=''OR (Edit1_Informatik.Text= '0'then Edit1_Informatik.Text:='0'
else
geteiltinformatik1:= geteiltinformatik1 + 1;
if (Edit2_Informatik.Text=''OR (Edit2_Informatik.Text= '0'then Edit2_Informatik.Text:='0'
else
geteiltinformatik1:= geteiltinformatik1 + 1;
if (Edit3_Informatik.Text=''OR (Edit3_Informatik.Text= '0'then Edit3_Informatik.Text:='0'
else
geteiltinformatik1:= geteiltinformatik1 + 1;



if (Edit4_Informatik.Text=''OR (Edit4_Informatik.Text= '0'then Edit4_Informatik.Text:='0'
else
geteiltinformatik2:= geteiltinformatik2 + 1;
if (Edit5_Informatik.Text=''OR (Edit5_Informatik.Text= '0'then Edit5_Informatik.Text:='0'
else
geteiltinformatik2:= geteiltinformatik2 + 1;
if (Edit6_Informatik.Text=''OR (Edit6_Informatik.Text= '0'then Edit6_Informatik.Text:='0'
else
geteiltinformatik2:= geteiltinformatik2 + 1;

                                //leere edits auf 0 setzen bzw summe der teilungen errechnen 1halbjahr "VIDO"


if (Edit1_VIDO.Text=''OR (Edit1_VIDO.Text= '0'then Edit1_VIDO.Text:='0'
else
geteiltvido1:= geteiltvido1 + 1;
if (Edit2_VIDO.Text=''OR (Edit2_VIDO.Text= '0'then Edit2_VIDO.Text:='0'
else
geteiltvido1:= geteiltvido1 + 1;
if (Edit3_VIDO.Text=''OR (Edit3_VIDO.Text= '0'then Edit3_VIDO.Text:='0'
else
geteiltvido1:= geteiltvido1 + 1;



if (Edit4_VIDO.Text=''OR (Edit4_VIDO.Text= '0'then Edit4_VIDO.Text:='0'
else
geteiltvido2:= geteiltvido2 + 1;
if (Edit5_VIDO.Text=''OR (Edit5_VIDO.Text= '0'then Edit5_VIDO.Text:='0'
else
geteiltvido2:= geteiltvido2 + 1;
if (Edit6_VIDO.Text=''OR (Edit6_VIDO.Text= '0'then Edit6_VIDO.Text:='0'
else
geteiltvido2:= geteiltvido2 + 1;

                                  //leere edits auf 0 setzen bzw summe der teilungen errechnen 1halbjahr "SOZIALKUNDE"

if (Edit1_Sozialkunde.Text=''OR (Edit1_Sozialkunde.Text= '0'then Edit1_Sozialkunde.Text:='0'
else
geteiltvido1:= geteiltvido1 + 1;
if (Edit2_Sozialkunde.Text=''OR (Edit2_Sozialkunde.Text= '0'then Edit2_Sozialkunde.Text:='0'
else
geteiltvido1:= geteiltvido1 + 1;
if (Edit3_Sozialkunde.Text=''OR (Edit3_Sozialkunde.Text= '0'then Edit3_Sozialkunde.Text:='0'
else
geteiltvido1:= geteiltvido1 + 1;



if (Edit4_Sozialkunde.Text=''OR (Edit4_Sozialkunde.Text= '0'then Edit4_Sozialkunde.Text:='0'
else
geteiltvido2:= geteiltvido2 + 1;
if (Edit5_Sozialkunde.Text=''OR (Edit5_Sozialkunde.Text= '0'then Edit5_Sozialkunde.Text:='0'
else
geteiltvido2:= geteiltvido2 + 1;
if (Edit6_Sozialkunde.Text=''OR (Edit6_Sozialkunde.Text= '0'then Edit6_Sozialkunde.Text:='0'
else
geteiltvido2:= geteiltvido2 + 1;

                                  //leere edits auf 0 setzen bzw summe der teilungen errechnen 1halbjahr "RELIGION"

if (Edit1_Religion.Text=''OR (Edit1_Religion.Text= '0'then Edit1_Religion.Text:='0'
else
geteiltvido1:= geteiltvido1 + 1;
if (Edit2_Religion.Text=''OR (Edit2_Religion.Text= '0'then Edit2_Religion.Text:='0'
else
geteiltvido1:= geteiltvido1 + 1;
if (Edit3_Religion.Text=''OR (Edit3_Religion.Text= '0'then Edit3_Religion.Text:='0'
else
geteiltvido1:= geteiltvido1 + 1;


if (Edit4_Religion.Text=''OR (Edit4_Religion.Text= '0'then Edit4_Religion.Text:='0'
else
geteiltvido2:= geteiltvido2 + 1;
if (Edit5_Religion.Text=''OR (Edit5_Religion.Text= '0'then Edit5_Religion.Text:='0'
else
geteiltvido2:= geteiltvido2 + 1;
if (Edit6_Religion.Text=''OR (Edit6_Religion.Text= '0'then Edit6_Religion.Text:='0'
else
geteiltvido2:= geteiltvido2 + 1;




                                    //erstes halbjahr deutsch errechnet

  deutsch1 :=  StrToFloat(Edit1_Deutsch.Text);
  deutsch2 :=  StrToFloat(Edit2_Deutsch.Text);
  deutsch3 :=  StrToFloat(Edit3_Deutsch.Text);
  deutschergebnis1 := deutsch1 + deutsch2 + deutsch3;
  deutschnote1 := deutschergebnis1/geteiltdeutsch1;
  LB_Deutsch1halbjahr.Caption := FloatToStr(deutschnote1);


                                   //zweites halbjahr deutsch errechnet

  deutsch4 :=  StrToFloat(Edit4_Deutsch.Text);
  deutsch5 :=  StrToFloat(Edit5_Deutsch.Text);
  deutsch6 :=  StrToFloat(Edit6_Deutsch.Text);
  deutschergebnis2 := deutsch4 + deutsch5 + deutsch6;
  deutschnote2 := deutschergebnis2/geteiltdeutsch2;
  LB_Deutsch2halbjahr.Caption := FloatToStr(deutschnote2);



                                     //erstes halbjahr englisch errechnet

  englisch1 :=  StrToFloat(Edit1_Englisch.Text);
  englisch2 :=  StrToFloat(Edit2_Englisch.Text);
  englisch3 :=  StrToFloat(Edit3_Englisch.Text);
  englischergebnis1 := englisch1 + englisch2 + englisch3;
  englischnote1 := englischergebnis1/geteiltenglisch1;
  LB_Englisch1halbjahr.Caption := FloatToStr(englischnote1);


                                   //zweites halbjahr englisch errechnet

  englisch4 :=  StrToFloat(Edit4_Englisch.Text);
  englisch5 :=  StrToFloat(Edit5_Englisch.Text);
  englisch6 :=  StrToFloat(Edit6_Englisch.Text);
  englischergebnis2 := englisch4 + englisch5 + englisch6;
  englischnote2 := englischergebnis2/geteiltenglisch2;
  LB_Englisch2halbjahr.Caption := FloatToStr(englischnote2);


                                       //erstes halbjahr mathematik errechnet

  mathematik1 :=  StrToFloat(Edit1_Mathematik.Text);
  mathematik2 :=  StrToFloat(Edit2_Mathematik.Text);
  mathematik3 :=  StrToFloat(Edit3_Mathematik.Text);
  mathematikergebnis1 := mathematik1 + mathematik2 + mathematik3;
  mathematiknote1 := mathematikergebnis1/geteiltmathematik1;
  LB_Mathematik1halbjahr.Caption := FloatToStr(mathematiknote1);

                                      //zweites halbjahr mathematik errechnet

  mathematik4 :=  StrToFloat(Edit4_Mathematik.Text);
  mathematik5 :=  StrToFloat(Edit5_Mathematik.Text);
  mathematik6 :=  StrToFloat(Edit6_Mathematik.Text);
  mathematikergebnis2 := mathematik4 + mathematik5 + mathematik6;
  mathematiknote2 := mathematikergebnis2/geteiltmathematik2;
  LB_Mathematik2halbjahr.Caption := FloatToStr(mathematiknote2);



                                  //erstes halbjahr informatik errechnet

  informatik1 :=  StrToFloat(Edit1_Informatik.Text);
  informatik2 :=  StrToFloat(Edit2_Informatik.Text);
  informatik3 :=  StrToFloat(Edit3_Informatik.Text);
  informatikergebnis1 := informatik1 + informatik2 + informatik3;
  informatiknote1 := informatikergebnis1/geteiltinformatik1;
  LB_Informatik1halbjahr.Caption := FloatToStr(informatiknote1);




                                   //zweites halbjahr informatik errechnet

  informatik4 :=  StrToFloat(Edit4_Informatik.Text);
  informatik5 :=  StrToFloat(Edit5_Informatik.Text);
  informatik6 :=  StrToFloat(Edit6_Informatik.Text);
  informatikergebnis2 := informatik4 + informatik5 + informatik6;
  informatiknote2 := informatikergebnis2/geteiltinformatik2;
  LB_Informatik2halbjahr.Caption := FloatToStr(informatiknote2);



                                    //erstes halbjahr vido errechnet

  vido1 :=  StrToFloat(Edit1_Vido.Text);
  vido2 :=  StrToFloat(Edit2_Vido.Text);
  vido3 :=  StrToFloat(Edit3_Vido.Text);
  vidoergebnis1 := vido1 + vido2 + vido3;
  vidonote1 := vidoergebnis1/geteiltvido1;
  LB_Vido1halbjahr.Caption := FloatToStr(vidonote1);




                                   //zweites halbjahr vido errechnet

  vido4 :=  StrToFloat(Edit4_Vido.Text);
  vido5 :=  StrToFloat(Edit5_Vido.Text);
  vido6 :=  StrToFloat(Edit6_Vido.Text);
  vidoergebnis2 := vido4 + vido5 + vido6;
  vidonote2 := vidoergebnis2/geteiltvido2;
  LB_Vido2halbjahr.Caption := FloatToStr(vidonote2);




                                   //erstes halbjahr sozialkunde errechnet

  sozialkunde1 :=  StrToFloat(Edit1_Sozialkunde.Text);
  sozialkunde2 :=  StrToFloat(Edit2_Sozialkunde.Text);
  sozialkunde3 :=  StrToFloat(Edit3_Sozialkunde.Text);
  sozialkundeergebnis1 := sozialkunde1 + sozialkunde2 + sozialkunde3;
  sozialkundenote1 := sozialkundeergebnis1/geteiltsozialkunde1;
  LB_Sozialkunde1halbjahr.Caption := FloatToStr(sozialkundenote1);




                                   //zweites halbjahr sozialkunde errechnet

  sozialkunde4 :=  StrToFloat(Edit4_Sozialkunde.Text);
  sozialkunde5 :=  StrToFloat(Edit5_Sozialkunde.Text);
  sozialkunde6 :=  StrToFloat(Edit6_Sozialkunde.Text);
  sozialkundeergebnis2 := sozialkunde4 + sozialkunde5 + sozialkunde6;
  sozialkundenote2 := sozialkundeergebnis2/geteiltsozialkunde2;
  LB_Sozialkunde2halbjahr.Caption := FloatToStr(sozialkundenote2);



                                //erstes halbjahr religion errechnet

  religion1 :=  StrToFloat(Edit1_Religion.Text);
  religion2 :=  StrToFloat(Edit2_Religion.Text);
  religion3 :=  StrToFloat(Edit3_Religion.Text);
  religionergebnis1 := religion1 + religion2 + religion3;
  religionnote1 := religionergebnis1/geteiltreligion1;
  LB_Religion1halbjahr.Caption := FloatToStr(religionnote1);




                                   //zweites halbjahr religion errechnet

  religion4 :=  StrToFloat(Edit4_Religion.Text);
  religion5 :=  StrToFloat(Edit5_Religion.Text);
  religion6 :=  StrToFloat(Edit6_Religion.Text);
  religionergebnis2 := religion4 + religion5 + religion6;
  religionnote2 := religionergebnis2/geteiltreligion2;
  LB_Religion2halbjahr.Caption := FloatToStr(religionnote2);


Moderiert von user profile iconNarses: Titel geändert, war: "Fehlermeldung "Ungültige Gleitkommerzahl"".
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Do 09.05.13 20:18 
StrToFloat liefert eine Gleitkommazahl, aber nur wenn es auch eine Zahl ist !
probier mal TryStrToFloat...
hier gibt es ein paramter mehr, wenn X zur gleitkommazahl werden soll, dann schreib das so
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
if TryStrToFloat( EditkeineAhnungWas.Text, X) then 
 begin
 Showmessage('Hat geklappt');
 //inc(angegebeneFaecher); //ist dasselbe wie angebeneFaecher := abgebeneFaecher +1;
 //NotenGesamt := Notengesamt + Punktzahl; //oder inc(Notengesamt, Punktzahl);
 end
else
 begin
 Showmessage('Konnte nicht umgewandelt werden');
 end;

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
m1sc Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Do 09.05.13 20:28 
Ich versteh nich was ich mit dem quellcode anfangen soll, wie soll der mir helfen das problem zu fixen?
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Do 09.05.13 20:28 
Und du könntest das ganze viel einfacher machen..
wenn du 3 EditFelder hast pro Fach (Halbjahr 1,2 und 3)
Dann kannst du doch einfach
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:
25:
26:
27:
28:
29:
30:
Function TForm1.GibDurchschnitt(Halbjahr1, Halbjahr2: TEdit): Single;
var Gesamt: Byte;
    Note: Byte;
    AaN: Byte; //Anzahl angegebenen Noten
begin

Gesamt := 0;
AaN := 0;

if TryStrToInt( Halbjahr1.Text, Note) then
 begin
 inc(Gesamt, Note);
 inc(AaN);
 end;

if TryStrToInt( Halbjahr2.Text, Note) then
 begin
 inc(Gesamt, Note);
 inc(AaN);
 end;

if (AaN=0then 
 begin
 Showmessage('Du hast keine Noten angeben');
 end
else
 begin
 Result := Gesamt / AaN;
 end;
end;


das rechnet den Durchschnitt pro Halbjahr aus... die Jahresnote wäre dann
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var JahresNote: Single;
begin
Jahresnote := (GibDurchschnitt( DeutschEdit1, DeutschEdit2) + GibDurchschnitt(DeutschEdit3, DeutschEdit4)) /2
ErgebnisLabel.Caption := FloatToStr(Jahresnote);
end;

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!


Zuletzt bearbeitet von IhopeonlyReader am Do 09.05.13 20:34, insgesamt 1-mal bearbeitet
m1sc Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Do 09.05.13 20:28 
user profile iconm1sc hat folgendes geschrieben Zum zitierten Posting springen:
Ich versteh nich was ich mit dem quellcode anfangen soll, wie soll der mir helfen das problem zu fixen?

Trystrtofloat funktioniert nicht.
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Do 09.05.13 20:32 
TryStrToInt würde auch reichen, da du ja ganze Noten (in Punkten) hast
Bedenke: 2 Paramenter !
Als 1 der String, das 2 das was dazu werden soll..
dann schreibst du anstatt
ausblenden Delphi-Quelltext
1:
2:
3:
X := StrToFloat(Edit1.Text);
//schreibst du
TryStrToFloat(Edit1.Text, X);

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
m1sc Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Do 09.05.13 20:37 
//erstes halbjahr deutsch errechnet
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
  TryStrToFloat(Edit1_Deutsch.Text, deutsch1);
  TryStrToFloat(Edit2_Deutsch.Text, deutsch2);
  TryStrToFloat(Edit3_Deutsch.Text, deutsch3);
  deutschergebnis1 := deutsch1 + deutsch2 + deutsch3;
  deutschnote1 := deutschergebnis1/geteiltdeutsch1;
  LB_Deutsch1halbjahr.Caption := FloatToStr(deutschnote1);


                                   //zweites halbjahr deutsch errechnet

  TryStrToFloat(Edit4_Deutsch.Text, deutsch4);
  TryStrToFloat(Edit5_Deutsch.Text, deutsch5);
  TryStrToFloat(Edit6_Deutsch.Text, deutsch6);
  deutschergebnis2 := deutsch4 + deutsch5 + deutsch6;
  deutschnote2 := deutschergebnis2/geteiltdeutsch2;
  LB_Deutsch2halbjahr.Caption := FloatToStr(deutschnote2);



geht immernoch ned
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Do 09.05.13 20:41 
wenn du unbedingt deine ganzen variablen etc. beibehalten willst, dann musst du auch dafür sorgen, dass nur gerechnet wird, wenn alle strings in zahlen umgewandlet werden konnten also
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
if TryStrToFloat(Edit1_Deutsch.Text, deutsch1) and
   TryStrToFloat(Edit2_Deutsch.Text, deutsch2) and
   TryStrToFloat(Edit3_Deutsch.Text, deutsch3) then
 begin
 deutschergebnis1 := deutsch1 + deutsch2 + deutsch3;
 deutschnote1 := deutschergebnis1/geteiltdeutsch1;
 LB_Deutsch1halbjahr.Caption := FloatToStr(deutschnote1); 
 end
else
  LB_Deutsch1halbjahr.Caption := 'Fehler';

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
m1sc Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Do 09.05.13 20:46 
Du verstehst glaub ich ganed was ich genau machen will.

Es soll möglich sein bis zu 3 Noten einzugeben.
Es soll aber auch ein Durchschnitt errechnet werden wenn man nur 2 zahlen eingibt.
Das bedeutet ich muss dem code mitteilwen dass wenn 3 noten da stehen durch 3 gerechnet wird und bei 2 durch 2.
Das Problem hab ich gelöst für ein 3er feld. Allerdings ist das Problem jetzt es müssen überall min 1 Zahl eingegeben werden.
Wenn man nun bei mathe sozi und deutsch was eingibt, alle andern aber frei lässt. Gibs den error.
Wenn man hingegen überall min 1 Zahl eingibt geht es.

[url=imageshack.us/photo/...s/189/49657314.jpg/]user defined image[/URL]


Edit:

Hier mal das komplette projekt vllt siehst du dann was ich mein:
www.file-upload.net/...ittsrechner.rar.html
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Do 09.05.13 20:52 
dir musst man schritt für schritt erklären oder? :D
TryStrToFloat lassen wir mal weg, und tauschen es gegen
TryStrToInt da es ja nur "ganze" Noten gibt (gibt ja keine 2.5)

Wenn ein Feld leer ist, liefert TryStrToInt das Ergebnis false
also mach es so wie ich es in meinem 3 post geschrieben habe.. stell mal bitte dein ganzen "Ordner" also dein ganzes Project hier rein, dann programmier ich dir das mal eben "anders" und kommentiere es dir aus...

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
m1sc Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Do 09.05.13 20:54 
Nein Int gehen nicht da wenn man 1 und 2 hat eine 1,5 hat was ja auch so stimmt, der lehrer bestimmt ja dann ob er auf oder abrundet von daher brauch ich , zahlen.

www.file-upload.net/...ittsrechner.rar.html

Edit: mir bringt es nix wenn du das machst ich mach das einfach so aus langeweile um nen bisschen was dabei zu lernen^^
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Do 09.05.13 21:28 
ich habe es jetzt programmiert, es fehlen noch 5 fächer.. aber da musst du nur kopieren und die Namen ersetzten.. es ist wirklich sehr einfach gehalten und ich denke es ist alles selbsterklärend

Falls es weitere Probleme gibt melde dich :)
oder falls du fragen zum code hast
Einloggen, um Attachments anzusehen!
_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
m1sc Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Do 09.05.13 22:07 
Edit: ich geh pennen is mir alles gerade zu blöd
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Do 09.05.13 22:37 
ok, hast du dir das angeschaut und verstanden?
sonst bis morgen :)

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Fr 10.05.13 09:06 
Also, ich würde die ganzen Noten in Arrays packen:

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:
25:
26:
27:
const
   MaxNr = 3// Neu, falls sich die Anzahl der Teilnoten ändern sollte

   Deutsch = 1;
   Englisch = 2;
   Mathematik = 3;
   Informatik = 4;
   VIDO = 5;
   Sozialkunde = 6;
   Religion = 7;

   HalbJahr1 = 1;
   HalbJahr2 = 2;
   GanzesJahr = 3;

type
   NotenArr = Array[HalbJahr1..HalbJahr2,Deutsch..Religion,1..MaxNr] of integer;
   NotenFeldArr = Array[HalbJahr1..Halbjahr2,Deutsch..Religion,1..MaxNr] of TEdit;
   TeilerArr = Array[HalbJahr1..HalbJahr2,Deutsch..Religion] of integer;
   ErgebnisArr = Array[Halbjahr1..GanzesJahr,Deutsch..Religion] of single;
   ErgebnisFeldArr = Array[Halbjahr1..GanzesJahr,Deutsch..Religion] of TEdit;
var
   Note : NotenArr;   // Dies kann auch als Variable in die Klasse TForm!
   NotenFeld : NotenFeldArr; // Dies kann auch als Variable in die Klasse TForm!
   Teiler: TeilerArr;
   Ergebnis : ErgebnisArr;
   ErgebnisFeld : ErgebnisFeldArr;


Dann wird a) Dein Programmtext wesentlich übersichtlicher und b) Du kannst über Indices die Abfragen gestalten.

Am Anfang des Programms belegst Du das Array Notenfeld mit den Editkomponenten des , und dann kannst Du über Indices alle Abfragen wie folgt gestalten:

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:
// Belegung der Notenfelder:

// Name der Eingabe-Felder wie folgt festlegen:
  
//   H1F01N1  = Halbjahr1, Fach 1, Nr. 1
//   H2F05N3  = Halbjahr2, Fach 5, Nr. 3
//   H1F01    = Halbjahr1, Fach 1, Ergebnisnote des Halbjahres
//   H3F01    = GanzesJahr, Fach 1, Ergebnisdurchschnitt des Faches im Jahr
//   die Nummer hinter Fach zweiziffrig, weil ja möglicherweise mehr als 10 Fächer vorliegen 


Dann kannst Du die Belegung wie folgt machen:

procedure TForm1.NotenfeldBelegung(Sender : TObject);
var
  TC : TComponent;
  s : string;
  i, Halbjahr, Fach, Nr : integer;
begin
  for i := 0 to ComponentCount-1 do
  begin
    TC := Components[i];
    if TC = TEdit then
    begin
      s := TEdit(TC).Name;
      if s[1] = 'H' then begin
        try
          Halbjahr := StrToInt(Copy(s,2,1));
        except
          Halbjahr := 0;
        end;
        try
          Fach := StrToInt(Copy(s,4,2));
        except
          Fach = 0;
        end;
        try
          Nr := StrToInt(Copy(s,7,1));
        except
          Nr := 0;
        end;
        if Halbjahr*Fach*Nr<>0 then // falls einer der Indices 0 ist, ist dies kein Notenfeld
        begin
          Notenfeld[Halbjahr,Fach,Nr] := TEdit(TC);
        end
        else if (Halbjahr*Fach<>0then // falls beide <>0 sind, ist dies ein Ergebnisfeld
        begin
          ErgebnisFeld[HalbJahr,Fach] := TEdit(TC);
        end;
      end;
    end;
  end;
end;




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:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
var
  Halbjahr, Fach, Nr : integer;

:

  for Fach := Deutsch to Religion do
  begin
    Teiler[Halbjahr1,Fach] := 0;
    Teiler[Halbjahr2,Fach] := 0;
    for HalbJahr := Halbjahr1 to Halbjahr2 do
    begin
      for Nr = 1 to MaxNr do
      begin
        if (Notenfeld[Halbjahr,Fach,Nr].Text=''then 
    Notenfeld[Halbjahr,Fach,Nr].Text='' := '0';
        if (Notenfeld[Halbjahr,Fach,Nr].Text <> '0'then
    Inc(Teiler[Halbjahr,Fach]);
        try
          Note[HalbJahr,Fach,Nr] := StrToInt(Notenfeld[Halbjahr,Fach,Nr].Text);
        except
// Bei fehlerhafter Eingabe in einem Feld:
          Note[HalbJahr,Fach,Nr] := 0// Note auf 0 setzen
          Dec(Teiler[Halbjahr,Fach]); // Teiler um eins zurück
// Möglich auch eine Fehlerausgabe und die Anwahl des Notenfeldes, in dem der Fehler sich befindet, z.B.:
          Notenfeld[Halbjahr,Fach,Nr].SetFocus;
          Exit;
        end;
      end;
    end;
  end;

// Einzelnoten-Berechnungen

  for Fach := Deutsch to Religion do
  begin
    Ergebnis[Halbjahr1,Fach] := 0.0;
    Ergebnis[Halbjahr2,Fach] := 0.0;  
    for HalbJahr := Halbjahr1 to Halbjahr2 do
    begin
      If Teiler[Halbjahr, Fach]>0 then 
      begin
        for Nr = 1 to MaxNr do
        begin
          Ergebnis[Halbjahr,Fach] := Ergebnis[Halbjahr,Fach] + Note[HalbJahr,Fach,Nr]/Teiler[Halbjahr,Fach];
        end;
      end
      else
      begin
        Ergebnis[Halbjahr,Fach] := 0.0;
      end;
    end;
  end;

// Jahresnoten-Berechnungen

  for Fach := Deutsch to Religion do
  begin
    if Ergebnis[Halbjahr1,Fach] = 0.0 then
    begin
      if Ergebnis[Halbjahr2,Fach] = 0.0 then
      begin
        Ergebnis[GanzesJahr,Fach] := 0.0;
      end
      else
      begin
        Ergebnis[GanzesJahr,Fach] := Ergebnis[Halbjahr2,Fach];
      end;
    end 
    else if Ergebnis[Halbjahr2,Fach] = 0.0 then
    begin
      Ergebnis[GanzesJahr,Fach] := Ergebnis[Halbjahr1,Fach];
    end
    else
    begin
      Ergebnis[GanzesJahr,Fach] := 0.5*(Ergebnis[Halbjahr1,Fach]+Ergebnis[Halbjahr1,Fach]);
    end;
  end;


Nun, ist das übersichtlicher? Und auch bequemer um weitere Fächer (Sport, Bio, ....) oder vier, statt drei Teilnoten pro Halbjahr zu erweitern. In diesem Sinne, fröhliches Erlernden der Sprache Delphi!



>>>>ÄNDERUNG:<<<<<<<
Einführung eines Maxindex für Nummer, damit ohne Codeänderung das Programm auch bei 4,5,6 statt 3 Teilnoten je Halbjahr funktioniert.

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.


Zuletzt bearbeitet von Tranx am Sa 11.05.13 08:03, insgesamt 1-mal bearbeitet
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Fr 10.05.13 20:28 
ok, mit Arrays hat man die ganzen variablen noch, dass stimmt.. aber übersichtlicher ?

Also naja^^ bei mir gibt's eine Funktion und es werden nur andere Edits eingesetzt..

bei dir dagegen :D

jeder seine Meinung, ich finde meine "Art" übersichtlich...

und @user profile iconTranx vielleicht solltest du dir die Funktion Copy nochmal anschauen ;)
Copy('Hallo', 2, 2) liefert 'al'

Du überspringst somit einige Buchstabenteile...
copy(s, 2, 1) liefert 2te zeichen
Copy(s, 4, 2) liefert 4te und 5te Zeichen.. was mit dem 3ten Zeichen?

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Sa 11.05.13 07:54 
user profile iconIhopeonlyReader hat folgendes geschrieben Zum zitierten Posting springen:
ok, mit Arrays hat man die ganzen variablen noch, dass stimmt.. aber übersichtlicher ?

Also naja^^ bei mir gibt's eine Funktion und es werden nur andere Edits eingesetzt..

bei dir dagegen :D

jeder seine Meinung, ich finde meine "Art" übersichtlich...

und @user profile iconTranx vielleicht solltest du dir die Funktion Copy nochmal anschauen ;)
Copy('Hallo', 2, 2) liefert 'al'

Du überspringst somit einige Buchstabenteile...
copy(s, 2, 1) liefert 2te Zeichen
Copy(s, 4, 2) liefert 4te und 5te Zeichen.. was mit dem 3ten Zeichen?


Beachte bitte, wie ich vorgeschlagen habe, die Editfelder zu benennen: HxFyyNz

Dann frage ich nur das 2., das 4.+5. und das 7. Zeichen ab. Das sind die Nummern der Indices von Halbjahr, Fach und Nr. des Editfeld-Arrays. Es wäre sehr viel komplizierter, die Fächer in den Namen der Editfelder auszuschreiben und dann mit den Editfeldnamen das Array zu belegen, als so. Das 3. und 6. Zeichen dient nur dazu, dass nicht ein reiner Nummernsalat im Feldnamen steht. Was im Übrigen auch - soweit ich es weiß - nicht erlaubt ist (Feldernamen komplett mit Ziffern) Man kann auch den Feldnamen so definieren:

Halbjahr1Fach01Nr1, Dann wären die Teilbereiche für den Index Halbjahr: Copy(s, 9, 1), Fach: copy(s,14,2), Nr: Copy(s,18,1)


P.S. und was ist, wenn statt 3, 4 Teilnoten pro Halbjahr definiert werden? Dann muss man die Prozedur GibDurchschnitt ändern. Bei meiner Version benötigst Du nur die neuen Editfelder gemäß der Vorgaben und den Indexlauf von 1 ... 4 statt 1 .. 3 bei Nummer! Alles andere bleibt.


Und als Funktion kann man das ebenfalls organisieren:

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:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
function TForm1.NormiereNotenfelder : boolean;
var
  Halbjahr, Fach, Nr : integer;
begin
  Result := FALSE;
  for Fach := Deutsch to Religion do
  begin
    Teiler[Halbjahr1,Fach] := 0;
    Teiler[Halbjahr2,Fach] := 0;
    for HalbJahr := Halbjahr1 to Halbjahr2 do
    begin
      for Nr = 1 to MaxNr do
      begin
        if (Notenfeld[Halbjahr,Fach,Nr].Text=''then 
          Notenfeld[Halbjahr,Fach,Nr].Text='' := '0';
        if (Notenfeld[Halbjahr,Fach,Nr].Text <> '0'then
          Inc(Teiler[Halbjahr,Fach]);
        try
          Note[HalbJahr,Fach,Nr] := StrToInt(Notenfeld[Halbjahr,Fach,Nr].Text);
        except

// Bei fehlerhafter Eingabe in einem Feld:

          Note[HalbJahr,Fach,Nr] := 0// Note auf 0 setzen
          Dec(Teiler[Halbjahr,Fach]); // Teiler um eins zurück

// Möglich auch eine Fehlerausgabe und die Anwahl des Notenfeldes, in dem der Fehler sich befindet, z.B.:

          Notenfeld[Halbjahr,Fach,Nr].SetFocus;
          Exit;
        end;
      end;
    end;
  end;
  Result := TRUE;
end;

function TForm.Halbjahresnote(Halbjahr, Fach : integer) : single;
var
  Nr : integer;
begin
  Result := 0.0;
  try
    If Teiler[Halbjahr, Fach]>0 then 
    begin
      for Nr = 1 to MaxNr do
      begin
        Ergebnis[Halbjahr,Fach] := Ergebnis[Halbjahr,Fach] + Note[HalbJahr,Fach,Nr]/Teiler[Halbjahr,Fach];
      end;
    end;
  except 
    Result := 0.0;
  end;  
end;

function TForm1.Ganzjahrsnote(Fach : integer) : single;
//
// bei dem Durchschnitt 0 einer Halbjahrsnote darf nur die andere Halbjahresnote gewertet werden.
// Sind beide Halbjahresnoten 0, dann 0 ausgeben.
// Ansonsten wäre das ja eine fehlerhafte Berechnung : 0 + 3 ergäbe als Jahresnote 1.5, 1 + 3 als Jahresnote 2.0
//
begin
  if Ergebnis[Halbjahr1,Fach] = 0.0 then
  begin
    if Ergebnis[Halbjahr2,Fach] = 0.0 then
    begin
      Result := 0.0;
    end
    else
    begin
      Result := Ergebnis[Halbjahr2,Fach];
    end;
  end 
  else if Ergebnis[Halbjahr2,Fach] = 0.0 then
  begin
    Result := Ergebnis[Halbjahr1,Fach];
  end
  else
  begin
    Result := 0.5*(Ergebnis[Halbjahr1,Fach]+Ergebnis[Halbjahr1,Fach]);
  end;
end;

procedure TForm1.Berechne(Sender : TObject);
var
  Halbjahr, Fach : integer;
begin
// Nur wenn in allen Feldern sinnvolle Eingaben stehen, die Berechnung durchführen. Ansonsten wird das fehlerhafte
// Editfeld fokussiert und die Eingabe dort kann geändert werden.
  if NormiereNotenfelder then  
  begin
    for Fach := Deutsch to Religion do
    begin
      for HalbJahr := Halbjahr1 to Halbjahr2 do
      begin
        Ergebnis[Halbjahr, Fach] := Halbjahresnote(Halbjahr, Fach);
      end;
      Ergebnis[GanzesJahr, Fach] := Jahresnote(Fach);
    end;
  end
  else
  begin
// hier eine Fehlerausgaberoutine!
  end;
end;


Was sagst Du dazu?

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.
Blawen
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: Sa 11.05.13 10:00 
user profile iconm1sc hat folgendes geschrieben:
Du verstehst glaub ich ganed was ich genau machen will.

Es liegt selten an den Helfern ;-)

user profile iconm1sc hat folgendes geschrieben Zum zitierten Posting springen:
Edit: ich geh pennen is mir alles gerade zu blöd

Bitte überfordert ihn nicht :roll: ;-)

Als kleiner und gut gemeinter Tipp:
Um die Lesbarkeit Deines Quellcodes zu erhöhen, ist es ungemein praktisch, wenn er schön formatiert ist.
Nebeneffekt: die Fehler und die Ablauflogik springen einem dabei förmlich ins Auge.

_________________
Es kompilert, wir können ausliefern.
Und es kompiliert wieder - das Update ist fertig - bitte 100 Euro ;-)
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Sa 11.05.13 10:28 
Gerade bei Eingaben kann man viel verkehrt machen, da ja diese in TEdit-Feldern nicht kontrolliert werden. Gibt man z.B. in eines der Felder statt einer Ziffer z.B. "A" oder - noch schlimmer - ALT 255 (geschütztes Leerzeichen) ein, so wird dieses Feld bei der Umwandlung in eine Zahl einen Fehler produzieren. Besser wäre m.E. die Verwendung von SpinEdit-Komponenten. Dort kann man nur Zahlen eingeben, deren Bereich man auch noch begrenzen kann (z.B.: 0 .. 6), so dass nur gültige Noten eingegeben werden können. Vorteil ist auch noch, dass man über Cursor-Tasten den Wert des Feldes verändern kann. Wobei im vorliegenden Fall die 0 dann für "keine Note" stände.

Vielleicht denkst Du mal darüber nach. Zumal dann auch die Notenübergabe aus den Feldern in die Noten viel einfacher wäre:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
  // mit TEdit: try ... except ... end wegen möglicherweise nicht numerischer Eingaben
  try
    Note := StrToInt(EditFeld.Text);
//korrekterweise auch noch Abfrage wegen Eingaben außerhalb der Grenzen 0 .. 6:
    if (Note<0then
      Note := 0
    else if (Note>6then
      Note := 6;
  except
    Note := 0;
  end;


  // mit TSpinEdit:
  Note := SpinEditFeld.Value;


Überzeugt?


Und gleich die Übertragung in meinen Vorschlag:

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:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
const
   MaxNr = 3// Neu, falls sich die Anzahl der Teilnoten ändern sollte

   Deutsch = 1;
   Englisch = 2;
   Mathematik = 3;
   Informatik = 4;
   VIDO = 5;
   Sozialkunde = 6;
   Religion = 7;

   HalbJahr1 = 1;
   HalbJahr2 = 2;
   GanzesJahr = 3;

type
   NotenArr = Array[HalbJahr1..HalbJahr2,Deutsch..Religion,1..MaxNr] of integer;
   NotenFeldArr = Array[HalbJahr1..Halbjahr2,Deutsch..Religion,1..MaxNr] of TSpinEdit;
   TeilerArr = Array[HalbJahr1..HalbJahr2,Deutsch..Religion] of integer;
   ErgebnisArr = Array[Halbjahr1..GanzesJahr,Deutsch..Religion] of single;
   ErgebnisFeldArr = Array[Halbjahr1..GanzesJahr,Deutsch..Religion] of TEdit;
var
   Note : NotenArr;   // Dies kann auch als Variable in die Klasse TForm!
   NotenFeld : NotenFeldArr; // Dies kann auch als Variable in die Klasse TForm!
   Teiler: TeilerArr;
   Ergebnis : ErgebnisArr;
   ErgebnisFeld : ErgebnisFeldArr;          

// Belegung der Notenfelder:

// Name der Eingabe-Felder wie folgt festlegen:
  
//   H1F01N1  = Halbjahr1, Fach 1, Nr. 1
//   H2F05N3  = Halbjahr2, Fach 5, Nr. 3
//   H1F01    = Halbjahr1, Fach 1, Ergebnisnote des Halbjahres
//   H3F01    = GanzesJahr, Fach 1, Ergebnisdurchschnitt des Faches im Jahr
//   die Nummer hinter Fach zweiziffrig, weil ja möglicherweise mehr als 10 Fächer vorliegen 


Dann kannst Du die Belegung wie folgt machen:

procedure TForm1.NotenfeldBelegung(Sender : TObject);
var
  TC : TComponent;
  s : string;
  i, Halbjahr, Fach, Nr : integer;
begin
  for i := 0 to ComponentCount-1 do
  begin
    TC := Components[i];
    if TC is TSpinEdit then
    begin
      s := TSpinEdit(TC).Name;
      if s[1] = 'H' then begin
        try
          Halbjahr := StrToInt(Copy(s,2,1));
        except
          Halbjahr := 0;
        end;
        try
          Fach := StrToInt(Copy(s,4,2));
        except
          Fach = 0;
        end;
        try
          Nr := StrToInt(Copy(s,7,1));
        except
          Nr := 0;
        end;
        if Halbjahr*Fach*Nr<>0 then // falls einer der Indices 0 ist, ist dies kein Notenfeld
        begin
          Notenfeld[Halbjahr,Fach,Nr] := TSpinEdit(TC);
        end;
      end;
    end else if TC is TEdit then
    begin
      s := TEdit(TC).Name;
      if s[1] = 'H' then begin
        try
          Halbjahr := StrToInt(Copy(s,2,1));
        except
          Halbjahr := 0;
        end;
        try
          Fach := StrToInt(Copy(s,4,2));
        except
          Fach = 0;
        end;
        if Halbjahr*Fach<>0 then // falls einer der Indices 0 ist, ist dies kein Notenfeld
        begin
          Ergebnisfeld[Halbjahr,Fach] := TEdit(TC);
        end;
      end;
    end;
  end;
end;  

// function nicht mehr nötig, da ja keine Fehleingabe mehr möglich ist!!!        
// da keine Normierung nötig ist, sinnvollerweise andere Prozedurbezeichnung

procedure TForm1.BelegeNoten;
var
  Halbjahr, Fach, Nr : integer;
begin
  for Fach := Deutsch to Religion do
  begin
    Teiler[Halbjahr1,Fach] := 0;
    Teiler[Halbjahr2,Fach] := 0;
    for HalbJahr := Halbjahr1 to Halbjahr2 do
    begin
      for Nr = 1 to MaxNr do
      begin
        Note[HalbJahr,Fach,Nr] := Notenfeld[Halbjahr,Fach,Nr].Value;
        if Note[Halbjahr,Fach,Nr]>0 then 
          Inc(Teiler[Halbjahr,Fach]);
      end;
    end;
  end;
end;

function TForm.Halbjahresnote(Halbjahr, Fach : integer) : single;
var
  Nr : integer;
begin
  Result := 0.0;
  try
    If Teiler[Halbjahr, Fach]>0 then 
    begin
      for Nr = 1 to MaxNr do
      begin
        Ergebnis[Halbjahr,Fach] := Ergebnis[Halbjahr,Fach] + Note[HalbJahr,Fach,Nr]/Teiler[Halbjahr,Fach];
      end;
    end;
  except 
    Result := 0.0;
  end;  
end;

function TForm1.Ganzjahrsnote(Fach : integer) : single;
//
// bei dem Durchschnitt 0 einer Halbjahrsnote darf nur die andere Halbjahresnote gewertet werden.
// Sind beide Halbjahresnoten 0, dann 0 ausgeben.
// Ansonsten wäre das ja eine fehlerhafte Berechnung : 0 + 3 ergäbe als Jahresnote 1.5, 1 + 3 als Jahresnote 2.0
//
begin
  if Ergebnis[Halbjahr1,Fach] = 0.0 then
  begin
    if Ergebnis[Halbjahr2,Fach] = 0.0 then
    begin
      Result := 0.0;
    end
    else
    begin
      Result := Ergebnis[Halbjahr2,Fach];
    end;
  end 
  else if Ergebnis[Halbjahr2,Fach] = 0.0 then
  begin
    Result := Ergebnis[Halbjahr1,Fach];
  end
  else
  begin
    Result := 0.5*(Ergebnis[Halbjahr1,Fach]+Ergebnis[Halbjahr1,Fach]);
  end;
end;

// Prozedur Berechne gleich mit Ausgabe in die Felder!!

procedure TForm1.Berechne(Sender : TObject);
var
  Halbjahr, Fach : integer;
begin
  BelegeNoten; 
  for Fach := Deutsch to Religion do
  begin
    for HalbJahr := Halbjahr1 to Halbjahr2 do
    begin
      Ergebnis[Halbjahr, Fach] := Halbjahresnote(Halbjahr, Fach);
      ErgebnisFeld[Halbjahr,Fach].Text := FormatFloat('0.00',Ergebnis[Halbjahr, Fach]);
    end;
    Ergebnis[GanzesJahr, Fach] := Jahresnote(Fach);
    ErgebnisFeld[GanzesJahr,Fach].Text := FormatFloat('0.00',Ergebnis[GanzesJahr, Fach]);
  end;
end;

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 12.05.13 10:37 
- Nachträglich durch die Entwickler-Ecke gelöscht -