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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2012, 12:33   #1
Vlad_Is_Love
Новичок
Джуниор
 
Регистрация: 18.03.2012
Сообщений: 2
Лампочка Работа со списком. Рекурсия. Комментарии. (Delphi)

Многочлен Р(х)=a(n)x^n+a(n-1)x^(n-1)+…+a(1)x+a(0) с вещественными коэффициентами можно представить в виде списка, причем если a(i)=0, то соответствующее звено в список не включается. Опишите программу, интегрирующую многочлен – список Р.

В инете нашел готовый код, но не смог до конца понять реализацию.. Проблемы с комментариями. Объясните кто-нибудь пожалуйста. Проблемные участки программы выделил цветом.


Вот код:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TList = ^TAlist;
  TAList = record
    next : TList;
    c : Real;
    p : Integer;
  end;

var
  L, F, A, Li, Fi, Ai : TList;
  i, N : Integer;
  c : Real;

  function RoundTo(a : Real) : Real;
  begin
    RoundTo := Round(a * 1000) / 1000;
  end;

begin
  
A := nil; F := nil; L := nil;
  write('N='); readln(N);
  for i := N downto 0 do begin
    write('a(',i,')='); readln(c);
    if c <> 0 then begin
      new(L);
      L^.c := c;
      L^.p := i;
      if A <> nil then begin
        A^.next := L;
      end else begin
        F := L;
      end;
      A := L;
    end;
  end;
  // Интегрирование
  L := F;
  if L <> nil then begin
    new(Li);
    Li^.c := L^.c / (L^.p + 1);
    Li^.p := L^.p + 1;
    Fi := Li;
    Ai := Li;
    repeat
      L := L^.next;
      new(Li);
      Li^.c := L^.c / (L^.p + 1);
      Li^.p := L^.p + 1;
      Ai^.next := Li;
      Ai := Li;
    until not(L.next <> nil);
  end;
  // Вывод информации
  L := F;
  if L <> nil then begin
    write('P(x)  = ', FloatToStr(L^.c), '*x^', L^.p);
    repeat
      L := L^.next;
      if (L^.c > 0) then write(' + ') else write(' ');
      write(FloatToStr(L^.c));
      if (L^.p > 1) then write('*x^', L^.p);
      if (L^.p = 1) then write('*x');
    until not(L.next <> nil);
  end;
  writeln;
  Li := Fi;
  if Li <> nil then begin
    write('Pi(x) = ', FloatToStr(RoundTo(Li^.c)), '*x^', Li^.p);
    repeat
      Li := Li^.next;
      if (Li^.c > 0) then write(' + ') else write(' ');
      write(FloatToStr(RoundTo(Li^.c)));
      if (Li^.p > 1) then write('*x^', Li^.p);
      if (Li^.p = 1) then write('*x');
    until not(Li.next <> nil);
  end;
  writeln;
  readln;
end.
Vlad_Is_Love вне форума Ответить с цитированием
Старый 18.03.2012, 12:47   #2
Vlad_Is_Love
Новичок
Джуниор
 
Регистрация: 18.03.2012
Сообщений: 2
По умолчанию

Задачи с рекурсией:
1) Написать рекурсивную функцию, проверяющую является ли заданное число простым.
Код на Дельфи:

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

Var
  P : Integer;

function Simple(a : Integer) : boolean;
begin
  if a > ((P div 2) + 1) then begin
    Result := true;
    exit;
  end;
  if (P mod a) = 0 then begin
    Result := false;
    exit;
  end;
  Result := Simple(a + 1);
end;

begin
  Write('P='); ReadLn(P);
  if (P <= 1) then WriteLn('NO') else
    if (P = 2) then WriteLn('YES') else
      if (Simple(2)) then WriteLn('YES') else Writeln('NO');
  ReadLn;
end.

2) Написать подпрограмму без параметров, подсчитывающую количество цифр в тексте, заданном входном файле. Текст оканчивается точкой.

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

Var
  f : TextFile;
  indx : Integer;

procedure Rec;
var
  b : Char;
begin
  Read(F, b);
  if NOT(EOF(F)) and (b <> '.') then begin
    indx := indx + 1;
    Rec();
  end;
end;

begin
  indx := 0;
  AssignFile(F, 'file.txt');
  Reset(F);
  Rec();
  WriteLn(indx);
  CloseFile(F);
  readln;
end.
Vlad_Is_Love вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со списком soirkar Visual C++ 12 20.07.2011 21:09
работа с списком soirkar Visual C++ 0 28.06.2011 16:29
Комментарии к задаче на Delphi Brabus Помощь студентам 0 05.12.2010 23:01
Работа со списком Delphi novi4ok_Delphi Помощь студентам 3 11.03.2010 15:28