| Autor |
Beitrag |
+Sandmann+
Hält's aus hier
Beiträge: 5
Windows 2000, Linux 10.0 Suse
Delphi 5
|
Verfasst: Di 14.02.06 20:08
Hi,
Problem: If Anweisungen bezüglich des durchfallens....
Also wir sollen ein Programm schreiben(auf Oberfläche).
fünf Labelfelder und fünf Editfelder innerhalb der Editfelder sollen Noten eingetragen werden können. Bei einer 6 ist der schüler durchgefallen. Bei einer 5 braucht er eine 2 um diese auszugleichen, bei zwei fünfen ist er auch durchgefallen.
Wir haben drei Buttons: 1 Button: NEU ----> cleared die Felder
2 Button: START---> soll die Berechnung durchführen (mein Problem)
3 Button: ENDE----> application.terminate!
Die Aussage ob der Schüler durchgefallen ist, soll nachher unterhalb der Editfelder innerhalb eines Labels erscheinen....
Ich habe echt kein Plan wie ich das verwirklichen soll!
Der 1. und 3. Button kein Problem aber der 2. tja da hängts!
Vielen Dank im Voraus!
Sandmann
Einloggen, um Attachments anzusehen!
|
|
digi_c
      
Beiträge: 1905
W98, XP
D7 PE, Lazarus, WinAVR
|
Verfasst: Di 14.02.06 20:18
Ein Screenshot wäre aber sicherlich angebrachter gewesen
Am besten du schreibst dir mal auf, was die Bedingungen sind:
1. Wenn eine Note = 6 ist dann durchgefallen
2. Wenn ein Note = 5 und eine weitere Note = 5 dann durchgefallen
3. Ansonsten nicht durchgefallen
Die Info Lehrer würden an dieser Stelle wieder ein Struktogramm empfehlen( www.strukted.de) aber da ich das selber auch nie mache lass ich das mal...
Ich mag dir die Lösung noch nicht direkt sagen(das ist wie wenn einer die Lösung einer Knobelaufgabe in den Raum posaunt), bedenke ein Programmierer kennt Zuweisungen, Verzweigungen und Schleifen
...und etliches mehr 
|
|
+Sandmann+ 
Hält's aus hier
Beiträge: 5
Windows 2000, Linux 10.0 Suse
Delphi 5
|
Verfasst: Di 14.02.06 20:33
aha gut das du die lösung schonmal weißt.
Die Bedingungen sind mir bekannt.
mal ganz grob:
if noten[i]=6 then anz_6:=anz6+1;
usw.
ich kann es aber nicht in die richtige Syntax umwandeln....bin kein guter Programmierer!
Struktogramme haben wir schon gemacht.
Allerdings hat mich das auch nicht VIEL weiter gebracht! Mein Problem ist das Umwandeln in die Delphi-Sprache.
|
|
+Sandmann+ 
Hält's aus hier
Beiträge: 5
Windows 2000, Linux 10.0 Suse
Delphi 5
|
Verfasst: Di 14.02.06 21:59
|
|
Buchi
      
Beiträge: 33
Win XP
Delphi 6 Professional
|
Verfasst: Di 14.02.06 22:06
+Sandmann+ hat folgendes geschrieben: |
warum ist versetzt_lb ein undef. Bezeichner.....das kann nicht sein! |
Schreibst du "versetzt_lb" in die Unit? Ich weiß nicht ob das das Problem ist (Weil arg einfach), aber es müsste eher "labelx.caption", bei einer function/procedure "form1.labelx.caption" heißen.
Glaueb zwar nicht dass das dein Problem ist, aber vielleicht hab ich ja Glück 
_________________ AMD Athlon64 3700+ | 1536MB RAM | Geforce 7800GT
|
|
MatzeB
Hält's aus hier
Beiträge: 13
Win98, 2000, XP, Linux, Knoppix
Delphi 6.0, C++ 6.0
|
Verfasst: Fr 17.02.06 11:39
Hi Sandmann,
zu allererstes Mal solltest du vielleicht auch deine Komponenten U_Notenberechnung.pas mit Form Versetzung posten, dann kann man sich das Ding auch wirklich anschauen
Aber zu deinem Prob:
Inhalt der 5 Editfelder jeweils abprüfen ob eine 5 oder eine 6 drin ist, wenn z. B. eine 5 drin steht dann z. B. inc(iFUENF), bei einer 6 analog. Zum Auswerten, Abfrage ob iFUENF>=2 oder iSECHS>=1 dann Labelx.Caption:="Durchgefallen"
Umsetzten ist aber deine Sache  Übung macht den Meister.
Gruß MatzeB
|
|
+Sandmann+ 
Hält's aus hier
Beiträge: 5
Windows 2000, Linux 10.0 Suse
Delphi 5
|
Verfasst: Sa 18.02.06 14:51
ok schonmal vielen dank für eure tipps.....mit dem eigentlich programm bin ich jetzt auch fertig und es läuft!
ich bin echt stolz auf mich.....lol
jetzt kommt das nächste problem: -eine Erweiterung des Programms
1) Abfangen von Fehleingaben
--> Es soll eine Showmessage aufgehen, bei: -Eingabe von Buchstaben, - Noten müssen zwischen 1 und 6 liegen (also keine 7 oder 8 beispeilsweise), -leere Felder verboten, -Sonderzeichen.
ich würde mich über paar elegante Lösungsideen freuen!
cu
André
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:
| unit U_Notenberechnung;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, jpeg, ExtCtrls;
type TVersetzung = class(TForm) mathe_ed: TEdit; deutsch_ed: TEdit; englisch_ed: TEdit; franz_ed: TEdit; phy_ed: TEdit; mathe_label: TLabel; deutsch_label: TLabel; englisch_label: TLabel; franz_label: TLabel; physik_label: TLabel; Ende: TButton; Start: TButton; Label6: TLabel; Neu: TButton; Image1: TImage; versetzt_lb: TLabel; procedure EndeClick(Sender: TObject); procedure NeuClick(Sender: TObject); procedure StartClick(Sender: TObject);
private public end;
var Versetzung: TVersetzung; noten: array [1..6] of integer; implementation
{$R *.DFM}
procedure TVersetzung.EndeClick(Sender: TObject); begin application.terminate; end;
procedure TVersetzung.StartClick(Sender: TObject); var mathe, deutsch, englisch, franz, physik: integer;
begin mathe:=strtoint(mathe_ed.text); noten[mathe]:=noten[mathe]+1; englisch:=strtoint(englisch_ed.text); noten[englisch]:=noten[englisch]+1; deutsch:=strtoint(deutsch_ed.text); noten[deutsch]:=noten[deutsch]+1; franz:=strtoint(franz_ed.text); noten[franz]:=noten[franz]+1; physik:=strtoint(phy_ed.text); noten[physik]:=noten[physik]+1;
if noten[6]>0 then begin versetzt_lb.caption:='Schüler ist nicht versetzt, da mind. eine 6'; end else begin if noten[5]>1 then begin versetzt_lb.caption:='Schüler ist nicht versetzt, da mehr als eine 5'; end else begin if noten[5]=0 then begin versetzt_lb.caption:='Schüler ist versetzt, da keine 5 oder 6'; end else begin if noten[1]+noten[2]>0 then begin versetzt_lb.caption:='Schüler ist versetzt, da er die 5 ausgleichen kann';
end; end; end; end; end;
procedure TVersetzung.NeuClick(Sender: TObject); begin mathe_ed.clear; englisch_ed.clear; franz_ed.clear; phy_ed.clear; deutsch_ed.clear;
end;
end. |
Moderiert von Gausi: Beitragsformatierung überarbeitet.
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Sa 18.02.06 15:00
hallo andré,
Mit diesem Code brauchst du keine fehlermeldungen mehr
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin if not (Key in [#49 .. #54, #8]) then Key := #0; end; |
damit lassen sich nur noch zahlen von 1-6 eingeben
außerdem... setz deinen code doch bitte mal in die delphi tags 
Zuletzt bearbeitet von Marc. am Sa 18.02.06 15:07, insgesamt 3-mal bearbeitet
|
|
Fabian W.
      
Beiträge: 1766
Win 7
D7 PE
|
Verfasst: Sa 18.02.06 15:02
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Sa 18.02.06 15:05
warum eine exception auslösen, wenn man sie doch vermeiden kann?
außerdem kostet es mehr resourcen 
|
|
Fabian W.
      
Beiträge: 1766
Win 7
D7 PE
|
Verfasst: Sa 18.02.06 15:10
Wenn du das Topic gelöesen hättest wärst du auf die Funtkion Val gesoßen
Egal deine Lösung ist für Anfänger einfacher (C&P).
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Sa 18.02.06 15:13
stimmt, habe ich nicht gelesen, ich sah nur den try.. except-block - das hatte mir gereicht
dann nehm ich meine anschuldigung wieder zurück 
|
|
+Sandmann+ 
Hält's aus hier
Beiträge: 5
Windows 2000, Linux 10.0 Suse
Delphi 5
|
Verfasst: Sa 18.02.06 17:16
hey, also das mit der presskey methode funktioniert nicht, außerdem geht es ja auch darum die Fehlermeldung anzuzeigen!
Sprich das Showmessagefenster sollte sich schon öffnen....von daher sollte es schon möglich sein innerhalb der Editfelder auch buchstaben, sonderzeichen etc machen zu können, aber halt beim anklicken des startbuttons sollte dann die Fehlermeldung erscheinen...
|
|
Fabian W.
      
Beiträge: 1766
Win 7
D7 PE
|
Verfasst: Sa 18.02.06 17:40
Dann schau mal in deiner Delphi-Hilfe nach Val(); oder such hier im Forum, dann ist der Lerneffeckt größer ^^
mfg
|
|
King_Crasher
      
Beiträge: 37
WIN XP
Delphi 2003
|
Verfasst: Mo 20.02.06 16:13
Hallo
ich habs so gemacht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var irgendwas:Integer
try irgendwas:=strtoint (Editfeld.text); except on econverterror do begin showmessage('Bitte nur Zahlen eingeben.'); editfeld.setfocus; exit; end; end; |
Das sorgt dafür das man nur noch Buchstaben eingebn kann.
|
|
Miri
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: Mo 20.02.06 16:18
da würd ich noch eher ne if-abfrage um den start-button basteln, die die inhalte der edits prüft. und wenn die inhalte in irgendeinem nicht passen, dann showmessage("passt nich")...
|
|