Thema: Array Zugriff

Einzelnen Beitrag anzeigen

Slashmob

Registriert seit: 28. Okt 2011
45 Beiträge
 
#1

Array Zugriff

  Alt 27. Nov 2011, 17:11
Nabend zusammen,

ich arbeite zurzeit an einem Projekt, das eine Tabelle von Cos-Werten im Bereich von 0° bis 90°
(in 1/10° Schritten, d.h 901 Cos-Werte) erzeugen soll, dann anschließend diese Tabelle übernommen und in ein Array eingelesen wird.
Ziel ist es alleine durch die obige Cos-Tabelle (0°-90°) die Werte von Sinus, Cosinus und Tangens im Bereich von 0° bis 360° zu "berechnen", indem man die richtigen Verhältnisse von Cos aus dem ersten Quadranten zu den übrigen Quadranten erstellt.

Mein Problem ist, dass ich den Zugriff auf den Array nicht hinbekomme. Da kommt immer totaler Quatsch als Wert raus. Ich hab wohl irgendwo einen Denkfehler oder übersehe etwas.
Weil mich dieser letzte Teil schon seit zwei Tagen plagt, wollt ich euch um Hilfe, Anregungen oder Tipps bitten.

Gruß Slash

Mein Code sieht wie folgt aus:

Code:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, MaskEdit,
  StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    MaskEdit1: TMaskEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var                          // Globale Deklaration
  Form1: TForm1;
  cos_Tab: array [0..900] of double;
  f: textfile;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject); // Tabelle erzeugen und speichern
Var s: string;    // Zeichenkette
    i: integer;  // Laufindex
begin
     assignfile(f,'cos.txt');  
     rewrite(f);              
     For i:= 0 to 900 Do      
         Begin
              s:=floattostr(cos((i/10)*(2*Pi/360)));
              writeln(f,s);      
         end;
     closefile(f);      
end;

procedure TForm1.Button2Click(Sender: TObject);  // Tabelle übernehmen und in Array einlesen
Var s: string;
    i: integer;
begin
     assignfile(f,'cos.txt');    
     reset(f);                  
     For i:=0 to 900 Do          
         Begin
              readln(f,s);      
              cos_Tab[i]:=strtofloat(s);
         end;
     closefile(f);
end;

procedure TForm1.Button3Click(Sender: TObject); // Berechne Funktionswert
Var i,quadrant: integer;
    winkel, rad, coswert,sinwert,tanwert: double;

begin
     winkel:=strtofloat(maskedit1.text);  
     If (winkel>360) then                
     showmessage ('Wert zu groß! Bitte einen Wert zwischen 0° und 360° eingeben!');
     If (winkel<0) then
     showmessage ('Negativer Wert! Bitte einen Wert zwischen 0° und 360° eingeben!');
     rad:= (winkel*2*Pi)/360;


     // Quadrantnummer aus Grenzwinkeln bestimmen
     If ((winkel*10)>=0) and ((winkel*10)<=900) then
     Begin
           quadrant:= 1;
     end;
     If ((winkel*10)>900) and ((winkel*10)<=1800) then
     Begin
           quadrant:= 2;
     end;
     If ((winkel*10)>1800) and ((winkel*10)<=2700) then
     Begin
           quadrant:= 3;
     end;
     If ((winkel*10)>2700) and ((winkel*10)<=3600) then
     Begin
           quadrant:= 4;
     end;

// Funktionsberechnung

     Case quadrant of
     1: begin
          coswert:=cos_Tab[i];

        end;
     2: begin
          coswert:=-cos_Tab[1800-i];

        end;
     3: begin
          coswert:=-cos_Tab[1800+i];

        end;
     4: begin
          coswert:=cos_Tab[3600-i];

        end;
     end;

// Ausgabe der Funktionswerte
     label1.Caption:='Cos-Wert: '+ floattostr(coswert);
     label2.Caption:='Sin-Wert: '+ floattostr(sinwert);
     label3.Caption:='Tan-Wert: '+ floattostr(tanwert);

end;

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

end.

Geändert von Slashmob (27. Nov 2011 um 17:21 Uhr)
  Mit Zitat antworten Zitat