[C++] Program wykorzystujący sinus

kasiunia206
Użytkownik
Użytkownik
Posty: 37
Rejestracja: 7 lis 2011, o 14:43
Płeć: Kobieta
Lokalizacja: Gdańsk
Podziękował: 4 razy

[C++] Program wykorzystujący sinus

Post autor: kasiunia206 »

Witam , chciałam napisać program , który dla funkcji sinus x, jej argument mnoży przez \(\displaystyle{ \frac{1}{n}}\), gdzie \(\displaystyle{ n=10,100,1000}\) itd. Stworzyłam poniższy kod i niestety wychodzi mi stała watrość , nie wiem co tu robię źle. Czy ktoś by mi wyjaśnił?


Kod: Zaznacz cały

 #include <iostream>
#include <math.h>
#include<conio.h>
using namespace std; //deklaracja przestrzeni nazw std
 
 
int main() //poczatek programu
 
 
 
{

float n,g,i,h,x; //deklaracja zmiennych
cout<<"podaj wartosc n: "; //wyrzucenie na ekran tekstu
cin>>n; //pobranie zmiennej n
x=sin(x);
//przyrownanie zmiennej x do 0
h=(1/n); //przypisanie do zmiennej h dzialania (1/n)
for (i=1;i<=n;i++) //petla for
{ //poczatek zadan w petli
x=x*h; //przyrownanie x do dzialania x=x+h
cout.precision(16); //ustalenie precyzji wyswietlania tekstu
cout<<x<<"
"; //wyswietlenie wartosci zmiennej x
} //koniec zadan w petli
cout<<"koniec obliczen"<<"
"; //wyswietlenie na ekran informacji o zakonczeniu wykonywania dzialan
getch();
}
Ostatnio zmieniony 1 lut 2012, o 19:03 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania. Nieczytelny zapis - brak LaTeX-a. Proszę zapoznaj się z instrukcją: http://matematyka.pl/latex.htm .
pawellogrd
Użytkownik
Użytkownik
Posty: 844
Rejestracja: 19 lis 2009, o 15:03
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 121 razy
Pomógł: 156 razy

[C++] Program wykorzystujący sinus

Post autor: pawellogrd »

16 linijka - x=sin(x); ////przyrownanie zmiennej x do 0

czemu nie napiszesz po prostu x=0; ?

Poza tym co wlasciwie program ma robic, bo nie rozumiem?

21 x=x*h; //przyrownanie x do dzialania x=x+h

A tu ma być plus czy mnożenie?

I skąd ma się brać wartość zmiennej x? Póki co jest równa 0, więc cały czas będzie Ci wyrzucać na ekran 0, bo nieważne przez co je pomnożysz to to dalej będzie 0
kasiunia206
Użytkownik
Użytkownik
Posty: 37
Rejestracja: 7 lis 2011, o 14:43
Płeć: Kobieta
Lokalizacja: Gdańsk
Podziękował: 4 razy

[C++] Program wykorzystujący sinus

Post autor: kasiunia206 »

Ma być mnożenie argumentu sinusa, czyli x przez h=1/n gdzie n=10,100,1000 itd.
Jak mogłabym zmienić początkowy x by nie wyskakiwały zera?
pawellogrd
Użytkownik
Użytkownik
Posty: 844
Rejestracja: 19 lis 2009, o 15:03
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 121 razy
Pomógł: 156 razy

[C++] Program wykorzystujący sinus

Post autor: pawellogrd »

To może po prostu zacząć od x=1? Czyli w linii 16 zamiast

Kod: Zaznacz cały

x=sin(x);
napisać

Kod: Zaznacz cały

x=1;
I teraz jeśli chcesz wyświetlić wartość sinusa dla każdego mnożenia przez to dopisać

Kod: Zaznacz cały

cout<<sin(x)
w odpowiednim miejscu pętli (lub po niej, zależy gdzie i kiedy chcesz go wyświetlać).
Grzesio_
Użytkownik
Użytkownik
Posty: 44
Rejestracja: 23 gru 2011, o 22:59
Płeć: Mężczyzna
Lokalizacja: Polska
Pomógł: 3 razy

[C++] Program wykorzystujący sinus

Post autor: Grzesio_ »

Policzmy sobie całeczkę, np. \(\displaystyle{ \int_{0}^{2 \pi }\sin(x)\ dx}\)

Np.

Trzeba przebiec przez n+1 wartości x od a do b z krokiem \(\displaystyle{ h=frac{b-a}{n}, można to zrobić na dwa sposoby
[list][*]zacząć od x=a i w każdym kroku powiększać x o wartość h (kolumny 2 i 3)
[*]w każdym kroku obliczać x = a +i*h (kolumny 4 i 5)[/list]
W kolumnach 2 i 4 widać ostatnią wartość x-b
Kolumny 3 i 5 to wartość całki qORrt
W kolumnie 6 oszacowanie błędu metody
Ctrl +/- pomaga obejrzeć tabelki poprawnie
[code]Wyniki gdy zmienne typu float
N | x - b x = x + h | x - b x = a + i*h | spodziewany błąd
------1-----+---------2---------------------3----------+-----------4---------+-----------5---------+---------6---------
10 | +0.00000071525574 | +0.00000030271469 | +0.00000000000000 | +0.00000015291187 | 0.20670852661133
100 | +0.00000192970037 | -0.00000001191770 | -0.00000014901161 | +0.00000005327114 | 0.00206708526611
1000 | +0.00006160978228 | +0.00001290434946 | +0.00000003725290 | +0.00000002380714 | 0.00002067085266
10000 | +0.00031772640068 | +0.00019802614964 | +0.00000027008355 | -0.00000000679770 | 0.00000020670853
100000 | +0.00731526949676 | +0.00135292345704 | +0.00000027008355 | +0.00000009737832 | 0.00000000206709
1000000 | -0.05368050422430 | -0.01091940094525 | -0.00000000276486 | -0.00000000493673 | 0.00000000002067
10000000 | -0.39251056560494 | -0.20248576791274 | -0.00000011645170 | +0.00000003402485 | 0.00000000000021

A tu dla double
N | x - b x = x + h | x - b x = a + i*h | spodziewany błąd
------1-----+---------2---------------------3----------+-----------4---------+-----------5---------+---------6---------
10 | +0.00000000000000 | +0.00000000000000 | +0.00000000000000 | +0.00000000000000 | 0.20670851120200
100 | -0.00000000000001 | -0.00000000000001 | -0.00000000000000 | +0.00000000000000 | 0.00206708511202
1000 | -0.00000000000011 | -0.00000000000006 | -0.00000000000000 | +0.00000000000000 | 0.00002067085112
10000 | +0.00000000000084 | +0.00000000000021 | +0.00000000000000 | -0.00000000000000 | 0.00000020670851
100000 | -0.00000000000372 | -0.00000000000339 | +0.00000000000000 | -0.00000000000000 | 0.00000000206709
1000000 | -0.00000000002417 | -0.00000000000007 | -0.00000000000000 | -0.00000000000000 | 0.00000000002067
10000000 | -0.00000000113624 | -0.00000000024481 | -0.00000000000000 | -0.00000000000000 | 0.00000000000021[/code]}\)
pawellogrd
Użytkownik
Użytkownik
Posty: 844
Rejestracja: 19 lis 2009, o 15:03
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 121 razy
Pomógł: 156 razy

[C++] Program wykorzystujący sinus

Post autor: pawellogrd »

Grzesio co to ma niby wnosic do tematu bo nie rozumiem?
Grzesio_
Użytkownik
Użytkownik
Posty: 44
Rejestracja: 23 gru 2011, o 22:59
Płeć: Mężczyzna
Lokalizacja: Polska
Pomógł: 3 razy

[C++] Program wykorzystujący sinus

Post autor: Grzesio_ »

Ja tak rozumiem pytanie Kasi.
Czyli, ani sinus nie jest ważny ani całka.
kasiunia206
Użytkownik
Użytkownik
Posty: 37
Rejestracja: 7 lis 2011, o 14:43
Płeć: Kobieta
Lokalizacja: Gdańsk
Podziękował: 4 razy

[C++] Program wykorzystujący sinus

Post autor: kasiunia206 »

w jaki sposób zostały powyższe wartości osiągniete?
Grzesio_
Użytkownik
Użytkownik
Posty: 44
Rejestracja: 23 gru 2011, o 22:59
Płeć: Mężczyzna
Lokalizacja: Polska
Pomógł: 3 razy

[C++] Program wykorzystujący sinus

Post autor: Grzesio_ »

Kod: Zaznacz cały

#include <stdio.h>

#define PI 3.14159265358979323846264338
typedef double real;

real sine( real x ){
	real s1, s=x, r=x, n=2;
	x *= x;
	do{	s1 = s; 
		s += r=-r*x/(n*n+n);
		n += 2;
	} while( s != s1 );
	return s;}
		
int main(void) {
	real a=0, b= PI/2;
	volatile real ostatniX, x, h;
	int n, i;
	for( n=10; n<=1000000000; n *= 10 ) {
		h=(b-a)/n;
		x=a;
		for( i=0; i<=n; i++ ) {
			// printf("%0.15f %0.15f %f0.15
" ,    x, sine(x), sine(a + i*h ) );
			ostatniX = x;
			x += h; }
		x = ostatniX;
		printf("%12d  %0.15f %0.15f %0.15f
" , n, x, sine(x), sine(a + n*h ) );
	}
	return 0;
}
ODPOWIEDZ