Testen.java0000644000076400001440000000411610145360124013646 0ustar markususers00000000000000// Eva Lahnsteiner // MatrNr: 0406150 // Aufgabe 1174, Gerpunkt // Lage eines Punktes zu einer Geraden import eprog.*; import java.lang.*; public class Testen extends EprogIO{ public static String perform () { String ret; float[] punkte = new float[6]; //Array für die eingegebenen Koordinaten, 6 Felder, 0-5 float D,D1; //Berechnungsvariablen boolean EprogFehler = false; boolean InhaltFehler = false; int max = 100; // min,max definieren den Wertebereich der Punkte int min = -100; int v1=0; //v1,v2,v3 zum paarweisen Vergleich nötig int v2=0; int v3=0; try{ // Einlesen der Koordinaten und sofortige Prüfung auf richtigen Wertebereich for (int i=0; i<=5; i++) { punkte[i]=readFloat(); //Einlesen eines Punktes if ((punkte[i]max)) //Auf Wertebereich prüfen InhaltFehler = true; } // Paarweiser Vergleich for (int j=2; j<=3; j++) { if (punkte[j-2]==punkte[j]) v1++; if (punkte[j-2]==punkte[j+2]) v2++; if (punkte[j]==punkte[j+2]) v3++; } if ((v1==2)||(v2==2)||(v3==2)) InhaltFehler=true; } catch (EprogException e) { EprogFehler = true; } //Sind Fehler aufgetreten? if (InhaltFehler) {ret="FALSCHE EINGABE";} else { if (EprogFehler) ret="?"; else //kein Fehler --> Eingabewerte in Ordnung { //FORMELN: //D = x1*y2 - x2*y1 //D1 = x3*(y2-y1) + y3*(x1-x2) //Berechnung nach den obigen Formeln (x1=punkte[0], y1=punkte[1],...) D=punkte[0]*punkte[3]-punkte[2]*punkte[1]; D1=punkte[4]*(punkte[3]-punkte[1])+ punkte[5]*(punkte[0]-punkte[2]); //Lage des Punktes herausfinden durch Vergleich von D1 und D2, Ausgabe der Lage if (D1 "?" mit Zeilenvorschub ausgeben - Eingabedatensatz ungültiger Wertebereich (z.B. < 100) --> "FALSCHE EINGABE" mit Zeilenvorschub ausgeben - Eingabedatensatz paarweise gleich mit anderem --> "FALSCHE EINGABE" mit Zeilenvorschub ausgeben --> keine weiteren Berechnungen! Programm endet! 5) Realisierung --------------- Variablendefinition ------------------- - Array "punkte" vom Typ "float" mit 6 Feldern steht für dir einzulesenden Koordinaten zur Verfügung - D1 und D2 sind Variablen in denen die Ergebnisse der Berechnung der Lage des Punktes gespeichert werden - EprogFehler wird auf "true" gesetzt falls ein Datentypsfehler auftritt - InhaltFehler wird auf "true" gesetzt falls z.B. ein Wert < 100 eingegeben wird - min = -100, max = 100 ... Koordinaten müssen in diesem Wertebereich liegen (>=-100, <=100) - v1, v2, v3 dienen als Zählvariablen und werden beim paarweisen Vergleich der Punkte gebraucht Einlesen der Koordinaten ------------------------ Zum Einlesen der Koordinaten wird eine for-Schleife verwendet. Sie läuft 6 mal durch und liest jede x- und y-Koordinate jedes Punktes ein. Jede dieser Koordinaten wird sofort auf den Wertebereich geprüft. Falls Wertebereich nicht übereinstimmt: InhaltFehler=true; Nach der Eingabe ist das Array folgendermaßen gefüllt: punkte [0] [1] [2] [3] [4] [5] ------------------------------- | x1 | y1 | x2 | y2 | x3 | y3 | ------------------------------- Paarweiser Vergleich -------------------- Die Prüfung erfolgt wiederum durch eine For-Schleife. Diese läuft 2 mal durch (1. Durchlauf j=2, 2.Durchlauf j=3) Beim 1. Durchlauf werden alle x-Koordinaten miteinander verglichen! Sie stehen wie die Darstellung oben zeig an den Positionen 0,2,4. //*********************************************** for (int j=2; j<=3; j++) { if (punkte[j-2]==punkte[j]) v1++; if (punkte[j-2]==punkte[j+2]) v2++; if (punkte[j]==punkte[j+2]) v3++; } if ((v1==2)||(v2==2)||(v3==2)) InputFehler=true; //*********************************************** 1. Durchlauf (Werte eingesetzt) j=2: if (punkte[0]==punkte[2]) v1++; <-- if (x1==x2) v1++; if (punkte[0]==punkte[4]) v2++; <-- if (x1==x3) v2++; if (punkte[2]==punkte[4]) v3++; <-- if (x2==x3) v3++; Somit sind alle x-Kombinationen abgehandelt. Bei einer Übereinstimmung 2er x-Koordinaten merkt man sich diesen Zustand in den Variablen v1,v2 oder v3, denn erst wenn die jeweiligen y-Koordinaten der Punkte auch übereinstimmen sind die beiden Punkte gleich! 2. Durchlauf (Werte eingesetzt) j=3: if (punkte[1]==punkte[3]) v1++; <-- if (y1==y2) v1++; if (punkte[1]==punkte[5]) v2++; <-- if (y1==y3) v2++; if (punkte[3]==punkte[5]) v3++; <-- if (y2==y3) v3++; Nach den 2 Schleifendurchläufen wird überprüft ob eine der Variablen v1,v2 oder v3 == 2 ist und falls dies der Fall ist, wird InhaltFehler auf true gesetzt, da es nicht erlaubt ist 2 identische Punkte einzugeben. Dh. wäre z.B. v1=2 wären die Punkte x1/y1 und x2/y2 identisch! InhaltFehler=true; Berechnung der Lage des Punktes ------------------------------- Wenn die Daten richtig eingegeben wurden erfolgt die Berechnung nach den Formeln: D = x1*y2 - x2*y1 D1 = x3*(y2-y1) + y3*(x1-x2) Für die jeweiligen Koordinaten (x1,y2 ...) steht im Code das Array mit der jeweiligen Postion der Koordinate. Wenn D1 "LINKS" ausgeben D1=D liegt der Punkt auf der Geraden --> "DARAUF" ausgeben D1>D liegt der Punkt rechts der Geraden --> "RECHTS" ausgeben
Fr Jul 30 13:54:24 CEST 2021
patent_button.gif valid-html401.png elektra.jpg fsfe-logo.png valid-css.png vim.gif anybrowser.gif