Программа для возведения натурального числа в степень

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Ответить
fs444
новенький
Сообщения: 38
Зарегистрирован: 09.09.2008 23:55:30

Программа для возведения натурального числа в степень

Сообщение fs444 »

Есть задание: написать программу для возведения натурального числа в степень.
Текст задания.JPG

Я не понимаю смысла закономерности
n2(n в квадрате)=1+3+5+7+9+...+2n-1

Что должно быть вместо троеточия?
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Re: Программа для возведения натурального числа в степе

Сообщение B4rr4cuda »

5^2=1+3+5+7+9 //9=2*5-1
6^2=1+3+5+7+9+11 //11=2*6-1
и тд
Вместо троеточия некая сумма чисел.
Можно использовать такой алгоритм: вычисляешь последнее число (n*2-1) и отнимаешь по двойке пока не дойдешь до единицы и, складывая полученные числа, получаешь результат возведения в квадрат.
fs444
новенький
Сообщения: 38
Зарегистрирован: 09.09.2008 23:55:30

Re: Программа для возведения натурального числа в степе

Сообщение fs444 »

B4rr4cuda, спасибо :)

Добавлено спустя 13 часов 34 минуты 45 секунд:
Re: Программа для возведения натурального числа в степень
Я сделал так

Код: Выделить всё

Program n2_sostavit_programmu_vozvedenia_naturalnogo_chisla_v_kvadrat;
 Var i,n,s:LongInt;
 Begin
  Writeln('Введите натуральное число');
  Readln(n);
  s:=0;
  For i:=1 To n Do Begin
  s:=s+(2*i-1);
  End;
  Writeln('n = ',n,'; n^2 = ',s);
  Readln;
End.

Что скажете? :)
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Re: Программа для возведения натурального числа в степе

Сообщение B4rr4cuda »

Все верно. =)

Мой вариант:

Код: Выделить всё

var s,n,k:integer;
  begin
    Writeln('Введите натуральное число');
    Readln(n);
    s:=0;
    k:=n*2-1;
    while k>=1 do
    begin
      s:=s+k;
      k:=k-2;
    end;
    Writeln('n = ',n,'; n^2 = ',s);
    Readln;
  end.
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Re: Программа для возведения натурального числа в степе

Сообщение shade »

А мой алгоритм такой 8)

Код: Выделить всё

function pow(a, n: Integer): Integer;
begin
  Result := 1;
  while n > 0 do
  begin
    Result := Result * Result;
    if (n mod 2) <> 0 then Result := Result * a;
    n := n div 2;
  end;
end;

var
  a, n: Integer;
begin
  readln(a, n);
  writeln( pow(a, n) );
end.

Сложность: O( ln(n) )

PS: возводимое число может быть и вещественным :wink:
fs444
новенький
Сообщения: 38
Зарегистрирован: 09.09.2008 23:55:30

Re: Программа для возведения натурального числа в степе

Сообщение fs444 »

В книжке, откуда я эту задачку взял, до этого места рассматривались только операторы if и for. Про все остальное ни слова еще не было, поэтому я больше ничего и не использовал :)

shade, а почему в твоей программе надо вводить два числа - a и n? Я считал, что программе нужно знать только одно - какое число в квадрат возводить. И приведи полный код программы, а то мне паскаль на Result указывает "Unknown Identifier".
Михаил Крамер
новенький
Сообщения: 73
Зарегистрирован: 08.02.2008 13:26:40

Re: Программа для возведения натурального числа в степе

Сообщение Михаил Крамер »

fs444, shade привёл вам прогу возведения любого целого числа в любую натуральную степень. А ошибка при компиляции у вас возникает из-за того, что он использовал синтаксис Delphi и компилятору надо это указать
SergeySmlInf
новенький
Сообщения: 40
Зарегистрирован: 02.10.2007 07:59:26
Откуда: Смоленск

Re: Программа для возведения натурального числа в степе

Сообщение SergeySmlInf »

А вообще-то задача возведения натурального А во вторую степень сводится к получению суммы ряда нечетных чисел от 1 до (по барабану) из А членов...
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Re: Программа для возведения натурального числа в степе

Сообщение shade »

SergeySmlInf писал(а):А вообще-то задача возведения натурального А во вторую степень сводится к получению суммы ряда нечетных чисел от 1 до (по барабану) из А членов...

ну это как сводить, ведь квадрат числа можно получить простым умножением a^2 = a*a :lol:
Если запретить использовать умножение, то наиболее интересна реализация приведенная B4rr4cuda, но только чисто теоретически
Andreich
постоялец
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Программа для возведения натурального числа в степе

Сообщение Andreich »

Есть еще один вариант по возведению числа в степень, правда он не на последовательности,.. Зато все просто и понятно!

X^Y = exp(ln(X)*Y)
SergeySmlInf
новенький
Сообщения: 40
Зарегистрирован: 02.10.2007 07:59:26
Откуда: Смоленск

Re: Программа для возведения натурального числа в степе

Сообщение SergeySmlInf »

Тогда надо выбросить "натурального"...
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Re: Программа для возведения натурального числа в степе

Сообщение shade »

Andreich писал(а):Есть еще один вариант по возведению числа в степень, правда он не на последовательности,.. Зато все просто и понятно!

X^Y = exp(ln(X)*Y)

Да, можно, но как реализовать exp и ln ?
Имея только арифметические операции (сложение/вычитание и произведение/деление).
Andreich
постоялец
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Программа для возведения натурального числа в степе

Сообщение Andreich »

SergeySmlInf писал(а):Тогда надо выбросить "натурального"...

Зачем?!

shade писал(а):как реализовать exp и ln ?
Имея только арифметические операции (сложение/вычитание и произведение/деление).

Вопрос интересный,... Ответ на него мне не известен! :)
Михаил Крамер
новенький
Сообщения: 73
Зарегистрирован: 08.02.2008 13:26:40

Re: Программа для возведения натурального числа в степе

Сообщение Михаил Крамер »

Andreich, ведь речь в ветке идёт о конкретной учебной задаче, ведь понятно, что в реальной проге никто не будет считать сумму нечётных чисел, вместо того, чтобы написать a * a, но для развития алгоритмического мышдения - полезно.
Ответить