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 2 von 4     12 34      
Benutzerbild von bjd
bjd

Registriert seit: 2. Apr 2006
Ort: Illertissen
4 Beiträge
 
Delphi XE3 Professional
 
#11

AW: Erstellen einer Tabelle mit Sinus- und Cosinus Werten

  Alt 5. Dez 2010, 16:21
Du solltest dir auf DT auch das Tutorial zu Funktionen durchlesen. In dem von dir angesprochenen Tipp steht ziemlich klar, dass SaveArray eine Procedure ist, die du zuerst definieren musst. Wenn du das so machst, ist fast schon die ganze Arbeit getan, du musst nur noch deinen Array-Typ angeben.
  Mit Zitat antworten Zitat
hamptoncourt

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

AW: Erstellen einer Tabelle mit Sinus- und Cosinus Werten

  Alt 5. Dez 2010, 17:38
Hey ... stimmt. Habe ich auch im Tutorium jetzt gesehen, dass es eine Prozedur ist ...

Aber nochmal zu dem Tipp mit dem typisierten Dateiformat ... Das scheint ja so ganz übersichtlich zu haben. Das Tutorial ist echt gut verständlich ... Aber eine Frage hab ich doch noch ...

Wenn ich das mache z.B. mit

for i := 0 to 900 do write .....

wie schreibe ich das denn dann, wenn zwei Daten gesetzt werden sollen??? Schreibe ich beide Daten hintereinander in der einen Klammer, oder gebe ich zwei Anweisungen "for ... do write" in dem Quelltext ein???
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#13

AW: Erstellen einer Tabelle mit Sinus- und Cosinus Werten

  Alt 5. Dez 2010, 17:46
Das bleibt Dir überlassen. Aus Vereinfachungsgründen könntest Du die Daten als Paare in einem Record (Sinus- und Cosinuswert) ablegen und diesen dann speichern bzw. auslesen. Wichtig ist lediglich, dass Du selbst den Überblick behältst.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Kenny77

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

AW: Erstellen einer Tabelle mit Sinus- und Cosinus Werten

  Alt 5. Dez 2010, 20: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 20:11 Uhr)
  Mit Zitat antworten Zitat
hamptoncourt

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

AW: Erstellen einer Tabelle mit Sinus- und Cosinus Werten

  Alt 5. Dez 2010, 21: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
 
#16

AW: Erstellen einer Tabelle mit Sinus- und Cosinus Werten

  Alt 5. Dez 2010, 21: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 21:25 Uhr)
  Mit Zitat antworten Zitat
hamptoncourt

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

AW: Erstellen einer Tabelle mit Sinus- und Cosinus Werten

  Alt 5. Dez 2010, 21: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
Kenny77

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

AW: Erstellen einer Tabelle mit Sinus- und Cosinus Werten

  Alt 5. Dez 2010, 21:54
Schön das ich dir etwas helfen konnte.
Aber wie gesagt für die Prüfung ist es NOTWENDIG das selber zu machen und zu verstehen was passiert und warum etwas passiert.
Bei Fragen zu den Paktikas meld Dich einfach bei Kai im A-Zug.
Hab die Praktikumsaufgaben meist 2 Tage nach erscheinen schon fertig.

Gruß Kai

P.S. die nächste Aufgabe hab ich auch schon fertig

// @Admins -> Sry wegen dieser Unterhaltung im Forum
  Mit Zitat antworten Zitat
hamptoncourt

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

AW: Erstellen einer Tabelle mit Sinus- und Cosinus Werten

  Alt 6. Dez 2010, 09:04
Manno ... jetzt läuft es doch wieder nicht Ich mache das glaub ich komplett falsch ... also er erstrellt die Datei, alles Super ... aber sobald ich in die Box nen Wert eingebe und auf den Button klicke, dass er das berechnen soll, kackt der ab ...

@ Kenny: Ich verstehe das auch nicht ganz, wie du das gemacht hast mit den Vorzeichen und so ... ne case Anweisung ist klar ... der guckt in welchem Quadranten und berechnet dann ob - oder + und so ... Aber der weiß doch in dieser Anweisung gar nicht, was x ist, oder???

Auf jeden Fall: Sobald ich den Button zum berechnen klicke, will er die Daten aus der TXT Datei auslesen. dann kommt aber gleich ein EConvertError:

" " is an invalid float

hmmm ... vielleicht habe ich es jetzt auch komplett falsch aufgebaut. Hier mal der Quelltext zum Auslesen der Daten ...

Delphi-Quellcode:
var
   s, c : String;
   x, v, i : Integer;
   rad, ErgSin, ErgCos : double;
begin
  assignfile(f,'Werte.txt');
  reset(f);

  for x:=0 to 900 do
   begin
    readln(f, s, c);
    sinWert[x] := strtofloat(s);
    cosWert[x] := strtofloat(c);
   end;

  closefile(f);
Hoffe, mir kann da noch jemand helfen ...
  Mit Zitat antworten Zitat
hamptoncourt

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

AW: Erstellen einer Tabelle mit Sinus- und Cosinus Werten

  Alt 6. Dez 2010, 09:37
Update:
Wenn ich statt nur einer Tabelle 2 schreibe (eine mit nem Sinuswert, die anderen mit nem Cosinuswert) dann funktioniert alles ohne Probleme. Er schmeißt sogar die richtigen Werte raus ... voll cool ... aber warum funktioniert das nicht, wenn er daraus eine einzige Tabelle schreiben soll???
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 17:42 Uhr.
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