Autor Beitrag
Fright Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Sa 27.08.11 20:10 
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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label_Maximalpunktzahl: TLabel;
    Label_Schülerleistung: TLabel;
    Label1: TLabel;
    Edit_Maximalpunktzahl: TEdit;
    Edit_Schülerleistung: TEdit;
    Edit_Note: TEdit;
    Button_Ergebnis: TButton;
    procedure Button_ErgebnisClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button_ErgebnisClick(Sender: TObject);
var
  maxpunkte, schuelerpunkte, ergebnispunkte : Integer;
begin
 maxpunkte := StrToInt (Edit_Maximalpunktzahl.Text);
 schuelerpunkte := StrToInt (Edit_Schülerleistung.Text);

   if schuelerpunkte = 0 then
   Edit_Note.Text := 'Division durch Null';

 if schuelerpunkte <> 0 then

 ergebnispunkte := schuelerpunkte * 100 Div maxpunkte;

 Edit_Note.Text := IntToStr(ergebnispunkte);

case ergebnispunkte of
  92..100: Edit_Note.Text:= '1';
  82..91: Edit_Note.Text:= '2';
  67..81: Edit_Note.Text:= '3';
  50..66: Edit_Note.Text:= '4';
  30..49: Edit_Note.Text:= '5';
   0..29: Edit_Note.Text:= '6';
else
  Edit_Note.Text:= 'Das kann nicht sein.';
end;
end.


jetzt makiert der mit end. also zeile 58 als fehler, aber das stand vorher schon da.

ein dickes danke erstmal für die hilfe. hatte mir den bereich schon durchgelesen aber nicht verstanden mit der case funktion auch unter google karmen beispiele aber hatte auch die nicht verstanden.

wenn ich das später irgendwann fertig habe kann ich hier fragen stellen, wie ich mich am besten vorbereite auf kommende sachen und was am anfang wichtig ist zu lernen? weil das hier ist ja wirklich eher ein crashkurs ohne wirklich alles 100% genau zu vertiefen für mich
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Sa 27.08.11 20:23 
Genau so meine ich das.

Die Meldung mit dem End. bezieht sich (logischerweise) auf das End. am Ende. Wenn du mal mitzählst, wie viele Blöcke (begin und case hier) du öffnest und schließt wird dir auffallen, dass vor dem end. welches die Unit beendet ein end; fehlt.
Dafür hilft es, den Code ordentlich blockweise einzurücken. Dann sieht man direkt wo eins hin gehört.

Hier nämlich hinter das end; vom case noch ein weiteres, welches die procedure dann abschließt.


Klar kannst du Fragen stellen ("neue Frage, neues Thema" beachten). Hilfreich ist es, dir selber kleine Projekte auszudenken, und die dann umzusetzen. Viel kannst du noch nicht verpasst haben, wenn das die aktuelle Aufgabe war ;)
Oft genommen werden im Unterricht Währungsumrechner, Zahlenraten, Taschenrechner in ungefähr dieser Reihenfolge. Da sollte dann alles wichtige mal dabei gewesen sein... die Hälfte (Sprach-Funktions-mäßig gezählt) davon hast du jetzt schon ;)

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Fright Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Sa 27.08.11 20:33 
Okay das Programm läuft doch ein Fehler ist noch da...

Folgendes: Wenn ich 100 Punkte Max sind und der schüler macht 1 Punkt gibt er 6 als Note...
soweit richtig hat aber ein schüler 0 Punkte gibt er den fehlertext "Kann nicht sein" aus. aber da müsste er auch eine 6 ausspucken. wie mach ich das jetzt?

fehler selbst gefunden. Danke euch allen für eure antwort!
Fright Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: So 28.08.11 10:52 
Hab doch noch ein Problem. und zwar wenn ich einen fehler machen und oben beim faktor Maximalpunkte 0 eingebe und bei schülerpunkte auch 0 eingebe kommt die bekannte fehlermeldung.zeroerror :(
100 durch 0 geht als faktor 6 durch das klappt nur diese eine rechnung geht nicht

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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label_Maximalpunktzahl: TLabel;
    Label_Schülerleistung: TLabel;
    Label1: TLabel;
    Edit_Maximalpunktzahl: TEdit;
    Edit_Schülerleistung: TEdit;
    Edit_Note: TEdit;
    Button_Ergebnis: TButton;
    procedure Button_ErgebnisClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button_ErgebnisClick(Sender: TObject);
var
  maxpunkte, schuelerpunkte, ergebnispunkte : Integer;
begin
 maxpunkte := StrToInt (Edit_Maximalpunktzahl.Text);
 schuelerpunkte := StrToInt (Edit_Schülerleistung.Text);

 ergebnispunkte := schuelerpunkte * 100 Div maxpunkte;

 Edit_Note.Text := IntToStr(ergebnispunkte);

case ergebnispunkte of
  92..100: Edit_Note.Text:= '1';
  82..91: Edit_Note.Text:= '2';
  67..81: Edit_Note.Text:= '3';
  50..66: Edit_Note.Text:= '4';
  30..49: Edit_Note.Text:= '5';
   0..29: Edit_Note.Text:= '6';
else
  Edit_Note.Text:= 'Das kann nicht sein.';
end;
end;
end.
Singlepin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36
Erhaltene Danke: 4

WinXP
Delphi6 MySQL
BeitragVerfasst: So 28.08.11 12:17 
Division durch Null geht nun mal nicht.
Das muß du vermeiden.
z.B. solltest du deinen Quelltext in folgender Art erweitern:

Wenn maxpunkte gleich Null dann Fehlermeldung sonst Berechnung durchführen.
Fright Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: So 28.08.11 12:30 
wenn ich sage max:100 schülerpunktzahl 0 dann kommt ja note 6 raus, aber wenn halt max 0 einsetze macht er die fehlermeldung.

die frage ist es wie vermeide ich es wie im tutorial beschrieben zeigt er mir ja 0 als antwort an. er soll mir halt wenn das passiert "das kann nicht sein" ausgeben. aber nur wenn bei Max.punktzahl halt 0 steht

wie du das jetzt sagst, sollte ich das wie folgt machen?

if maxpunkte = 0 then
Edit_Ergebnis.Text := 'Das kann nicht sein.';

ergebnispunkte := schuelerpunkte * 100 Div maxpunkte;
usw?

okay gemacht zeigt nun das an was will aber macht die fehlermeldung noch "Division durch 0" ansonsten passt alles. wo ist mein fehler?
Singlepin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36
Erhaltene Danke: 4

WinXP
Delphi6 MySQL
BeitragVerfasst: So 28.08.11 12:45 
Die IF-Anweisung gibt es auch in der Form
IF "Bedingung" then "Anweisung wenn wahr" else begin "Anweisungen wenn Falsch" end;
In den else-Zweig packst du den Code zur Berechnung.
Fright Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: So 28.08.11 13:05 
keine ahnung wie ich das machen soll.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
if maxpunkte = 0 then
Edit_Note.Text := 'Das kann nicht sein.';

ergebnispunkte := schuelerpunkte * 100 Div maxpunkte;

 Edit_Note.Text := IntToStr(ergebnispunkte);

case ergebnispunkte of


Man müsste ja nun nur weiter machen in zeile 3 else hin zu schreiben dann in 4 das umzuschreiben, aber wie kenne diese if funktion ja nur in der form wie ich sie hatte. mach das ja erst seid gestern...

habe nun versucht mit

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  if maxpunkte = 0 then
  Edit_Note.Text := 'Das kann nicht sein.';
  else
  if maxpunkte > 0 then
  Edit_Note.Text := 'ergebnispunkte := schuelerpunkte * 100 Div maxpunkte';

 Edit_Note.Text := IntToStr(ergebnispunkte);


geht aber auch nicht

so auch nicht hatte .text übersehen

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
if maxpunkte = 0 then
   Edit_Note.Text := 'Das kann nicht sein.';

   else
   Edit_Note := 'ergebnispunkte := schuelerpunkte * 100 Div maxpunkte';

 Edit_Note.Text := IntToStr(ergebnispunkte);
Singlepin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36
Erhaltene Danke: 4

WinXP
Delphi6 MySQL
BeitragVerfasst: So 28.08.11 13:21 
Der Ansatz ist richtig

ausblenden Delphi-Quelltext
1:
2:
3:
if maxpunkte = 0 then
 Edit_Note.Text := 'Das kann nicht sein.' 
 else

ist soweit OK nur das Semikolon vor dem ELSE mußte weg.

Nach dem ELSE kommen mehrere Anweisungen die mußt du in BEGIN ... END einschließen.
Da wo jetzt die Punkte stehen kommen deine Berechnungen hinein.

Für diesen Beitrag haben gedankt: Fright
Fright Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: So 28.08.11 13:38 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
begin
 maxpunkte := StrToInt (Edit_Maximalpunktzahl.Text);
 schuelerpunkte := StrToInt (Edit_Schülerleistung.Text);

   if maxpunkte = 0 then
   Edit_Note.Text := 'Das kann nicht sein.'
   else
   ergebnispunkte := schuelerpunkte * 100 Div maxpunkte;

 Edit_Note.Text := IntToStr(ergebnispunkte);


super danke! Klappt super nun alles. ich hab nicht dran gedacht das mit ";" den befehl beende
Fright Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: So 28.08.11 14:16 
*CLOSE*