mathematische Funktion

Nirvana

Aktives Mitglied
Ich arbeite mit netbeans.
WIe kann ich es machen, dass ein Programm eine mathematische Funktion in der Konsole zeichnet?Und die Funktion selbst als Kette von zusammenhängenden *-Zeichen dargestellt werden.


Wäre froh über Hinweise, wie man sowas macht.
 
W

Wishmaster51

Gast
Was meinst du mit "in die Konsole zeichnen"? Eine Konsole ist doch textbasiert..

Und was heißt "als Kette von zusammenhängenden *-Zeichen" ?

Kannst du mal Beispiele liefern?
 

Templarthelast

Bekanntes Mitglied
Du meinst einen Graphen der Funktion zeichenen?

Das dürfte relativ aufwendig werden, aber du kannst die Konsole als "Netz" benutzen. Erst die Funktionswerde für die x-werte berechnen und danach einzeichnen.
Java:
Int funktion[4];
Int maxHeight=0;
for(int i=0; i <= 3; i++) {
funktion[i] = i*i;
if(i > maxHeight) {
maxHeight = i;
}
for(int i=maxheight; i >= 0; i--) {
for(int k = 0; k <= 3; k++) {
if(funktion[k] == i) {
System.out.print(x);
} else {
System.out.println("\t");
}
}
System.out.println("\n");
}

Ich weiß nicht ob das Program funktioniert, weil ich es aus dem Kopf geschrieben habe, aber damit kann man sich grob die Funktionswerte in einem Koordinatensystem in der Konsole anzeigen lassen.
 

Nirvana

Aktives Mitglied
ich habe eine Aufgabe bekommen:

Das folgende Programm soll eine mathematische Funktion in der Konsole zeichnen. Definiere eine statische Funktion f(x) mit der signatur static double f(double x), die z.B. return x * Math.sin(x)/2; berechnet. Weiters gibt es Variablen a und b für die linke und rechte Grenze der Darstellung. Skaliere die Differenz von b-a auf eine sinnvolle Breite von 80-100 Zeichen und ebenso in die vertikale Richtung von etw 40-50 Zeichen (max(f(x)) - min(f(x)) \forall x \in [a,b]
Die Funktion selbst soll als Kette von zusammenhängenden *-Zeichen dargestellt werden.


Und jetzt wollte ich mir von euch paar Ideen einholen, wie man sowas am besten macht, da ich blutige anfängerin bin und paar idee bräuchte :)))
 
W

Wishmaster51

Gast
Wie sieht denn "das folgende Programm" aus? Habt ihr dazu Code vorgegeben?

Mir ist die Aufgabenstellung noch völlig unklar. :(
 

Templarthelast

Bekanntes Mitglied
Das setzt aber prinzipiell voraus, dass die Funktion nur ganzzahlige Werte annimmt.
Schon, aber mit ein wenig bearbeitung kann es auch auf reelle Zahlen anwenden.


Um das ganze umzusetzen, musst du die Konsole als Koordinatensystem wie auf grafischen Taschenrechnern sehen. Dabei kann ein Punkt auf dem Display zu vorhanden sein oder nicht.
Anstatt einzelne Pixel zu zeichnen, würde ich für jeden "Pixel" einfach ein x einsetzen. Damit es noch auf den Bildschirm passt würde ich höchstens Abstände von 0.2 d.h. 5 Zeilen/Spalten pro x nehmen.
 
W

Wishmaster51

Gast
Schon, aber mit ein wenig bearbeitung kann es auch auf reelle Zahlen anwenden.
Nein, nicht wirklich, zumindest nicht in der Form. Das setzt ja voraus, dass du jeden Funktionswert auch abtastest, du kannst aber nicht unendlich genau abtasten.

Du könntest natürlich auf den nächstgelegenen Wert auf- bzw. abrunden, aber ein halbwegs ansehnliches Ergebnis kann man bei einer Textausgabe nicht erwarten.

Ich vermute mal, hier ist eher die Ausgabe auf einem [JAPI]Graphics[/JAPI] Objekt gemeint
 
Zuletzt bearbeitet von einem Moderator:

Templarthelast

Bekanntes Mitglied
Wenn ich doch einen bestimmten Bereich habe wie x=-10 bis x=10 kann ich doch für die meisten Funktionen relativ genaue Werte ausrechnen. Je nach Sichtbarkeit kann ich ja auch mit der Genauigkeit hochgehen. Ich würde das halt ähnlich wie bei meinem Taschenrechner machen.
 
V

vanny

Gast
Code:
      **            **
    *    *        *    * 
  *        *    *        *
*            **            *

Reden wir hier über sowas?
Das wird schwierig werden, ein vernünftiges Ergebnis zu berechnen.
Nicht wegen der Logik, sondern eher wegen der Schrifteinstellung, Zeilenabstand etc.

und mit double Werten kann das auch so aussehen:

Code:
      **            **
     *    *      *      * 
 *        *    *       *
*           * *           *
 
W

Wishmaster51

Gast
Wenn ich doch einen bestimmten Bereich habe wie x=-10 bis x=10 kann ich doch für die meisten Funktionen relativ genaue Werte ausrechnen. Je nach Sichtbarkeit kann ich ja auch mit der Genauigkeit hochgehen. Ich würde das halt ähnlich wie bei meinem Taschenrechner machen.
Mir geht es eigendlich nur darum, dass du in deinem Code eine Abgrage auf "==" machst, hingegen wäre eine Rundung auf den nächstgelegenen y-Wert angesagt.
 
W

Wishmaster51

Gast
Hallo, also ein bild ist schon dabei

Siehe:
https://docs.google.com/viewer?url=...-12/PPss12.pdf?attredirects=0&d=1&chrome=true


Seite 4 Bsp 11

Liebe grüße
From Prinzip her ähnlich wie der Code von Templarthelast: Das Grundprinzip ist eben, dass du diskrete Abtastungspunkte hast, und diese Werte dann eben auf den nächstgelegenen y-Wert rundest.

Du kannst dir das wie ein Gitter vorstellen, bei dem die Zeilen die horizontalen und die "Spalten" die vertikalen Gitterlinien sind.

Du musst also
-erstmal deine Abtastpunkte aus dem Intervall [a,b] wählen (mit einer hinreichend kleinen Schrittweite)
-dann eben das Maxima und das Minima der Funktion in dem Bereich bestimmen
-dann eben die Funktion an den Abtastpunkten auswerten
-die Funktion auf den nächstgelegenen y-Wert bringen
-dann erst kannst du das auf der Konsole zeichnen

Das ist so das Grundprinzip. Klar soweit?
 

Nirvana

Aktives Mitglied
hei, danke schonmal für die ganzen kommentare.
Mir fällt es schwer einen Beginn zu finden.:oops:

> Du musst also
> -erstmal deine Abtastpunkte aus dem Intervall [a,b] wählen (mit einer hinreichend kleinen Schrittweite)

Zuerstmal muss ich eine Funktion machen mit static double f (double x)
Wie wertet das programm dann die einzelnen y-werte aus?
 
W

Wishmaster51

Gast
hei, danke schonmal für die ganzen kommentare.
Mir fällt es schwer einen Beginn zu finden.:oops:

> Du musst also
> -erstmal deine Abtastpunkte aus dem Intervall [a,b] wählen (mit einer hinreichend kleinen Schrittweite)

Zuerstmal muss ich eine Funktion machen mit static double f (double x)
Wie wertet das programm dann die einzelnen y-werte aus?
Du wertest die Funktion aus, indem du einsetzt., also
Code:
double y = f(x);
wenn x aus [a,b] dein Abtastpunkt ist.
 

Templarthelast

Bekanntes Mitglied
Ich denke wenn du eine Funktion wie ax³+bx²+cx+d hast, musst du diese als String einlesen und dann an die Stelle des x die konkrete Stelle einsetzen und dann zum Integer parsen, um den Wert daraus zu errechnen. Das Program setzt für jeden x Wert eine konkrete Zahl ein, um daraus y zu errechnen.
Das geht dann so ungefähr:
Java:
public List<int> function(String function, xMin, xMax) {

List<int> list;
for(i = xMin; i <= xMax; i++) {
 for(i = 0; i < function.length; i++) {
if(function.char(k).equals("x") {
function.char(k) = i;
}
}
int returnValue = Integer.parse(function);
list.add(returnValue);
}


Aber zurück zu deinem "static double f(double x)":
Java:
static double f(double x) {
return x*Math.sin(x)/2;
}
Mehr ist nicht dabei und dann gibt die Funktion für alle x eine bis auf 19 Kommastellen genaue Zahl für y aus.
 
Zuletzt bearbeitet:

Nirvana

Aktives Mitglied
Ich habe Probleme bei Min und Maxuma.
Welchen Wert soll ich der SChrittweite geben?

Java:
public static void main(String[] args) {
int breite = 100;
int hoehe = 40;
int a = -20;
int b = 20;
double min = 0;
double max = 0;

for(double i=a; i<=b; i+=schrittweite) {
if(f(i) < min){ min=f(i); }
if(f(i) > max){ max=f(i); }
}
 
W

Wishmaster51

Gast
versuch mal 0.1. Sonst halt ausprobieren.


PS: Es wäre sinnvoll, die Werte in einem Array zu speichern, die brauchst du noch
 

Nirvana

Aktives Mitglied
ok, also mit
Java:
public static void main(String[] args) {
int breite = 100;
int hoehe = 40;
char graph[][] = new char[breite][hoehe];
int a = -20;
int b = 20;
double min = 0;
double max = 0;
double schrittweite= 0.1;

for(double i=a; i<b; i+=schrittweite) {
if(f(i) < min){ min=f(i); }
if(f(i) > max){ max=f(i); }
}

das mimimum und maximum kann ich anfangs mit 0 wählen?, das ist egal oder?
Wie mache ich nun weiter?
 
W

Wishmaster51

Gast

Templarthelast

Bekanntes Mitglied
Damit sollte man jede Funktion mit ein paar zusätzlichen Abfragen zeichnen können.

Java:
public void draw(String function, xMin, xMax, yMin, yMax){
List<int> list;
for(i = xMin; i <= xMax; i++) {
 for(i = 0; i < function.length; i++) {
if(function.char(k).equals("x") {
function.char(k) = i;
}
}
try {
int returnValue = Integer.parseInt(function);
list.add(returnValue);
}catch(NumberFormatException e) {
System.out.println("Die Funktion hat kein korrektes Format");
break;
}
}


for(int i=yMax; i >= yMin;i--) {
for(int k=xMin; k <=xMax;k++) {
if(list.get(k) == i) {
System.out.print(*);
} else {
System.out.println("  ");
}
}
System.out.println("\n");
}
 
W

Wishmaster51

Gast
Damit sollte man jede Funktion mit ein paar zusätzlichen Abfragen zeichnen können.
Na dann plotte mal die konstante Funktion 0.5 und zeig mal was dabei rauskommt :oops:
Dabei sollte eigendlich eine Gerade der Form
Code:
**********************
herauskommen.

Du darfst in der Zeile
Code:
if(list.get(k) == i)
nicht auf Gleichheit überprüfen, du musst da eher eine Abfrage der Form
Code:
if (list.get(k) <= i && i <= list.get(k+1))
einbauen.

PS: Mal abgesehen davon, dass
Code:
List<int>
nicht funktioniert sondern allenfalls
Code:
List<Integer>
, ein Array wäre hier doch um einiges performanter.
 

Nirvana

Aktives Mitglied
Ok, das mit dem errechnen des Minimums und Maximums hab ich nun verstanden.

Aber ich verstehe nicht, wie ich solch ein Gitter konstruieren kann ...

Java:
for(int y=0; y < hoehe; y++){
for(int x=0; x<breite;x++){
graph[x][y]=' ';
}
}
so hätte ich nur die Punkte [0][0],[1][1]..

Also bei dem Gitter bräuchte ich nochmals eure hilfe!

Danke
 
W

Wishmaster51

Gast
so hätte ich nur die Punkte [0][0],[1][1]..

Also bei dem Gitter bräuchte ich nochmals eure hilfe!

Danke
Das ist doch im Prinzip ein Gitter, du musst die Zeichen nur direkt auf der Konsole ausgeben.
Die Zeilen sind die horizontalen Gitterlinien und die Spalten die vertikalen.
Das kannst du, wenn du das direkt in der Konsole zeichnest, als ein Gitter interpretieren.
 

AquaBall

Top Contributor
wie ich solch ein Gitter konstruieren kann ...
Java:
for(int y=0; y < hoehe; y++){
for(int x=0; x<breite;x++){
graph[x][y]=' ';
}
}
so hätte ich nur die Punkte [0][0],[1][1]..
Falsch!
Mit dieser Doppelten Schleife hast du [0][0];[0][1];[0][2]...[0][höhe-1];[1][0];[1][1];...[breite-1][höhe-1]
Also das GESAMTE Gitter.
 

Nirvana

Aktives Mitglied
AquaBall, ah okay, war mir da nämlich nicht sicher, ob es das mit der doppelten schleife dann auch so ausführt, wie ich es wollte !

> Anschließend legst du alle Punkte auf den nächstgelegenen Gitterwert
Dazu hab ich noch gar keinen Plan ;(
Ich hab gedacht, eine boolean Variable zu definieren, wenn die true ist dann soll er ein * ausgeben und wenn die false ist, ein leerstelle ausgeben.
Aber wie ich das genau mache? Hat da noch wer einen TipP ;)?
 

AquaBall

Top Contributor
Im Prinzip hast du die Lösung schon:

Java:
alleGraph=false;
while (weiterePunkte) {
   x=berechneWertX();
   y=berechneWertY();  // oder wie du das auch immer machst, incl Proleme des Skalierung und Rundung ...
   graph[x][y]=true;
}

for(int y=0; y < hoehe; y++){
   for(int x=0; x < breite;x++){
      if (graph[x][y]) print("*");
      else             print(" ");  //incl Probleme mit Zeichenbreite, ...
   }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Arrays: Mathematische Funktion Java Basics - Anfänger-Themen 19
B Anwender soll mathematische Funktion eingeben können, Einfachster Fnktionsplotter Java Basics - Anfänger-Themen 4
M Bisektionsverfahren (Mathematische Funktion) Java Basics - Anfänger-Themen 6
M Mathematische Funktion: Ableiten Java Basics - Anfänger-Themen 2
Kingdako Wie löse ich eine Mathematische Formel mit Arrays und Schleifen? Java Basics - Anfänger-Themen 32
L mit Fakultät mathematische Formel berechnen Java Basics - Anfänger-Themen 5
E Mathematische Aufgabe: Antwort entspricht nicht der Lösung Java Basics - Anfänger-Themen 5
C mathematische Symbole im Kommentar Java Basics - Anfänger-Themen 1
J kleiner Fehler im FAQ Parser für mathematische Formeln Java Basics - Anfänger-Themen 5
L Mathematische zeichen Java Basics - Anfänger-Themen 10
D Methoden Mathematische Strukturen in Java umwandeln Java Basics - Anfänger-Themen 10
D Mathematische Rechnung als String Java Basics - Anfänger-Themen 4
T Ausdrucksparser für Mathematische Ausdrücke Java Basics - Anfänger-Themen 15
data89 Frage zum FAQ-'Parser für mathematische Formeln' Java Basics - Anfänger-Themen 4
D Mathematische Funktionen Zeichnen Java Basics - Anfänger-Themen 2
B Mathematische Funktionen Java Basics - Anfänger-Themen 3
Q mathematische Operationen als Methode und nicht Infix-Operator Java Basics - Anfänger-Themen 14
Spin Kompexe Mathematische Formeln Java Basics - Anfänger-Themen 10
G Mathematische Frage Java Basics - Anfänger-Themen 7
D Unicode für mathematische/statistische Zeichen. Java Basics - Anfänger-Themen 3
S Mathematische Zeichen (z.B. Alpha) ausgeben Java Basics - Anfänger-Themen 2
M Mathematische Funktionen zeichnen. Java Basics - Anfänger-Themen 2
A mathematische Funktionen grafisch darstellen Java Basics - Anfänger-Themen 8
E Das mathematische "!" in Java Java Basics - Anfänger-Themen 5
O mathematische Formel in quellcode Java Basics - Anfänger-Themen 5
B Mathematische funktionen Berechnen und ausgeben lassen?WIE? Java Basics - Anfänger-Themen 2
M mathematische zeichen und schreibweise in java Java Basics - Anfänger-Themen 5
E Hilfe bei rekursiver Funktion Java Basics - Anfänger-Themen 3
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
M Eine Funktion zuweisen Java Basics - Anfänger-Themen 3
V Die Funktion des neuen Schlüsselworts in Java Java Basics - Anfänger-Themen 1
M variable in anderer funktion aufrufen Java Basics - Anfänger-Themen 10
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
W GUI - JButton ohne Funktion? Java Basics - Anfänger-Themen 24
J Rekursive Funktion und return statement Java Basics - Anfänger-Themen 3
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
R Buttons ohne Funktion Java Basics - Anfänger-Themen 2
I Generische Funktion Java Basics - Anfänger-Themen 3
E Pervasive PSQL insert funktion geht nicht Java Basics - Anfänger-Themen 9
C Java Funktion: externe Daten vom Internet einbinden Java Basics - Anfänger-Themen 2
T Log Funktion erstellen Java Basics - Anfänger-Themen 1
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
H Den Wert einer rekursiven Funktion bestimmen Java Basics - Anfänger-Themen 5
J In main() Datei geöffnet, von anderer Funktion beschreiben Java Basics - Anfänger-Themen 3
M toDouble Funktion Java Basics - Anfänger-Themen 3
Tino1993 Ellipse über draw Funktion ohne spur wandern lassen Java Basics - Anfänger-Themen 6
X Ackermannsche Funktion Java Basics - Anfänger-Themen 32
P Dezimal zu Hexadezimalzahl Funktion Java Basics - Anfänger-Themen 5
S Verwenden von throw Exception an der Funktion Java Basics - Anfänger-Themen 2
M Arrays in Funktion Kopieren und Bearbeiten Java Basics - Anfänger-Themen 4
B Funktion mit mehreren Rückgabewerten aka Prozeduren? Java Basics - Anfänger-Themen 12
J Dynamisches Array durch split()-Funktion? Java Basics - Anfänger-Themen 3
D Funktion nur 1 Rueckgabewert Java Basics - Anfänger-Themen 9
M Wie lang eine Funktion/Methode? Java Basics - Anfänger-Themen 51
N den inhalt eines array per funktion ausgeben Java Basics - Anfänger-Themen 8
R Ackermann Funktion Java Basics - Anfänger-Themen 2
B Treetable (rekursive Funktion) aufbauen von Datenbank Java Basics - Anfänger-Themen 4
D Funktion zwei Arraylisten zu verleichen ob gleich funktioniert nicht Java Basics - Anfänger-Themen 26
N Abfragen eines Textes aus einem JTextField in Java, Funktion, CardLayout, Java Basics - Anfänger-Themen 2
T Rekursion Warum bricht meine Funktion nicht ab Java Basics - Anfänger-Themen 4
N Funktion funktioniert nicht immer Java Basics - Anfänger-Themen 6
E Contain-funktion überlisten Java Basics - Anfänger-Themen 4
J Division ohne Arithmetische Funktion Java Basics - Anfänger-Themen 2
S Funktion in Klasse auslagern Java Basics - Anfänger-Themen 4
J Problem mit Boolean bei Funktion! Java Basics - Anfänger-Themen 5
S Gibt es eine Funktion, die gewissermaßen eine Reihe von instanceOf() vereinheitlicht? Java Basics - Anfänger-Themen 19
D Nullstellen einer Funktion 3. Grades mit Horner Schema Java Basics - Anfänger-Themen 6
Aprendiendo Gibt es in der JAVA-API eine Funktion, die eine Dezimalzahl in eine binäre Zahl umwandelt? Java Basics - Anfänger-Themen 8
D Funktion gibt Dimension zurück Java Basics - Anfänger-Themen 11
A Rekursion Funktion in eine Iterativ Funktion umwandeln Java Basics - Anfänger-Themen 9
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
B Zugriffe in einer Klasse / Funktion Java Basics - Anfänger-Themen 9
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
J Array innerhalb einer Funktion mehrfach iniatilisieren Java Basics - Anfänger-Themen 4
T Lambda-Funktion bei Binärbäumen Java Basics - Anfänger-Themen 13
J Wie lässt sich der Konstruktor einer Klasse einer Funktion einer Klasse nutzen. Java Basics - Anfänger-Themen 4
M Thread.sleep() Funktion Java Basics - Anfänger-Themen 1
B OOP Wie benutze ich die Main Funktion richtig? Java Basics - Anfänger-Themen 10
H Nicht Static Funktion ohne Objekt aufrufen? Java Basics - Anfänger-Themen 6
K Methoden mit den Namen accept. Welche Funktion haben diese? Java Basics - Anfänger-Themen 2
E Compare-Funktion bei eigener Klasse Java Basics - Anfänger-Themen 4
S Threads run - Funktion wird nur einmal ausgeführt. Java Basics - Anfänger-Themen 8
R If Funktion funktioniert nicht :P Java Basics - Anfänger-Themen 3
H Funktion in Hintergrund und Vordergrund ausführen Java Basics - Anfänger-Themen 11
S Funktion die mir fuer einen String eine Zahl zwischen 0.0 und 1.0 zurueckliefert..? Java Basics - Anfänger-Themen 9
S Funktion eines Stacks Java Basics - Anfänger-Themen 4
T Integer-Objekt über Hash-Funktion in Array ablegen Java Basics - Anfänger-Themen 1
S Separate Funktion für JUnit-Test Java Basics - Anfänger-Themen 3
D Keine Funktion bei "else" Java Basics - Anfänger-Themen 5
S timer funktion mit javax panel Java Basics - Anfänger-Themen 3
T Klassen Funktion in einem Funktionsaufruf definieren Java Basics - Anfänger-Themen 3
F Funktion eines JButton in einen Vektor verlagern Java Basics - Anfänger-Themen 4
X Eval-Funktion mit Variable Java Basics - Anfänger-Themen 2
T Screenreader Funktion Java Basics - Anfänger-Themen 2
S Wertetabelle einer Funktion f : R -> R Java Basics - Anfänger-Themen 1
P Methoden suche funktion die char wert ausgibt wenn man numerischen wert und radix angibt Java Basics - Anfänger-Themen 1
1 repaint() Funktion erzeugt Flackern Java Basics - Anfänger-Themen 33
J Taschenrechner Funktion Java Basics - Anfänger-Themen 18
R if funktion ohne else - Bedingung trifft nicht zu, ausgabe nicht nachvollziehbar Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben