C++, dlaczego wychodza same zera

0

Witam , chciałam napisać program , który dla funkcji sinus x, jej argument mnoży przez 1/n, gdzie n=10...100...1000 itd. Stworzyłam poniższy kod i niestety wychodza mi same zera, nie wiem co tu robię źle. Czy ktoś by mi wyjaśnił?

 #include <iostream>
#include <math.h>
#include<conio.h>
using namespace std; //deklaracja przestrzeni nazw std

float n,g,i,h,x; //deklaracja zmiennych

int main() //poczatek programu



{
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<<"\n"; //wyswietlenie wartosci zmiennej x
} //koniec zadan w petli
cout<<"koniec obliczen"<<"\n"; //wyswietlenie na ekran informacji o zakonczeniu wykonywania dzialan
getch();
}
0

Ponieważ x jest zmienną globalną to wartość sin(x) wynosi 0. Potem w pętli mnożysz 0 razy coś, ale jak wiemy, to i tak będzie 0. No to masz 0. :-)

0

w sumie racja... jak mogłabym zapisac zmienna x by liczyło mi kolejne wartości?

0

mam funkcje sinus x. jej argument, czyli x, mam przemnożyć przez 1/n. gdzie n=10,100,1000 itd. i sprawdzic mam co się dzieje. Jak mnożenie argumentu przez 1/n wpłynie na wartośc funkcji.
Poniżej przedstawie analogiczny program, który napisałam dla sumy argumentu x i 1/h.

 #include <iostream>
#include <math.h>
#include<conio.h>
using namespace std; //deklaracja przestrzeni nazw std

float n,g,i,h,x; //deklaracja zmiennych

int main() //poczatek p[rogramu



{
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<<"\n"; //wyswietlenie wartosci zmiennej x
} //koniec zadan w petli
cout<<"koniec obliczen"<<"\n"; //wyswietlenie na ekran informacji o zakonczeniu wykonywania dzialan
getch();
}
 
0
#include <iostream>
#include <math.h>
#include<conio.h>
using namespace std; //deklaracja przestrzeni nazw std



int main() //poczatek programu



{
    double 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<<"\n"; //wyswietlenie wartosci zmiennej x
} //koniec zadan w petli
cout<<"koniec obliczen"<<"\n"; //wyswietlenie na ekran informacji o zakonczeniu wykonywania dzialan
getch();
}

Tak mialo dzialac?

0

ee chyba gdzieś jest krzak bo nie działa :P (przynajmniej u mnie)
a ja wstawiłem w apostrofy sin('x'); i wyrzuca wyniki, tylko nie wiem czy odpowiednie xD

0

a czemu sama zmiana double na float powoduje zmianę warości wyświetlanych nie tylko co do wartości ale i znaku?

0

Teraz z pewnością wychodzą jakieś bzdury. Poprzednio wszystkie te zmienne miały początkową wartość 0, teraz są w nich jakieś śmieci. Skoro masz sprawdzić wpływ zmiany argumentu funkcji sinus, to chyba w pętli trzeba by ją wywoływać, nie?

Masz gdzieś dokładną treść tego zadania?

0

A function f(x) is to be evaluated at each of N equally spaced points in [0,1], where N is large. Which of the following pieces of code is prefable for yhis task? Explain.
1.
Kod:
X= 0.0
H= 1.0/FLOAT(N)
DO 10 I = 1,N
X=X+H
WRITE(6,*) F(X)
10 CONTINUE

Kod:
1
H=1.0/ FLOAT(N)
DO 10 I = 1,N
X= FLOAT(I)H
WRITE(6,
) F(X)
10 CONTINUE

powyższe kody miałam zamienić n c, czy c++. i kolejno dla funkcji sinus x porównać wyniki, dla dodawania do x wartości 1/n i mnożąc x przez 1/n

0

To ten 1:

#include <iostream>
#include <cmath>

using namespace std;

int main() {
  const int N = 100;

  const float h = 1.0f/N;
  float x = 0.0f;

  // to `do` fortrana bedzie zdaje sie takie:
  for (int i = 1; i <= N; ++i) {
    x += h; 
    cout << sin(x) << " "; 
  }	

  return 0;
}

Dasz sobie radę z drugim, prawda? :-)
Odpowiedź na pytanie, który kod oblicza wartość funkcji F w równo oddalonych punktach w przedziale jest oczywista - to ten 1. kod.

0

Niestety poniższy kod też pokazuje mi same zera:(

#include <iostream>
#include <cmath>

using namespace std;
 
int main() 
{
  const int N = 10;
 
  const float h = 1.0f/N;
  float x = 0.0f;
 
  // to `do` fortrana bedzie zdaje sie takie:
  for (int i = 1; i <= N; ++i) {
    x *= h; 
    cout << sin(x) << " "; 
    cin.get();
}
}
0
float x = 0.0f;
//...
x *= h; 

Jeżeli jakąkolwiek wartość pomnożysz przez 0 to cały czas będziesz miała 0.

0

Ależ nie da się. I właśnie o to chodzi, przecież pytanie było, który kod wykona to zadanie, ten 2 tego nie wykona bo to ogólnie nie ma sensu. Same zera to prawidłowy wynik. Żeby mieć coś sensownego zacznij od x = h. Wyjdą jakieś rzeczy, ale ogólnie ten kod jest niepoprawny dla tego zadania.

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