www.vorhilfe.de
- Förderverein -
Der Förderverein.

Gemeinnütziger Verein zur Finanzierung des Projekts Vorhilfe.de.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Impressum
Forenbaum
^ Forenbaum
Status VH e.V.
  Status Vereinsforum

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Suchen
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Pascal" - Programm Geradengleichung
Programm Geradengleichung < Pascal < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Pascal"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Programm Geradengleichung: Projekt 3
Status: (Frage) beantwortet Status 
Datum: 15:02 Mi 22.03.2006
Autor: MarquiseDeSade

Hallo liebe Freundinnen und Freunde der Programmiersprachen :O)

Ich habe seit dem 2. Halbjahr Informatik an einem Kolleg und wir benutzen die Programmiersprach Turbo Pascal.

Nun haben wir die Aufgabenstellung bekommen, dass wir ein Programm schreiben, welches uns die Geradengleichung y=mx+b berechnet. Hier meine Ansätze:

Also, die Sonderfälle sind :
falls y1=y2   >>>     y=b=y1=y2
falls x1=x2   >>>     bräuchte ich eine Fehlermeldung, z.B.  Paralell zur y-achse
falls (x1=y1) AND (x2=y2) >>>>   m=1>y=x ; b=0

Nun zu meinem Problem:
1.) Ich habe die Lehrerin gefragt, ob ich alle Variablen benannt habe, sie stimmte zu. Mein Problem ist aber weiter unten im Programm, dass ich bei der Rechnung b=y-mx die Variablen x und y vorher garnicht bestimmt habe ?? Wie kann ich das Problem lösen??
2.) Wie soll die Ausgabe an den Benutzer aussehen ??? Ich versteh das nicht..... optimalerweise sollen doch die werte für y=mx+b da stehen,oder? Wie kann man die Ausgabe so schreiben, dass die Werte so in der Gleichung stehen? Oder muss ich eine Ausgabe schreiben, die dann so aussieht:
y = .......
b=......... usw.

Ich komme irgendwie nicht weiter und somit sehr dankbar für Hilfe.
Hier mal meine Progammansätze:


PROGRAM Geradengleichung;
uses crt;
VAR x1,x2,y1,y2,m,b:REAL;

Begin TextBackground(blue);
          TextColor(yellow);

WriteLn('Berechnungsprogramm Geradengleichung');
Write('Bitte x1 eingeben: ');
ReadLn(x1);
Write('Bitte x2 eingeben: ');
ReadLn(x2);
Write('Bitte y1 eingeben: ');
ReadLn(y1);
Write('Bitte y2 eingeben: ');
ReadLn(y2);

IF y1=y2 THEN WriteLn('y= ',y1)
ELSE
       IF x1=x2 THEN WriteLn('Paralell zur y-Achse ')
       ELSE
              IF (x1=x2) AND (x2=y2) THEN WriteLn('Winkelhalbierende');

BEGIN
b:= y-m*x;    >>>>>>>Aber y und x kennt er ja noch nicht???<<<<<<<<<
m:=(y2-y1)/(x2-x1);
END;









        
Bezug
Programm Geradengleichung: Hinweise
Status: (Antwort) fertig Status 
Datum: 15:29 Mi 22.03.2006
Autor: Loddar

Hallo Tobias!


> Also, die Sonderfälle sind :
> falls y1=y2   >>>     y=b=y1=y2

Das gilt aber nur bei unterschiedlichen [mm] $x_1$ [/mm] und [mm] $x_2$, [/mm] also: [mm] $x_1 [/mm] \ [mm] \not= [/mm] \ [mm] x_2$ [/mm] .


> falls x1=x2   >>>     bräuchte ich eine Fehlermeldung,

> z.B.  Paralell zur y-achse

Das gilt aber nur bei unterschiedlichen [mm] $y_1$ [/mm] und [mm] $y_2$, [/mm] also: [mm] $y_1 [/mm] \ [mm] \not= [/mm] \ [mm] y_2$ [/mm] .


> falls (x1=y1) AND (x2=y2) >>>>   m=1>y=x ; b=0

[notok] Das stimmt nicht! Hier wurde lediglich zweimal derselbe Punkt eingegeben. Da ist keine Aussage / Berechnung möglich.

Von daher ist hier eine Fehlermeldung erforderlich!


> 2.) Wie soll die Ausgabe an den Benutzer aussehen ??? Ich
> versteh das nicht..... optimalerweise sollen doch die werte
> für y=mx+b da stehen,oder? Wie kann man die Ausgabe so
> schreiben, dass die Werte so in der Gleichung stehen? Oder
> muss ich eine Ausgabe schreiben, die dann so aussieht:
> y = .......
> b=......... usw.

Das "y" und das "x" werden in der Ausgabe doch lediglich als Klartext ausgegeben.

Du musst hier im Vorfeld $m_$ und $b_$ berechnen.

Dabei entsteht der y-Achsenabschnitt $b_$ aus der Umformung der Zwei-Punkte-Form:

[mm] $\bruch{y_2-y_1}{x_2-x_1} [/mm] \ = \ [mm] \bruch{y-y_1}{x-x_1}$ $\gdw$ [/mm]   $y \ = \ [mm] \underbrace{\bruch{y_2-y_1}{x_2-x_1}}_{=m}*x [/mm] + [mm] \underbrace{y_1-\bruch{y_2-y_1}{x_2-x_1}*x_1}_{=b}$ [/mm]


Kommst Du mit diesen Hinweisen etwas weiter?

Du musst also Deine IF-Abfragen noch mehr schachteln, um die einzelnen Fälle eindeutig zu bestimmen:

IF y2=y1 THEN
  BEGIN
    IF x2=x1 THEN WRITELN("FEHLER: Bitte geben Sie zwei unterschiedliche Punkte ein!")
    ELSE WRITELN("Gerade parallel zur y-Achse: x = "; x1);
  END
ELSE
  BEGIN

usw.


Gruß
Loddar


Bezug
                
Bezug
Programm Geradengleichung: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 16:02 Mi 22.03.2006
Autor: MarquiseDeSade

Hallo Loddar :O)

Also du bist ein richtiges Fleißbienchen :O) Finde es Klasse, wie du dich hier beteiligst und möchte dir deswegen nochmal ein Lob aussprechen, zumal du mir ja schon des öfteren geholfen hast.

Nun zu meinem Problem. Das was du oben siehst, ist das Produkt der 4. Doppelstunde Informatik und ich besitze keine Vorkenntnisse. Und ich getrau mich garnicht, dir zu sagen, dass ich nicht verstanden habe, was du in mühevoller Arbeit geschrieben hast.

Ich versuch mal zu schauen, wie weit ich folgen kann:

$ [mm] \bruch{y_2-y_1}{x_2-x_1} [/mm] \ = \ [mm] \bruch{y-y_1}{x-x_1} [/mm] $ $ [mm] \gdw [/mm] $ $ y \ = \ [mm] \underbrace{\bruch{y_2-y_1}{x_2-x_1}}_{=m}\cdot{}x [/mm] + [mm] \underbrace{y_1-\bruch{y_2-y_1}{x_2-x_1}\cdot{}x_1}_{=b} [/mm] $


Ab hier versteh ich nichts mehr, leider ...... :-(

Wie müste das denn im Turbo Pascal Programm stehen??
also kann ich mit meiner definition

b:= y-mx
m:= (x2-y1) : (x2-x1)

nichts mehr anfangen ??? Mhhhh, hab grad ne Blokade :(

gruß tobias






Bezug
                        
Bezug
Programm Geradengleichung: Hinweise
Status: (Antwort) fertig Status 
Datum: 16:53 Mi 22.03.2006
Autor: kretschmer

Hallo,

wenn ich Dich richtig verstehe hast Du grundlegende Probleme mit dem Programmieren. Also Pascal (oder auch der Dialekt Turbo Pascal) ist eine sogenannte imperative Sprache. Da macht der Computer in der angegebenen Reihenfolge genau das, was Du ihm aufträgst. Zudem musst Du alles, was Du benutzen möchtest deklarieren. Außerdem gibt er genau dann etwas aus, wenn Du ihn darum bittest (bzw. befiehlst).

Nun zu deiner Frage, wie man y=mx+b ausgeben kann. Naja Du willst ja, dass zum Beispiel etwas, wie y=10x+2 oder y=10x-3 auf dem Monitor zu lesen ist. Wie Du schon verwendet hast, kannst du per write('hallo') hallo ausgeben, oder writeln('hallo'), falls Du einen Zeilenvorschub am ende haben möchtest. Die Frage ist jetzt, wie macht man das mit dem y=10x+2?

Erster Versuch:
... nehmen wir an die Variablen b und m beinhalten schon die richtigen Werte ...

write('y='); (* wir wollen ja hier, dass "y=" auf dem Monitor erscheint *)
write(m); (* wir wollen jetzt, dass der Wert von m und nicht "m" auf dem Monitor erscheint *)
write('x + '); (* entsprechend ... *)
write(b);

das Problem hier ist, dass wenn b<0 sowas kommt wie "y=10x + -3" anstelle von "y=10x - 3". Dies kann man umgehen, indem man den Spezialfall per IF ... THEN ... abfängt und dann etwa das "+" nicht ausgibt, bzw. nur in den anderen Fällen ausgibt.

Es geht auch einfacher in Pascal, wenn ich mich jetzt richtig erinnere (habe leider den Wirth, Fischer nicht griffbereit - falls es überhaupt K. Fischer die zweite Autorin war). Also wie der erste Versuch, mit dem gleichen "Fehler" nur kürzer:
  write('y=', m, 'x + ', b);


So jetzt zu deinem, wie man m und b berechnet. Du musst die Berechnung vor der Ausgabe durchführen. Das Programm wird sozusagen von oben nach unten zwischen BEGIN und END ausgeführt. Du kannst keine Querverweise machen. Außerdem sind die Werte von Variablen veränderlich:

PROGRAM foobar;
uses crt;
VAR x : integer;
BEGIN
  x := 0;
  writeln(x);
  x := 1;
  writeln(x);
END.


Das bedeutet also, der Code für die Ausgabe muss als letztes erfolgen.

Für deine Definition bedeutet es, zum einen, hast Du nirgends x und y definiert. Die sind deinem Pascal vollkommen unbekannt. Zum anderen setzt du den Wert von m nachdem du es verwendest. Das Resultat kann sein, dass dann in diesem Moment der Verwendung von m in m ein beliebiger Wert steht oder 0 (ich habe das nicht mehr so genau im Kopf, ob Pascal Integer-Variablen initialisiert). Mit anderen Worten:
m := (y2-y1) DIV (x2-x1);

Allerdings, sollte man hier vielleicht gleich "real"s verwendet - d.h. Fließkommazahlen - denn Integer speichern nur ganzzahlige Werte. Dann verwendet man auch "/" anstelle von "DIV".


Jetzt musst Du Dir nurnoch überlegen welche Werte (oder Variablen) Du für x und y einsetzen möchtest.


--
Gruß
Matthias

Bezug
                                
Bezug
Programm Geradengleichung: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 17:56 Mi 22.03.2006
Autor: MarquiseDeSade

Hallo Matthias :O)

Erstmal herzlichen Dank, du hast es echt sehr gut und ausführlich geschrieben :O)

Ich gebe dir mal den Zwischenstand:

1.)
Dank deiner Anweisung, wie ich denn die x=mx+b in eine Zeile bekomme, funktioniert dieses nun auch in meinem Programm *freu*
2.)
Auch das Problem mit den Variabeln ist geklärt.
3.)
Dein angesprochenes Problem, dass es auch zu dem Fall kommen kann, dass da steht: y=mx +   -b habe ich mal durchgespielt und es sieht dann echt doof aus. Ich habe allerdings echt keine Idee, wie ich das per IF Anweisung abfangen kann :(.... hättest du da noch eine Idee ??

gruß tobias

Bezug
                                        
Bezug
Programm Geradengleichung: IF-THEN-Abfrage
Status: (Antwort) fertig Status 
Datum: 18:04 Mi 22.03.2006
Autor: Loddar

Hallo Tobias!


> Dein angesprochenes Problem, dass es auch zu dem Fall
> kommen kann, dass da steht: y=mx +   -b habe ich mal
> durchgespielt und es sieht dann echt doof aus. Ich habe
> allerdings echt keine Idee, wie ich das per IF Anweisung
> abfangen kann

Ich schreibe es Dir mal verbal auf, und Du versuchst es in Pascal zu übersetzen?


wenn b>=0 dann schreibe('+ ', b)
sonst schreibe(b)



Wenn man nun noch unbedingt möchte, kann man auch noch erreichen, dass im Falle $b \ = \ 0$ nichts an dieser Stelle ausgegeben wird.


Gruß
Loddar


Bezug
                                                
Bezug
Programm Geradengleichung: Frage (reagiert)
Status: (Frage) reagiert/warte auf Reaktion Status 
Datum: 18:29 Mi 22.03.2006
Autor: MarquiseDeSade

Hallo Loddar :O)

Also, ich kenne bis jetzt nur bedingte Anweisungen....

Ich würde es versuchen so zu machen:

IF b>=0 THEN WriteLn('+')  >>>>> bei dir steht noch ,b  mhh brauch ich das denn hier ???
Ich dachte das alleine reicht, wenn man das so sagen würde:
wenn b größer oder gleich 0 ist, dann schreibe +  
wenn es ja nicht so ist, schreibt der pc doch eh z.b. -2....
als ich das aber eben durch das programm laufen lassen hab, hat er das + nicht geschrieben, warum ???





Bezug
                                                        
Bezug
Programm Geradengleichung: Quellcode
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 07:56 Do 23.03.2006
Autor: Loddar

Guten Morgen Tobias!


> IF b>=0 THEN WriteLn('+')  >>>>> bei dir steht noch ,b  mhh
> brauch ich das denn hier ???

Nein, diese Variante ist auch okay! Dann muss die ausgabe für die Variable $b_$ halt separat erfolgen.


> Ich dachte das alleine reicht, wenn man das so sagen würde:
> wenn b größer oder gleich 0 ist, dann schreibe +  
> wenn es ja nicht so ist, schreibt der pc doch eh z.b. -2....
> als ich das aber eben durch das programm laufen lassen
> hab, hat er das + nicht geschrieben, warum ???

Dazu müsstest Du doch den gesamten Quellcode (zumindest aber den entsprechenden Block) hier mal posten. Vielleicht "hängst" Du noch in einer falschen Abfrage oder ähnliches (z.B. fehlendes "BEGIN" oder "END") ...


Gruß
Loddar


Bezug
                                                                
Bezug
Programm Geradengleichung: Problem gelöst :O)
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 18:43 Do 23.03.2006
Autor: MarquiseDeSade

Hallo Loddar :O)

Ich bin ja beinahe verzweifelt, denn irgendwie konnte ich die Idee nicht in die Tat umsetzen. Aber nach genauem Hinsehen, habe ich gemerkt, dass ich meine IF-Anweisung vor der eigentlichen Rechnung stehen hatte *oh jeh* und somit konnte diese auch nicht greifen *grins*.

Aber dank deiner Anregegung bezüglich der Berechnung der Variablen, läuft mein Program nun endlich so wie ich es will.

Bin richtig stolz *hi hi*

Also, nochmal vielen Dank euch zwei und bis zum nächsten mal.... tschüssi

tobias

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Pascal"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
ev.vorhilfe.de
[ Startseite | Mitglieder | Impressum ]