AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Erstellen einer Tabelle mit Sinus- und Cosinus Werten
Thema durchsuchen
Ansicht
Themen-Optionen

Erstellen einer Tabelle mit Sinus- und Cosinus Werten

Ein Thema von hamptoncourt · begonnen am 4. Dez 2010 · letzter Beitrag vom 6. Dez 2010
 
Kenny77

Registriert seit: 4. Dez 2010
7 Beiträge
 
#6

AW: Erstellen einer Tabelle mit Sinus- und Cosinus Werten

  Alt 5. Dez 2010, 19:03
hehe glaube du studierst maschinenbau in bielefeld oder?
Nungut , da meines Wissens nach die Tabelle als Textdatei erstellt und dann erst in ein Array geladen werden soll zeig ich dir einfach mal meine Lösung.
Aber die Aufgabe umfasste nur den Teil der Werte Ausgabe und Berechnung, deswegen lass den Zeichnen Teil lieber weg.

Am besten nutzt Du das nur als Hilfe und machst es selber. Die Prüfung wird sich sonst an Dir rechen.

hier meine Lösung :

Code:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    BitBtn1: TBitBtn;
    MaskEdit1: TMaskEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  function SinCos(x:double):double;
  function IndexVorzeichen(x:double):double;

var
  Form1: TForm1;
  Werte:array[0..900] of double;
  Q :integer;
  f:textfile;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var s:string;
    x : integer;
begin
// Sinuswerte als txt datei speichern
  assignfile(f, 'Werte.txt');
  rewrite(f);
  for x := 0 to 900 do
  begin
  s:=floattostr(sin((x/10)*(Pi/180)));
  writeln(f,s);
  end;
  closefile(f);
end;


procedure TForm1.Button1Click(Sender: TObject);
var s : string;
    x,v, Ym, ySin, yCos, xSin , xCos : integer;
    winkel, Rad, SinWert, CosWert : double;

begin
// Txtfile auslesen und in Array speichern
  assignfile(f, 'werte.txt');
  reset(f);
  for x := 0 to 900 do
  begin
  readln(f, s);
  werte[x]:=strtofloat(s);
  end;
  closefile(f);
// Eingelesen

// Einlesen des Edit in Variable
  winkel := strtofloat(maskedit1.Text);
  if winkel > 360 then ShowMessage('falsche Eingabe');
// Umrechnen des Winkels in Rad
  Rad := winkel*Pi/180;
// Quadrant aus Winkeln bestimmen
  case (round(10*winkel)) of
    0..900 :     begin Q := 1;
                        v := 1;
                  end;
    901..1800 :  begin Q := 2;
                        v := -1;
                  end;
    1801..2700 : begin Q := 3;
                        v := -1;
                  end;
    2701..3600 : begin Q := 4;
                        v := 1;
                  end;
  end;

  SinWert := IndexVorzeichen(10*winkel); // ?????????????????
  CosWert := v*sqrt(1-(SinWert*SinWert));

  label1.Caption:='SinWert : '+floattostr(SinWert);
  label2.Caption:='CosWert : '+floattostr(CosWert);
  label3.Caption:='Rad : '+floattostr(Rad)+' rad';
  label4.Caption:='Quadrant : '+floattostr(Q);

// #################### Funktionen zeichnen ######################
Ym:=Image1.Height div 2;
Image1.Canvas.FillRect(rect(0,0,image1.Width,image1.Height));
// Koordinatenkreuz
Image1.Canvas.MoveTo(0,Ym);
image1.Canvas.LineTo(image1.Width,Ym);


  for Q := 1 to 4 do // zahler für Ober/Unterhalb der x-Achse(Case anweisungen)
  begin
    for x:=0 to 900 do // zahler für Array-Pointer
    begin
//x-Koords
      xSin := (Q-1)*90+round(x/10);
      xCos := xSin-90;
       if xCos < 0 then                        //x-Pixel < 0 ans Ende hängen
          xCos := xCos+360;
//y-Koords
      ySin := round(Ym-SinCos(x));
      yCos := round(Ym-SinCos(x));

//Zeichnen von Auswahl
      image1.Canvas.MoveTo(round(winkel),0);
      image1.Canvas.LineTo(round(winkel),200);
//Zeichnen der Funktionen
      image1.Canvas.Pixels[xSin,ySin]:=clred;
      image1.Canvas.Pixels[xCos,yCos]:=clHighlight;
    end;
  end;
end;

//################################ Index+Vorzeichen
function IndexVorzeichen(x:double):double;
var a : integer;

begin
a:=round(x);
  case Q of
        1: begin result := werte[a];
                  end;
        2: begin result := werte[1800-a];
                  end;
        3: begin result := -werte[a-1800];
                  end;
        4: begin result := -werte[3600-a];
                  end;
      end;
end;

//################################ Sinus-Fkt
function SinCos(x:double):double;
var a : integer;

begin
a:=round(x);
  case Q of
        1: begin result := 90*werte[a];
                  end;
        2: begin result := 90*werte[900-a];
                  end;
        3: begin result := -90*werte[a];
                  end;
        4: begin result := -90*werte[900-a];
                  end;
      end;
end;

end.

Geändert von Kenny77 ( 5. Dez 2010 um 19:11 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:38 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