Program obliczający silnie.

0

Witam.
Chciałbym prosić o zerkniecie na mój kod programu do obliczania silni i wyszukania błędu.

#include <iostream>
#include <conio.h>


using namespace std;
int n,i,b;

int main()
{
    cout<<"Podaj liczbe z ktorej chcesz obliczyc silnie: "<<endl;
    cin>>n;

    while(n<0)
    {   cout<<"Nie moge obliczyc silni z liczby ujemnej. Podaj liczbe nieujemna! \n"<<endl;
        cin>>n;

    }

    if(n==0)

    {
        cout<<"\n\nSilnia z liczby "<<n<<" wynosi 1!"<<endl;
    }
    else


    {
         b=1;
        for(i=n;i=2;i-1)
        {

            b=b*n;


        }
        cout<<"Silnia wynosi:"<<b;
    }

    return 0;
}
 

Bledy:

D:\Projekty C++\Do obliczania silni\main.cpp||In function 'int main()':|
D:\Projekty C++\Do obliczania silni\main.cpp|29|warning: suggest parentheses around assignment used as truth value|
D:\Projekty C++\Do obliczania silni\main.cpp|29|warning: 3rd expression in for has no effect|
== Build finished: 0 errors, 2 warnings ===

1

Przecież wszystko jest napisane.

for(i=n;i=2;i-1)

Jest źle, powinno być (bez zastanawiania się, czy to ma sens):

for(i = n; i == 2; i = i-1)

To oczywiście nie ma sensu, bo ta pętla się nie wykona się zazwyczaj ani razu. (Tylko, kiedy n == 2 i to raz) Drugie wyrażenie w pętli for określa jak długo pętla będzie się wykonywać - tj. tak długo aż to wyrażenie będzie miał wartość true. Dlatego u Ciebie powinno to wyglądać:

for(i = n; i >= 2; i = i-1)

Dodatkowo trzecie wyrażenie można skrócić do:

for(i = n; i >= 2; --i)

W ciele pętli nie wiadomo dlaczego masz b = b*n, chociaż iteratorem jest i. Dlatego też powinno być b = b*i albo krócej b *= i.

1

Oczywiście nie ma sensu bo for ma inną składnię:

for(instrukcja_inicjalizacji; warunek_trwania; instrukcja_kroku){
//instrukcje
}

Drugie pole to warunek trwania pętli a nie jej końca!

1

Nie łatwiej tak?

#include <iostream>
using namespace std;

int main()
{
    int N, i=0, silnia = 1;

    cout << "Podaj N: "; cin >> N;
    if(i>=N)
    {
        cout << "Silnia: " << silnia << endl;
    }
    else if(i<N)
    {
        while(i<N)
        {
            i++;
            silnia*=i;

        }
        cout << "Silnia: " << silnia << endl;

    }
}

Przeanalizuj i popraw swoje :)

To, żeby się nie czepiali...

#include <iostream>
using namespace std;

int main()
{
    int N, i=0, silnia = 1;

    cout << "Podaj N: "; cin >> N;
    if(N<0)
    cout << "Wrong!";
    else
    {


    if(i>=N)
    {
        cout << "Silnia: " << silnia << endl;
    }
    else if(i<N)
    {
        while(i<N)
        {
            i++;
            silnia*=i;

        }
        cout << "Silnia: " << silnia << endl;

    }
    }
}
 
0

Poprawilem w ten sposob:

#include <iostream>
#include <conio.h>


using namespace std;
int n,i,b,c;

int main()
{
    cout<<"Podaj liczbe z ktorej chcesz obliczyc silnie: "<<endl;
    cin>>n;

    while(n<0)
    {   cout<<"Nie moge obliczyc silni z liczby ujemnej. Podaj liczbe nieujemna! \n"<<endl;
        cin>>n;

    }

    if(n==0)

    {
        cout<<"\n\nSilnia z liczby "<<n<<" wynosi 1!"<<endl;
    }
    else


    {
        c=n;
         b=1;
        for(i = n ; i != 1 ;i = i-1)
        {


            b=b*c;
            c=c-1;


        }


        cout<<"Silnia wynosi:"<<b;
    }

    return 0;
} 

...i dziala. Dzieki za pomoc!

0

Szkoda czasu tracić na robienie większych przykładów podczas nauki... lepiej testować i robić notatki.

0

Silnię można wyliczyć rekurencyjnie - wtedy będzie łatwo i kod będzie krótki :)

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