[JAVA] Polynom berechnen, Aufgabe

E

Eagle_B5

Gast
Hallo Zusammen

Hab in meinem Studium das Fach Java :( leider fällt es mir ziemlich schwer, die Überlegungen nachzuvollziehen und auf das richtige Resultat resp. den richtigen Lösungsweg zu kommen.
Ich glaube, mir liegt programmieren nicht so wie anderen.

Mein Problem:
Ich muss ein kleines Java Programm schreiben, dass mir den Wert eines Polynoms berechnet. Dazu muss ich zuerst das Polynom in folgender Form eingeben:

ax^n + bx^(n-1) + cx^(n-2) + ...

Bsp: 10.0 + 2.0x - 3.0x^2

Als nächstes verlangt das Programm die Eingabe des Wertes von x, zB 1.

Dann gibt mir das Programm das Resultat für das Polynom mit dem x Wert, zB. 1, aus.


Ich weiss wie man im Grund ein Java Programm schreibt, aber ich hab keine Idee wie ich das mit der Eingabe eines ganzen Polynomes machen soll...

Brauche dringend Hilfe!
 
Erstell erstmal einen BufferedReader, dem du beim Konstruktor einen InputstreamReader, übergibst, der als Konstruktor-Parameter System.in bekommt:
Code:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
Damit bekommst du zum Einlesen zahlreiche Methoden dazu. Mit
Code:
in.readLine()
kannst du jetzt das Polynom als String einlesen.

Was noch fehlt, ist das Austeilen in die einzelnen Bestandteile. Guck dir hierzu mal die Methode String.split() an. Die bekommt 'ne RegEx als Parameter und gibt ein String-Array zurück.
 
Danke für deine Antwort aber ich hab nicht wirklich einen Plan von dem was du sagst. Bisher haben wir nur mit einfachen Datentypen gearbeitet, immer nur Zahlen usw...

Ich bin ein noob in Java aber diese Aufgabe find ich zu taff für uns... Kannst di mir da eventuell ein Beispiel machen und ein wenig ausführlicher erklären?
 
Du kannst das auch einfacher gestalten, du könntest etwa anfangs nach dem Grad des Polynoms fragen, und dann in einer Schleife die Koeffizienten eingeben lassen. Das Auswerten an einer Stelle ist ja trivial.
 
Hab eine mögliche Lösung :) die ist allerdings nicht perfekt aber sie funktioniert so einiger massen. :D

Code:
/* Klasse TastaturRead zum Einlesen von Daten �ber die Tastatur im Konsolen-Modus
*
* Eingelesen werden k�nnen: 
* Texte (Strings) mit                  TastaturRead.readString()
* einzelnen Zeichen mit                TastaturRead.readChar()
* ganze Zahlen des Typs long mit       TastaturRead.readLong()
* Gleitkommazahlen des Typs double mit TastaturRead.readDouble()
* 
* Dabei muss die Klasse TastaturRead (als Java-File) im selben Verzeichnis abgelegt sein
* wie die Klasse in der die Dateneingaben �ber die Tastatur ausgef�hrt werden sollen.
*
* Bei der Eingabe von Datentypen byte, short, integer und float muss der Typ
* durch den Casting-Operator explizit, im Resultat, umgewandelt werden.
*
* Ignorieren Sie die f�r Sie unverst�ndlichen Programmanweisungen. Sie werden im 
* Verlauf dieses Kurses alle Anweisungen noch kennenlernen
*
*/

package u_polynom;

import java.io.*;

public class TastaturRead
{
   // Methode zur Eingabe eines Textes (String)
   public static String readString() 
   {
       // Deklaration der Referenzvariablen din f�r die Eingabe eines Input-Streams
       BufferedReader din = new BufferedReader( new InputStreamReader( System.in ) );
       System.out.flush();  // L�schen des Stream-Buffers
       // Daten einlesen und m�gliche Fehler auffangen
       try 
       { 
           return din.readLine();  // eingegebenen Text zur�ckgeben
       }
       catch ( Exception e ) 
       { 
           System.out.println( "Fehler bei der Eingabe!" );
           System.out.println( e );  // m�glichen Fehler anzeigen
       }
       System.out.println( "\nHier ist ein undefinierbarer Fehler aufgetreten!" );
       return new String( "" );  // Leeren String zur�ckgeben bei Fehler
   }

   // Methode zur Eingabe eines Zeichens (Character)
   public static char readChar() 
   {
       // Deklaration der Referenzvariablen din f�r die Eingabe eines Input-Streams
       BufferedReader din = new BufferedReader( new InputStreamReader( System.in ) );
       String string = "";  // String string initialisieren 
       System.out.flush();  // L�schen des Stream-Buffers
       // Daten einlesen und m�gliche Fehler auffangen
       try 
       {
           string = din.readLine();  // Text einlesen
           // nur das 1. Zeichen des Strings ber�cksichtigen!
           if ( string.length() > 0 ) return string.charAt( 0 );
       }
       catch ( Exception e ) 
       { 
           System.out.println( "Fehler bei der Eingabe!" );
           System.out.println(e);  // m�glichen Fehler anzeigen
       }
       return ' ';  // Leerschlag zur�ckgeben bei Fehler
   }
        
   // Methode zur Eingabe einer Ganzzahl vom Typ long
   public static long readLong() 
   {
       // Deklaration der Referenzvariablen din f�r die Eingabe eines Input-Streams
       BufferedReader din = new BufferedReader( new InputStreamReader( System.in ) );
       String string = "";  // String string initialisieren 
       System.out.flush();  // L�schen des Stream-Buffers
       try 
       { 
           string = din.readLine();  // Text einlesen
       }
       catch ( Exception e ) 
       { 
           System.out.println( "Fehler bei der Eingabe!" );
           System.out.println( e );  // m�glichen Fehler anzeigen
       }
       try  
       {
           // Umwandlung des Strings in  einen Long-Wert
           return ( new Long( string ) ).longValue();
       }
       catch ( Exception e ) 
       { 
           System.out.println( "Fehler bei der Umwandlung!" );
           System.out.println( e );  // m�glichen Fehler anzeigen
           return 0;  // 0 zur�ckgeben bei Fehler
       }
   }

   // Methode zur Eingabe einer Gleitkommazahl vom Typ double
   public static double readDouble() 
   {
       // Deklaration der Referenzvariablen din f�r die Eingabe eines Input-Streams
       BufferedReader din = new BufferedReader( new InputStreamReader( System.in ) );
       String string = "";  // String string initialisieren
       System.out.flush();  // L�schen des Stream-Buffers
       try 
       { 
           string = din.readLine();  // Text einlesen 
       }
       catch ( Exception e ) 
       { 
           System.out.println( "Fehler bei der Eingabe!" );
           System.out.println( e );  // m�glichen Fehler anzeigen 
       }
       try 
       { 
           // Umwandlung des Strings in  einen Double-Wert
           return ( new Double( string ) ).doubleValue(); 
       }
       catch ( Exception e ) 
       { 
           System.out.println( "Fehler bei der Umwandlung!" );
           System.out.println( e );  // m�glichen Fehler anzeigen
           return 0;  // 0.0 zur�ckgeben bei Fehler 
       }
   }
}

Code:
/**
 * Klasse PolynomRechner
 * 
 * Version 1.0
 * 
 * 8.1.2007
 * 
 * Kai Schwender
 * 
 * Klasse für die Berechnung von Polynomen.
 * Ruft die Klasse Polynom zur Eingabe und Berechnung auf.
 */

package u_polynom;

public class PolynomRechner {
	
	
	/* Methode ruft alle weiteren Schritte zur Eingabe und Berechnung der Polynome auf */
	
	public static void main(String[] args) {
		
		Polynom polynom = new Polynom();
		polynom.polynomTest();
		
		polynom.polynomEingabe();
		
	}
	
}

Code:
/**
 * Klasse Polynom
 * 
 * Version 1.0
 * 
 * 8.1.2007
 * 
 * Kai Schwender
 * 
 * Analysiert, rechnet und gibt das Resultat eines eingebenen Polynoms aus.
 * Wird duch die Klasse PolynomRechner aufgerufen.
 */

package u_polynom;

public class Polynom {
	
	
	/* Initialisiert drei für den Code wichtige Variablen */
	
	String eingabe;
	double xWert;
	double loesung;
	
	
	/* Methode enthält die fünf Testpolynome und ruft die weiteren Schritte auf */
	
	public void polynomTest () {
		
		eingabe = "7.4 + 2.1x - 3.4x^2";
		xWert = 2.1;
		
		polynomRechnen(eingabe, xWert);
		polynomAusgabe();
		
		eingabe = "0.3x^5 + 0.4x^2";
		xWert = 22.8;
		
		polynomRechnen(eingabe, xWert);
		polynomAusgabe();
		
		eingabe = "1234";
		xWert = 33;
		
		polynomRechnen(eingabe, xWert);
		polynomAusgabe();
		
		eingabe = "-22 - 3x + 4.1x^4 - 5x^8";
		xWert = -2;
		
		polynomRechnen(eingabe, xWert);
		polynomAusgabe();
		
		eingabe = "22x^4 + x^2 + x - 1";
		xWert = -4;
		
		polynomRechnen(eingabe, xWert);
		polynomAusgabe();
		
	}
	
	
	/* Methode für die Eingabe der Polynome, ruft alle weiteren Schritte auf */
	
	public void polynomEingabe () {
		
		eingabe = "";
		xWert = 0;
		
		System.out.println("\nGeben Sie ein Polynom ein (Bsp: 10.0 + 2.0x - 3.0x^2)");
		eingabe = TastaturRead.readString().replaceAll(" ", "")
			 							   .replaceAll("\\+-", "-")
			 							   .replaceAll("-\\+", "-");
		
		polynomPruefung(eingabe);
		xWertEingabe();
		polynomRechnen(eingabe, xWert);
		polynomAusgabe();
		
	}
	
	
	/* Methode um den x-Wert einzugeben */
	
	public void xWertEingabe () {
		
		System.out.println("Geben Sie ein x-Wert ein (Bsp: 2)");
		xWert = TastaturRead.readDouble();
		
	}
	
	
	/* Methode zur Überprüfung des eingegeben Polynoms auf nicht erlaubte Zeichen */
	
	private void polynomPruefung (String eingabe) {
		
		if(!eingabe.matches("[0-9\\+-^.x]*")) {
			
			System.out.println("Ihre Eingabe enthält nicht erlaubte Zeichen.");
			polynomEingabe();
			
		}		
		
	}
	
	
	/* Methode um das Polynom zu berechnen */
	
	private void polynomRechnen (String eingabe, double xWert) {
		
		String[] elemente;
		double summand, exponent;
		loesung = 0;
		
		eingabe = eingabe.replace(" ", "")
						 .replace("+", " +")
						 .replace("-", " -")
						 .replace("-x", "-1x")
						 .replace("+x", "+1x");
		
		elemente = eingabe.split(" ");
		
		for (int i = 0; i < elemente.length; i++) {
			
			if (elemente[i].equals("")) {
				
				continue;
				
			}
			
			if (elemente[i].charAt(0) == 'x') {
				
				elemente[i] = "1" + elemente[i];
				
			}
			
			if (elemente[i].contains("x")) {
				
				if (elemente[i].contains("^")) {
					
					summand = Double.parseDouble(elemente[i].substring(0, (elemente[i].indexOf("x"))));
					exponent = Double.parseDouble(elemente[i].substring((elemente[i].indexOf("^") + 1)));
					summand = summand * Math.pow(xWert, exponent);
					
				} else {
					
					summand = Double.parseDouble(elemente[i].substring(0, (elemente[i].indexOf("x"))));
					summand = summand * xWert;
					
				}
				
			} else {
				
				summand = Double.parseDouble(elemente[i]);
				
			}
			
			loesung = loesung + summand;
			
		}
		
	}
	
	
	/* Methode um das Polynom auszugeben */
	
	public void polynomAusgabe () {
		
		System.out.println("Die Lösung für "+eingabe+" mit dem x-Wert "+xWert+" ist: "+loesung);
		
	}
	
}

Vielleich hat der eine oder andere mal lust sich das anzusehen :)
Die Klasse TastaturRead war vorgegeben.
 

Ähnliche Themen

Zurück
Oben