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



BeitragVerfasst: Fr 26.08.11 13:47 
Hallo ihr lieben,

ich bin vor kurzen in eine Klasse dazugestoßen. Die Programmieren nun einige Zeit mit Delphi. Ich habe bis dato jedoch 0 Ahnung von Delphi oder von Programmieren überhaupt.

Folgendes sollen wir machen: Wir sollen ein Programm schreiben, wo wir eine Box mit die Max. zu erreichende Punktzahl eintragen können; eine Box mit den erreichten Punkten und dann einen "Berechnungsbutton" und eine Box wo das Ergebniss dann steht.

Nun meine Frage. Kann mir einer Sowas mal machen und dann erklären wie er es genau gemacht hat?
Des weiteren würde ich gern wissen wie ich dann am besten Anfange mit dem Programmieren.

Ich habe bis nächste Woche Montag Zeit für das Programm. Leider hat der Lehrer kein verständniss dafür, das ich neu in der Schule bin und vorher kein Delphi oder co hatte. Ich kenne mich max mit Excel aus wo ich SVerweiße usw mache oder wenndannsonst Formeln die auch weitreichender sind.

Ich hab das Programm Delphi2010.

Habe mir vorhin ein Buch gekauft, aber das Arbeitet mit einem anderen Delphi Programm was ganz anders ausgebaut ist und wenn ich der beschreibung folgen möchte bringt mir das überhauptnix. Auch sonst sind dort keine erklärungen sondern nur arbeitsschritte.

ich danke euch für eure hilfe jetzt schon.


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Fr 26.08.2011 um 17:47
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 26.08.11 13:56 
Hallo und :welcome: in der Entwickler-Ecke,

Das Buch arbeitet vermutlich mit Delphi7 oder früher - seitdem hat sich an der IDE einiges getan. Für einen Einstieg könnte dann der Crashkurs von Christian hilfreich sein. Der basiert zwar auf Turbo-Delphi von 2006, aber die IDE sieht da schon ziemlich so aus, wie in der aktuellen Version.

Und das Beispiel "Mini-Taschenrechner" aus dem Tutorial sollte sich recht schnell auf dein Problem anpassen lassen. :-)

_________________
We are, we were and will not be.
Fright Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Fr 26.08.11 14:03 
Ich schau mir den Crashkurs gern an und danke schon mal. Auch die Sache mit dem Taschenrechner schau ich mir dann gern an. ich danke dir sehr für deine schnelle Antwort
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Fr 26.08.11 15:47 
Hey,

wenn du dann den Crashkusrs durchgearbeitet hast kannst du dein Programm auf folgende Weise realisieren:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
- Pozentzahlen der Noten in einer Array-Konstante speichern (Stichwort: Arrays, Konstanten)
- Gesamtpunktzahl und ereichte Punktzahl in einem Edit eingeben lassen. 
- beim Klick auf den Berechnen-Button:
  - Punkte aus den Edits in Variablen zischenspeichern (Stichwort: StrToInt bzw. TryStrToInt)
  - mit Hilfe der Variablen die Prozentzahl berechnen (erreichte Punkte / Gesamtpunkte * 100)
  - dann mit einer for-Schleife das Array durchsuchen (Stichwort: for-Schleife)
    - die berechnete Prozentzahl mit der im aktuellen Array-Element vergleichen (bei den kleinsten Prozenten bzw schlechtesten Noten anfangen)
      - wenn die berechnete ProzentZahl kleiner ist als die im Array: einfach weiter machen
      - wenn die berechnete ProzentZahl größer ist als die im Array: Index der for-Schleife ausgeben, das ist die Note

Jetzt musst du das nur noch in Quelltext umsetzen ;)

MfG Bergmann

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
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: Fr 26.08.11 17:23 
Das geht aber auch einfacher ;) Auch wenn man dann weniger lernt. Also könntest du vielleicht beides mal bauen, zum Üben :zustimm:
So würde ich das machen:

ausblenden Quelltext
1:
2:
3:
4:
- Punkte und maximale Punkte einlesen, konvertieren und in Variablen speichern
- Prozent berechnen, auf Integer runden (bis hier wie bei Bergmann)
- case-of nutzen, um Zuordnung zu machen
- Ausgabe des Ergebnisses

_________________
"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."
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Fr 26.08.11 17:35 
Hey,

bei Gymnasien sind die Noten aber Punkte (0-15) und da sind die Kommastellen schon wichtig, weil sonst das Ergebnis zu stark verfälscht wird. Deshalb lieber ein Array of Single ;)

MfG Bergmann

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
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: Fr 26.08.11 18:22 
Mehr als halbe Punkte konnte man bei uns eh nie bekommen. Also ließe sich case auch noch verwenden, wenn man eine Kommastelle dazu nimmt und in Promille rechnet: Punkte/Gesamt * 1000 und dann z.B 66% als 660 abfragt ;)

_________________
"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: Fr 26.08.11 20:56 
Okay bis morgen Arbeite ich das alles durch und schreib dann den "code" wenn man es so nennt mal hier rein.

danke bis hierhin erstmal
Fright Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Sa 27.08.11 12:34 
Edit: neue frage:

Folgende Frage:

Da steht nun was ich machen soll, soweit ja auch okay, aber wie ich das genau mache steht da nicht.

Wie sage ich das er was aus "Edit_Erste_zahl" mit "Edit_Zweite_Zahl" addiert und dieses in "Edit_Ergebnis" ausgibt was auf RealOnly auf "True" gestellt wurde. warum das auf True steht verstehe ich ja aber der abschnitt erklärt nicht wie man Sachen zusammenrechnet. Er sagt, das man es so wie vorher mit "Hallo Welt" machen soll. Aber da wird ja nix Addiert.

Kann mir da einer helfen damit ich weiter machen kann und meine Hausaufgaben dann später schaffen kann bis Montag? Hab langsam bange das ich das nicht bis dahin schaffe

EDIT: Hat einer vielleicht ICQ und zeit ein wenig über die Materie zu reden?

PS: var steht für Variabel soweit okay.

warum heißt nun aber bei ihm fristNumber usw und nicht edfirstNumber soll ich nun auch dort nicht Edit_Erste_Zahl sondern Erste_Zahl hin schreiben?
Bevor jetzt wer sagt warum nimmst du nicht die vorgeschriebenden Wörter... Ich hab sie mit absicht nicht genommen um die zusammenhänge besser zu verstehen ob ich dort den Text nehmen numm von Edit oder Caption nehmen muss. Klar denke ich nun Caption aber anscheint hat beides nix damit zu tun sondern eher das man sagt, das man die erste zahl die er nimmt woher auch immer und die zweite voher auch immer addiert und die das ergebniss woher auch immer als internger nehmen soll. heißt das nun bis dato wird kein zusammenhang mit den felder genommen sondern erstmal allgemein gesagt die erste zahl die kommt und zweite zahl die du später rechnest sind alles integer?

Planen
Wechseln Sie durch einen Doppelklick auf Addieren zum Klick-Ereignis des TButton, wie Sie es vom vorigen Programm kennen. Was hier passieren soll, ist Folgendes: Die beiden Zahlen, die der Benutzer in die beiden TEdits eingegeben hat, sollen addiert werden. Das Ergebnis soll in edResult ausgegeben werden. Hier schlägt aber schon die Typensicherheit von Delphi zu, wie man die Tatsache, dass eine Variable einen genau festgelegten Typ haben muss, auch nennt. Denn der Inhalt von TEdit-Felder ist ein Text, also vom Typ String. Addieren in dem Sinne, wie das in diesem Fall gewollt ist, kann man aber nur Zahlen. Das Vorgehen sieht daher so aus:
1. Umwandlung der Benutzer-Eingaben in Zahlen. Diese Zahlen werden in Variablen vom Typ Integer gespeichert. Wir wollen erst einmal nur mit ganzen Zahlen rechnen.
2. Addieren der beiden Zahlen (mittels der Variablen) und speichern des Ergebnisses in einer weiteren Variable vom Typ Integer.
3. Umwandlung des Ergebnisses von einer Zahl in einen Text und Anzeige des Textes in edResult.

Edit: neue frage

Neue Frage: kann ich fristNumber auch einfach "a" Nennen oder ist die FristNumber mit dem ersten TEdit fehlt verbunden? wie genau ist die zugehörigkeit?
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 27.08.11 14:16 
user profile iconFright hat folgendes geschrieben Zum zitierten Posting springen:
Neue Frage: kann ich fristNumber auch einfach "a" Nennen oder ist die FristNumber mit dem ersten TEdit fehlt verbunden? wie genau ist die zugehörigkeit?

Wie mein Professor zu sagen pflegte: Es geht nicht um Namen, sondern um Konzepte. Wie Du Deine Variablen benennst ist dabei völlig irrelevant, nur einigermaßen Sinn sollten sie ergeben und eine gewisse Konsitenz beinhalten.

In diesem Fall ist eine Variable nichts anderes als ein Synonym für eine Adresse im Speicher. Letztere sind in aller Regel dynamisch und ansonsten nur schwer zu merken. :lol:
Mit anderen Worten, es spielt keine Rolle, ob Du Dein Ergebnis mit "result" oder mit "asfdjwke" bezeichnest; ersteres erscheint aber sehr viel verständlicher. ;)
Fright Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Sa 27.08.11 14:48 
Ich danke dir. Das wollte ich nur hören^^ Nun folgendes:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.Edit_ErgebnisChange(Sender: TObject);
begin
 firstNumber := StrToInt(Edit_Erste_Zahl.Text);
 secondNumber := StrToInt(Edit_Zweite_Zahl.Text);

 if secondNumber = 0 then
   Edit_Ergebnis.Text := 'Division durch Null';

 if secondNumber <> 0 then
 begin
 resultNumber := firstNumber div secondNumber;
 Edit_Ergebnis.Text := IntToStr(resultNumber);
end;
end.


Wird diese Eingabe im TEdit Ergebnis Bereich geschrieben? und wenn ja wo liegt mein Fehler?

Moderiert von user profile iconMartok: Quote- durch Delphi-Tags ersetzt
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Sa 27.08.11 15:42 
Ich weiß zwar nicht was deine Frage bedeutet, aber an sich passt das so. Nur rechnet div halt mit ganzen Zahlen (4 div 3 = 1). Um normal zu teilen musst du / verwenden und den Datentyp real statt integer benutzen für dein Ergebnis (=> FloatToStr)

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Fright Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Sa 27.08.11 15:46 
er soll ja laut anleitung im crashkurs ganze zahlen nehmen. meine frage ist schreib ich diesen code in ergebniss editonfeld also indem ich doppelklick auf auf TEdit "Edit_Ergebnis" eintrage?

EDIT: okay zeile 2 muss das begin weg.

Habe noch 2 Fehlermeldungen:

- Erwartet: INITIALIZATION, aber Bezeichner 'firstNumber' erhalten in Zeile 59 (59:2)

- Erwartet: das Ende der Datei, aber Bezeichner 'Text' enhalten in Zeile 59 (59:42)

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

interface

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

type
  TForm1 = class(TForm)
    Label_Erste_Zahl: TLabel;
    Label_Zweite_Zahl: TLabel;
    Edit_Erste_Zahl: TEdit;
    Edit_Zweite_Zahl: TEdit;
    Button_Addiern: TButton;
    Edit_Ergebnis: TEdit;
    Label_Ergebnis: TLabel;
    Button_Dividieren: TButton;
    procedure Button_AddiernClick(Sender: TObject);
    procedure Button_DividierenClick(Sender: TObject);
    procedure Edit_ErgebnisChange(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button_AddiernClick(Sender: TObject);
var
  firstNumber, secondNumber, resultNumber : Integer;
begin
  firstNumber := StrToInt(Edit_Erste_Zahl.Text);
  secondNumber := StrToInt(Edit_Zweite_Zahl.Text);

 resultNumber := firstNumber + secondNumber;

 Edit_Ergebnis.Text := IntToStr(resultNumber);
end;
procedure TForm1.Button_DividierenClick(Sender: TObject);
var
  firstNumber, secondNumber, resultNumber : Integer;
begin
  firstNumber := StrToInt(Edit_Erste_Zahl.Text);
  secondNumber := StrToInt(Edit_Zweite_Zahl.Text);

 resultNumber := firstNumber div secondNumber;

 Edit_Ergebnis.Text := IntToStr(resultNumber);
end;
procedure TForm1.Edit_ErgebnisChange(Sender: TObject);

 firstNumber := StrToInt(Edit_Erste_Zahl.Text);
 secondNumber := StrToInt(Edit_Zweite_Zahl.Text);

 if secondNumber = 0 then
   Edit_Ergebnis.Text := 'Division durch Null';

 if secondNumber <> 0 then
 begin
 resultNumber := firstNumber div secondNumber;
 Edit_Ergebnis.Text := IntToStr(resultNumber);
end;
end.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Sa 27.08.11 16:11 
Was hast du denn genau vor? das mit den Buttons sieht ja schon gut aus. Warum willst du die Division nochmal programmieren?

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Fright Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Sa 27.08.11 16:17 
Also erstmal dem Link zum Crahkurs: christian-stelzmann....shkurs_reloaded.html

Da bin ich nun auf Seite 22. Vorweg habe 0 Ahnung von Programmieren und verstehe bis Dato nur das was ich dir gerade geschickt habe. Weiß auch nicht warum du sagst noch mal DIV programmieren.

Wenn ich das DIV Button fertig gecodet habe geht ja auch alles aber wenn man 5 durch 0 rechnet kommt eine fehlermeldung. die aufgabe auf seite 22 soll den fehler beheben. am besten PDF kurz anschauen.

EDIT: sehe glaube ich was du meinst, ich hätte das nur erweitern müssen das erste mal von der belegung des buttons. statt dessen habe ich es doppelt geschrieben, da ich dachte es wäre ein zusatz. Danke

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

interface

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

type
  TForm1 = class(TForm)
    Label_Erste_Zahl: TLabel;
    Label_Zweite_Zahl: TLabel;
    Edit_Erste_Zahl: TEdit;
    Edit_Zweite_Zahl: TEdit;
    Button_Addiern: TButton;
    Edit_Ergebnis: TEdit;
    Label_Ergebnis: TLabel;
    Button_Dividieren: TButton;
    procedure Button_AddiernClick(Sender: TObject);
    procedure Button_DividierenClick(Sender: TObject);
    procedure Edit_ErgebnisChange(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button_AddiernClick(Sender: TObject);
var
  firstNumber, secondNumber, resultNumber : Integer;
begin
  firstNumber := StrToInt(Edit_Erste_Zahl.Text);
  secondNumber := StrToInt(Edit_Zweite_Zahl.Text);

 resultNumber := firstNumber + secondNumber;

 Edit_Ergebnis.Text := IntToStr(resultNumber);
end;
procedure TForm1.Button_DividierenClick(Sender: TObject);
var
  firstNumber, secondNumber, resultNumber : Integer;
begin
  firstNumber := StrToInt(Edit_Erste_Zahl.Text);
  secondNumber := StrToInt(Edit_Zweite_Zahl.Text);

  if secondNumber = 0 then
   Edit_Ergebnis.Text := 'Division durch Null';

 if secondNumber <> 0 then

 resultNumber := firstNumber div secondNumber;

 Edit_Ergebnis.Text := IntToStr(resultNumber);
end;
end.


nun ist ein anderer Fehler aufgetaucht.

Keine fehlermeldung in der STrucktur aber 1 warnung 2 fehler beim starten
Zeile 21 Makiert er mir rot
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Sa 27.08.11 16:26 
Ja, in Zeile 21 wird eine Funktion deklariert, die du unten niemals definierst. Lösch diese Zeile einfach raus, sie ist ein Relikt vom Doppelklick auf das Edit.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Fright Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Sa 27.08.11 16:31 
vielen Dank, ich glaub langsam kann ich mich dann auch gleich mal an meine Hausaufgabe rantrauen. Danke!

Edit: Nun habe ich eine Frage zu meiner Hausaufgaben.

Ich möchte es wie Folgt angehen.

mit der if funktion sagen welche note er ausgeben. Hab mir gedacht beziehe die IF funktion auf das ergebnis und sage wenn z.B. das ergebnis kleiner gleich 30 ist dann Schreib in ergebnis den Text 6 rein dann die nächste funktion wieder if wenn die zahl kleiner = 50 ist dann schreib 5 hin usw. ist dieser ansatz richtig?

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

zusatzfrage: Integer arbeitet mit ganzen zahlen. Heißt das er rundet Ergebnise wie 44,6 auf 45 auf oder zeigt er sie als 44 an?

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Wo liegt der Fehler? Er zeigt immer als ergebnis 0 an, wollte eine zwischenprüfung machen bevor ich if anfange zu setzen um schulnoten zu setzen.

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:
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 DIV maxpunkte * 100;

 Edit_Note.Text := IntToStr(ergebnispunkte);
end;

end.


EDIT: Hab DIV durch / ersetzt da sich ja um Kommerzahlen handelt trotzdem meldet er die zeile wo vorher DIV stand als fehler
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Sa 27.08.11 18:15 
Schuelerpunkte ist wohl immer kleiner als maxpunkte, oder?

Da Div die ganzzahlige Division ist, ist Schuelerpunkte Div maxpunkte immer Null. daran ändert sich auch nichts, wenn man das wieder mit 100 Multipliziert. ;-)

Probier das mal so:
ausblenden Delphi-Quelltext
1:
Schuelerpunkte * 100 Div maxpunkte					

_________________
We are, we were and will not be.
Fright Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Sa 27.08.11 18:21 
Danke werde nun versuchen statt ergebnise noten ausspucken zu lassen mit if funktionen. Melde mich dann noch mal wenn es Probleme gibt :)

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Okay mein Lösungsweg geht nicht, kann mir einer dabei helfen?

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:
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 ergebnispunkte >= 30 then
   Edit_Note.Text := '6'
   else
   if schuelerpunkte = 0 then
   Edit_Note.Text := '6';

 if schuelerpunkte <> 0 then

 ergebnispunkte := schuelerpunkte * 100 Div maxpunkte;

 Edit_Note.Text := IntToStr(ergebnispunkte);
end;

end.


was wollte ich machen?
wenn das ergebnis 0 ist soll die note 6 geben
wenn das ergebnis kleiner oder gleich 30 ist soll im ergebnisfeld auch note 6 rauskommen also nur 6 ohne Note davor.
dann bei 50 kleiner größer dann 5 wie mach ich das `?

Edit: Hab gerade gesehen wo ich fehler gemacht habe. aber weiß nicht ob dann gehen wird teste es mal hab bei 30 was das ergebnis ist auch hin geschrieben schuelerpunkte aber da geht ja um ergebnispunkte

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

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:
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
  1 : 93-100 := '1';
  2 : 82-92 := '2';
  3 : 68-81 := '3';
  4 : 51-67 := '4';
  5 : 31-50 := '5';
  6 : 0-30 := '6';
  ELSE WAS KOMMT HIER REIN := 'Diesen Notenwert gibt es nicht.';


end;

end.


Komme hier ohne wissen nicht weiter.... mir fehlen einfach die grundkenntnise für case of und auch von zeichensetzung von textausgabe
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 19:56 
user profile iconFright hat folgendes geschrieben Zum zitierten Posting springen:
Komme hier ohne wissen nicht weiter.... mir fehlen einfach die grundkenntnise für case of und auch von zeichensetzung von textausgabe
Ja, sieht man ;)
Der Crashkurs wurde ja schon verlinkt; leider kann man da drin nicht auf einzelne Unter-Überschriften verlinken, also erstmal das hier und etwas runterscrollen. Da kommt irgendwo der Abschnitt "Die case-Anweisung".

Bitte auch den Teil vorher lesen; dir fehlt nämlich das Konzept "Anweisung", beziehungsweise Verständnis dessen.

In Edit_Note gibst du momentan die berechnet Prozentzahl aus. Das sollte klar sein (hab jetzt nicht alle Beiträge gelesen).


Was möchtest du also weiter realisieren? Erstmal in natürlicher Sprache (und natürlich ähnlich für die anderen Noten):
Zitat:
Wenn die Prozente zwischen 93% und 100% sind, gib Note 1 aus.


Das übersetzt in "Programmlogik" sieht ungefähr so aus:
Zitat:
Wenn der Wert der Variable die die Prozente enthält zwischen 93 und 100 liegt, schreibe '1' in das Edit_Note.


Hier ist das 3. Codebeispiel aus dem Crashkurs hilfreich:
Crashkurs hat folgendes geschrieben:
Wie Sie sehen, können Sie Wertebereiche angeben und auch mehrere Werte mittels Kommata aufzählen.
Das klingt doch fast schon so, wie wir das wollen. Da ist auch das mit dem else zu erkennen.

Also
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
case ergebnispunkte of
  93..100: Edit_Note.Text:= '1';
  {etc...}
else
  Edit_Note.Text:= 'Das kann nicht sein.';
end;

_________________
"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."