Veröffentlicht 30. März 200520 j 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
30. März 200520 j 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.
30. März 200520 j 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
30. März 200520 j Richtig. Allerdings kannst Du keine Pixel ansteuern. Probiers doch erst mal mit Textausgabe (System.out.println())
30. März 200520 j 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.
30. März 200520 j Ü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.
30. März 200520 j 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.
31. März 200520 j 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.
31. März 200520 j Hallo... ...vielen Dank für Eure Hilfe Habe das Problem in den Griff gekriegt. Danke nochmal. Grüße, mordhorst
31. März 200520 j 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
31. März 200520 j @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
31. März 200520 j 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.
31. März 200520 j 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.
31. März 200520 j 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
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.