[C++] Sprawdzanie pierwszości

Awatar użytkownika
pawlo392
Użytkownik
Użytkownik
Posty: 1085
Rejestracja: 19 sty 2015, o 18:10
Płeć: Mężczyzna
Lokalizacja: Jasło/Kraków
Podziękował: 270 razy
Pomógł: 34 razy

[C++] Sprawdzanie pierwszości

Post autor: pawlo392 »

Czy mógłby ktoś zobaczyć czemu to nie chce działać ?
Ukryta treść:    
Program ma działać w ten sposób:
- zwraca komendę "jest pierwsza" kiedy liczba jest pierwsza,
- silnię największego wspólnego dzielnika jej i liczby 1024 kiedy jest parzysta i podzielna przez 2,
- sumę wszystkich liczb mniejszych od niej w przeciwnym wypadku

Dokładniej wygląda to w ten sposób :

Kod: Zaznacz cały

http://wstaw.org/w/4uFu/linki/

Ostatnio zmieniony 26 maja 2017, o 13:10 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Ponury123
Użytkownik
Użytkownik
Posty: 128
Rejestracja: 5 lip 2015, o 14:48
Płeć: Mężczyzna
Lokalizacja: nie wiem
Podziękował: 11 razy
Pomógł: 24 razy

Re: [C++] Sprawdzanie pierwszości

Post autor: Ponury123 »

Czytaj komunikaty, przy takim formatowaniu kodu nic dziwnego że nie możesz znaleźć błędu.
Obecnie brakuje Ci if-a przed else.
pawlo392 pisze: Program ma działać w ten sposób:
- zwraca komendę "jest pierwsza" kiedy liczba jest pierwsza,
- silnię największego wspólnego dzielnika jej i liczby 1024 kiedy jest parzysta i podzielna przez 2,
- sumę wszystkich liczb mniejszych od niej w przeciwnym wypadku
Kiedy jest przeciwny wypadek?
Kiedy liczba nie jest pierwsza czy może kiedy nie jest parzysta.

Obecnie próbujesz zrobić

Kod: Zaznacz cały

if 
else
else
a coś takiego jest nie poprawne, dlatego wywala brak if-a przed else.-- 26 maja 2017, o 13:57 --Sam kod też ma sporo błędów, np.

Kod: Zaznacz cały

if(dzielniki(n))
funkcja dzielnik to int, i do tego nic nie zwraca, co niby ten if ma z nią zrobić?
Awatar użytkownika
pawlo392
Użytkownik
Użytkownik
Posty: 1085
Rejestracja: 19 sty 2015, o 18:10
Płeć: Mężczyzna
Lokalizacja: Jasło/Kraków
Podziękował: 270 razy
Pomógł: 34 razy

Re: [C++] Sprawdzanie pierwszości

Post autor: pawlo392 »

Rozumiem. Udało mi się to poprawić. Jednak mam problem z drugim poleceniem. Otóż jak wpisuje np 8 to zwraca mi 0 i wyłącza program. Przeciwny wypadek to jak wcześniejsze nie są spełnione.
Ponury123
Użytkownik
Użytkownik
Posty: 128
Rejestracja: 5 lip 2015, o 14:48
Płeć: Mężczyzna
Lokalizacja: nie wiem
Podziękował: 11 razy
Pomógł: 24 razy

Re: [C++] Sprawdzanie pierwszości

Post autor: Ponury123 »

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ą

Kod: Zaznacz cały

int a;

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

Kod: Zaznacz cały

int wynik
, 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
Awatar użytkownika
pawlo392
Użytkownik
Użytkownik
Posty: 1085
Rejestracja: 19 sty 2015, o 18:10
Płeć: Mężczyzna
Lokalizacja: Jasło/Kraków
Podziękował: 270 razy
Pomógł: 34 razy

Re: [C++] Sprawdzanie pierwszości

Post autor: pawlo392 »

Dziękuje za pomoc.
ODPOWIEDZ