D@N Opublikowano 16 Kwietnia 2007 Udostępnij Opublikowano 16 Kwietnia 2007 Witam wszystkoch, na samym poczatku proszę o wyrozumiałośc i zrozumienie gdyż mam do czynienia z PASCALem dopiero od kilku dni proszę abyście mnie nie gnębili i nie zgnoili. dostałem pracę kontrolną a tematem jest: Licba N jest liczbą doskonałą jeśli suma wszystkich jej dzielników mniejszych od n jest równa N (np6, 28) zadaniem jest napisać schemat blokowy sprawdzający czy liczba naturalna N jest liczą doskonałą. wiem ze to dla was proste. ale dla mnie jest to tak osiagalne jak podróż w kosmos. jestem na etapie nauki programowania i nie miałem z tym nigdy do czynienia prosze o pomoc dziekuję z góry Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
LittleFish Opublikowano 16 Kwietnia 2007 Udostępnij Opublikowano 16 Kwietnia 2007 zrób konstrukcję if, sprawdź modulo z dzielenia przez każdą kolejną liczbę i tyle (mówię intuicyjnie, kodu nie zarzucę bo nie znam Delphi :) ). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pablo1517 Opublikowano 16 Kwietnia 2007 Udostępnij Opublikowano 16 Kwietnia 2007 proszę abyście mnie nie gnębili i nie zgnoili. Boże jak ja nie nawidze takiego podejścia, to co ty wchodzisz na jakieś trolowisko że cie tu wszyscy mają gnoić? Co my jesteśmy nienormalni? nie rouzmiem... hm... moze for do tylu razy ile wynosi N, i w każdym sprawdza dzielenie przez kolejną liczbe (1,2,3,4... czyli ) jeśli jest dzielenie bez reszy (mod) to zapisuje daną liczbe do tablicy jakiejs i potem gdy wynajdzie wszystkie dzielniki to sumuje i sprawdza czy otrzymana suma jest == do N? EDIT: Taka zabaweczka w GM robiona z 10 min. http://www.gmclan.org/up199_11_doskonalaN.html moze ci pomoze jesli bawisz się GMLem. Nudziło mi sie xD Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marmot Opublikowano 16 Kwietnia 2007 Udostępnij Opublikowano 16 Kwietnia 2007 @pablo: Ale on chciał w Pascalu, więc napisz tutaj ten algorytm napisany w GML i go przepisze potem ktoś do Pascala. Wątpię, żeby posiadał taki kiczowy program jakim jest GM xd . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matthew Opublikowano 16 Kwietnia 2007 Udostępnij Opublikowano 16 Kwietnia 2007 nie jestem pewien: var i, j j = 1; for i = 1 to N do begin if (N mod i = 0) j = j + i; end; if (j = N) show_message("Liczba "+IntToStr(N)+" jest doskonała"); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marmot Opublikowano 16 Kwietnia 2007 Udostępnij Opublikowano 16 Kwietnia 2007 Czy wy widzicie, że jest to dział języków programowania i on nie chce kodu GML geniusze? A kod Matthew w przełożeniu na Pascal wygląda tak: program liczby_doskonale; var n,i,j:real; begin j:=1; for i := 1 to n do begin if n mod i = 0 then j:=j+i; end; if j = n then writeln('Liczba ',n,' jest doskonała') else writeln('Liczba ',n,' nie jest doskonała'); end. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pablo1517 Opublikowano 16 Kwietnia 2007 Udostępnij Opublikowano 16 Kwietnia 2007 to nie zadziala... bo sprawdzacie czy n mod i = 0 a tak sie nie sprawdza podzielnosci... Chociaz ja pascala mialem 2 lata temu to moze czegos nie wiem xD Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marmot Opublikowano 16 Kwietnia 2007 Udostępnij Opublikowano 16 Kwietnia 2007 Ja tam podzielność to bym sprawdzał w taki sposób if n/i = n div i, ale cóż, przepisałem kod Matthew, który wydaje mi się poprawny :) . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matthew Opublikowano 16 Kwietnia 2007 Udostępnij Opublikowano 16 Kwietnia 2007 mod = modulo = reszta z dzielenia. Fersztajen? @Marmot: O_o? Jak przełożyłeś Pascal na Pascal? To nie jest w GML! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jakim Opublikowano 16 Kwietnia 2007 Udostępnij Opublikowano 16 Kwietnia 2007 @Marmot: O_o? Jak przełożyłeś Pascal na Pascal? To nie jest w GML! Ja mimo to mam wątpliwości, czy funkcja "show_message" jest w Pascalu ;). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pablo1517 Opublikowano 16 Kwietnia 2007 Udostępnij Opublikowano 16 Kwietnia 2007 No Marmot dobrze przeniosl tylko powinien poprawic sprawdzanie podzielnosci Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Marmot Opublikowano 17 Kwietnia 2007 Udostępnij Opublikowano 17 Kwietnia 2007 @Matthew: Nie tnij głupa. To był GML przemieszany z Pascalem. Powiem ci czemu twój kod był błędny: - w pascalu nie ma show_message - jak wpisujemy stringa, to nie dajemy go w cudzysłowy tylko w apostrofy - po każdym warunku w if trzeba dać then - nie dajemy waunków w nawias w Pascalu - podczas deklaracji zmiennych trzeba podać ich typ - jak ustawiamy wartość zmiennej, to nie dajemy =, tylko := Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
spyro Opublikowano 17 Kwietnia 2007 Udostępnij Opublikowano 17 Kwietnia 2007 No tak. Licba N jest liczbą doskonałą jeśli suma wszystkich jej dzielników mniejszych od n jest równa N (np6, 28) Ta ? A mnie się wydawało, że liczby doskonałe to takie liczby naturalne a, których suma naturalnych dzielników jest równa a xD Dzielniki naturalne - i nie mogą być większe od a :P No, w sumie mogą, bo liczby dzielą się też przez same siebie... Co przeczy w sumie znaczeniu liczb doskonałych... Bo widzisz: liczby doskonałe to nie są ani liczby pierwsze ani złożone, takie dziwne trochę... :P Bo nie mogą dzielić się przez siebie, ale mogą przez wszystkie inne naturalne mniejsze od siebie. Tutaj więc można już zawiązać pewien sposób na ich obliczenia na podstawie wzoru Euklidesa: dodawanie kolejnych potęg dwójki, póki nie otrzymamy liczby pierwszej. Wtedy należy pomnożyć otrzymaną liczbę przez ostatni składnik dodawania i już mamy liczbę doskonałą. Alternatywny wzór tego sposobu wygląda tak: (2p-1)*2p-1, gdzie 2p-1 jest liczbą pierwszą (p jest potęgą, ale tutaj nie da się wstawaić indeksów więc piszę tak xP). Te dwa sposoby pokazują jednak jedynie sposób na oblicznie liczb doskonałych parzystych. W sumie nie ma innego, bo jak n razie nie odkryto żadnej liczby doskonałej nieparzystej :D Nasz mistrz "Oiler" (Euler ;P) dowiódł, że jeżeli istniałaby taka liczba, musiałaby być postaci p[4k+1]l[2] (te w nawiasach kwadratowych to mają być w indeksie górnym na poziomie potęgi), natomiast w 1990 odkryto, że liczba taka musi być więszka od 10[300]. Na razie największą znaną liczbą doskonałą jest 2[32582656]*(2[32582657-1]), ale wiesz, składa się z 19 616 714 cyfr xDDD... Poza tym, jest prostszy wzór na obliczanie liczb doskonałych: na podstawie liczb pierwszych Mersenne'a. Obliczmay liczbę pierwszą Mersenne'a ze wzoru i mnożymy ją przez dwa. Wzór na oblicznie liczb pierwszych Mersenne'a jest taki: 2[każda liczba pierwsza], oprócz 11. Tak nawiasem mówiąc, to znane liczby doskonałe to 6, 28, 496, 8128 i 33550336... Dalej zaczynają się liczby astronomiczne, przy których nawet najlepszy procesor przeciętnego użykownika wysiada... Już przy obliczaniu 496 czy 8128, prosesor Core 2 Duo 4Ghz może eksplodować. Prawdą jest, że liczb doskonałych po prostu w ogóle nie opłaca się obliczać zwykłymi programami komputerowymi tak samo jak np. liczby pi. Z tego też wywodu wyłania się moje pytanie do Ciebie: Czego oni się qrde nawalili i nachlali, że zadali Ci tak durne zadanie ?? A może to karna praca ? Bo jasnym jest, że taki zwykły programik jaki ty masz napisać, nie znalazły by nawet czterech pierwszych liczb doskonałych. Bo procesor by wysiadł. Zresztą co, ludzie będą wpisywać parunasto- i parudziesięcio-, ba, parustotysięcznocyfrowe liczby, żeby sprawdzić, czy są one liczbą doskonałą na zwykłym kompie ?! Szczerze i serdecznie wątpię. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
D@N Opublikowano 19 Kwietnia 2007 Autor Udostępnij Opublikowano 19 Kwietnia 2007 oni mi kazali napisac tylko schemat blokowy a nie pisac program. mam poprostu napisac proscy schemat który pozwoli to policzyc. tylko ze ja nie wiem jak to zrobic:( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się