Autor Beitrag
PeterM_6
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mi 01.11.06 13:36 
Hallo, ich bin ganz neu in Delphi eingestiegen und wollte jetzt eine Konsolenanwendung programmieren, die die Steigung und den y-Achsenabschnitt einer Geraden berechnet, wenn man ihr zwei Punkte gibt.
Hatte eigentlich auch alles gut geklappt, nur schließt sich das ding seit neustem immer nach der Eingabe der Koordinaten, ohne mir nen Error anzugeben.
Es ist übrigens wichtig das alles Modularisiert vorliegt(Schule^^).
Ich poste mal den Code, wenn einem der Fehler auffällt, dann schreibt doch bitte hier rein :D

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var x1,x2,y1,y2,m,n:real;

procedure parameter(x1int,x2int,y1int,y2int:real;var mint,nint:real);
begin
    mint:=(y1int-y2int)/(x1int-x1int);
    nint:=y1-(m*x1);
end;

procedure eingabe(var x1int,x2int,y1int,y2int:real);
begin
  writeln('Hallo, bitte gib nie Koordinaten der zwei Punkte ein.');
  writeln;
  write('Punkt1 - x:');
  readln(x1int);
  write('Punkt1 - y:');
  readln(y1int);
  writeln;
  write('Punkt2 - x:');
  readln(x2int);
  write('Punkt2 - y:');
  readln(y2int);
end;
{--------------------------------------------------}
begin
  eingabe(x1,x2,y1,y2);
  writeln;
  writeln('Danke, bei Tastendruck werden die Berechnungen von m und n durchgefuehrt.');
  readln;
  parameter(x1,x2,y1,y2,m,n);
  Writeln('Der Wert von m betraegt ', m,'.');
  Writeln('Der Wert von n betraegt ', n,'.');
  readln;
end.


Dank euch schon mal im Vorraus
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 01.11.06 14:08 
Setz doch einfachmal einen Breakpoint mit F5 und gehen den Code Schritt für Schritt durch mit F7 und guck, wo er aussteigt.
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Mi 01.11.06 14:18 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var x1,x2,y1,y2,m,n:real;
dummyString : string;
//[...]
{--------------------------------------------------}
begin
  eingabe(x1,x2,y1,y2);
  writeln;
  writeln('Danke, bei Tastendruck werden die Berechnungen von m und n durchgefuehrt.');
  readln(dummyString);
  parameter(x1,x2,y1,y2,m,n);
  Writeln('Der Wert von m betraegt ', m,'.');
  Writeln('Der Wert von n betraegt ', n,'.');
  readln;
end.


versuchs mal so...
PeterM_6 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mi 01.11.06 14:39 
Hmm, also danke schon mal für die Hilfe funktioniert leider immer noch nicht, mir is aufgefalen ich hatte n paar Fehler im code, hab ich geändert, Programm beendet sich aber immer noch nachdem man Bestätigt(beim ersten readln(dummystring).

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var x1,x2,y1,y2,m,n:real;
  dummystring:string;
procedure parameter(x1int,x2int,y1int,y2int:real;var mint,nint:real);
begin
    mint:=(y1int-y2int)/(x1int-x1int);
    nint:=y1int-(mint*x1int);
end;

procedure eingabe(var x1int,x2int,y1int,y2int:real);
begin
  writeln('Hallo, bitte gib nie Koordinaten der zwei Punkte ein.');
  writeln;
  write('Punkt1 - x:');
  readln(x1int);
  write('Punkt1 - y:');
  readln(y1int);
  writeln;
  write('Punkt2 - x:');
  readln(x2int);
  write('Punkt2 - y:');
  readln(y2int);
end;
{--------------------------------------------------}
begin
  eingabe(x1,x2,y1,y2);
  writeln;
  writeln('Danke, bei Tastendruck werden die Berechnungen von m und n durchgefuehrt.');
  readln(dummystring)
  parameter(x1,x2,y1,y2,m,n);
  Writeln('Der Wert von m betraegt ', m,'.');
  Writeln('Der Wert von n betraegt ', n,'.');
  readln(dummystring); {geht so nich ging aber auch ohne (dummystring) nicht}
end.
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Mi 01.11.06 14:44 
vielleicht liegt es ja an m und n.
mach mal in der Ausgabe statt m und n feste werte.
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Mi 01.11.06 14:50 
user profile iconPeterM_6 hat folgendes geschrieben:
Hmm, also danke schon mal für die Hilfe funktioniert leider immer noch nicht, mir is aufgefalen ich hatte n paar Fehler im code, hab ich geändert, Programm beendet sich aber immer noch nachdem man Bestätigt(beim ersten readln(dummystring).

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var x1,x2,y1,y2,m,n:real;
  dummystring:string;
procedure parameter(x1int,x2int,y1int,y2int:real;var mint,nint:real);
begin
    mint:=(y1int-y2int)/(x1int-x1int);
    nint:=y1int-(mint*x1int);
end;

procedure eingabe(var x1int,x2int,y1int,y2int:real);
begin
  writeln('Hallo, bitte gib nie Koordinaten der zwei Punkte ein.');
  writeln;
  write('Punkt1 - x:');
  readln(x1int);
  write('Punkt1 - y:');
  readln(y1int);
  writeln;
  write('Punkt2 - x:');
  readln(x2int);
  write('Punkt2 - y:');
  readln(y2int);
end;
{--------------------------------------------------}
begin
  eingabe(x1,x2,y1,y2);
  writeln;
  writeln('Danke, bei Tastendruck werden die Berechnungen von m und n durchgefuehrt.');
  readln(dummystring)
  parameter(x1,x2,y1,y2,m,n);
  Writeln('Der Wert von m betraegt ', m,'.');
  Writeln('Der Wert von n betraegt ', n,'.');
  readln(dummystring); {geht so nich ging aber auch ohne (dummystring) nicht}
end.


Hallo,

bei mint:=(y1int-y2int)/(x1int-x1int); dividierst du durch 0, das ist nun mal bei Computern sehr unbeliebt.

Gruss Reinhard
PeterM_6 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mi 01.11.06 15:10 
Ich bin aber auch sehr genial :D
Jo jetzt hängt es sich nich mehr auf, war n schreibfehler den ich nich bemerkt hatte^^

Blieb jetzt nur noch ein neues problem, es gibt mir für m und n die selben werte aus 0o.
Ich danke euch schon mal für eure schnelle Hilfe, wenn noch jemand den zweiten fehler lösen kann würde ich mich sehr freuen :)
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Mi 01.11.06 15:26 
also m ist die steigung, aber was ist n ?
konbom
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 36

Win XP Home
Delphi 2005 Personal
BeitragVerfasst: Mi 01.11.06 15:37 
n ist der y-Achsenabschnitt!

Also bei mir gibt er verschiedene Werte aus, wenn ich deinen Quelltext ausprobiere
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Mi 01.11.06 15:55 
user profile iconPeterM_6 hat folgendes geschrieben:
Blieb jetzt nur noch ein neues problem, es gibt mir für m und n die selben werte aus


es gilt f(x) = m*x + n
falls du also zufallig zwei punkte einer Funktion genommen hast wo m = n ist, dann kann das vorkommen.
bastel dir ne lineare funktion mit m <> n, nimm zwei Punkte und dann müssten es auch unterschiedliche Werte sein.
Du solltest dir sowiso ein paar selbst ausgerechnete Testwerte zurechtlegen, um zu überprüfen, ob dein Programm korrekt arbeitet.
PeterM_6 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mi 01.11.06 16:10 
Hmm, ich habs grad noch mal mit mehreren anderen getestet es funktioniert.
Ich frage mich nur warum er mir bei (2/7) (8/9) 5 und nich 0.5 als Steigung ausgibt...

Vielen dank das ihr mir geholfen habt jetz is alles recht klar ^^
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Mi 01.11.06 16:26 
user profile iconPeterM_6 hat folgendes geschrieben:

Ich frage mich nur warum er mir bei (2/7) (8/9) 5 und nich 0.5 als Steigung ausgibt...


...das frage ich mich auch, müsste doch für diese Werte m = 0,333333333333333... sein.
PeterM_6 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mi 01.11.06 16:48 
tut mir leid hab mich verschrieben es war 4/7 nich 2/7.
Wenn ich mit 2/7 rechen bekomm ich übrigens 3,33333333...raus.
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Mi 01.11.06 16:53 
bist du dir sicher, dass es nicht Exponentialschreibweise ist, also 3,33333... * 10^-1
PeterM_6 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mi 01.11.06 17:18 
Ne hatte ich leider nicht drauf geachtet, daran liegt es auch, danke dir :D.

Kann mit noch jemand sagen wie ich die vielleicht weg krieg(wenn das geht)?
Danke
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Mi 01.11.06 17:31 
mit der Format-Anweisung kann man Zahlen formatiert darstellen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
Format('%x.yf',[z])
//x = Anzahl der Stellen vor dem Komma (falls vorhanden)
//y = Anzahl der Stellen hinter dem Komma
//z = Zahl


also bei dir sieht das dann so aus :
ausblenden Delphi-Quelltext
1:
2:
  Writeln('Der Wert von m betraegt ', Format('%6.2f',[m]),'.');
  Writeln('Der Wert von n betraegt ', Format('%6.2f',[n]),'.');
PeterM_6 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mi 01.11.06 17:55 
Das is super vielen Dank noch mal an alle die mir geholfen haben ^^