Ilość cyfr liczby naturalnej

Transkrypt

Ilość cyfr liczby naturalnej
Ilość cyfr liczby naturalnej
Użytkownik wprowadza liczbę naturalną n. Podaj algorytm znajdowania ilości cyfr liczby n. (Np.: po
wprowadzeniu liczby 2453, jako wynik powinna zostać podana liczba 4).
Specyfikacja algorytmu:
Dane wejściowe:
liczba naturalna n
Dane wyjściowe:
liczba naturalna – ilość cyfr 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ą: 2453
Liczba 2453 posiada 4 cyfr(y)
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
Jeśli n jest liczbą naturalną, wtedy najłatwiej uzyskać dostęp do jej ostatniej cyfry (cyfry jedności), gdyż jest ona
równa reszcie z dzielenia n przez 10 (n mod 10). Z kolei tę ostatnią cyfrę możemy usunąć z liczby n poprzez
podzielenie jej przez 10 (na sposób całkowity, czyli z odrzuceniem części ułamkowej). Na przykład 2453
podzielone na sposób całkowity przez 10 wynosi 245 – wygląda to tak, jakbyśmy usunęli ostatnią cyfrę liczby
2453. To dzielenie można powtarzać:
245 : 10 = 24 + część ułamkowa
24 : 10 = 2 + część ułamkowa
2 : 10 = 0 + ewentualna część ułamkowa
Zatem proces dzielenia powinien zakończyć się w momencie, gdy w wyniku działania dostaniemy wynik 0
(zero).
Uzupełnijmy specyfikacje algorytmu o pomocniczą zmienną naturalną i oraz o uwagi na temat użytej notacji.
Proponujemy użyć notacji zaczerpniętej z języka programowania Pascal w celu oznaczenia dzielenia
całkowitego (operator „div”):
Zmienna
pomocnicza:
Notacja:
liczba naturalna i – dotychczasowa ilość cyfr liczby n
a div b oznacza wynik z dzielenia całkowitego liczby a przez liczbę b
Opis kolejnych kroków – pkt a)
Krok 1:
Wczytaj liczbę n.
Krok 2:
Zmiennej i przypisz wartość 0.
Krok 3:
Zmiennej n przypisz wartość n div 10.
Powiększ o 1 wartość zmiennej i.
Krok 4:
Jeśli n jest równe 0, wtedy wypisz wartość zmiennej i, po czym zakończ
działanie algorytmu. W przeciwnym razie przejdź do kroku 3.
Uwaga: Umieszczenie warunku sprawdzającego na końcu algorytmu powoduje jego poprawne działanie nawet
wtedy, gdy n jest od początku równe zero. (Jest to wszakże liczba jednocyfrowa.)
Schemat blokowy – pkt b)
Start
Wczytaj n
i←0
n ← n div 10
i←i+1
NIE
n=0
?
TAK
Wypisz i
Stop
Program w języku Pascal – pkt c)
Tym razem prezentujemy rozwiązanie w postaci oddzielnej funkcji ilosccyfr:
program Ilosc_Cyfr;
{ Ilość cyfr liczby naturalnej }
function ilosccyfr(n: integer): integer;
var
i: integer;
begin
i := 0;
repeat
n := n div 10;
i := i + 1;
until n = 0;
ilosccyfr := i
end;
var
n: integer;
begin
write('Podaj liczbę naturalną: ');
read(n);
writeln('Liczba ', n, ' posiada ', ilosccyfr(n), ' cyfr(y)')
end.
Program w języku C++ – pkt c)
Tym razem prezentujemy rozwiązanie w postaci oddzielnej funkcji ilosccyfr:
// Ilość cyfr liczby naturalnej
#include <iostream>
int ilosccyfr(int n)
{
int i=0;
do
{
n = n/10;
i++;
} while(n>0);
return i;
}
main()
{
int n;
cout << "Podaj liczbę naturalną: ";
cin >> n;
cout << "Liczba " << n << " posiada "
<< ilosccyfr(n) << " cyfr(y) " << 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ę
obliczającą jest oznaczony jako Command1. Obliczeniem ilości
cyfr wprowadzonej liczby zajmuje się funkcja IloscCyfr.
Wynik programu wpisywany jest na polu tekstowym Text2.
Oto definicja funkcji IloscCyfr:
Function IloscCyfr(n)
Dim i
i = 0
Do
n = n \ 10
i = i + 1
Loop While n > 0
IloscCyfr = i
End Function
A tak wygląda procedura stowarzyszona z przyciskiem Command1:
Private Sub Command1_Click()
Dim n
n = Val(Text1.Text)
Text2.Text = IloscCyfr(n)
End Sub
Uwaga: Operator \ oznacza dzielenie całkowite (div).
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 ilosccyfr(n)
{
var i = 0;
do
{
n = Math.floor(n/10);
i++;
} while(n>0);
return i;
}
function oblicz()
{
var n = eval(document.f1.n.value);
document.f1.wynik.value = ilosccyfr(n);
}
</script>
</head>
<body>
<h1 align=center>Ilość cyfr</h1>
<form name=f1>
<center>
Podaj liczbę całkowitą: <br>
<input type=text size=10 name=n> <br><br>
<input type=button value=Oblicz onClick=oblicz()>
<br><br>
Ilość cyfr: <br>
<input type=text size=20 name=wynik> <br>
</center>
</form>
</body>
</html>
Uwaga: Funkcja Math.floor daje w wyniku część całkowitą swojego argumentu (ang. floor), zatem
wyrażenie Math.floor(n/10) oznacza dzielenie całkowite zmiennej n przez 10.