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
Antwort Antwort
Seite 1 von 2  1 2      
hamptoncourt

Registriert seit: 20. Nov 2010
34 Beiträge
 
#1

Erstellen einer Tabelle mit Sinus- und Cosinus Werten

  Alt 4. Dez 2010, 10:48
Hallo Leute,

ich habe mal wieder eine Frage ... wir haben eine neue Projektaufgabe bekommen, in der es um die Programmierung einer mathematischen Berechnung von Sinus und Cosinus Werten geht.

Dabei soll zu Programmstart eine Tabelle geschrieben und in dem Programmordner abgelegt werden. In dieser Tabelle sollen alle Cos und Sin Werte von 0° bis 90° in 1/10° Schritten aufgeführt sein.
Auf dem Formular sollen dann nur ein Editfeld, ein Button und zwei Labels liegen. In dem Editfeld wird eine Gradzahl eingegeben. Bei Klick auf dem Button, soll laut Aufgabenstellung folgendes geschehen:

1. das Maskeditfeld den Winkel in Grad übernehmen
2. der Winkel wird in Rad umgewandelt
3. der Quadrant aus den Grenzwinkeln soll bestimmt werden
4. für den Quadranten soll der Index und das Vorzeichen (integer) für sin und cos in einer case Anweisung festgelegt werden
5. per Zugriff auf das Array soll der Funktionswert ermittelt werden
6. die Werte sollen in einem Labelfeld ausgegeben werden.

So, und da komme ich etwas ins straucheln :-/
Zunächst, gibt es einen Befehl, der den Winkel in Rad umwandelt? Oder muss das mit Hilfe einer Formel gelöst werden. Ist ja nicht so schwierig, aber wenn ich mir das Tippen der Formel mit einem einfachen Befehl ersparen kann, ist das ja schonmal was ...
Zu dem Index und den Vorzeichen stand hier auch noch etwas, dass dazu Tabellen geschrieben werden sollen, um das ganze nicht zu Zeitaufwändig zu machen
Aber wie schreibe ich denn, dass sich gleich bei Programm start diese Tabelle erstellt? Und wie, dass das Programm darauf zugreift und die Werte abgreift??? Ich bin da irgendwie ein wenig überfordert Kann mir da jemand helfen???

Gruß
Hamptoncourt
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#2

AW: Erstellen einer Tabelle mit Sinus- und Cosinus Werten

  Alt 4. Dez 2010, 15:07
http://www.delphibasics.co.uk/RTL.asp?Name=DegToRad
http://www.delphibasics.co.uk/RTL.asp?Name=RadToDeg
oder selber machen:
alpha(Grad)/alpha(Bogen) = 360/2 PI = 180/PI
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824

Geändert von Wolfgang Mix ( 4. Dez 2010 um 15:44 Uhr)
  Mit Zitat antworten Zitat
hamptoncourt

Registriert seit: 20. Nov 2010
34 Beiträge
 
#3

AW: Erstellen einer Tabelle mit Sinus- und Cosinus Werten

  Alt 5. Dez 2010, 11:53
Hey, danke erstmal für den Tipp ....

Aber wie geht denn das jetzt eigentlich mit der Tabelle??? Bin da echt ein wenig verzweifelt ... Unser Prof erklärt mal wieder nix und will, dass wir das alles aus dem Kopf können. Kann mir da jemand nen Tipp geben oder nen Lösungsvorschlag??? Dass er ne Tabelle erstellt, die Zeilen und Spalten füllt, und dass er dann später wieder darauf zugreift um den Wert abzulesen ...
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Erstellen einer Tabelle mit Sinus- und Cosinus Werten

  Alt 5. Dez 2010, 12:03
0 bis 90 Grad in 0,1 Grad Schritten - das sind dann wohl 901 Einzelwerte, oder?
Delphi-Quellcode:
type
  TSinCosTabelle = array[0..900] of double;
var
  SinusTabelle : TSinCosTabelle;
  CosinusTabelle : TSinCosTabelle;

for i := 0 to 900 do
begin
  SinusTabelle[i] := Sin( ???);
  CosinusTabelle[i] := Cos( ??? );
end;
  Mit Zitat antworten Zitat
hamptoncourt

Registriert seit: 20. Nov 2010
34 Beiträge
 
#5

AW: Erstellen einer Tabelle mit Sinus- und Cosinus Werten

  Alt 5. Dez 2010, 13:11
hey cool, danke ... allerdings hab ich noch ein Problem mit bem Speichern des Array ... Muss ich da nicht einfach SaveArray setzen??? Ich hab das so versucht, wie es bei "Delphi Treff" stand. Aber der sagt mir, das Identifier not foun "SaveArray" .... hä??? Im FAQ stand da aber nix, das ich das vorher festlegen muss. Oder ist das ein Unterschied zwischen Delphi und Lazarus??? In der Uni muss ich mit Delphi programmieren, zuhause mach ich das aber mit Lazarus ...
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#6

AW: Erstellen einer Tabelle mit Sinus- und Cosinus Werten

  Alt 5. Dez 2010, 13:16
Müsste wohl heissen (ungeprüft):
Delphi-Quellcode:
for i := 0 to 900 do
begin
  SinusTabelle[i] := DegToRad(Sin( 0.1*i));
  CosinusTabelle[i] := DegToRad(Cos( 0.1*i ));
end;
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Kenny77

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

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
hamptoncourt

Registriert seit: 20. Nov 2010
34 Beiträge
 
#8

AW: Erstellen einer Tabelle mit Sinus- und Cosinus Werten

  Alt 5. Dez 2010, 20:07
*lol* woher weist du das??? Nehme an, du bist auch in BI???

Das ist ja cool ... Interessanter Lösungsweg ... Werde ich mal mit rum spielen ...

Aber sag mal, in unserer Aufgabenstellung steht noch was von wegen "Erstellen sie Tabellen vor Index und Vorzeichen" Damit die Aufgabe nicht zu Zeitaufwändig wird ... aber wie habe ich denn das zu verstehen??? Hätte das mit den Vorzeichen so ungefähr wie du gemacht ... Wozu brauche ich denn da noch zusätzliche Tabellen???

greetz
  Mit Zitat antworten Zitat
Kenny77

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

AW: Erstellen einer Tabelle mit Sinus- und Cosinus Werten

  Alt 5. Dez 2010, 20:22
Es geht eigentlich darum das ein leistungsschwacher Prozessor ( sagen wir für ne Maschine ) damit arbeiten kann und nicht zwingend ein Pentium4 für ne Bohrmaschine genutzt wird. falls du verstehst was ich meine

Nun zur Frage selbst :

Das mit der Tabelle (Index Vorzeichen) ist auch gut möglich aber irrelevant.
Denke du kannst das ruhigen gewissens auch so machen wie ich.
Er hat mir das auch abgezeichnet.

nur versuch es villeicht nicht mit

Code:
CosWert := v*sqrt(1-(SinWert*SinWert));
zu lösen, sondern versuch wie den Sinuswert auch den Cosinuswert aus der Tabelle zu lesen und zu berechnen.

Ähnlich wie ich es für das zeichnen gemacht habe
Code:
ySin := round(Ym-SinCos(x));
yCos := round(Ym-SinCos(x));

Geändert von Kenny77 ( 5. Dez 2010 um 20:25 Uhr)
  Mit Zitat antworten Zitat
hamptoncourt

Registriert seit: 20. Nov 2010
34 Beiträge
 
#10

AW: Erstellen einer Tabelle mit Sinus- und Cosinus Werten

  Alt 5. Dez 2010, 20:39
*lach* ja gut, ich verstehe was du meinst sehr anschauliches Beispiel

Ja, ich merk schon, ich bin halt doch mehr für Arbeiten in der Konstruktion geeignet (Berechnungen, Konstruieren etc.) als für den Bereich der Informatik ... Aber ist halt Pflicht :-/

Ja, habe das auch schon anders für mich umgesetzt. Hatte mir deinen Lösungsansatz durchgeguckt und es dann etwas abgeändert ... jetzt funzt es auch endlich mit der Tabelle ... jippiiiiii

Mit der Tabelle dachte ich auch eher, weil es explizit nochmal in der Aufgabenstellung erwähnt wurde :-S Werde es aber auch mal so versuchen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:18 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