Autor |
Beitrag |
Fright
      
Beiträge: 26
|
Verfasst: 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 Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Fr 26.08.2011 um 17:47
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Fr 26.08.11 13:56
Hallo und  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 
      
Beiträge: 26
|
Verfasst: 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
      
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)
|
Verfasst: Fr 26.08.11 15:47
Hey,
wenn du dann den Crashkusrs durchgearbeitet hast kannst du dein Programm auf folgende Weise realisieren:
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
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: 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
So würde ich das machen:
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
      
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)
|
Verfasst: 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
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: 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 
      
Beiträge: 26
|
Verfasst: 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 
      
Beiträge: 26
|
Verfasst: 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.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Sa 27.08.11 14:16
Fright hat folgendes geschrieben : | 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.
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 
      
Beiträge: 26
|
Verfasst: Sa 27.08.11 14:48
Ich danke dir. Das wollte ich nur hören^^ Nun folgendes:
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 Martok: Quote- durch Delphi-Tags ersetzt
|
|
Xion
      

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)
|
Verfasst: 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 
      
Beiträge: 26
|
Verfasst: 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)
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 public 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
      

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)
|
Verfasst: 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 
      
Beiträge: 26
|
Verfasst: 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
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 public 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
      

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)
|
Verfasst: 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 
      
Beiträge: 26
|
Verfasst: 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 Narses: 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 Narses: 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.
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 public 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
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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:
Delphi-Quelltext 1:
| Schuelerpunkte * 100 Div maxpunkte |
_________________ We are, we were and will not be.
|
|
Fright 
      
Beiträge: 26
|
Verfasst: 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 Narses: Beiträge zusammengefasst---
Okay mein Lösungsweg geht nicht, kann mir einer dabei helfen?
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 public 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 Narses: Beiträge zusammengefasst---
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 public 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
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Sa 27.08.11 19:56
Fright hat folgendes geschrieben : | 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
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| case ergebnispunkte of 93..100: Edit_Note.Text:= '1'; 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."
|
|
|