Procedure number(n : integer; var k : integer);
begin
k := 0;
repeat
k := k + 1;
n := n div 10
until n = 0
end;
Keyingi prosedurada qidirilayotgan raqamlar soni joylashadi. Unda,m o’zgaruvchi raqamlar sonini bir, ikki, uch, c-xonali sonlarda (9, 90, 900, ..., 9...0) ifodalashga xizmat qiladi.
c o’zgaruvchi sonda - betning nomerida mavjud raqamlar sonini ko’rsatiadi, z o’zgaruvchida qidirilayotgan natija to’planib boriladi, syig’indi esa bizga hisoblash uchun jami nechta n-xonali son ishlatilganini ifodalaydi.
Boshlang’ich qiymatlar: m := 9; z := 0; s := 0, sondagi raqamlar soni esa number(n, c) prosedurasidan olinadi va c o’zgaruvchiga beriladi:
m := 9; number(n, c); z := 0; s := 0;
Endi sikl kiritilgan betlar sonining 1 dan c-1 gacha bo’lgan raqamlar miqdori bo’yicha bo’ladi. Sikl o’zgaruvchisi i.
for i := 1 to c - 1 do
begin
z := z + m*i; {Raqamlar yig’indisi}
s := s + m;
m := m*10
end;
Siklda raqamlar yig’indisi (z := z + m*i), foydalanilgan bir xonali, ikki xonali va h.k raqamlarning yig’indisi hisoblanadi.
Sikl tugatilganidan so’ng z yig’indiga qolgan c-xonali raqamlar qo’shiladi:
z := z + (n - s) xc {n - s qolgan c-xonadan iborat raqamli betlar}
Prosedura
Procedure Page(n : integer; var z : integer);
var
i, m, c, s : integer;
begin
m := 9;
number(n, c); z := 0; s := 0;
for i := 1 to c - 1 do
begin
z := z + m*i; {Raqamlar yig’indisi}
s := s + m;
m := m*10
end;
z := z + (n - s)*c
end;
Va nihoyat, dasturning to’la ko’rinishi:
Program L88; { Betlarni nomerlash uchun kerak bo’ladigan raqamlar soni }
Do'stlaringiz bilan baham: |