Задачи по Pascal. Количество трехзначных чисел, сумма цифр дел. на k

Задачи по Pascal

Условие задачи : Выведите количество трехзначных чисел таких что сумма цифр делится на k.

Сложность : средняя .

Решение задачи :

Для начала стоит знать как найти сумму цифр в числе, про это вы можете подробно прочитать (тут)

Теперь сразу стоит сказать какие переменные нам будут нужны :

  1. Две переменные для того чтобы задать промежуток(количество) трехзначных чисел A и B.
  2. Для цикла for переменная i
  3. Переменная для суммы цифр в числе
  4. k — число на которое будем делить
  5. count — кол-во трехзначных чисел.
  6. И также нам понадобиться переменная number в которую мы занесем число , а цикле будем с ним работать.

Итого семь переменных.

Начнем мы с каркаса, в нем мы объявим переменные, и введем наш промежуток чисел :

uses crt;

var
    i , summa, number, k, A, B, count : integer;

begin
    write('Введите А : '); readln(A);
    write('Введите B : '); readln(B);
end.

У нас теперь есть промежуток, но нам нужен промежуток именно трехзначных чисел, поэтому нам нужно написать условие, которое будет выводить ошибку если числа меньше 100 или больше 999 :

if ((A < 100) or (A > 999) or (B < 100) or (B > 999)) then
       begin
           writeln('Введите числа от 100 до 999');
           Delay(2000);
           Halt;
       end;

Т.е. если одно из этих чисел меньше 100 или больше 999, то мы выводи ошибку и через 2 секунды выйдем из программы.

Теперь мы введем число k , т.е. число на которое будем делить и заодно присвоим переменной в которой у нас будет кол-во элементов — 0, для того чтобы не было не каких ошибок :

write('Введите число на которое будем делить : ');readln(k);
count := 0;

Фуххх…. Дальше….

Для начала сделаем код нахождения суммы одного числа.

number := abs(number);
summa := 0 ;

while number > 0 do
     begin
          summa := summa + (number mod 10);
          number := (number div 10);
      end;

Этот код рассчитан на то что нам уже известно number.

Теперь нужно определить делиться ли это число на k, для этого нам нужно написать простое условие :

if (summa mod k = 0) then
    begin
         writeln(i);
         count := count + 1;
     end;

Т.е. после цикла у нас осталась сумма, вот от неё мы и ищем остаток от деления.

Всё что нам осталось это весь этот бред(цикл и условие) засунуть в другой цикл :

 for i:=A to B do
        begin
            number := i ;
            number := abs(number);
            summa := 0 ;

            while number > 0 do
                begin
                    summa := summa + (number mod 10);
                    number := (number div 10);
                end;
            if (summa mod k = 0) then
                begin
                    writeln(i);
                    count := count + 1;
                end;
         end;

Практически нечего не поменялось. Давайте примерно посмотрим как это работает.

Допустим у нас промежуток от 100 до 150, т.е.

 for i:=A(100) to B(150) do

Дальше мы переменной number присваиваем число i , т.е. 100 и ищем от него модуль и обнуляем сумму.

Затем мы ищем сумму цифр числа, потом мы проверяем делиться ли она на k, если делиться то выводим его и кол-во таких чисел увеличиваем на 1.

Затем цикл повторяется, в переменной number уже будет 101 и так далее.

Весь код программы :

uses crt;

var
    i , summa, number, k, A, B, count : integer;

begin
    clrscr;

    write('Введите А : '); readln(A);
    write('Введите B : '); readln(B);

    if ((A < 100) or (A > 999) or (B < 100) or (B > 999)) then
       begin
           writeln('Введите числа от 100 до 999');
           Delay(2000);
           Halt;
       end;

    write('Введите число на которое будем делить : ');readln(k);
    count := 0;

    for i:=A to B do
        begin
            number := i ;
            number := abs(number);
            summa := 0 ;

            while number > 0 do
                begin
                    summa := summa + (number mod 10);
                    number := (number div 10);
                end;
            if (summa mod k = 0) then
                begin
                    writeln(i);
                    count := count + 1;
                end;
         end;
    writeln('Кол-во элементов равно ', count);

readln;
end.

cyber
Оцените автора
CyberLesson | Быстро освоить программирование Pascal и C++. Решение задач Pascal и C++
Добавить комментарий