Polynomdivision

Neue Frage »

fALK dELUXE Auf diesen Beitrag antworten »
Polynomdivision
In meinem ersten Informatik-Jahr hab ich ein Pascal-Prog geschrieben, mit dem man Polynomdivision an ganzrationalen Funktionen bis zum 10. Grade durchführen kann. Das klappt aber leider nur mit Linearfaktoren des Polynoms, d. h. für gebrochen-rationale Funktionen ist das Programm nicht zu gebrauchen.

Falls jmd. Interesse daran hat, so kann er es runterladen bzw. mir mitteilen, was besser gemacht werden könnte und wo vllt noch Fehler sind.
Thomas Auf diesen Beitrag antworten »

Hi,

hab zwar lange nichts mehr mit Pascal gemacht, aber das interessiert mich jetzt schon. Werds mir mal runterladen und ansehen, sobald ich wieder etwas mehr Zeit habe, die Woche ist schon stressig, aber dann hab ich wieder mehr Zeit smile

Gruß,
Thomas
jama Auf diesen Beitrag antworten »

da kommt freude auf Tanzen
schönes programm. muss ich mal intensiver nutzen, um konstruktive kritig abliefern zu können. auf dem ersten blick fällt mir nichts besonderes ein. nur die schreibweise hätte man vielleicht besser erklären können. "an", "an-1" ... "a0" sind recht verwirrend. wieso nicht einfach "a", "b", ... "c" Augenzwinkern sind doch einfach nur koeffizienten.

ansonsten: :]
wenn man das noch in php haben könnte, wohooo Buschmann

gruß,

jama
fALK dELUXE Auf diesen Beitrag antworten »

ja, der brocken des progs ist eigentlich die String-Verarbeitung, sprich die Umwandlung dessen was du eingibst und nicht die Polynomdivision.

Ein Polynom ist nach meiner Darstellung folgendes: . Ich wollte eben nur die Zugehörigkeit des Koeffizienten(an) zum Exponenten n verdeutlichen.

Über eine Umsetzung in PHP können wir gerne reden(Quelltext ist ja angefügt), jedoch kann ich kein PHP, werde mich aber bemühen, es den entsprechenden Leuten darzustellen.
fehler123 Auf diesen Beitrag antworten »

Ich bin vorhin auf diesen Thread gestossen und habe mich angeregt gefühlt, auch mal ein Programm zur Polynomdivision zu schreiben. Leider habe ich bis jetzt relativ wenig programmiert, so dass es durchaus sein kann, dass es Fehler enthält oder in einem schlechten Stil programmiert ist (so gut wie keine Kommentare, liegt an der Urzeit). Ich habe es in Java programmiert, sodass ich hier einfach mal den Quellcode posten würde. Daraus könnte man (so man denn kann) auch ein Applet für Nutzung mit Browser machen. Dieses Programm hat folgende Vorteile gegenüber dem Pascal-Programm (ich arbeite unter Linux, so hab ich dieses nicht ausprobiert): es kann mit Polynomen beliebig hohen Grades umgehen und es gibt bei Polynomdivisionen, die nicht aufgehen, den Rest an, so dass man auch mit gebrochenrationalen Funktionen umgehen kann. Ich würde mich freuen, wenn es jemand von euch ausprobiert und mir Fehler bringt, oder noch besser bestätigt, dass es keine Fehler liefert. Einfach mal unter Polydiv.java abspeichern und ... have a lot of fun
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
import java.io.*;

public class Polydiv {

	public static void main(String[] args)
	throws IOException {
		BufferedReader br = new BufferedReader( new InputStreamReader( System.in) );
		int n,m,o,r=0;
		boolean rest=false;
		System.out.println("Polynomdivision\n");
		System.out.println("         n           n-1         n-2");
		System.out.println("     p  x   +  p    x    + p    x    + ... + p  x + p");
		System.out.println("      n         n-1         n-2               1      0");
		System.out.println("L = ----------------------------------------------------");
		System.out.println("         m           m-1         m-2");
		System.out.println("     q  x   +  q    x    + q    x    + ... + q  x + q");
		System.out.println("      m         m-1         m-2               1      0\n");
		
		System.out.print("Geben Sie den Grad n des Zählerpolynoms an: ");
		n = Integer.parseInt(br.readLine());
		double[] p = new double[n+1];
		System.out.println("Geben Sie die Koeffiezienten des Zählerpolynoms ein:");
		for(int i=n; i>=0; i--) {
			System.out.print("   p_"+i+"=");
			p[i] = Double.parseDouble(br.readLine());
		}
		System.out.print("\nGeben Sie den Grad m des Nennerpolynoms an: ");
		m = Integer.parseInt(br.readLine());
		double[] q = new double[m+1];
		System.out.println("Geben Sie die Koeffiezienten des Nennerpolynoms ein:");
		for(int i=m; i>=0; i--) {
			System.out.print("   q_"+i+"=");
			q[i] = Double.parseDouble(br.readLine());
		}
		
		o = n-m;
		double[] v = new double[o+1];
		
		// Polynomdivision durchführen
		int k=o;
		for(int i=n; i>=0; i--) {
			if(k>=0) {
				v[k] = p[i]/q[m];
				for(int j=0; j<=m; j++) {
					p[i-j] = p[i-j] - v[k]*q[m-j];
				}
				k--;
			}
			else if(i>0) {
				if( p[i-1] != 0 ) { r = i-1; rest = true; break; }
			}
		}
		
		System.out.print("\nErgebnis");
		if(rest) System.out.println(" (Polynomdivision mit Rest):"); else System.out.println(":");
		System.out.print("    ");
		for(int i=o; i>=0; i--) {
			String lengthnumber = new String();
			lengthnumber = String.valueOf(Math.abs(v[i]));
			if( i > 1) {
				for(int j=0; j<lengthnumber.length()+2; j++) {System.out.print(" ");}
				System.out.print(i+"   ");
			}
			else;
		}
		System.out.print("\nL = ");
		for(int i=o; i>=0; i--) {
			System.out.print(Math.abs(v[i]));
			if(i>0) System.out.print(" x");
			if( i != 0 && v[i-1] > 0 )
				System.out.print("  + ");
			else if( i != 0)
				System.out.print("  - ");
			else;
		}
		
		if(rest) {
			System.out.println(" + R/q\n\nRest:");
			System.out.print("    ");
			for(int i=r+1; i>=0; i--) {
				String lengthnumber = new String();
				lengthnumber = String.valueOf(Math.abs(p[i]));
				if( i > 1) {
					for(int j=0; j<lengthnumber.length()+2; j++) {System.out.print(" ");}
					System.out.print(i+"   ");
				}
				else;
			}
			System.out.print("\nR = ");
			for(int i=r+1; i>=0; i--) {
				System.out.print(Math.abs(p[i]));
				if(i>0) System.out.print(" x");
				if( i != 0 && p[i-1] > 0 )
					System.out.print("  + ");
				else if( i != 0)
					System.out.print("  - ");
				else;
			}
		}
		
	}
}
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »