mordhorst Geschrieben 30. März 2005 Geschrieben 30. März 2005 Hi zusammen... ...ich soll laut Aufgabenstellung die Funktion sin(x) über dem Inertvall [0.0,2*PI] in der Konsole ausgeben. Das Problem ist - es soll nicht objektorientiert werden! Sondern nur die main-Methode beinhalten. Wäre toll, wenn da jemande eine Idee oder einen Ansatz hätte. Vielen Dank schonmal... Grüße, mordhorst Zitieren
geloescht_Newlukai Geschrieben 30. März 2005 Geschrieben 30. März 2005 Selbst ein Programm nur mit main ist ganz genau genommen objektorientiert. Aber das nur nebenbei. Hast Du denn schon ein Struktogramm oder so? Wo hakt's denn? An sich mußt Du nur eine Schleife über das Intervall laufen lassen und in entsprechenden Abständen die Funktion sin() der Klasse Math aufrufen. Ob man das jetzt auch als objektorientiert sieht, ist Geschmackssache. Aber mehr braucht's eigentlich nicht. Zitieren
mordhorst Geschrieben 30. März 2005 Autor Geschrieben 30. März 2005 Hey... ...erstmal vielen Dank für die Hilfe. Also im Prinzip ist es schon fertig...aber nicht nur mit einer Methode: import java.awt.*; import javax.swing.*; public class Sinus extends JPanel { double sinKurve; int y = 200, x = 300; int abbildungX, abbildungY, yMitte = 100; public static void main(String args[]) { JFrame frame = new JFrame("Sinuskurve"); frame.getContentPane().add(new Sinus()); frame.pack(); frame.setVisible(true); } public void paintComponent(Graphics g) { super.paintComponent(g); for (int i = 0; i < 360; i++) { sinKurve = java.lang.Math.sin(i / 180.0 * java.lang.Math.PI); abbildungX = new Double(x / 360.0 * i).intValue(); abbildungY = new Double(sinKurve * y / 2).intValue() + yMitte; g.drawLine(abbildungX, abbildungY, abbildungX, abbildungY); } } public Sinus() { setBackground(Color.white); setForeground(Color.red); setPreferredSize(new Dimension(300, 200)); } } Problem: Ausgabe in der Konsole. Wird das dann mit System.out.println ausgegeben ? Viele Grüße, mordhorst Zitieren
geloescht_Newlukai Geschrieben 30. März 2005 Geschrieben 30. März 2005 Richtig. Allerdings kannst Du keine Pixel ansteuern. Probiers doch erst mal mit Textausgabe (System.out.println()) Zitieren
perdian Geschrieben 30. März 2005 Geschrieben 30. März 2005 Problem: Ausgabe in der Konsole. Wird das dann mit System.out.println ausgegeben ?Überhaupt nicht. Die Konsole ist textbasiert, da kannst du mit keiner Programmiersprache direkte Pixelmanipulationen durchführen. Zitieren
Bubble Geschrieben 30. März 2005 Geschrieben 30. März 2005 Überhaupt nicht. Die Konsole ist textbasiert, da kannst du mit keiner Programmiersprache direkte Pixelmanipulationen durchführen. Er könnte die Funktionswerte mit äquidistanter Schrittweite berechnen und ausgeben. Letzlich genau das gleiche, auch die Zahl an Pixeln ist endlich. Zitieren
Bubble Geschrieben 30. März 2005 Geschrieben 30. März 2005 for (int i = 0; i < 360; i++) { sinKurve = java.lang.Math.sin(i / 180.0 * java.lang.Math.PI); abbildungX = new Double(x / 360.0 * i).intValue(); abbildungY = new Double(sinKurve * y / 2).intValue() + yMitte; g.drawLine(abbildungX, abbildungY, abbildungX, abbildungY); } } Das könnte man noch verbessern. Es wär sinnvoller zu jeder x-Koordinate genau einen Sinus-Wert zu berechnen. Zitieren
dorti Geschrieben 31. März 2005 Geschrieben 31. März 2005 Der Lehrer meint das bestimmt so, oder? public class Test { static int max_x = 36; static int max_y = 20; static int range = max_x * 10; static int array_length = max_x + 1; static int[] werte_tab = new int[array_length]; public static void main(String[] args) { for ( int i = 0; i < array_length; i++ ){ werte_tab = (int) Math.round(Math.sin( i*10 / 180.0 * java.lang.Math.PI ) * 10); } for ( int j = -10; j <= 10; j++){ for ( int i = 0; i < array_length; i++ ){ if ( j == werte_tab ){ System.out.print("°"); } else { System.out.print(" "); } } System.out.println(); } } } Koordinatensystem ist noch nicht reingebastelt. Wegen Rundungsfehler ist das Ganze teilweise gestreckt und gestaucht. Zitieren
mordhorst Geschrieben 31. März 2005 Autor Geschrieben 31. März 2005 Hallo... ...vielen Dank für Eure Hilfe Habe das Problem in den Griff gekriegt. Danke nochmal. Grüße, mordhorst Zitieren
perdian Geschrieben 31. März 2005 Geschrieben 31. März 2005 Er könnte die Funktionswerte mit äquidistanter Schrittweite berechnen und ausgeben. Letzlich genau das gleiche, auch die Zahl an Pixeln ist endlich.Naja, das ist irgendwo Haarspalterei Für mich ist die Konsole textbasiert. Klaro, kannst du durch die auswahl bestimmter Zeichen auch wieder direkte Pixelansteuerung mehr oder weniger gut simulieren (nicht umsonst gibt's klasse ASCII-Art-Kunstwerke). Aber ob man das wirklich als zeichnen im urpsrünglichen Sinne von X,Y Koordinate ziehen und Farbwert setzen nennen kann - jeder so, wie es ihm gefällt Zitieren
Bubble Geschrieben 31. März 2005 Geschrieben 31. März 2005 @Perdi im Ausgangspost stand nichts von (x,y)-Koordinaten oder einer grafischen Ausgabe der Funktionskurve. Es war nur nach Funktionswerten in einem gegebenen Intervall gefragt. Die Aufgabe kann gemäß geposteter Aufgabenstellung als Liste mit Zahlen, die in der Konsole ausgegeben wird, vollständig umgesetzt werden. Also eine Ausgabe in der Art: sin(0) = 0 sin(0.1) = 0.099 sin(0.2) = 0.19 ... sin(PI/2) = 1 ... sin(PI) = 0 ... sin(3/2*PI) = -1 ... sin(2*PI) = 0 Zitieren
geloescht_Newlukai Geschrieben 31. März 2005 Geschrieben 31. März 2005 im Ausgangspost stand nichts von (x,y)-Koordinaten oder einer grafischen Ausgabe der Funktionskurve RIchtig. Aber das dann gepostete Zwischenergebnis war eindeutig auf grafische Ausgabe ausgelegt. Zitieren
Bubble Geschrieben 31. März 2005 Geschrieben 31. März 2005 RIchtig. Aber das dann gepostete Zwischenergebnis war eindeutig auf grafische Ausgabe ausgelegt. Wenn er die Aufgabe im 1. Post richtig wiedergegeben hat, hätte er sich die Grafik folglich spaaren können. Insbesondere, dass keine Objektorientierung verwendet werden soll sprach gegen Grafik, da für ein Fenster mindestens eine Objektinstanz gebraucht wird. Letzlich Haarspalterei und mir ist es sowieso egal. Zitieren
geloescht_Newlukai Geschrieben 31. März 2005 Geschrieben 31. März 2005 Wenn er die Aufgabe im 1. Post richtig wiedergegeben hat, hätte er sich die Grafik folglich spaaren können. Insbesondere, dass keine Objektorientierung verwendet werden soll sprach gegen Grafik, da für ein Fenster mindestens eine Objektinstanz gebraucht wird. Jopp Letzlich Haarspalterei und mir ist es sowieso egal. dito Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.