Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Program wyszukujący ze zbioru liczb dwie, o najmniejszej różnicy

Ostatnio zmodyfikowano 2010-11-10 15:24
Autor Wiadomość
ison
» 2010-11-10 14:10:41
@up jest to maksymalna wartość jaką może pomieścić int... zazwyczaj taki typ zmiennej jest oczekiwany na wszelakich olimpiadach i konkursach a autor zadania nie powiedział ile może wynosić maksymalnie różnica. Cel był taki aby za pierwszym razem warunek
C/C++
tab[ i ] - tab[ i - 1 ] < najm
był spełniony, wiem że można to rozwiązać inaczej ale ja zrobiłem tak - co za różnica?
P-23804
Elaine
» 2010-11-10 14:13:28
I masz absolutną pewność, że to jest maksymalna wartość dla inta dla wszystkich kompilatorów, systemów i architektur? Jeśli by tak było, to po co istnieje INT_MAX (z <climits>) czy std::numeric_limits<int>::max() (z <limits>)?
P-23805
ison
» 2010-11-10 14:14:16
tak, mam pewność
INT_MAX istnieje po to aby nie trzeba było pamiętać tych wszystkich liczb na pamięć...
P-23806
Elaine
» 2010-11-10 14:21:11
Błąd, wcale tak nie jest - na architekturach 16-bit int ma (miał ;>) zwykle 16 bitów (32 bity ma long), na niektórych architekturach 64-bit może mieć 64 bity (na AMD64 akurat zwykle ma 32 bity (choć też niekoniecznie, jest coś takiego jak, dosyć rzadkie, ILP64), ale to nie jest jedyna istniejąca architektura), a na przykład na takim PDP-10 to w ogóle bitów było 36 ;>

INT_MAX istnieje po to, by mieć właśnie największą możliwą wartość dla inta na systemie, pod który program jest kompilowany. Nie zawsze jest to 2147483647.
P-23807
ison
» 2010-11-10 14:32:26
jest to tak rzadko spotykane zjawisko, iż można przyjąć że int ma zawsze 32 bity
wątpię żeby ktoś kompilował wyżej wymieniony kod na tego typu maszynach gdzie jest inaczej :D
ale ok, powinienem był użyć INT_MAX
P-23808
Elaine
» 2010-11-10 14:35:22
jest to tak rzadko spotykane zjawisko, iż można przyjąć że int ma zawsze 32 bity
Jak kod ma być przenośny to nie, nie można.
P-23809
Kzzav
Temat założony przez niniejszego użytkownika
» 2010-11-10 15:24:14
Program miał działać dla ilości liczb N 1<=N<=1 000 000

I dziękuję, rozwiązanie isona jest dobre. Jedyne co musiałem zmienić to zwiększyć #define MAX_N, i wyrzucić int tab[ MAX_N ] poza int main, ponieważ inaczej "program sprawdzający" wyrzucał błąd.
Ogólnie jak ustaliłem, to w moim programie brakowało po prostu sortowania, zamiast tego sprawdzałem dla każdej liczby po kolei jej wszystkie różnice z innymi liczbami, co bardzo przedłużało proces obliczania.
P-23810
1 « 2 »
Poprzednia strona Strona 2 z 2