79 / 277
Jun 2017

przecież 1 jest liczbą pierwszą więc nie wiem w czym problem
@dobra poczytałem i jednak nie, przepraszam

Poprawiłem i nadal nie działa: http://ideone.com/rP0fQU13 aż mi wstyd że takie proste zadanie przysparza mi tyle problemów

Jedyne co zrobiłeś to if [przykładowe wejście z zadania] then [wyświetl przykładowe wyjście]. Zacznij testować swoje programy dla jakichkolwiek danych albo nie licz na żadną pomoc. Bez urazy, ale jeżeli:

1) nie zapoznałeś się z definicją liczby pierwszej,
2) jeżeli mnie pamięć nie myli wysłałeś tylko jedno zgłoszenie na SPOJa przed napisaniem na forum (jeżeli pamięć mnie myli to i tak bez znaczenia z powodów 1), 6) i 7), które dostatecznie sugerują, że nawet nie chcesz (samodzielnie) rozwiązać tego zadania),
3) nie przeczytałeś jak zakładać tematy na forum,
4) nie zrobiłeś żadnego researchu, zarówno na forum jak i w innych źródłach,
5) założyłeś nowy wątek w niewłaściwym miejscu i jak pamiętam z nieprawidłową nazwą (jeżeli pamięć mnie myli to i tak bez znaczenia, bo zgrzeszyłeś 3) i 4) i założeniem wątku w niewłaściwym miejscu, co w połączeniu z innymi faktami prowadzi do konkluzji przedstawionej poniżej),
6) po otrzymaniu odpowiedzi nawet nie chciało Ci się od razu wyszukać definicji liczby pierwszej - wolałeś zacząć od: "przecież 1 jest liczbą pierwszą więc nie wiem w czym problem",
7) Po sprawdzeniu czy 1 jest liczbą pierwszą napisałeś: "@dobra poczytałem i jednak nie, przepraszam" i wprowadziłeś kolejnego ifa do kodu - nie przetestowałeś swojego programu dla żadnych innych liczb;

to możliwe są trzy opcje (sprawdź definicję alternatywy): oczekujesz, że ktoś zrobi to zadanie za Ciebie lub jesteś za głupi nawet na (jak słusznie zauważyłeś) "takie proste zadanie". W każdym z trzech przypadków nie warto Ci pomagać.

Jeżeli chcesz zatrzeć falstart to kilka podpowiedzi: co z np. 49? Jest pierwsza czy nie? A co z np. 77, 133, 143, ... 1981? Samodzielnie sprawdź, czy wymienione przeze mnie liczby są pierwsze czy złożone oraz jak w ich przypadku zachowa się Twój program.

EDIT
Wątek był w złym miejscu, ale został tu doklejony.

Zupełnie niesłusznie czepiasz się człowieka :slight_smile:

a przecież on tylko pewnie uwierzył w reklamę na pierwszej stronie spoj-a:

Zrobimy z Ciebie programistę! Wystarczy tylko 6 tygodni

(i nie sprawdził, że 6 tygodni nie wystarczy, potrzeba jeszcze od 12 do 14 tysięcy za jeden kurs, oraz nie ma doświadczenia, by wiedzieć, że dla 99% uczestników tego kursu będą to wyjątkowo głupio wydane pieniądze)

@flimbo123 Witamy na spoju. Jeżeli w zadaniu jest napisane, że wejście jest z przedziału [1..10000] to tak będzie. Twój program, który sprawdza dzielniki do 5 włącznie nie poradzi sobie chociażby z 49, która nie jest pierwszą. W internecie bez problemu znajdziesz informacje jaka jest zależność pomiędzy dzielnikami, które należy sprawdzić, a testem czy liczba jest pierwsza.
Zawsze najpierw szukaj informacji w sieci, sprawdź dla przykładu spod zadania, dla minimalnego zakresu danych jaki jest możliwy w zadaniu i dla jakiegoś prostego testu, który szybko sprawdzisz. Ja bym napisał taki zanim był cokolwiek wysłał:

15
1
2
3
4
5
6
24
25
26
27
28
29
49
100
10000

Odpowiedzi spokojnie policzysz w głowie.

@tarpauwatratar Nie mówię, że nie masz racji, ale bądź rzeczowy w swoich odpowiedziach, nie potrzeba tutaj odnosić się do czegokolwiek niż kod. Wszak spoj to polska śmietanka intelektualna :slight_smile:

Czy to nie jest rzeczowe? :wink:

Mogłem napisać: weź się do roboty! Mogłem napisać: weź się do roboty i sprawdź np. 29, 49, 100, .... Wolałem jednak napisać jasno jak wygląda sytuacja i jaki jest jej odbiór wśród owej śmietanki intelektualnej (wszak sam nie mówisz, że nie mam racji, a zatem w mojej odpowiedzi jest choć trochę prawdy :wink:).

Zauważ też, że punkty 1), 2), 3), 4), 5), a w pewnym stopniu także 6) i 7), choć odniesione do konkretnej sytuacji, mają łatwy do wyłuskania charakter ogólny. Chcąc rozwiązać zadanie należy najpierw je zrozumieć (np. sprawdzić definicję liczby pierwszej), potem stworzyć i przetestować rozwiązanie, a w razie niepowodzenia próbować kolejnych testów i ewentualnie przejść na forum. Z kolei forum należy najpierw przeszukać, a następnie zakładać nowe tematy itd itp.

Nie jestem skłonny zgodzić się, że nie ma potrzeby odnosić się do czegokolwiek innego niż kod. Wszak metodologia pracy jest bardzo istotna, a może nawet istotniejsza od samego kodu. Składni może nauczyć się każdy, programować już nie, do czego zresztą pośrednio odniósł się @mariusz193. Uważam, że lepiej napisać jak wygląda sytuacja (nawet jeżeli tylko tak wygląda, a w rzeczywistości jest inaczej - zakładam dobrą wolę @flimbo123, ale opisuję sytuację taką, jaką mi się ona jawi) w ostrych słowach i za wczasu. Każdy był kiedyś nowicjuszem, a na problemy na SPOJu z tego okresu nikt się nie patrzy (jestem tego żywym dowodem, a warto wspomnieć, że z testowaniem miałem największe trudności, a wciąż bywa z tym różnie :wink:). Łapka w dół i negatywny komentarz na Stack Overflow boli dużo bardziej, a na GitHubie nie jest ciężko natknąć się na tragiczny kod, którego autor nie przeanalizował / przetestował / sprawdził / wyszukał różnych rzeczy. Gdyby nie ostra krytyka innych sam zszargałbym swoją opinię publikując coś, co na ogół nie powinno ujrzeć światła dziennego :wink: Gdyby @flimbo123 poszedł programować zawodowo to mógłby zostać zapytany o sposób, w jaki radzi sobie z trudnościami w realizacji projektów, a nawet mógłby zostać poproszony o napisanie jakiegoś prostego programu, np. do wyznaczania liczb pierwszych. Gdyby program nie działał prawidłowo, a kandydat ratował się ifowaniem kolejnych przypadków... cóż...

I myślę, że wystarczy już tego spamu - dalej wypowiadam się już tylko o zadaniu :wink:

1 month later

Cześć Wam, mam problem z zadaniem: http://www.spoj.com/problems/PRIME1/2
Mianowicie za każdym razem otrzymuję wynik "time limit exceeded". Dlaczego? Jakieś podpowiedzi?

include

include

using namespace std;

int number;
int counter = 0;
int *wsk = &counter;

int count();
void range(int[], int, int*);
void prim(int[], int);

int main() {
int n = 0;
int *array = new int[n];
int i = 0;
n = count();
//cout << n << endl;

while (i < n) {
	range(array, n, &counter);
	i++;
}

//for (int i = 0; i < 2*n; i++) {
//	cout << array[i] << endl;
//}
n = n*2-1;

prim(array, n);



system("pause");

return 0;

}

int count() {
int n;
cout << "Podaj ilość zakresów\n";
cin >> n;
return n;
}

void range(int array[], int n, int *wsk) {
int a, b;
while (counter<2*n) {

	cin >> a;
	array[counter] = a;
	counter++;

	cin >> b;		
	array[counter] = b;
	counter++;

//	cout << endl<<array[counter - 2] << endl << array[counter-1];
}

}

void prim(int array[], int n) {

int i = 0;
int dol, gora, modulo,licznik;
int flaga = 1;
while (i <= n ){
	dol = array[i];
	gora = array[i + 1];
	
	if (dol == 1)
		dol++;

	for (dol; dol <= gora; dol++) {
		
		licznik = 2;
		modulo = dol % licznik ;
		while (modulo != 0 && licznik<dol/2) {
			licznik++;
			modulo = dol % licznik;
			if (modulo != 0)
				flaga = 0;
			else
				flaga = 1;
			
		}
		
	
		if (dol == 2 || dol ==3)
			flaga = 0;
		if (flaga == 0)
			printf("%d\n", dol);
			
			//	cout << dol << endl;
		flaga = 1;
	}


	i+=2;
	printf("\n");
}

}

13 days later

proszę bardzo:

1) przeczytaj ten wątek (cały)
2) przeczytaj ogólnie dostępne, podstawowe informacje o liczbach pierwszych
3) wyrzuć ten kod
4) napisz program od początku

Hej :slight_smile: Zwracam się z prośbą o pomoc :slight_smile: W mojej opinii wyniki wychodzą prawidłowo, wydaje mi się, że problem jest wtedy, gdy podaję liczbę do sprawdzenia większą niż 10000, ale nie jestem pewien czy o to chodzi... Podaję kod http://pl.spoj.com/submit/PRIME_T/id=200049428, będę wdzięczny za pomoc i ocenę jakości kodu :wink:

Wysłany kod pod tym linkiem widzisz tylko Ty.

Myślałem, że autor sam się domyśli :wink: Szczególnie, że gdziekolwiek nie spojrzeć ludzie inaczej wklejają kod, takie wpadki sporadycznie zdarzały się innym, a do tego kod na SPOJu ma być niejawny.

No to teraz pogadamy :wink:

  1. if (liczba_testow < 100000) - wywalić to. Warunki zadania są dane przez autora i nie należy ich sprawdzać. To samo dotyczy dalszej części zadania, np. sprawdzania, czy liczba nie jest ujemna.
  2. Twój program nie działa nawet dla przykładowego wejścia więc najpierw zrób tak, żeby w ogóle był choć cień szansy, że on działa, a po tej poprawce wstaw kod i szukam dalej :wink:

To nie jest przykładowe wejście. Patrz: treść zadania.

Insza inszość, że dla podanych przez Ciebie danych też działa źle :stuck_out_tongue:

Dobra, już sobie poradziłem :slight_smile: Błąd był śmieszny, aż wstyd się przyznać... -.-

Dzięki tarpauwatratar za chęć pomocy, fajnie, że ktoś się interesuje przynajmniej na tym forum :slight_smile:

Przyzwyczajaj się :wink: Błędy są na ogół śmieszne, głupie i wstyd się do nich przyznać :wink: Niemniej na błędach ludzie uczą się najwięcej.

Interesuje się więcej osób niż ja :wink: Kwestia tego, że niewielu ma czas by pomagać (za darmo).