Ograniczyłem twój program do czegoś takiego, działa poprawnie więc musiałeś coś popsuć z nawiasami, nie chce mi się szukać gdzie dokładnie
Kod: Zaznacz cały
int dzielniki(int n)
{
if (n % 2 == 0 && n != 2) {
int a = n;
int b = 1024;
while (a != b) {
if (a > b) {
a = a - b;
}
else {
b = b - a;
}
}
cout << b << endl;
}
}
int main()
{
int n;
cin >> n;
dzielniki(n);
system("PAUSE");
return 0;
}
-- 26 maja 2017, o 14:19 --
Btw, funkcja dzielniki oblicza NWD(n, 1024) z tego co widzę polecenie było trochę inne
pawlo392 pisze:
silnię największego wspólnego dzielnika jej i liczby 1024 kiedy jest parzysta i podzielna przez 2,
-- 26 maja 2017, o 14:30 --
Oj sorki nie widziałem że masz funkcje do liczenia silni, tu masz kod z działającym drugim przykładem. Uprościłem jedynie maina, wiec to tam musi być błąd z nawiasami.
Kod: Zaznacz cały
#include <iostream>
#include <cstdlib>
using namespace std;
bool czy_pierwsza(int n)
{
if (n < 2)
return false;
for (int i = 2; i * i <= n; i++)
if (n % i == 0)
return false;
return true;
}
int wynik;
int silnia(int n)
{
if (n == 1) {
wynik = 1;
}
else {
wynik = n * silnia(n - 1);
}
}
int dzielniki(int n)
{
if (n % 2 == 0 && n != 2) {
int a = n;
int b = 1024;
while (a != b) {
if (a > b) {
a = a - b;
}
else {
b = b - a;
}
}
silnia(b);
cout << wynik << endl;
}
}
int main()
{
int n;
cin >> n;
dzielniki(n);
system("PAUSE");
return 0;
}
-- 26 maja 2017, o 14:38 --I jeszcze na koniec, wywalało Ci 0 przy drugim ponieważ wyświetlałeś zmienną
którą tworzyłeś wewnątrz maina, następnie podawałeś ją jako argument do funkcji silnia(
int a nie było nawet zainicjowane). To zwyczajnie nie może działać bo do silni musi trafić wynik z funkcji dzielniki, a interesujący nasz wynik jest w zmiennej
, bo to na niej operujesz wewnątrz silni
Moja rada dbaj o formatowanie i czystość kodu, zmienne globalne deklaruj na początku kodu
i pamiętaj o zasięgu życia zmiennych(globalne, a lokalne), to unikniesz takich błędów i problemów