Решение задач. День двенадцатый. Задачи While15-27


while15-27

Приветствуем читателей нашего сайта! Сегодня мы решаем задачи из сборника Абрамяна — while15-27.

Задачи while15-27

While15. Начальный вклад в банке равен 1000 руб. Через каждый месяц размер вклада увеличивается на P процентов от имеющейся суммы (P — вещественное число, 0 < P < 25). По данному P определить, через сколько месяцев размер вклада превысит 1100 руб., и вывести найденное количество месяцев K (целое число) и итоговый размер вклада S (вещественное число).

Program While_15;

var
  p, s: real;
  k: integer;

begin
  write('Введите P: '); 
  readln(p);
  s := 1000; 
  while s <= 1100 do
  begin
    s := s * (p / 100 + 1); //находим размер вклада за месяц
    inc(k); //увеличиваем число месяца на 1
  end;
  writeln('Количество месяцев: ', k);
  writeln('Итоговый размер вклада: ', s);
end.

While16. Спортсмен-лыжник начал тренировки, пробежав в первый день 10 км. Каждый следующий день он увеличивал длину пробега на P процентов от пробега предыдущего дня (P — вещественное, 0 < P < 50). По данному P определить, после какого дня суммарный пробег лыжника за все дни превысит 200 км, и вывести найденное количество дней K (целое) и суммарный пробег S (вещественное число).

program While_16;

var
  p, s, norm: real;
  k: integer;

begin
  write('Введите P: '); 
  readln(p);
  norm := 10;
  s := 10;
  k := 1; //задаем начальное количество месяцев
  while s <= 200 do
  begin
    norm := norm * (p / 100 + 1); //увеличиваем длину пробега на P процентов
    s := s + norm; //увеличиваем суммарный пробег
    inc(k); //увеличиваем количество дней на 1
  end;
  writeln('Количество дней: ', k);
  writeln('Суммарный пробег: ', s);
end.

While17. Дано целое число N (> 0). Используя операции деления нацело и взятия остатка от деления, вывести все его цифры, начиная с самой правой (разряда единиц).

program While_17;

var
  N: integer;

begin
  write('Введите число: '); 
  readln(N);
  write('Цифры: ');
  while N > 0 do //пока число больше нуля
  begin
    write(N mod 10, ' '); //выводим последнюю цифру числа
    N := N div 10; //убираем последнюю цифру. последней цифрой становится предпоследняя
  end;
end.

While18. Дано целое число N (> 0). Используя операции деления нацело и взятия остатка от деления, найти количество и сумму его цифр.

program While_18;

var
  N, Summ, Count: integer;

begin
  write('Введите число: '); 
  readln(N);
  {Сумма цифр по умолчанию равна нулю}
  while N > 0 do
  begin
    Summ := Summ + N mod 10; //прибавляем к существующей сумме значение последней цифры числа
    N := N div 10; //убираем последнюю цифру. последней становится предпоследняя
    Inc(Count); //увеличиваем количество цифр на 1
  end;
  write('Количество цифр в числе: ', Count );
  writeln; //пустая строка
  writeln('И их сумма: ', Summ);  
end.

While19. Дано целое число N (> 0). Используя операции деления нацело и взятия остатка от деления, найти число, полученное при прочтении числа N справа налево.

program while_19;

var
  N, digit, N_mirror: integer;

begin
  write('Введите число: ');
  readln(N);
  writeln;
  N_mirror := 0;
  while N > 0 do
  begin
    digit := N mod 10; //находим последнюю цифру числа
    N_mirror := 10 * N_mirror + digit; //
    N := N div 10; //убираем последнюю цифру
  end;
  writeln('Число справа налево: ', N_mirror);
end.

While20. Дано целое число N (> 0). С помощью операций деления нацело и взятия остатка от деления определить, имеется ли в записи числа N цифра «2». Если имеется, то вывести True, если нет — вывести False.

program while_20;

var
  N: integer;
  pr: boolean;
begin
  write('Введите число: ');
  readln(N);
  pr := false; //присваиваем начальное значение false логической переменной
  while (n <> 0) and (pr = false) do
        if n mod 10 <> 2 then n := n div 10 //если последняя цифра числа не равняется 2, убираем ее 
        else 
           pr := true; //если последняя цифра = 2, меняем значение логической переменной на true
  writeln(pr);
end.

While21. Дано целое число N (> 0). С помощью операций деления нацело и взятия остатка от деления определить, имеются ли в записи числа N нечетные цифры. Если имеются, то вывести True, если нет — вывести False.

program while_21;

var
  N: integer;
  pr: boolean;
begin
  write('Введите число: ');
  readln(N);
  pr := false;
  while (n<>0) and (pr = false) do
        if not odd(n mod 10) then n := n div 10 //если последняя цифра числа четная, убираем ее
         else
            pr := true;
  writeln(pr);
end.

While22°. Дано целое число N (> 1). Если оно является простым, то есть не имеет положительных делителей, кроме 1 и самого себя, то вывести True, иначе вывести False.

program while_22;

var
  N, s: integer;
  pr: boolean;
begin
  write('Введите число: ');
  readln(N);
  pr := true;
  s := 2; //задаем делителю начальное значение
  while (s <> n) and (pr = true) do
        if n mod s <> 0 then inc(s) //если числа не делятся нацело, увеличиваем значение делителя
          else
            pr := false;
  writeln(pr);
end.

While23°. Даны целые положительные числа A и B. Найти их наибольший общий делитель (НОД), используя алгоритм Евклида:

НОД(A, B) = НОД(B, A mod B), если B ≠ 0;  НОД(A, 0) = A.

Эту задачу, а также алгоритм Евклида, я разберу в следующем уроке.
While24. Дано целое число N (> 1). Последовательность чисел Фибоначчи FK определяется следующим образом:
F1 = 1,
F2 = 1,
FK = FK–2 + FK–1, K = 3, 4, ….
Проверить, является ли число N числом Фибоначчи. Если является, то вывести True, если нет — вывести False.

program while_24;

var
  N, a, b, tmp: integer;

begin
  read(N);
  a := 1; // Первое число ряда Фибоначчи.
  b := 1; // второе число Фиббоначчи
  while (N > b) do
  begin
    tmp := b; // записываем второе число во временную переменную
    b := a + b; // записываем вместо второго числа, следующее число Фиббоначчи
    a := tmp; // переносим значение второго числа в первое
  end;
 write(N = B); // логическое выражение
end.

While25. Дано целое число N (> 1). Найти первое число Фибоначчи, большее N (определение чисел Фибоначчи дано в задании While24).

program while_25;

var
  N, a, b, tmp: integer;

begin
  read(N);
  a := 1;
  b := 1;
 {программа такая же, как предыдущая, но теперь мы совершаем еще одну, дополнительную итерацию.}  
  while (N >= b) do 
  begin
    tmp := b;
    b := a + b;
    a := tmp;
  end;
 write(B);
end.

While26. Дано целое число N (> 1), являющееся числом Фибоначчи: N = FK (определение чисел Фибоначчи дано в задании While24). Найти целые числа FK–1 и FK+1 — предыдущее и последующее числа Фибоначчи.

program while_26;

var
  N, a, b, tmp: integer;

begin
  read(N);
  a := 1; // первое число Фиббоначчи
  b := 1; // второе число Фиббоначчи
  while (N > b) do
  begin
    tmp := b;
    b := a + b;
    a := tmp;
  end;
  write(b + a, ' ', a); // вычисляем следующее и пишем предыдущее
end.

While27. Дано целое число N (> 1), являющееся числом Фибоначчи: N = FK (определение чисел Фибоначчи дано в задании While24). Найти целое число K — порядковый номер числа Фибоначчи N.

program while27;

var
  N, a, b, count, c: integer;

begin
    writeln('Введите целое число Фиббоначи: ');
    readln(N); 
    a := 1; //первый член ряда Фибоначчи
    b := 1; //второй член ряда Фибоначчи
    count := 2; //минимальный номер, с которого начинаем считать числа
    { Выполняем цикл до тех пор, пока введенное нами 
    число N больше очередного члена ряда Фибоначчи: }
    while (N > b) do
    begin
      c := b; //запоминаем второй член ряда
      b := a + b; //находим новое значение, сложив предыдущие 
      a := c; //первому члену приписываем предыдущий второй (c = b)
      inc(count)//Увеличиваем номер числа Фибоначчи на 1
    end;
  { После выхода из цикла выводим номер числа Фибоначчи: } 
  writeln('Порядковый номер числа Фибоначчи ', N,': ', count);
end.

На сегодня все! Подписывайтесь на наш сайт и не забывайте кликать по кнопочкам! Если у вас возникли вопросы, не стесняйтесь! Задавайте их в комментариях.

  1. [while16]
    этот способ подойдет?

    program Qwerty;
    var p, s: real;
    k: integer;
    begin
    s := 10;
    k := 1;
    read(p);
    p := 10 / 100 * p;
    while s <= 200 do
    begin
    s := s + p;
    k := k + 1;
    end;
    writeln(k);
    writeln(s:3:2);
    end.

  2. Решение задачи 19 не предусматривает числа, оканчивающиеся нулём (ями), например: 1200. Выводит ваша программа: 21. Частично правильное решение. Да и решить можно было куда проще:

    var n: integer;
    begin
    readln (n);
    while n > 0 do
    begin
    write (n mod 10);
    n := n div 10
    end
    end.

  3. Вау!!! Это так классно! Обожаю информатику, но это что-то с чем-то! Мой учитель ограничивается простыми задачками ,что становится скучно, а мне хочется развиваться. Именно поэтому ,для меня,этот сайт-находка века. У меня только один вопрос: обязательна ли операция inc?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *