[FIZYKA] Praca domowa 01

`The best software.` – Yuri.

Wystarczy dodać ‚input’ i gotowe. Pokazuje wyniki obliczeń i wynik dawany przez jave.

Można też dopisać kilka poprawek, aby dokładniej (!) i szybciej liczyć o czym wspominał na ćwiczeniach (dla sin/cos zostawić jako X resztę z dzielenia przez 2PI, im wyższy stopień tym niższa precyzja obliczeń, a wyniki się powtarzają co 360 stopni).

Możliwe, że wykonuje złą ilość obrotów pętli (pierwszy ‚obrót’ – dla ‚n = 0’ jest wykonywany przed pętlą ‚for’), bo dla ‚k =8’ wykonywane jest obliczanie 8 elementów (n od 0 do 7). Jak ktoś wie, że ma ich być mniej liczone, to wystarczy w ‚for’ zmienić z ‚i < k’ na ‚i < k-1’.

public class Main
{
	public static void main(String[] args)
	{
		int k = 9;
		double x = 3; // moze byc np. 60 stopni: Math.PI / 3
		// pamietamy poczatkowe X do obliczania kwadratu
		double startX = x;
		// pierwszy wyraz szeregu dla sinus to X, wiec go nie liczymy
		double sin = x;
		// pierwszy wyraz szeregu dla cosinus to 1, wiec go nie liczymy
		double cos = 1;
		// pamietamy jaka silnie obliczylismy przed chwila, zeby moc wyliczyc nastepna: silniaWynik = silniaWynik * silnia
		double silnia = 1;
		double silniaWynik = 1;
		// do liczenia 'e do x' potrzebujemy innych silni i poteg
		double eDoX = 1 + x;
		double xEx = x;
		double silniaEx = 1;
		double silniaExWynik = 1;
		// liczymy od 'i=1', bo dla k = 8 chcemy policzyc tylko 7 (a moze 6?) obrotow petli
		for(int i = 1; i < k; i++)
		{
			// ponosimy potege X o jeden w gore
			xEx = xEx * startX;
			// zwiekszamy silnie o jeden w gore
			silniaExWynik *= ++silniaEx;
			// obliczamy kolejny element szeregu 'e do x'
			eDoX += xEx / silniaExWynik;
			// ponosimy potege X o jeden w gore
			x = x * startX;
			// zwiekszamy silnie o jeden w gore
			silniaWynik *= ++silnia;
			if(i % 2 == 0)
			{
				// dla parzystych dodajemy
				cos += (1 / silniaWynik) * x; 
			}
			else
			{
				// dla nie parzystych odejmujemy
				cos -= (1 / silniaWynik) * x; 
			}
			// ponosimy potege X o jeden w gore
			x = x * startX;
			// zwiekszamy silnie o jeden w gore
			silniaWynik *= ++silnia;
			if(i % 2 == 0)
			{
				sin += (1 / silniaWynik) * x; 
			}
			else
			{
				sin -= (1 / silniaWynik) * x; 
			}
		}
		System.out.println(sin + " | " + Math.sin(startX));
		System.out.println(cos + " | " + Math.cos(startX));
		System.out.println(eDoX + " | " + Math.pow(Math.E, startX));
	}

}

Pamiętajcie, żeby nie ściągać, a ten materiał jest tylko w celach nauki (sam oddaje inny).

Ten wpis został opublikowany w kategorii PJWSTK - FIZ. Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *