61 / 277
Mar 2017

twój program nawet dla danych:
1
9
daje zły wynik- https://ideone.com/JAh5LD13

zrobiłeś błąd w funkcji czy_pierwsza.
W tym miejscu:

if (n%i==0)
return false ;
else return true ;

usuń else i powinno działać

PS Twój program sprawdza czy liczba jest pierwsza poprzez sprawdzanie z każdą liczbą całkowitą. Zastanów się jak by to skrócić

include

using namespace std;

int main(int argc, char** argv) {
int p,l;
cin>>p;
for(int i=1;i<=p;i++){
cin>>l;
if(l==2||l==3||l==5||l==7) cout<<"TAK"<<endl;
else if(l==1) cout<<"NIE"<<endl;
else if(l!=2&&l!=3&&l!=5&&l!=7){
if(l%2==0||l%3==0||l%5==0||l%7==0) cout<<"NIE"<<endl;
else cout<<"TAK"<<endl;
}
if(l==2||l==3||l==5||l==7) cout<<"TAK"<<endl;
}
return 0;
}

Możecie mi powiedziec co tu jest nie tak?

Mnie tu się nic nie podoba, a już szczególnie algorytm. Zacznij od sprawdzenia czym są liczby pierwsze. Wypisz sobie ich z 20 i spróbuj wydedukować dlaczego Twoje podejście jest błędne.

Ja natomiast zalecam wklejać kod w taki sposób, żeby dało się go analizować. Powyższy kod nie zachęca do szukania błędu w algorytmie.

a ja zalecam nieużywanie jako nazwy zmiennej litery 'l' - ze względu na to, że często trudną ją odróżnić od innych znaków.

Dzięki za dobre rady dopiero zacząłem programować i spróbuje stosować się do waszych rad w przyszłych programach a program spróbuje napisać na inny sposób.

Cześć,
ja również walczę z tym zadaniem.w języku C++
Mój kod to:

#include <iostream>
using namespace std;

float liczba[3];
int ile;

bool czy_pierwsza(int n)
{
	if (n<2)
		return false; //gdy liczba jest mniejsza niż 2 to nie jest pierwszą

	for (int i = 2; i*i <= n; i++)
		if (n%i == 0)
			return false; //gdy znajdziemy dzielnik, to dana liczba nie jest pierwsza
	return true;
}


int main()
{
	int ile;
	cin >> ile;
	for (int i=0;i<ile;i++)
	{
		cin >> liczba[i];
		if (czy_pierwsza(liczba[i]) && liczba[i] <2)
		{
			cout << "TAK" << endl;

		}
		else cout << "NIE" << endl;
	}
	
	system("PAUSE");
	return 0;
}

sędzia wyrzuca mi :błąd wykonania (SIGSEGV), Podejrzewam, że chodzi o przedział n<1000000 ale pewności nie mam. Z góry dziękuje za wszelkie sugestie.

Chciałem łatwo zmieniać zmienne w pętli for.

Poprawiłem lekko kod i przeszło: usunąłem niepotrzebną tablice oraz w if (czy_pierwsza(liczba[i]) && liczba[i] <2) usunąłem drugi warunek.

to teraz usuń cały kod

tablica miała zły rozmiar, tylko 3 elementy

1 month later

kod:

#include <iostream>
using namespace std;

long int n;

bool czy_pierwsza(long int liczba){
    if(liczba < 2) return false;

    for(int i=2;i<(liczba/2);i++)
        if(liczba % i == 0) return false;

    return true;
}

int main()
{
    long int liczby[10000];
    cin>>n;

        for(int i=0;i<n;i++){
            cin>>liczby[i];
        }
    cout<<endl;

    for(int i=0;i<n;i++){
        if(czy_pierwsza(liczby[i]) == true) cout<<"TAK"<<endl;
        else cout<<"NIE"<<endl;
    }

    return 0;
}

otóż wrzucam te rozwiązanie do pierwszego zadania LICZBY PIERWSZE z łatwego działu, wybieram każdy z możliwych kompilatorów i za każdym razem "BŁĄD ODCZYTU". Co nie tak?

Pierwszy raz spotykam się z takim komunikatem na spoj.
Próbowałeś wrzucać samo main ?( bez żadnego kodu ) Albo testować na ideone ?

Przy twoim zadaniu jest komunikat błąd wykonania (SIGSEGV) (a nie błąd odczytu)

Witam

Stawiam pierwsze kroki zarówno w c++ jak i na tym forum. Zabrałem się za pierwsze zadanie z listy i padło na liczby pierwsze. Program wydaje mi się działać na moim kompilatorze jednak sędzia odrzuca moje rozwiązanie. Czy ktoś by mógł spróbować podpowiedzieć mi dlaczego?

#include <iostream>

using namespace std;
int testy, liczby, wynik, suma;
int n=0;
int tab[10000];
int main()
{
    cin>>testy;
    for(int i=0; i<testy;i++)
    {
        cin>>liczby;
        for(int j=2; j<=liczby; j++)
        {
            wynik= liczby%j;
            if (wynik!=0)
                n++;

        }
         if (n!=liczby-2)
                tab[i]=1;
                else
                tab[i]=0;
                n=0;
    }
    for(int k=0; k<testy; k++)
        if (tab[k]==1)
            cout<<"NIE"<<endl;
        else
            cout<<"TAK"<<endl;
    return 0;
}

Z góry dziękuję.

ciekawe, bo wg mnie powinien zgłosić nie błędną odpowiedź, ale błąd wykonania (SIGSEGV)
(młodsze wersje C++ to zgłaszają)

zobacz, co oznacza błąd wykonania (SIGSEGV)8, przeczytaj jeszcze raz treść zadania i popatrz na twój program

24 days later