Приветствуем читателей нашего сайта! Сегодня мы решаем задачи из сборника Абрамяна — 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?