Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2012, 19:40   #1
wertret
Пользователь
 
Регистрация: 11.08.2009
Сообщений: 15
Лампочка Разложение в ряд (Delphi)

Приветствую! Возникла проблема в решении задачи, условие на картинке.
В программировании соображаю не очень, как и в математике, так что прошу объяснить хотя бы основную идею реализации алгоритма, что и как примерно нужно делать?
wertret вне форума Ответить с цитированием
Старый 12.04.2012, 09:08   #2
wertret
Пользователь
 
Регистрация: 11.08.2009
Сообщений: 15
По умолчанию

Ну же, уважаемые! Крайне надеюсь на вашу помощь
wertret вне форума Ответить с цитированием
Старый 12.04.2012, 11:26   #3
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Далеко не самый хороший алгоритм, но работает верно, с точки зрения задания:

Код:
uses
  SysUtils, math;
type
  Telem=record
    el,grade:integer;
  end;

  arr=array of Telem;

function sum(var m:arr):integer;
var
  i:integer;
begin
  result:=0;
  for i:=0 to high(m) do
    if m[i].el<>0 then
      result:=result+round(power(m[i].el,m[i].grade));
end;

procedure ryad(var m:arr; x:integer);
var
  tmp:integer;
  el,grade:integer;
  i:integer;
  Lel,Lgrade:boolean;
begin
  i:=0;
  if x<=9 then
    begin
      setlength(m,1);
      m[0].el:=x;
      m[0].grade:=1;
    end
  else
    repeat
      setlength(m,length(m)+1);
      el:=1;
      grade:=9;
      tmp:=round(power(el,grade));
      while (tmp+sum(m)<=x) and ((el<=9)and(grade<=9)) do
        begin
          if grade<9 then
            begin
              inc(grade);
              Lel:=false;
            end
          else
            begin
              grade:=1;
              inc(el);
              Lel:=true;
            end;
          tmp:=round(power(el,grade));
        end;
      if tmp<>x then
        if Lel then
          begin
            dec(el);
            grade:=9;
          end
        else
          dec(grade);
      m[i].el:=el;
      m[i].grade:=grade;
      inc(i);
    until sum(m)=x;
end;

var
  m:arr;
  x:integer;
  i:integer;
  s:string;
begin
  readln(X);
//  x:=3541;
  ryad(m,x);
  s:='';
  for i:=0 to high(m) do
    s:=s+inttostr(m[i].el)+'^'+inttostr(m[i].grade)+'+';
  delete(S,length(S),1);
  write(S,'= ');
  writeln(sum(m));
  readln;
end.
Поясняю: для числа 15 выдаст:
Цитата:
2^3+2^2+2^1+1^9= 15
вместо
Цитата:
9^1+6^1= 15
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 12.04.2012, 14:04   #4
wertret
Пользователь
 
Регистрация: 11.08.2009
Сообщений: 15
По умолчанию

Спасибо огромное!
wertret вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разложение функции в ряд Тейлора в СИ Fobos45 Помощь студентам 5 12.04.2012 18:26
Разложение функции в ряд Dmitry333 Помощь студентам 10 23.01.2012 16:49
разложение в ряд фурье(С/С++) Lyt Помощь студентам 2 19.12.2011 23:38
Разложение функции, Ряд Тейлора. Andrag Помощь студентам 6 22.01.2010 14:41
Разложение в ряд Маклорена Mari Помощь студентам 2 03.02.2008 23:23