Witam,
Krótki opis sytuacji.
Do wykonania mam zadanie :
Zdefiniuj funkcję parametrów x i n, wyznaczającą iteracyjnie wartość:
f1(x,n) = 1/x + 1/ x2 + 1/ x 3+ 1/ x4 + . . . + 1/ x n ;
W funkcji main wielokrotnie wczytuj argumenty x i n, a następnie obliczaj i prezentuj
wartość funkcji, aż do momentu podania x == 0 lub n <= 0.
Mój kod wygląda tak :
#include <stdio.h>
#include <math.h>
double funkcja (double, double);
int main()
{
double wynik, x, n;
while(1)
{
printf("Podaj wartosc x oraz n :");
scanf("%lf%lf", &x, &n);
if(x == 0)
break;
if(n<=0)
break;
wynik = funkcja ( x, n ) ;
printf(" Wartosc funkcji to : %.3lf \n", wynik);
}
}
double funkcja( double x, double n )
{
int i;
double f = 0;
for( i = 1; i <= n; i++ )
{
f += 1 / pow(x, i);
}
return f;
}
Pytanie brzmi : W jaki sposób można zastąpić komendę " pow " ?
Z góry dziękuję i pozdrawiam
count--
? Że nie wspomnę o formatowaniu równie unikalnym jak nieczytelnym (kiedyś o tym dyskutowaliśmy, ale nie mogę na to patrzeć).count--
to tu akurat jest potrzebne, aby nie tworzyć dodatkowej zmiennej, oraz nie dzielić tego na dwie instrukcje. Czyli jeżeli użyłem przyrostkową to jest ona niezbędna, natomiast jak ty użyłeś przyrostkową to trzeba się zastanowić od czapy to zrobiłeś czy z rozmysłem - czyli wracamy do czytelności.i++
jest nieco mniejszym złem niż zmienne globalne ale jednak. Więc jeżeli bezmyślne użyciei++
usprawiedliwiamy za pomocąpremature optimization
to dokładnie tak samo możemy usprawiedliwić zmienne globalne.++i
tam, gdzie równie dobrze można użyći++
(różnica w wydajności jest symboliczna). Co docount--
będącej powodem tej wymiany komentarzy to masz w 100% rację, tu akurat jest niezbędna, żeby w dobrym momencie zakończyć pętlę, nie zwróciłem na to uwagi :-) Jeśli zaś chodzi o czytelność kodu, to dobrze ponazywane dodatkowe zmienne nigdy nie zaszkodzą.count--
... tu akurat jest niezbędna ... nie zwróciłem na to uwagi" - no widzisz, właśnie o tym mówię, gdyby to był twój kod to po jakimś czasie nie wiedziałbyś jest niezbędna czy nie - trzeba byłoby za każdym razem od nowa "zauważyć". Więcej zmiennych = więcej kodu = więcej błędów, ponieważ ilość błędów wprost proporcjonalna ilości kodu (dla tego samego programisty).for(add=1/x;count--;add/=x) sum+=add;
vsfor (add = 1/x; count--; add /= x) sum += add;
) uważam za nieczytelne."Co do count-- ... tu akurat jest niezbędna ... nie zwróciłem na to uwagi" - no widzisz, właśnie o tym mówię, gdyby to był twój kod to po jakimś czasie nie wiedziałbyś jest niezbędna czy nie
- sam sobie nogę podstawiasz. Przecież to Twój kod i to on jest nieczytelny, bo ktoś czytając go pomylił się. Ja bym to rozbił na osobne, dobrze nazwane zmienne, żeby nie można było się pomylić, albo zapisał to w inny sposób (dekrementacja w ciele pętli). Czy jestem początkujący czy nie to akurat nie ma znaczenia, bo kod ma być zrozumiały dla wszystkich.count
oraz dodatkowe zmienne oraz w związku z tym kilka wierszy więcej oraz w kolejnej wersji ktoś czegoś nie zauważył i błąd na który stracisz czas. Czytelność oznacza mały czas czytania kodu przez twoją grupę a nie ilość początkujących którzy są w stanie go przeczytać. Jak już pisałem - nie dasz rady napisać czytelny dla wszystkich - więc pisz czytelny dla swojej grupy.fasadinoraz w kolejnej wersji ktoś czegoś nie zauważył i błąd na który stracisz czas
Od tego sa unit testy.