Suma podzielników

Transkrypt

Suma podzielników
Suma podzielników
Użytkownik podaje liczbę naturalną n. Podaj algorytm znajdowania sumy podzielników liczby n (załóżmy:
mniejszych od n). Np.: po wprowadzeniu liczby 12 w programie powinna zostać wypisana liczba 16, ponieważ
podzielnikami liczby 12 są liczby 1, 2, 3, 4 oraz 6, zaś 1 + 2 + 3 + 4 + 6 = 16.
Specyfikacja algorytmu:
Dane wejściowe:
liczba naturalna n
Dane wyjściowe:
liczba naturalna, suma podzielników liczby n
a)
Przedstaw ten algorytm w formie opisu kolejnych kroków.
b) Zaprezentuj ten algorytm w formie schematu blokowego.
c)
Napisz program realizujący ten algorytm w wybranym przez siebie języku programowania (Pascal, C
lub C++). Oto przykład działania takiego programu:
Podaj liczbę naturalną: 12
Suma podzielników wynosi 16
d) Zaimplementuj ten algorytm w formie
programu w języku Visual Basic lub
skryptu w języku JavaScript. Oto
przykładowy projekt takiej aplikacji:
Przykładowe rozwiązanie
Zbiór podzielników liczby n (mniejszych od n) zawiera się w zbiorze {1, 2, ..., n – 1}, zaś sam podzielnik
rozpoznajemy po tym, że reszta z dzielenia liczby n przez niego wynosi zero. Do rozwiązania tego problemu
będziemy potrzebować dwóch pomocniczych zmiennych reprezentujących odpowiednio dany podzielnik (p)
oraz tymczasową wartość sumy podzielników (suma). Dobrze jest także uściślić używaną notację: przyjmiemy,
że zapis a mod b oznacza resztę z dzielenia liczby a przez liczbę b. Uzupełniamy wiec specyfikację algorytmu o
następujący zapis:
Zmienne
pomocnicze:
Notacja:
liczba naturalna p – kolejny podzielnik liczby n
liczba naturalna suma – dotychczasowa wartość sumy podzielników
a mod b oznacza resztę z dzielenia liczby a przez liczbę b
Opis kolejnych kroków – pkt a)
Krok 1:
Wczytaj liczbę n.
Krok 2:
Zmiennej suma przypisz wartość 0.
Zmiennej p przypisz wartość 1.
Krok 3:
Jeśli p jest równe n, wtedy wypisz wartość zmiennej suma i zakończ działanie
algorytmu. W przeciwnym razie przejdź do następnego kroku.
Krok 4:
Jeśli n mod p jest równe 0, wtedy powiększ wartość zmiennej suma o wartość
zmiennej p
Krok 5:
Powiększ wartość zmiennej p o 1 i przejdź do kroku 3.
Schemat blokowy – pkt b)
Start
Wczytaj n
suma ← 0
p←1
NIE
NIE
n mod p = 0
?
p=n
?
Wypisz suma
TAK
Stop
suma ← suma + p
p←p+1
TAK
Program w języku Pascal – pkt c)
program SumaPodzielnikow;
{ Obliczanie sumy podzielników }
var
n, p, suma: integer;
begin
write('Podaj liczbę naturalną: ');
readln(n);
suma := 0;
for p:=1 to n-1 do
if n mod p = 0 then
suma := suma + p;
writeln('Suma podzielników wynosi ', suma)
end.
Program w języku C++ – pkt c)
// Obliczanie sumy podzielników
#include <iostream>
main()
{
int n;
cout << "Podaj liczbę naturalną: ";
cin >> n;
int suma = 0;
for(int p=1; p<n; p++)
if(n % p == 0)
suma = suma + p;
cout << "Suma podzielników wynosi " << suma << endl;
}
Program w języku Visual Basic – pkt d)
Pole tekstowe, na którym użytkownik wpisuje
liczbę, jest oznaczone jako Text1. Przycisk
uruchamiający procedurę suma podzielników
jest oznaczony jako Command1. Pole tekstowe,
na
którym
wyświetlany
jest
rezultat
wyszukiwania, jest oznaczone jako Text2.
Oto procedura stowarzyszona z przyciskiem Command1:
Private Sub Command1_Click()
Dim n, p, suma
n = Val(Text1.Text)
suma = 0
For p = 1 To
If n Mod
suma =
End If
Next p
Text2.Text =
End Sub
n-1
p = 0 Then
suma + p
suma
Program w języku JavaScript – pkt d)
Prezentujemy kompletny kod HTML strony WWW będącej rozwiązaniem zadania:
<html>
<head>
<script language=javascript>
function oblicz()
{
// odczytanie wprowadzonych danych
var n = eval(document.form1.n.value);
// obliczanie sumy podzielników
var suma = 0;
for(var p=1; p<n; p++)
if(n % p == 0)
suma = suma + p;
// wyświetlenie wartości sumy
document.form1.sumapodz.value = suma;
}
</script>
</head>
<body>
<h3 align=center>Suma podzielników</h3>
<center>
<form name=form1>
Wprowadź liczbę naturalną:
<input type=text size=5 name=n>
<br><br>
<input type=button
value="Znajdź sumę podzielników"
onClick=oblicz()>
<br><br>
Suma podzielników:
<input type=text size=7 name=sumapodz>
</form>
</center>
</body>
</html>