Skocz do zawartości
D@N

POMOCY! pisze prace kontrolną i jestem zielony!:(

Rekomendowane odpowiedzi

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

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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 :) ).

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
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

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

@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 .

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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");

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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 :) .

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

mod = modulo = reszta z dzielenia. Fersztajen?

 

@Marmot: O_o? Jak przełożyłeś Pascal na Pascal? To nie jest w GML!

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
@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 ;).

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

No Marmot dobrze przeniosl tylko powinien poprawic sprawdzanie podzielnosci

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

@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 :=

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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ę.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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:(

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko 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ę tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×