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

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

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

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

Сообщение fs444 » 04.10.2008 23:42:25

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

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

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

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

Сообщение B4rr4cuda » 05.10.2008 00:01:26

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) и отнимаешь по двойке пока не дойдешь до единицы и, складывая полученные числа, получаешь результат возведения в квадрат.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

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

Сообщение fs444 » 05.10.2008 01:24:08

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.

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

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

Сообщение B4rr4cuda » 05.10.2008 23:46:16

Все верно. =)

Мой вариант:
Код: Выделить всё
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.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

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

Сообщение shade » 06.10.2008 10:44:54

А мой алгоритм такой 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:
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

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

Сообщение fs444 » 06.10.2008 22:39:03

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

shade, а почему в твоей программе надо вводить два числа - a и n? Я считал, что программе нужно знать только одно - какое число в квадрат возводить. И приведи полный код программы, а то мне паскаль на Result указывает "Unknown Identifier".
fs444
новенький
 
Сообщения: 38
Зарегистрирован: 09.09.2008 23:55:30

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

Сообщение Михаил Крамер » 08.10.2008 15:27:21

fs444, shade привёл вам прогу возведения любого целого числа в любую натуральную степень. А ошибка при компиляции у вас возникает из-за того, что он использовал синтаксис Delphi и компилятору надо это указать
Михаил Крамер
новенький
 
Сообщения: 73
Зарегистрирован: 08.02.2008 14:26:40

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

Сообщение SergeySmlInf » 09.10.2008 15:57:05

А вообще-то задача возведения натурального А во вторую степень сводится к получению суммы ряда нечетных чисел от 1 до (по барабану) из А членов...
SergeySmlInf
новенький
 
Сообщения: 40
Зарегистрирован: 02.10.2007 07:59:26
Откуда: Смоленск

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

Сообщение shade » 11.10.2008 14:47:02

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

ну это как сводить, ведь квадрат числа можно получить простым умножением a^2 = a*a :lol:
Если запретить использовать умножение, то наиболее интересна реализация приведенная B4rr4cuda, но только чисто теоретически
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

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

Сообщение Andreich » 11.10.2008 20:26:59

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

X^Y = exp(ln(X)*Y)
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

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

Сообщение SergeySmlInf » 13.10.2008 10:29:22

Тогда надо выбросить "натурального"...
SergeySmlInf
новенький
 
Сообщения: 40
Зарегистрирован: 02.10.2007 07:59:26
Откуда: Смоленск

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

Сообщение shade » 13.10.2008 15:04:58

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

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

Да, можно, но как реализовать exp и ln ?
Имея только арифметические операции (сложение/вычитание и произведение/деление).
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

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

Сообщение Andreich » 14.10.2008 00:52:00

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

Зачем?!

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

Вопрос интересный,... Ответ на него мне не известен! :)
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

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

Сообщение Михаил Крамер » 14.10.2008 14:20:06

Andreich, ведь речь в ветке идёт о конкретной учебной задаче, ведь понятно, что в реальной проге никто не будет считать сумму нечётных чисел, вместо того, чтобы написать a * a, но для развития алгоритмического мышдения - полезно.
Михаил Крамер
новенький
 
Сообщения: 73
Зарегистрирован: 08.02.2008 14:26:40


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru
cron