![]() |
Messwertsimulation
Hi Leute!
Ich bräuchte wiedermal eure Hilfe. Ich soll mit RandomZahlen Messerwerte berechnen und das ganze ausgeben. Hört sich einfach an, ist es aber für mich leider irgendwie nicht. Bei mir gibt er ständig den Fehler das nicht genügende Parameter vorhanden sind. Ich schätze mal es ist ein einfacher Fehler, aber ich sitze schon seit einiger Zeit hier und komme einfach nicht darauf. Außerdem wäre es nett von euch, wenn ihr eine bessere Lösung für die Berechnung des Mittelwertes Parat hättet, denn ich bin mir nicht sicher ob das tatsächlich so "richtig" funktioniert. Hier anbei der Quellcode, die Kommentare sollten es einfacher verständlich machen. Danke für eure antworten im Vorraus.
Delphi-Quellcode:
unit mittelwertnew;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) GroupBox1: TGroupBox; mmAus: TMemo; btStart: TButton; procedure btStartClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} //************************************************// // // // Name: Messwert // // Datum: 03-05-30 // // Zweck: Messwerte zuweisen. // // // //************************************************// function Messwerte (s: string; s2: integer; s3: integer): string; //Variablendeklaration var s4: string; begin //Den Strings Zufallszahlen zuweisen s2:= random(10)+8; s3:= random(99); //Wenn die Zahl von s2 kleiner als 10 ist, if s2 < 10 then //setze 0X.XX auf s4 s4:= '0' + IntToStr(s2); //Wenn sie Zahl von s3 kleiner 10 ist, if s3 < 10 then //Dann setze das Resultat auf XX.0X result:= s4 + '.0' + IntToStr(s3) //sonst else //auf XX.XX result:= s4 + '.' + IntToStr(s3); end; //************************************************// // // // Name: Mittelwert // // Datum: 03-05-30 // // Zweck: Mittelwert von 10 Zahlen bilden. // // // //************************************************// function Mittelwert(Mittel: string): string; //Variablendeklaration var s2, s3, s4, s5, i, Anz, Mittel2: integer; begin //Zuweisungen auf 0 s4:= 0; s5:= 0; Anz:= 0; //Von 1 bis 10, mache for i:= 1 to 10 do begin //Addiert die Ergebnisse der Randomzahlen s4:= s4 + s2; s5:= s5 + s3; //Während die Nachkommastellen bei 99 sind, while s5 > 99 do begin //ziehe bei s5, 99 ab, und s5:= s5-99; //erhöhe die Vorkommastellen um 1. s4:= s4+1; end; //Zähle zur Anzahl 1 hinzu Anz:= Anz+1; end; //Dividiert die Nachkommastellen durch die Anzahl Mittel2:= s5 div Anz; //Setzt das Resultat auf den Mittelwert der beiden Zahlen result:= IntToStr(s4 div Anz) + ',' + IntToStr(Mittel2); end; procedure TForm1.btStartClick(Sender: TObject); //Variablendeklaration var Mess, Mittel: string; begin //Gibt den Messwert und den Mittelwert aus. mmAus.Lines.Add('VAC ' + Messwerte(Mess) + ' V'); [color=#e50000]//hier erscheint der Fehler[/color] mmAus.Lines.Add('Der Mittelwert ist ' + Mittelwert(Mittel) + '.'); end; end. |
Du hast eine Dunktion deklariert der 3 Werte übergeben werden müssen:
Delphi-Quellcode:
aber du übergibst nur den String, und lässt die beiden Integerwerte weg.
function Messwerte (s: string; s2: integer; s3: integer): string;
Delphi-Quellcode:
Du übergibst ja nur einen String (Mittel) du brauchst also noch die 2 anderen Werte.
Mittelwert(Mittel)
|
ich glaube du hast da was verwechselt, oder war ich das?
Function Messwert und Funktion Mittelwert sind 2 verschiedene. |
Hab mich in der Zeile vertan. Der Fehler bleibt der gleiche, is aber eine Zeile drüber.
Delphi-Quellcode:
begin
//Gibt den Messwert und den Mittelwert aus. mmAus.Lines.Add('VAC ' + Messwerte(Mess) + ' V'); [color=#e50000]//hier erscheint der |
jo danke, das hab ich jetzt mal ausgebessert, doch es kommt irgendwie auch nicht das richtige raus, vielleicht weiß wer noch ne lösung... hier die falsche ausgabe:
Delphi-Quellcode:
VAC 08.03 V
VAC .20 V VAC .66 V VAC .16 V VAC .42 V VAC 08.47 V VAC 08.83 V VAC 08.29 V VAC .36 V VAC .32 V Der Mittelwert ist 403,3. |
Ich hab mich jetzt nicht damit beschäftigt, was falsch is. Was is denn falsch?
|
naja, wenn ich das wissen würde, hätte ich nicht gepostet ;)
|
Ich meine ja, was am Ergnis falsch is. :roll:
|
achso, naja es wäre bei den meisten zahlen nicht schlecht wenn vorher ne zahl stehen würde anstatt nichts vor dem komma, und der mittelwert ist auch unrealistisch... auch wenn ich neue ergebnisse aufrufen will, kommen zahlen bis zu 14200 raus, und das kann nicht wirlich der mittelwert sein wenn da nur bei 3 zahlen grade mal 8 steht
|
Hallo!
Du hast s2 und s3 in Mittelwert nicht initialisiert! Oder sollen da die Werte aus Mess drinstehen? Dann bitte als Parameter übergeben! Wäre von der wenig vorhandenen Programmlogik her wohl sinnvoller! Nebenbei: Result ist eine ganz normale Variable! Anders als bei der (Pascal-)Zuweisung an den Funktionsnamen kann man das auch wieder zurücklesen nach der Art
Delphi-Quellcode:
Die Variable s4 in Messwerte ist also nicht nötig.
Result := Result + IntToStr(s2);
Übrigens: if s2 < 10: da fehlt der else-Teil 'else s4:=IntToStr(s2)', d.h. bei Werten größer 10 kommt '.xx'! Gruß Dietmar Brüggendiek |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:47 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 by Thomas Breitkreuz