Ссылка на презентации: https://drive.google.com/drive/folders/1N0LzbJDtMNeYUPq3ZPMeLbMm3uoMRWJC?usp=sharing
Публикую простейшие операторы и операции в PascalABC.NET.
Необходимый минимум по PascalABC.NET
Необходимый минимум PABC.NET 2022.pdf (146.8 КБ)
Напишите, где нужно написать более подробно и нужно ли сравнение с Python
Добрый вечер! Прилагаю свой вариант исполнения задания на дом. Не уверен, что этот вариант является наиболее оптимальным, но меньшее количество операций умножения у меня сделать не получилось.
var num, power, result: int64; //возводим число x в степень y
begin
result := 1;
num := ReadInteger('Введите число:');
power := ReadInteger('Введите желаемую степень числа');
write('Число ', num, ' в степени ', power, '=' );
while power > 0 do
begin
if power mod 2 = 1 then
result := result * num;
num:=num*num;
power := power div 2;
end;
writeln(' ',result);
end.
Да, хорошее решение. Только надо посчитать количество умножений. Для a**5 оптимальное равно 5. Проверьте
Здравствуйте, предлагаю свой вариант решения задачи, при помощи рекурсии. Счетчик умножений выводится несколько раз, потому что он находится внутри рекурсии, и я не знаю как это исправить, однако высчитывает он верно, проблема только в количестве выводов:
##
function power(a, n, c: BigInteger): BigInteger;
begin
if n <> 1 then
if odd(n) then
power := power(a, n - 1, c + 1) * a
else
power := power(a, n div 2, c + 1) * power(a, n div 2, c + 1)
else
begin
power := a;
println(c);
end;
end;
var num := ReadInteger('Введите число:');
var pow := ReadInteger('Введите желаемую степень числа:');
Assert(pow >= 0, 'Степень не должна быть отрицательной!');
Println($'Число {num} в степени {pow} = {pow = 0 ? 1 : power(num, pow, 0)}');
Да, хорошо. Бросается в глаза, что Вы одно и то же выражение вычисляете дважды
А вот и сердце, которое мы рисовали с инициативными студентами: