Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Sinuskurve in Konsole

Empfohlene Antworten

Veröffentlicht

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

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.

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

Richtig. Allerdings kannst Du keine Pixel ansteuern.

Probiers doch erst mal mit Textausgabe (System.out.println())

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.
Ü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.

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.

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.

Hallo...

...vielen Dank für Eure Hilfe :)

Habe das Problem in den Griff gekriegt.

Danke nochmal.

Grüße, mordhorst

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 ;)

@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

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.

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.

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.