Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Messwertsimulation (https://www.delphipraxis.net/5276-messwertsimulation.html)

n00b_on_knees 30. Mai 2003 19:51


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.

Stanlay Hanks 30. Mai 2003 20:00

Du hast eine Dunktion deklariert der 3 Werte übergeben werden müssen:

Delphi-Quellcode:
function Messwerte (s: string; s2: integer; s3: integer): string;
aber du übergibst nur den String, und lässt die beiden Integerwerte weg.

Delphi-Quellcode:
Mittelwert(Mittel)
Du übergibst ja nur einen String (Mittel) du brauchst also noch die 2 anderen Werte.

n00b_on_knees 30. Mai 2003 20:03

ich glaube du hast da was verwechselt, oder war ich das?

Function Messwert und Funktion Mittelwert sind 2 verschiedene.

Stanlay Hanks 30. Mai 2003 20:06

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

n00b_on_knees 30. Mai 2003 20:21

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.

Stanlay Hanks 30. Mai 2003 20:22

Ich hab mich jetzt nicht damit beschäftigt, was falsch is. Was is denn falsch?

n00b_on_knees 30. Mai 2003 20:26

naja, wenn ich das wissen würde, hätte ich nicht gepostet ;)

Stanlay Hanks 30. Mai 2003 20:28

Ich meine ja, was am Ergnis falsch is. :roll:

n00b_on_knees 30. Mai 2003 20:32

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

Brüggendiek 31. Mai 2003 00:43

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:
Result := Result + IntToStr(s2);
Die Variable s4 in Messwerte ist also nicht nötig.
Ü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 23:56 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz