Курс Основы программирования ФИИТ лекции 1 семестр 2022-23 гг.

Ссылка на презентации: 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. Проверьте

Прилагаю скриншот, количество оптимальное.

Для 37 степени 7 умножений оптимум, а у Вас - 9

Здравствуйте, предлагаю свой вариант решения задачи, при помощи рекурсии. Счетчик умножений выводится несколько раз, потому что он находится внутри рекурсии, и я не знаю как это исправить, однако высчитывает он верно, проблема только в количестве выводов:

##

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)}'); 

Да, хорошо. Бросается в глаза, что Вы одно и то же выражение вычисляете дважды

А вот и сердце, которое мы рисовали с инициативными студентами:

1 лайк