Proszę o sprawdzenie programu

2015-01-13 12:51
0

Witam, proszę o sprawdzenie programu. Generalnie problem polega na tym, że nie widzę błędu w kodzie a mimo wszystko program zwraca złe wyniki. Poniżej polecenie i kod.

user image

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(){
    int n, p, i, sil;
    float q, e, l;
    printf("Podaj n, q, e:\n");
    scanf("%d %f %f", &n, &q, &e);
    for(p=0;;p++){
        l=0;
        sil=1;
        if(p>0){
            for(i=1;i<=p;i++){
                sil*=i;
            }
        }
        l=(1.0/(float)sil)*pow(n-q,p-1)*exp(n*q);
        if(l<e){
            break;
        }
    }
    printf("Min wartosc p spelniajaca nierownosc to: %d\n",p);
    system("pause");
    return 0;
}

Pozostało 580 znaków

2015-01-13 13:29
  1. Zamień float na double
  2. Silnie też licz w zmiennej double
  3. Do obliczenia silni wywal warunek if(p>0) wystarczy warunek ;i<=p;
  4. Do obliczenia silni możesz zacząć od i=2 bo nie ma sensu mnożyć przez jedynkę
  5. Na kroku nr 100 przemnożyłeś wartości 1..100 zaś na 101 kroku zaczynasz od nowa?
  6. Policz tą f(0) po czym ten wynik mnóż przez (n-q)/p - już algorytm będzie o wiele lepszy.

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2015-01-13 13:32

Pozostało 580 znaków

2015-01-13 13:41
0

W zasadzie wystarczyła zmiana typu silni na double i działa prawidłowo, aczkolwiek dziękuję za wszystkie uwagi.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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