
Приветствуем читателей нашего сайта! Сегодня мы решаем задачи из сборника Абрамяна — 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.
На сегодня все! Подписывайтесь на наш сайт и не забывайте кликать по кнопочкам! Если у вас возникли вопросы, не стесняйтесь! Задавайте их в комментариях.
Можно легче решение 15 задачи?
[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.
Решение задачи 19 не предусматривает числа, оканчивающиеся нулём (ями), например: 1200. Выводит ваша программа: 21. Частично правильное решение. Да и решить можно было куда проще:
var n: integer;
begin
readln (n);
while n > 0 do
begin
write (n mod 10);
n := n div 10
end
end.
Вау!!! Это так классно! Обожаю информатику, но это что-то с чем-то! Мой учитель ограничивается простыми задачками ,что становится скучно, а мне хочется развиваться. Именно поэтому ,для меня,этот сайт-находка века. У меня только один вопрос: обязательна ли операция inc?