Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Variablen Verwendung (https://www.delphipraxis.net/85968-variablen-verwendung.html)

Muetze1 7. Feb 2007 15:27

Re: Variablen Verwendung
 
Zitat:

Zitat von 3_of_8
Das ganze ist relativ einfach: Variablen mit festen Größe, wie zum Beispiel Integer, werden auf den Stack gepackt. Natürlich weiß man da nie, was vorher da drauf war.

Das gilt für lokale Variablen. Er hat sie als globale Variable deklariert und die werden initialisiert mit einer 0.

@Mb123: Definier dir einen Rekord, welcher dir die drei Werte des Vektors zu einer Einheit zusammenfasst:

Delphi-Quellcode:
Type
  TVektor = Record
    a, b, c: Integer
  End;

Var
  aVektor: TVektor;

...

Begin
  aVektor.a := 4;
  aVektor.b := 1;
  aVektor.c := -2;

  ...
End.
Dann hast du die 3 Element beisammen und kannst sie einfacher weitergeben und trotzdem einzelnd ansprechen.

Um dann den Vektor einfacher zu zu weisen, eine kleine Funktion:

Delphi-Quellcode:
Function Vektor(Const a, b, c: Integer): TVektor;
Begin
  Result.a := a;
  Result.b := b;
  Result.c := c;
End;

Mb123 7. Feb 2007 15:50

Re: Variablen Verwendung
 
danke erstmal an Muetze1 ! (:

Delphi-Quellcode:
var
  Form1: TForm1;
  q:integer;

  Type
  TVektor = Record
    a, b, c: Integer
  End;

Var
  aVektor: TVektor;
  bVektor: TVektor;
  cVektor: TVektor;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

  aVektor.a := 1;
  aVektor.b := 0;
  aVektor.c := 160;

  bVektor.a := 0;
  bVektor.b := 1;
  bVektor.c := 7;

while aVektor.a <> 0 do
begin

q:= bVektor.c DIV aVektor.a;


end;

end;

end.
So meintest du das doch oder ? ich hab nur noch nich so ganz verstanden wie du das mit der funktion meinst ? kann man dann nachher den kompletten vektor einem anderen vektor zuweisen ?
ich hab noch nie so richtig mit records und so gearbeitet, deswegen bin ich da nich so fit !
wenn du mir das nochmal etwas erklären könntest mit der funktion wär das spiitze !

cruiser 7. Feb 2007 16:49

Re: Variablen Verwendung
 
Mit der Funktion gehts so:
Delphi-Quellcode:
aVektor := Vektor(1, 0, 160);
bVektor := Vektor(0, 1, 7);
Und von mir gibbet gratis eine drauf:
Delphi-Quellcode:
function multiVektor(const v: TVektor; const q: integer):TVektor;
begin
  Result.a := v.a * q;
  Result.b := v.b * q;
  Result.c := v.c * q;
end;
Verwendung:
Delphi-Quellcode:
cVektor := multiVektor(aVektor, q);

Mb123 7. Feb 2007 17:10

Re: Variablen Verwendung
 
ihr seid spitze man :-D
Delphi-Quellcode:
var
  Form1: TForm1;
  q:integer;

  Type
  TVektor = Record
    a, b, c: Integer
  End;

Var
  aVektor: TVektor;
  bVektor: TVektor;
  cVektor: TVektor;

..

Function Vektor(Const a, b, c: Integer): TVektor;
Begin
  Result.a := a;
  Result.b := b;
  Result.c := c;
End;

procedure TForm1.Button1Click(Sender: TObject);
begin


  aVektor := Vektor(1,0,160);
  bVektor := Vektor (0,1,7);

while aVektor.a <> 0 do
begin

q:= bVektor.c DIV aVektor.a;

  aVektor := Vektor(aVektor.a-(q*bVektor.a),aVektor.b-(q*bVektor.b),aVektor.c-(q*bVektor.c));
  bVektor := Vektor(aVektor.a,aVektor.b ,aVektor.c);
  cVektor := Vektor(aVektor.a,aVektor.b ,aVektor.c);

ListBox1.Items.Add(IntToStr(bVektor.b));


end;

end;

end.
habs nu so gemacht.. nur wenn ich das laufen lass, kommen keine zahlen sondern die .exe hängt sich auf :/ weiß jemand rat ?

cruiser 7. Feb 2007 17:25

Re: Variablen Verwendung
 
Stimmt abziehen war ja auch noch.. Am besten wieder per Funktion...

Delphi-Quellcode:
function substVektor(const from, vek: TVektor):TVektor;
begin
  Result.a := from.a - vek.a;
  Result.b := from.b - vek.b;
  Result.c := from.c - vek.c;
end;
Sähe dann wohl so aus (hast da bissel was durcheinandergebracht, laut der Aufgabenstellung), ich hab mal die Variablen laut Aufgabe benannt, dann wird das klarer:

Delphi-Quellcode:

uVek := Vektor(1, 0, 160);
vVek := Vektor(0, 1, 7);
// statt 160 und 7 dann später die validierten
// Werte für a und b

while (vVek.c <> 0) do
begin
  q := uVek.c div vVek.c;
  tVek := substVektor(uVek, multiVektor(vVek, q));
  uVek := vVek; // records einfach nur zuweisen reicht!
  vVek := tVek;
end;

Mb123 7. Feb 2007 19:42

Re: Variablen Verwendung
 
Delphi-Quellcode:
Function Vektor(Const a, b, c: Integer): TVektor;
Begin
  Result.a := a;
  Result.b := b;
  Result.c := c;
End;

function multiVektor(const v: TVektor; const q: integer):TVektor;
begin
  Result.a := v.a * q;
  Result.b := v.b * q;
  Result.c := v.c * q;
end;

function substVektor(const from, vek: TVektor):TVektor;
begin
  Result.a := from.a - vek.a;
  Result.b := from.b - vek.b;
  Result.c := from.c - vek.c;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin


  uVektor := Vektor(1,0,160);
  vVektor := Vektor(0,1,7);



     while (vVektor.c <> 0) do
begin
  q := uVektor.c div vVektor.c;
  tVektor := substVektor(uVektor, multiVektor(vVektor, q));
  uVektor := vVektor;
  vVektor := tVektor;
end;
end;

end.
jetzt hab ichs so stehen und er sagt mir :? :(
Zitat:

[Error] berechneD.pas(82): '(' expected but ':=' found
[Error] berechneD.pas(84): '(' expected but ';' found
[Fatal Error] Project2.dpr(5): Could not compile used unit 'berechneD.pas'
der fehler kommt an dieser stelle :
Delphi-Quellcode:
  tVektor := substVektor(uVektor, multiVektor(vVektor, q));
  uVektor := vVektor;
  vVektor := tVektor;

Hawkeye219 7. Feb 2007 19:53

Re: Variablen Verwendung
 
Hallo,

TVektor ist bereits der Name eines Typs, in deinem Fall ein RECORD. Du solltest keine Variable mit gleichem Namen verwenden. Wie hast du es eigentlich geschafft, die Variable tVektor zu vereinbaren?

Gruß Hawkeye

Mb123 9. Feb 2007 12:26

Re: Variablen Verwendung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das ganze sieht jetzt so aus & läuft auch alles soweit :-D Danke nochmal an alle die mir geholfen haben !!
Ich hab auch nochmal ein Bild von dem Programm angehängt, damit man sich mal angucken kann wofür der code letztendlich ist.

Delphi-Quellcode:
unit berechneD;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    phi: TEdit;
    e: TEdit;
    d: TEdit;
    ListBox1: TListBox;
    ListBox2: TListBox;
    ListBox3: TListBox;
    Label4: TLabel;
    ggT: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  q,a,b:integer;

  Type
  TVektor = Record
    a, b, c: Integer
  End;

Var
  uVektor: TVektor;
  vVektor: TVektor;
  cVektor: TVektor;
implementation

{$R *.dfm}

Function Vektor(Const a, b, c: Integer): TVektor;
Begin
  Result.a := a;
  Result.b := b;
  Result.c := c;
End;

function multiVektor(const v: TVektor; const q: integer):TVektor;
begin
  Result.a := v.a * q;
  Result.b := v.b * q;
  Result.c := v.c * q;
end;

function substVektor(const from, vek: TVektor):TVektor;
begin
  Result.a := from.a - vek.a;
  Result.b := from.b - vek.b;
  Result.c := from.c - vek.c;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

a:=StrToInt(phi.text);
b:=StrToInt(e.text);

  uVektor := Vektor(1,0,a);
  vVektor := Vektor(0,1,b);

     while (vVektor.c <> 0) do
begin
  q := uVektor.c div vVektor.c;
  cVektor := substVektor(uVektor, multiVektor(vVektor, q));
  uVektor := vVektor; // records einfach nur zuweisen reicht!
  vVektor := cVektor;

        ListBox1.Items.Add('u1='+IntToStr(uVektor.a)) ;
        ListBox1.Items.Add('u2='+IntToStr(uVektor.b)) ;
        ListBox1.Items.Add('u3='+IntToStr(uVektor.c)) ;

        ListBox2.Items.Add('v1='+IntToStr(vVektor.a)) ;
        ListBox2.Items.Add('v1='+IntToStr(vVektor.b)) ;
        ListBox2.Items.Add('v1='+IntToStr(vVektor.c)) ;

        ListBox3.Items.Add('t1='+IntToStr(cVektor.a)) ;
        ListBox3.Items.Add('t1='+IntToStr(cVektor.b)) ;
        ListBox3.Items.Add('t1='+IntToStr(cVektor.c)) ;

end;

   if (uVektor.b<0) then
   Begin
   uVektor.b:=uVektor.b+a;
   end;


   d.Text:= IntToStr(uVektor.b) ;
   ggT.text:=IntToStr(uVektor.a) +
             '*' +
             IntToStr(a) +
             '+' +
             IntToStr(uVektor.b) +
             '*' +
             IntToStr(b);

end;

end.

cruiser 10. Feb 2007 03:18

Re: Variablen Verwendung
 
Evtl. bei den Listbox ausgaben v1, v2, v3 statt v1, v1, v1 ;) selbes bei t


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:50 Uhr.
Seite 2 von 2     12   

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