gdzie robię błąd w programie C gdyż wyskakuje tylko jeden wynik

0
#include<stdio.h>
int main()
{  int w,n,x;
      w=0.0;
      for(n=1;n<1000;n=n+1)
      {
                 x=1/(10^n);
                 w=w+x;
                 printf("w=%d\n",w);
                 }
} 

Mam problemik, ponieważ wyskakuje mi wynik 0 i nic poza tym. Jak mogę zmienić program by wynik był wyświetlany z pojedyncza czy podwojna precyzja

0

błędy:

  1. 10^n oznacza 10 xor n, a nie 10 do potęgi n
  2. używasz liczb całkowitych do obliczenia wyniku który jest liczbą rzeczywistą: float x, float w ORAZ
    #include <math.h>
    x=pow(10,-n);

poza tym jeśli chcesz obliczyć e, to możesz użyć funkcji exp, która zwraca wartość wyrażenia e do potęgi x

0

poprawki naniosłam, mam jeszcze problem jak zatrzymać czarny ekran w dev? jakimś kodem???i jak nanieść kolejne precyzje?

0

nie mam pojęcia co ten program miał docelowo liczyć, ale to co napisałaś będzie tak:

#include <stdio.h>
#include <math.h>
int main()
{
  double w = 0.0;
  for(int n=0; n<1000; n++)
    {
      w+=pow(10,-n);
      printf("w=%f\n",w);
    }
  return 0;
}

jak zmnienisz warunek n<1000 na n<10 to lepiej będzie widać wynik

0

i znów zwracana wartość to 0<0x0>

chyba ze teraz code::block juz źle uruchamiam:(

0
kasiunia206 napisał(a)

poprawki naniosłam, mam jeszcze problem jak zatrzymać czarny ekran w dev? jakimś kodem???i jak nanieść kolejne precyzje?

Jeśli pracujesz w debugerze (wersji projektu Debug) to możesz to zatrzymać normalnie, po chłopsku - stawiając breakpoint na ostatniej instrukcji main.

Jeśli poza IDE, w wersji release - dodajesz plik *.cmd / *.bat z wywołaniem programu i instrukcją PAUSE.

Możesz też dodać na końcu (najprościej w C++):

cout << "Wciśnij Enter aby kontynuować...";
cin.ignore();

Wariacji na ten temat jest duuużo:
http://www.cplusplus.com/forum/articles/7312/

0

program musi zwracać 0! to oznacza że zakończył się bezbłędnie

0

ok, udało się, ale jak teraz zapisać wynik w precyzji float, double i long double?

0

uruchomienie teraz programu daje mi liczbe 1,111111... kolejnych już liczb nie bedzie???
"Boszszsze"poddaje sie z tym programowaniem

0

powiedz co chcesz zrobić, a nie prosisz o poprawienie programu. W twoim programie dodajesz do siebie 1+0.1+0.01+... więc jakiego wyniku oczekiwałaś?

0

ogólnie miałm przetłumaczyć fortran na c:
1.
X= 0.0
H= 1.0/FLOAT(N)
DO 10 I = 1,N
X=X+H
WRITE(6,*) F(X)
10 CONTINUE

  1. H=1.0/ FLOAT(N)
    DO 10 I = 1,N
    X= FLOAT(I)H
    WRITE(6,
    ) F(X)
    10 CONTINUE
    i pierwszy kod właśnie przetłumaczyłam z Twoja pomocą.
    Mam obydwa kody porównać w pojedynczej i podwójnej precyzji i okrślic który kod jest lepszy i dlczego. i to wszystko ma być poparte programami w C
0
 #include <stdio.h>
#include <math.h>
#include <conio.h>
int main()
{
  double w = 0.0;
  for(int n=0; n<10000; n++)
    {
      w+=pow(10,-n);
      ;
    }

getch();
return 0; 
}

dlczego jak zmienię f na d w printf("w=%f\n",w)wyskkuje mi ogromna liczba??

0

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

%[flags][width][.precision][length]specifier - to co w nawiasach [] jest opcjonalne

specifier	Output
...
d or i   Signed decimal integer
f	Decimal floating point

%d - służy do wyświetlania int
%f - służy do wyświetlania float i double

0

Program nr 1 w pojedynczej precyzji:
http://ideone.com/RbBcL

Kod nr 2 w wersji Fortran nie ma sensu.
Powinno być:

H=1.0/ FLOAT(N)
X= FLOAT(I)*H
WRITE(6,*) F(X)

Albo coś całkiem z innej beczki.

Dla takiej postaci kod C w pojedynczej precyzji wygląda tak:
http://ideone.com/hTL8z

Jeśli chcesz mieć podwójną precyzję to linijkę:

typedef float real;

zamieniasz na:

typedef double real;

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