Паскаль. Основы программирования

Разборка форд, vip эскорт в санкт петербурге тут. |

Задание 4 - часть 2


Выясняем сколько этих "лишних" цифр (m := s - n). Чтобы отбросить их, надо разделить последнее число p (а оно в силу инертности работы цикла увеличится еще на 1, поэтому действительное последнее число, сумма цифр которого подсчитывалась равно: p := p - 1) на 10, 100, 1000 и т. п., короче, на единицу с нулями, у которого столько нулей, сколько лишних цифр нами обнаружено, т. е. m.

С этой целью организуется цикл от 1 до м, в котором это число и строится:

         m := s - n; p := p - 1; q := 1;

         for i := 1 to m do q := q*10;

 

Теперь оно стало равно q. Далее следует разделить число p на q и "отбросить" ненужные цифры (c := p div q), а вот чтобы найти искомую цифру, надо еще найти остаток от деления c на 10 (а вдруг в оставшемся после деления на q числе еще остались не одна, а 2, 3 или более цифры, например,

 
).

Это выполняется последней группой операторов:

c := p div q; c := c mod 10;

 

Вам остается подумать, будет ли работать программа, когда сумма цифр s и число заданных цифр n окажутся равными?

Программа

Program

Problem8; { Определение цифр в записи 1234567... }

     uses WinCrt;

     var

         n, p, s, c, v, q, i, m : integer;

{----------------------------------------------------------------------------------------}

     Procedure number(n : integer; var k : integer); {Число цифр}

         begin

            k := 0;

            repeat

               k := k + 1;

               n := n div 10

            until n = 0

         end;

{----------------------------------------------------------------------------------------}

     begin

        write('Введите число цифр '); readln(n);

        p := 1; s := 0;

        repeat

           number(p,v);

           s := s + v; p := p + 1

        until s >= n;

        m := s - n; p := p - 1; q := 1;

        for i := 1 to m do q := q*10;

        c := p div q; c := c mod 10;

       writeln('Последняя цифра в записи этих цифр будет: ', c);

       writeln('Она находится в числе ', p)

     end.




Начало  Назад  Вперед



Книжный магазин