Delphi-PRAXiS

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)

Mb123 7. Feb 2007 09:28


Variablen Verwendung
 
Guten Morgen,
Ich habe vor folgenden Logarithmus zu programmieren:

http://www.matheprisma.uni-wuppertal...er/eukAlg1.gif

Nun meine Frage kann ich in Delpi die Variablen wie in Zeile 2 (oder 6) verwenden oder muss ich sie so definiere:

var u1,u2,u3: integer;
[...]
u1:=1;
u2:=0;
u3:=b;

Dann noch die zweite Frage: Gibt es einen Befehl für eine Division ohne Rest ?

Danke!

mkinzler 7. Feb 2007 09:37

Re: Variablen Verwendung
 
Variablen müssen auf jeden Fall deklariert werden.
DIV

Mb123 7. Feb 2007 13:41

Re: Variablen Verwendung
 
Delphi-Quellcode:
[...]

var
  Form1: TForm1;
  u1,u2,u3,v1,v2,v3,t1,t2,t3,q,a,b:integer;

[...]

procedure TForm1.Button1Click(Sender: TObject);
begin

a:=StrToInt(edit1.text);
b:=StrToInt(edit2.text);
u1:=1    ;
u2:=0    ;
u2:=a   ;

v1:=0    ;
v2:=1    ;
v3:=b   ;

while v3>0 do
begin

q:= u3 DIV v3;

t1:=u1-q*v1   ;
t2:=u2-q*v2   ;
t2:=u3-q*v3   ;

u1:=v1        ;
u2:=v2        ;
u3:=v3        ;

v1:=t1        ;
v2:=t2        ;
v3:=t3        ;
ListBox1.Items.Add(IntToStr(u1));
ListBox1.Items.Add(IntToStr(u2));
ListBox1.Items.Add(IntToStr(u3));

end;
end;

end.
Ich hab den Code jetzt so geschrieben, allerdings krieg ich als ausgabe nur die startwerte
u1=0
u2=1
u3=b
..
Ich denk mein Fehler liegt an dieser Stelle
Delphi-Quellcode:
while v3>0 do
In der Darstellung oben heißt "!=" doch soviel wie: bis v3=o wird oder ? Ich hab ja jetzt einfach geschrieben v3>0 :S
kann mir da jemand weiterhelfen ? danke !

Gruber_Hans_12345 7. Feb 2007 13:48

Re: Variablen Verwendung
 
wo setzt du b auf einen wert? sehe das niergends - und ansonsten wird der wahrscheinlich 0 sein ...

inherited 7. Feb 2007 13:48

Re: Variablen Verwendung
 
ein != entspricht in Delphi einem <>
Außerdem liest du da oben n und e ein, weist aber a und b zu. Das kann nicht gehen.

Mb123 7. Feb 2007 13:51

Re: Variablen Verwendung
 
n und e hatte ich in meinem code schon durch a und b ersetzt hier allerdings noch nich gepostet, sooorry .
aber wenn ich <> einsetze wird immer noch 0 , 1 , b ausgegeben :/

Delphi-Quellcode:
var
  Form1: TForm1;
  u1,u2,u3,v1,v2,v3,t1,t2,t3,q,a,b:integer;

implementation

{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);
begin

a:=StrToInt(edit1.text);
b:=StrToInt(edit2.text);
u1:=1    ;
u2:=0    ;
u3:=a   ;

v1:=0    ;
v2:=1    ;
v3:=b   ;

while v3 <> 0 do
begin

q:= u3 DIV v3;

t1:=u1-q*v1   ;
t2:=u2-q*v2   ;
t2:=u3-q*v3   ;

u1:=v1        ;
u2:=v2        ;
u3:=v3        ;

v1:=t1        ;
v2:=t2        ;
v3:=t3        ;
ListBox1.Items.Add(IntToStr(u1));
ListBox1.Items.Add(IntToStr(u2));
ListBox1.Items.Add(IntToStr(u3));

end;
end;

end.

so sieht es jetzt aus !

3_of_8 7. Feb 2007 13:55

Re: Variablen Verwendung
 
Zitat:

Zitat von Gruber_Hans_12345
wo setzt du b auf einen wert? sehe das niergends - und ansonsten wird der wahrscheinlich 0 sein ...

Das Ding wäre (wahrscheinlich) nicht 0. Einfache Variablen liegen auf dem Stack und werden nicht initialisiert. b könnte also alles sein. Aber der Compiler gibt in dem Fall auch immer passende Warnmeldungen aus.

Mb123 7. Feb 2007 14:00

Re: Variablen Verwendung
 
ich hab die variable doch definiert und gebe ihr dann den wert aus den edit boxen ?!
Delphi-Quellcode:
var
  Form1: TForm1;
  u1,u2,u3,v1,v2,v3,t1,t2,t3,q,a,b:integer;

..

a:=StrToInt(edit1.text);
b:=StrToInt(edit2.text);
oder wie meinst du das ?
Zitat:

"Einfache Variablen liegen auf dem Stack und werden nicht initialisiert."
diesen satz hab ich nich ganz verstanden :p

3_of_8 7. Feb 2007 15:14

Re: Variablen Verwendung
 
Zitat:

Zitat von Gruber_Hans_12345
wo setzt du b auf einen wert? sehe das niergends - und ansonsten wird der wahrscheinlich 0 sein ...

Darauf war das bezogen.

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.

Mb123 7. Feb 2007 15:23

Re: Variablen Verwendung
 
ähmm ja .. ich weiß zwar nich wie mir das jetzt helfen soll,
denn wenn ich anstatt a u. b feste werte einsetz, passiert genauso wenig.
Das ganze sollte ja sowas produzieren wenn es gehen würde:

http://www.matheprisma.uni-wuppertal...er/eukAlg8.gif

könntest du mir vielleicht sagen, was ich am code verändern muss damit es funktioniert ?

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 05:26 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