![]() |
Kann mir jemand bei der erstellung eines Quelltextes helfen?
Hallo,
Ich habe zur Rettung meiner Mathenote die Aufgabe bekommen für den Mathematikunterricht ein Programm zu schreiben, allerdings bin ich dabei leicht überfordert. In C++ will ich es nicht schreiben da es scheiße aussieht da hab ich an meinen alten freund Delphi gedacht. Die aufgabe des Programms ist es aus den Parametern a b und fi (a-Amplitude, b-Periodenlänge 2Pi/b, fi-Verschiebung der Nullstelle um -fi) eine Trigonometrische Funktion f(x)=(a)*sin(b(x-fi) umzuwandeln. B soll dabei als Längeneinheit oder in Pi angegeben werden können. Gut wäre es noch wenn die ausgabe der Funktion sowohl als sin und cos Funktion ausgegeben werden würde. Des weiteren soll ein Graph der Funktion gezeichnet und angezeigt werden. Weitere sinnvolle Funktionen im Programm sind jederzeit willkommen.:lol:. Am besten wäre ein gespeichertes Projekt wo ich noch selbst das Layout anpassen könnte. Um so besser das Programm umso Besser. (Ich brauche 15 Punkte um nicht unterzubelegen) Also bitte rettet meine Mathenote!! MFG Bloodhound |
Re: Kann mir jemand bei der erstellung eines Quelltextes hel
Sorry,
aber ich glaube nicht das einer für dich die Hausaufgaben machen wird. Dein Lehrer wird dir wohl kaum die Aufgabe stellen etwas zu Programmieren wenn die Grundlagen des Programmierens fehlen? P.S.: Seit wann geben Mathelehrer Programieraufgaben? |
Ich kann programmieren allerdings nicht in Delphi.
Da ich 15 Punkte brauche und das Programm das ich mir C++ geschrieben habe assig aussieht bin ich zum Schluß gekommen das unsrem Herr Maier ein Delphi Programm die Kinnlade herrunterklappen lässt und er mir so eher die 15 Punkte gibt. Deshalb wäre es echt nett wenn mir jemand helfen könnte!! |
Hi,
trotz Deiner vorstellungen und hoffnungen, ich hoffe nicht das jemand Deine Hausaufgaben machen wird und Du wirst hier auch niemanden finden. Du selbst musst schon mit dem Projekt anfangen. Wenn es beim programmieren probleme geben sollte, wird Dir hier sicherlich jeder versuchen zu helfen, aber erwarte nicht das jemand DEINE Hausaufgaben machen wird. Fang doch einfach mal an. Erstelle ein Projekt, gestalte Dein Formular und fang das programmieren an, wenn Du schon sagst das Du Delphi und C kannst, dann sollte dies kein Problem sein. Delphi bietet, c sicherlich auch, eine Menge an Mathematischen funktionen die Du nur noch einbinden musst. Grüsse, Daniel :hi: |
Hallo Bloodhound,
für 15 Punkte muss du schon was tun :mrgreen: . Hast du denn schon angefangen? Gibt es eine bestimmte Stelle, an der du nicht weiterkommst? Du findest hier sicher Hilfe, aber die Frage muss so gestellt sein, dass man sie in einer "kurzen Antwort" bearbeiten kann. Ist das Problem die Darstellung der Funktion als Graphik oder eine Prozedur, die den Funktionswert errechnet oder überhaupt die Idee wie du anfangen kannst? |
Mir fehlt eigendlich die Idee und die Prozedur die die Parameter einsetzt. Das Layout ist das kleinere Problem
|
Mir fehlt eigendlich alles
|
Zitat:
|
Zitat:
Grüsse, Daniel :hi: |
Hallo Bloodhound,
dann lass und mal anfangen: Zunächst einmal kannst du auf die Mathematische Bibliothek von Delphi zugreifen. Dazu fügst du ganz oben im "implementation Teil" die uses Anweisung:
Delphi-Quellcode:
hinzu. Das ist schon einmal der erste Schritt.
uses math;
Jetzt kannst du einmal versuchen eine Procedure zu schreiben, die wie folgt deklariert ist:
Delphi-Quellcode:
Diese Funktion übernimmt die von dir gegebenen Werte und soll den Funktionswert zurückgeben. Der Rückgabewert wird in Pascal der Variable Result zugewiesen, also:
function TForm1.SinWithScale(a, x, b, fi: extended; useRad: Boolean): extended;
Delphi-Quellcode:
Den Parameter useRad habe ich hinzugefügt, um die Werte b, x, fi und den Funktionswert entweder in Rad oder in Grad angeben zu können. Du musst also eine if-Abfrage einfügen und die Werte entsprechend interpretieren.
...
Result := a*sin(...); Wenn du die Funktion geschrieben hast, melde dich wieder. Wenn du damit Probleme hast, sage genau, wo du nicht weiterkommst. |
wo muss denn die function hin??
|
Hi,
kurze Zwischenfrage (das fragen wohl alle Programmierer) : Bis wann soll das fertig sein ? Gruß Hansa |
am besten wäre heute dann könnt ich es morgen abgeben :cry:
|
haha,
so ungefähr habe ich mir das gedacht. Selbst wenn Dir tatsächlich hier einer die Hausaufgaben macht, glaubst Du der Lehrer würde dich nicht fragen, wie Du das hingekriegt hast ? Was nützt Dir das überhaupt ? Selbst wenn das hier tatsächlich noch hinhaut, bist Du genau so weit wie vorher, die Defizite sind immer noch vorhanden! Für mich ist das pure Zeitverschwendung ! :spin: Um die minimale Chance zu nutzen und Dir den Mut nicht zu rauben hab ich das hier mal so hingeknallt :
Code:
Hier ist KEINE Fehlerprüfung vorhanden. KEINE Besonderheiten. Wirklich ABSOLUT NICHTS besonderes. Ich habe lediglich die Prozedur "Multipliziere" geschrieben und die Unit "Math" in die Uses Liste eingefügt (die ich hierfür aber nicht brauche), damit Du siehst, wo die hin muß :chat: . Auf der Form habe ich zudem 2 Edit-Felder 2 Labels und dann noch ein drittes fürs Ergebnis angeordnet. Die Caption, also die Beschriftung des 3. Labels zeigt das Ergebnis. Das wird angezeigt, sobald das zweite Edit verlassen wird (Edit2Exit). So ungefähr mußt Du das machen.
unit Unit1;
interface uses Math, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; procedure Edit2Exit(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} FUNCTION Multipliziere (a,b : real) : real; BEGIN Multipliziere := a * b; END; procedure TForm1.Edit2Exit(Sender: TObject); begin Label3.Caption := FloattoStr (Multipliziere (StrToFloat (Edit1.Text),StrToFloat (Edit2.Text))); end; end. Gruß Hansa |
Vielen dank, ich bin grad dabei deine eingaben nachzuvollziehen, wenn ich das anschau raff ich schon was für was ist und kanns anderen auch erklären.
Allerdings muss irgendwo ein End fehlen, stattdessen ist ein ungültiges zeichen#160 vorhanden :freak: |
Hi,
ausnahmsweise ist der Quelltext sogar getestet. :chat: Ist das chr (160) vielleicht nur bei Dir ? Gruß Hansa |
Hallo Bloodhound,
so wie Hansa es geschrieben hat, ist es absolut in Ordnung. Ich hatte oben die Funktion als Methode des Formulars beschrieben. Wenn du das ralisieren willst, wäre die Deklaration wie folgt:
Delphi-Quellcode:
Unterhalb des Tags implementation folgt dann irgendwo:
type
TForm1 = class(TForm) ... private { Private declarations } function SinWithScale(a, x, b, fi: extended; useRad: Boolean): extended; public { Public declarations } end;
Delphi-Quellcode:
Wie Hansa habe ich auch keine Fehlerbehandlung eingefügt, dazu solltest du einen try ... except Block verwenden.
function TForm1.SinWithScale(a, x, b, fi: extended; useRad: Boolean): extended;
var erg : extended; begin if Not useRad then begin { hier musst du die Werte x, b und fi in Rad umwandeln, da der Benutzer diese in Grad angegeben hat } end; erg := a*sin(b*(x-fi)); if Not useRad then { hier den erhalten Wert wieder in Grad umwandeln }; Result := erg; end; Wenn du die Kommentare (also das Umwandeln von Grad in Rad bzw umgekehrt noch erledigst, hast du schon die Funktion fertig. Such doch mal in der Hilfe unter RadToDeg :mrgreen: . Hansa ist vielleicht etwas scharf in Ton, aber er hat natürlich Recht, wenn er sagt, dass das Abschreiben allein nichts bringt. Für 15 Punkte in Mathe oder Informatik solltest du versuchen mehr allein zu schaffen. Wenn du eine gezielte Frage hast -auch wenn sie sehr einfach ist- wirst du auch weiterhin Hilfe erhalten. Wenn du die Funktion fertig hast, versuche mal eine Listbox zu füllen, in der du alle x-Werte von -Pi bis Pi, im Abstand von 0.1 und deren Funtionswert ausgibst. Wenn du das hast, kämen wir zur graphischen Anzeige. |
Hmm das mit den Gradangaben muss wohl ein missverständniss sein.
Die Parameter sind alle ganz normale zahlen, die umwandlung ist allso eigendlich überflüssig denke ich. Das Prog muss "nur" die Eingabe in Edit 1(a) die Eingabe in Edit 2(b)==> 2pi/b=c die Eingabe in Edit 3(fi) in die Formel f(x)=a*sin(c(x-fi) einsetzen. B sollte sowohl als Zahlenwert wie auch in pi angegeben werden können. Das lässt sich aber denke ich lösen wenn ich ein mit einer If verknüpfunge 2 Buttons einbinde der eine der b direkt in c umrechnet , den anderen bei dem b zuerst mit pi multipliziert wird und dann umgerechnet |
Hallo Bloodhound,
OK, wenn du keine Angaben in Grad brauchst, kannst du den letzten Parameter aus der Parameterliste streichen. Du könntest eventuell eine CheckBox neben das Eingabefeld stellen mit der Beschriftung "*Pi". Wenn diese markiert ist, multiplizierst du b mit pi, sonst übergibst du b direkt als Parameter an die Funktion. Bei der Eingabe über Edit-Felde erhälst du in der Eigenschaft Text den Eingabewert als String. Diesen musst du natürlich in einen Realzahl umwandeln, dazu kannst du die Funktion StrToFloat aus der SysUtils Bibliothek benutzen. Das Ganze solltest du in einen try ... except Block packen, da der User ja auch einen ungültigen Wert angeben kann. Anstatt eines einfachen Edt Feldes kannst du auch ein MaskEdit Feld benutzen, dann kannst du noch beseer kontrollieren, was der Benutzer eingeben darf. Jetzt müsste es mit der Listbox klappen, oder? |
Ich habe das Programm mal so geschrieben wie es sein sollte.
Mein problem ist jetzt das ich nicht die Befehle für die komentare weiß ansonsten ist denke ich alles soweit eichtig
Delphi-Quellcode:
[edit=Daniel B]Delphi-Tags; Bitte das nächste mal nicht [ code], sondern [ delphi] benutzen. Danke. Kommentar-Zeichen. MfG Daniel B.[/edit]
unit Unit1;
interface uses math, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, XPMan; type TForm1 = class(TForm) a: TEdit; b: TEdit; fi: TEdit; Ergebnis: TEdit; Berechnen: TButton; CheckBox1: TCheckBox; procedure aChange(Sender: TObject); procedure ErgebnisChange(Sender: TObject); procedure bChange(Sender: TObject); procedure fiChange(Sender: TObject); procedure CheckBox1Click(Sender: TObject); procedure BerechnenClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.aChange(Sender: TObject); begin //Eingabe fließt als a in ergebnis ein end; procedure TForm1.bChange(Sender: TObject); begin //2*3,14159 geteilt durch Eingabe b fließt als B in Ergebnis ein end; procedure TForm1.CheckBox1Click(Sender: TObject); begin {wenn Checkbox markiert wird eingabe in b (b mal mit 3,14159 multipliziert)} end; procedure TForm1.fiChange(Sender: TObject); begin //Eingabe fließt als fi in Ergabnis ein end; procedure TForm1.BerechnenClick(Sender: TObject); begin //Bei klick des Buttons wird ergebnis angezeigt end; procedure TForm1.ErgebnisChange(Sender: TObject); begin (*Ergebnis grundform f(x)=Eingabe in feld a*sin(eingabe in feld b(x-eingabe in feld fi))*) {mit sin bzw. x muss nichts gerechnet werden es müssen nur die eingaben eingesetzt werden.} end; end. |
Hi,
//nur für diese Zeile (* für von hier bis hier*) //also mehrere Zeilen {gleiches erreichst Du auch hiermit} Grüsse, Daniel :hi: |
Wenn ich jetzt den source kopiere und einfüge und anschließend auf run gehe bringt mir Delphi die Fehlermeldung : Expected END but invalid charakter charakter #160 found!!
Muss ich nochwas an der form1 oder am Object inspector ändern?? |
Hi,
Du darfst die Prozeduren nicht im type von Form1 deklarieren, sondern unter private oder public!!!
Delphi-Quellcode:
Grüsse, Daniel :hi:
type
TForm1 = class(TForm) a: TEdit; b: TEdit; fi: TEdit; Ergebnis: TEdit; Berechnen: TButton; CheckBox1: TCheckBox; procedure ErgebnisChange(Sender: TObject); procedure BerechnenClick(Sender: TObject); procedure CheckBox1Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure aChange; procedure bChange; procedure fiChange; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.aChange; begin //Eingabe fließt als a in ergebnis ein end; procedure TForm1.bChange; begin //2*3,14159 geteilt durch Eingabe b fließt als B in Ergebnis ein end; procedure TForm1.CheckBox1Click(Sender: TObject); begin {wenn Checkbox markiert wird eingabe in b (b mal mit 3,14159 multipliziert)} end; procedure TForm1.fiChange; begin //Eingabe fließt als fi in Ergabnis ein end; procedure TForm1.BerechnenClick(Sender: TObject); begin //Bei klick des Buttons wird ergebnis angezeigt end; procedure TForm1.ErgebnisChange(Sender: TObject); begin (*Ergebnis grundform f(x)=Eingabe in feld a*sin(eingabe in feld b(x-eingabe in feld fi))*) {mit sin bzw. x muss nichts gerechnet werden es müssen nur die eingaben eingesetzt werden.} end; end. |
Aso danke.
Jetzt meint er aber das ein "Error in module Unit1:Declaration of class Tform1 is missing or incorrect. Er bietet mir sogar die Hilfe an aber die meint dazu nur Zitat:
MFG Bloodhound |
So, jetzt aber... :oops:
Ich hasse C&P. Grüsse, Daniel :hi: |
:( :( :( :( Jetzt ist es mir aber langsam peinlich!!!
Jetzt kommt schon wieder die scheiße mit dem Expected END :( :( Sorry Gruß Bloodhound |
Hi,
das muss Dir nicht peinlich sein :!: :!: :!: Aber, häng mal bitte die .pas mal an, oder füge einfach nochmal die ganze Unit ein. Aber bitte mit Delphi-Tags. Ich versteh einfach nicht woran das liegt. Bitte einfach nur Strg+a und dann Strg+c und hier dann Strg+v! Nichts am Source verändern. Grüsse, Daniel :hi: |
Delphi-Quellcode:
unit Unit1;
interface uses * math, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, * Dialogs, StdCtrls; type * TForm1 = class(TForm) * * a: TEdit; * * b: TEdit; * * fi: TEdit; * * Ergebnis: TEdit; * * Berechnen: TButton; * * CheckBox1: TCheckBox; * * procedure ErgebnisChange(Sender: TObject); * * procedure BerechnenClick(Sender: TObject); * * procedure CheckBox1Click(Sender: TObject); * private * * { Private declarations } * public * * { Public declarations } * * procedure aChange; * * procedure bChange; * * procedure fiChange; * end; var * Form1: TForm1; implementation {$R *.dfm} procedure TForm1.aChange; begin * *//Eingabe fließt als a in ergebnis ein end; procedure TForm1.bChange; begin * *//2*3,14159 geteilt durch Eingabe b fließt als B in Ergebnis ein end; procedure TForm1.CheckBox1Click(Sender: TObject); begin * *{wenn Checkbox markiert wird eingabe in b* (b mal mit 3,14159 multipliziert)} end; procedure TForm1.fiChange; begin * *//Eingabe fließt als fi in Ergabnis ein end; procedure TForm1.BerechnenClick(Sender: TObject); begin * *//Bei klick des Buttons wird ergebnis angezeigt end; procedure TForm1.ErgebnisChange(Sender: TObject); begin * *(*Ergebnis grundform* f(x)=Eingabe in feld a*sin(eingabe in feld b(x-eingabe in feld fi))*) * *{mit sin bzw. x muss nichts gerechnet werden es müssen nur die eingaben eingesetzt werden.} end; end. |
Hi,
sorry, war mein Fehler. Die Prozeduren gehören schon in den type von Form1. Es sind ja Prozeduren von TForm1.Komponenten. Aufgrund der Namensgebung, hat es wie selbst erstellte Prozeduren ausgesehen. Hier, ich habe mal dieses Projekt erzeugt und es lässt sich natürlich fehlerfrei komplizieren.
Delphi-Quellcode:
Mach C&P es muss einfach damit laufen. Wenn nicht, dann lösche das Projekt, und erstelle es einfach neu, dann ist irgendwas anderes Kaputt.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Math; type TForm1 = class(TForm) a: TEdit; b: TEdit; fi: TEdit; Ergebnis: TEdit; Berechnen: TButton; CheckBox1: TCheckBox; procedure aChange(Sender: TObject); procedure bChange(Sender: TObject); procedure fiChange(Sender: TObject); procedure ErgebnisChange(Sender: TObject); procedure BerechnenClick(Sender: TObject); procedure CheckBox1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.aChange(Sender: TObject); begin // end; procedure TForm1.bChange(Sender: TObject); begin // end; procedure TForm1.fiChange(Sender: TObject); begin // end; procedure TForm1.ErgebnisChange(Sender: TObject); begin // end; procedure TForm1.BerechnenClick(Sender: TObject); begin // end; procedure TForm1.CheckBox1Click(Sender: TObject); begin // end; end. Wenn Du die Komponenten neu auf Formular gesetzt hast, mach ein klick drauf, dann im Object Inspector auf Eigenschaften und bei der Zeile OnChange, machst Du ein Doppelklick. Dadurch wird ja die Prozedur komplett angelegt. Du schriebst dann nur noch zischen dem begin und end ein // und dann kompilierst Du. Grüsse, Daniel :hi: <-- Burger fressend und mit einer Hand geschrieben... :roll: :shock: |
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ist noch die .pas
|
Hi,
beachte mein letztes Posting. Oder nimm einfach die Unit aus dem Anhang hier. Grüsse, Daniel :hi: |
:( :( :( Genau die selbe Fehlermeldung!!
Kannst du mir mal bitte die .pas posten die du gerade erstellt hast?? Ich hab absolout keine ahnung was bei mir falsch läuft!! Danke für die aufopferungsvolle opferung der Nahrungsaufnahme bei Tisch :hello: MFG Bloodhound |
Sorry der Tread war an deinem vorbei!!
Jetzt kommt kein fehler mehr!! Was muss ich jetzt tun um zu kompilieren?? |
Im Anhang ist mal das komplette Projekt.
Schliesse Deins und öffne dieses. Das läuft, hat ja auch ne .exe dran. Grüsse, Daniel :hi: |
Hi,
mit F9, kompilierst DU und danach wird die .exe erzeug und dann auch angezeigt. Oder den grünen Pfeil oben in der Leiste. Wenn Du nur Strg+F9 drückst, dann wird nur kompiliert. Die .exe wird nicht ausgeführt. Du bleibst im Editor. Grüsse, Daniel :hi: |
Wenn ich in der exe auf berechnen klicke passiert garnichts!!
|
:mrgreen:
Natürlich nicht. In allen Prozeduren steht ja nur ein //. //Das steht für ein Kommentar Das machts nichts, es sorgt nur dafür das die Prozeduren beim komplizieren nicht gelöscht werden. Denn wenn zwischen dem begin und end nichts steht, wird die ganze Prozedur gelöscht. Du muss natürlich die // wegmachen und Deinen Code einfügen/schreiben. Grüsse, Daniel :hi: |
:lol:
Aso Danke dann mal für alles. Ich schaue das ich die befehle morgen früh fertig mach für heute abend hab ich ausreichend Fehlermeldungen gesehen*g* MFG P. Hauser |
Na also, war doch gar nicht so schwer. :mrgreen:
Grüsse, Daniel :hi: |
Liste der Anhänge anzeigen (Anzahl: 2)
Guten Morgen allerseits!!
So habe jetzt mal alles soweit reingeschrieben und ich denke das das so stimmen müsste. Allerdings erscheint der Pfeil oben nicht grün und wenn ich F9 drücke passiert garnichts |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz