środa 19 stycznia 2022 imieniny Henryka i Mariusza 1736 - Urodził się James Watt, inżynier i wynalazca brytyjski
Do końca roku pozostało: 0 dni
Informatyka
Interaktywna mapa szkół
Język polski Historia WOS Sztuka (plastyka i muzyka) Języki obce Religia i etyka
Matematyka Fizyka i astronomia Chemia Biologia Przyroda Geografia Technika Informatyka
Przedmioty zawodowe WF Ścieżki edukacyjne Wychowanie przedszkolne Nauczanie zintegrowane Więcej
Algorytmy i programowanie - zestaw zadań

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ładowa aplikacja:

     

Podaj liczbę całkowitą:





Ilość cyfr:



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:
 liczba naturalna i – dotychczasowa ilość cyfr liczby n
Notacja:
 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)

 

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 d)

Tym razem prezentujemy rozwiązanie w postaci oddzielnej funkcji ilosccyfr:

 

#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 e)

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



Program w języku JavaScript – pkt f)

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>






Autor: dr Andrzej Dyrek, mgr Agnieszka Tarnówka-Stec
Komentarze + Dodaj komentarz
  • W Pascalu jak tworzy się instrukcje złozoną to poprzedza sie ją słowem begin, Informatyk (odpowiedzi: 0)
  • Nawiasem mówiac schemat blokowy nie do tego problemu totalna porazka.
  • C++, Animatex (odpowiedzi: 0)
  • C++ jest podobne do języka PAWN
  • SIŁA!, SIŁA! (odpowiedzi: 0)
  • Biorę Double-Blast`a i nie wiem co się dzieje...
  • algorytmy, Pan:** (odpowiedzi: 0)
  • nie wiem o co chodzi :PP
  • Poprawa błędu w C++!, Gniewo (odpowiedzi: 0)
  • #include <iostream> using namespace std; int main() Poprawcie ten początek wtedy rusza. A tak na marginesie to nie wiem jak wy te dzieci do nauki ścisłych przedmiotów chcecie jeżeli zamieszczacie listing nie sprawdzony. Pozdraiwiam!
  • Niezgodność ze standardami., Bronek (odpowiedzi: 0)
  • W przykładzie Java Script powinno być tak. <script language="JavaScript> </script>
  • w c++ liczona jest suma, a nie srednia, * znaczy, że muszę to pole podać? (odpowiedzi: 0)
  • w sumie to tyle... zapomnieli podzielić przez n ;)
  • gggg, gggg (odpowiedzi: 0)
  • co za nudy
  • Blad ???, Wojtas (odpowiedzi: 6)
  • Mam pytanie, czemu w kompilatorze Dev-C++ wyskakuje mi blad, podczas kompilacji ??
  • algorytm c+, student politechnika (odpowiedzi: 0)
  • buhahahhaha. Niezly portal i niezle ucza:) W szczegolnosci podobaja mi sie programy w c++. Ciekawe tylko czy ten doktor, ktory sie pod tym podpisuje kiedykolwiek mial indeks wyzszej uczelni w reku bo juz na pewno nie kierunku informatycznego. Krotko mowiac no comment;
  • schemat blokowy jest od innego zadania, aa (odpowiedzi: 0)
  • a
  • bład w schemacie blokowym algorytmu max(a,b,c,d), Agnieszka (odpowiedzi: 0)
  • schemat blokowy punkt b) nie przedstawia rozwiązania zadania.
  • Kto to pisał?, uczen 2 gimnazjum (odpowiedzi: 2)
  • Nie chciałbym być nie uprzejmy, zawsze uczy sie od tyłu? Przecież takie zadanie można rozwiązać dużo szybciej, stosując konstrukcje języka...
 
Nasi partnerzy:
MEN SchoolNet eTwinning Związek Powiatów Polskich PCSS
Cisco OFEK Przyjazna Szkoła Fundacja Junior FIO CEO
Parafiada net PR Orange IMAX Cinema City WSP TWP
IMAGE PPI-ETC ArcaVir Master Solution Device


Projekt Polski Portal Edukacyjny Interkl@sa
powstał i był realizowany w latach 2000-2011 dzięki wsparciu
Polsko-Amerykańskiej Fundacji Wolności.

W ramach naszej witryny stosujemy pliki cookies w celu świadczenia Państwu usług na najwyższym poziomie, w tym w sposób dostosowany do indywidualnych potrzeb. Korzystanie z witryny bez zmiany ustawień dotyczących cookies oznacza, że będą one zamieszczane w Państwa urządzeniu końcowym. Możecie Państwo dokonać w każdym czasie zmiany ustawień dotyczących cookies. Więcej szczegółów w naszej "Polityce Prywatności".


Pytania i uwagi: portal@interklasa.pl

Regulamin portalu /  Polityka prywatności /  Ochrona własności intelektualnej /  Zasady korzystania / 
Wyłączenie odpowiedzialności /  Biuro prasowe /  Zasady współpracy /  Redakcja /  Kontakt

Przejdź na stronę ucznia Przejdź na stronę nauczyciela Przejdź na stronę rodzica Certyfikat sieciaki.pl Przyjazna strona kidprotect.pl