Obliczanie wartości wielomianiu

0

Pilnie potrzebuję pomocy, jestem nowy w javie (znaczy zielony ;( ), a mam teraz na zajęciach w szkole ten język.
Na najbliższą sobotę musze napisać taki program:

Napisz program obliczający wartość wielomianu o postaci
a0 + a1 * x1 + a2 * x2...
Na wejściu podajemy stopień wielomianu n, następnie program prosi o wprowadzenie parametrów a0..a1, które są przechowywane w tablicy lub na liście. Na końcu podajemy w pętli wartość x do obliczenia, za każdym razem program wyświetla nam wartość wielomianu.

Skleciłem na szybko coś takiego w php, chociaz nie sprawdzłem czy w ogóle działa i czy w ogóle dobrze jest:

$n = ?
for ($m=0; $m>=$n; $m++){
$a [$m]=? (a0) // chodzi o a0, które jest pierwszym wyrażeniem
if ($m==$n){
$x=? }
}
{
if ($m==0){$wynik = $a[$m];{
$wynik += $a [$m] * $x^$m // nie jestem pewien tego zapisu
}
echo $wynik;

Dodam, że w php tez nie jestem mocny (co widać). W którym miejscu należy wstawić tablicę albo listę, z której będą wczytywane parametry. Nawet jeśli to powyżej jest źle, to jak ma to wyglądać w javie. Będę wdzięczny za jak najdalej idącą pomoc. :-/
Gotowiec byłby mile widziany, ale z wytłumaczeniem krok po kroku. Chociaż wolę naprowadzenie typu jakie pętle użyć, co po kolei zrobić itp.
Oczywiście jeśli pomożecie.

Używam Elipse'a

0

Potrzebujesz informacji o:

1.wczytywaniu danych z klawiatury:

BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
odczyt odbywa się przez cin.readLine() wynikiem jest String.

2.zamiany String na liczbę:

int n = Integer.parseInt(zmienna_typu_string)
float x = Float.parseFloat(zmienna_typu_string)
3.tworzeniu tablicy zmiennych
float [] x = new float[n] gdzie n wczytasz z klawiatury

  1. pętla licząca

for (i=0; i<n; i++)

0

dzięki za wskazówki, teraz pozostała mi najważniejsza rzecz. Zapisanie pętli według wzoru Hornera, która mi obliczy to, co potrzeba.
Skończyłem na tym etapie:

public static void main(String[] args) throws IOException {

BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));

System.out.print("Podaj stopień wielomianu:");

int n = Integer.parseInt(cin.readLine());

double[] wspolczynniki = new double[n];

for (int i=0; i<n; i++){

System.out.print("Wprowadź współczynnik "+(i+1)+":");

wspolczynniki[i] = Double.parseDouble(cin.readLine());

}

System.out.print("Podaj wartość współczynnika x:");

double x = Double.parseDouble(cin.readLine());

for (...) // i co dalej ?

}
}
</span>

0

No dalej to juz sam Horner czyli:

double wynik = wspolczynniki[n-1];
for (int i=0;i<n-1;i++)
  wynik+=wspolczynniki[i]*x;

pozdrawiam
johny

0

wstawiłem schemat Hornera, tylko wynik mi się sypie.

public class wielomian {
	public static void main(String[] args) throws IOException {
		BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
		System.out.print("Podaj stopień wielomianu:");
		int n = Integer.parseInt(cin.readLine());
		double[] wspolczynniki = new double[n];
		for (int i=0; i<n; i++){
			System.out.print("Wprowadź współczynnik "+(i+1)+":");
			wspolczynniki[i] = Double.parseDouble(cin.readLine());
			}
		System.out.print("Podaj wartość współczynnika x:");
		double x = Double.parseDouble(cin.readLine());
		double wynik = wspolczynniki[n-1];
		for (int i=0;i<n-1;i++){
			wynik+=wspolczynniki[i]*x;
		System.out.print("Wartość wielomianu wynosi: " + wynik );
		}
		}
	}

jeśli podam stopień wielomianu większy niż dwa, podaje mi dwa wyniki

0

poprawka do Hornera:

    double wynik = 0;
    for (int i=0;i<n-1;i++)
      wynik=(wynik+wspolczynniki[i])*x;
    wynik += wspolczynniki[n-1];
    System.out.print("Wartość wielomianu wynosi: " + wynik );

Wypisuj wynik poza petla...

pozdrawiam
johny

0

thx for help, teraz działa. Jestem ciekaw, czy dobrze liczy, ale nie będę tego sprawdzał.

Końcowy kod wygląda tak:

public class wielomian {
	public static void main(String[] args) throws IOException {
		BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
		System.out.print("Podaj stopień wielomianu: ");
		int n = Integer.parseInt(cin.readLine());
		double[] wspolczynniki = new double[n];
		for (int i=0; i<n; i++){
			System.out.print("Wprowadź współczynnik "+(i+1)+": ");
			wspolczynniki[i] = Double.parseDouble(cin.readLine());
			}
		System.out.print("Podaj wartość współczynnika x: ");
		double x = Double.parseDouble(cin.readLine());
		double wynik = 0;
	    for (int i=0;i<n-1;i++)
	      wynik=(wynik+wspolczynniki[i])*x;
	    wynik += wspolczynniki[n-1];
	    System.out.print("Wartość wielomianu wynosi: " + wynik );

		}
		}

nic się nie sypie. Mam nadzieję, że gość mi zaliczy.
Johnny możesz mi wytłumaczyć tylko co się dzieje od tego momentu: double wynik = 0; // itd. i dlaczego zmieniłeś wczesniejszą wersję Hornera?

0
longman napisał(a)

Johnny możesz mi wytłumaczyć tylko co się dzieje od tego momentu: double wynik = 0; // itd. i dlaczego zmieniłeś wczesniejszą wersję Hornera?

Zmienilem, bo zrobilem blad :P
A oto co sie dzieje:
wzor Hornera to dla np. trojmianu kwadratowego ((a)x+b)x+c
czyli w naszej petli kolejno mamy
(0) wynik = (0 + a)*x
(1) wynik = ((a)x+b)*x
czyli to co juz mamy + kolejny wspolczynnik i wszystko * x,
a juz poza petla dodanie wyrazu wolnego
wynik = ((a)x+b)x +c

pozdrawiam
johny

0

thx for help [browar]

0

poprawka w kodzie, porzedni ma błąd:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class wielomian {
	public static void main(String[] args) throws IOException {
		BufferedReader cin = new BufferedReader(
				new InputStreamReader(System.in));
		System.out.print("Podaj stopień wielomianu: ");
		int n = Integer.parseInt(cin.readLine());
		double[] wspolczynniki = new double[n+1];
		for (int i = 0; i <= n; i++) {
			System.out.print("Wprowadź współczynnik " + (i + 1) + ": ");
			wspolczynniki[i] = Double.parseDouble(cin.readLine());
		}
		System.out.print("Podaj wartość współczynnika x: ");
		double x = Double.parseDouble(cin.readLine());
		double wynik = 0;
		for (int i = 0; i < n; i++)
			wynik = (wynik + wspolczynniki[i]) * x;
		wynik += wspolczynniki[n];
		System.out.print("Wartość wielomianu wynosi: " + wynik);
	}
}
0

potrzebuje ten program ale napisany w pascalu mógłby ktoś pomóc.. :-(

1 użytkowników online, w tym zalogowanych: 0, gości: 1