Autor Beitrag
+Sandmann+
Hält's aus hier
Beiträge: 5

Windows 2000, Linux 10.0 Suse
Delphi 5
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: 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 :P
...und etliches mehr ;-)
+Sandmann+ Threadstarter
Hält's aus hier
Beiträge: 5

Windows 2000, Linux 10.0 Suse
Delphi 5
BeitragVerfasst: 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+ Threadstarter
Hält's aus hier
Beiträge: 5

Windows 2000, Linux 10.0 Suse
Delphi 5
BeitragVerfasst: Di 14.02.06 21:59 
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:
begin
   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';



warum ist versetzt_lb ein undef. Bezeichner.....das kann nicht sein!

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt
Buchi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 33

Win XP
Delphi 6 Professional
BeitragVerfasst: Di 14.02.06 22:06 
user profile icon+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
BeitragVerfasst: 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+ Threadstarter
Hält's aus hier
Beiträge: 5

Windows 2000, Linux 10.0 Suse
Delphi 5
BeitragVerfasst: 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é

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:
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Versetzung: TVersetzung;
  noten: array [1..6of 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 user profile iconGausi: Beitragsformatierung überarbeitet.
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Sa 18.02.06 15:00 
hallo andré,

Mit diesem Code brauchst du keine fehlermeldungen mehr :P
ausblenden 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 :roll:


Zuletzt bearbeitet von Marc. am Sa 18.02.06 15:07, insgesamt 3-mal bearbeitet
Fabian W.
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: Sa 18.02.06 15:02 
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Sa 18.02.06 15:05 
warum eine exception auslösen, wenn man sie doch vermeiden kann?
außerdem kostet es mehr resourcen :roll:
Fabian W.
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Sa 18.02.06 15:13 
stimmt, habe ich nicht gelesen, ich sah nur den try.. except-block - das hatte mir gereicht :lol:
dann nehm ich meine anschuldigung wieder zurück :oops:
+Sandmann+ Threadstarter
Hält's aus hier
Beiträge: 5

Windows 2000, Linux 10.0 Suse
Delphi 5
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37

WIN XP
Delphi 2003
BeitragVerfasst: Mo 20.02.06 16:13 
Hallo
ich habs so gemacht:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var
irgendwas:Integer

try
irgendwas:=strtoint (Editfeld.text);//bei irgendwas einfach iregendwas eintragen (Was du willst. Und beim Editfeld dein Editfeld eben. Den ganzen Befehl 5 mal(Anzahl der Editfelder).
     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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: 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")...