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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2012, 03:37   #1
Angelique
 
Регистрация: 27.11.2012
Сообщений: 8
По умолчанию Динамические переменные. Free Pascal

Здравствуйте! Помогите, пожалуйста, создать программу.
Многочлен P(x) = a0 + a1 x + a2 x2 + ... + an xn с целыми коэффициентами представьте в динамической памяти. При этом, если ai=0, то соответствующий член не включать в память. Создайте подходящий тип данных и определите следующие процедуры и функции для работы с такими многочленами:
процедуру PRINT(P, S), которая выводит P как многочлен от переменной, равной коду символьной переменной S.

У меня есть похожая программа. Здесь задание: Многочлен P(x) = a0 + a1 x + a2 x2 + ... + an xn .Q(x)=b0 + b1 x + b2 x2 + ... + bn xn с целыми коэффициентами представьте в динамической памяти. При этом, если ai=0,bi=0 то соответствующий член не включать в память.
процедуру RAZ(P, Q, R), которая строит многочлен R, как разность многочленов Q и P;
Код:
 program din;
 type intmas=array [1..1000] of integer;
 var P,Q,R: ^intmas;
 i,k,n,z,a,g,w:integer;
 c,t:integer;
 begin
 new(P);
 new(Q);
 new(R);
 writeln('vvedite kolichestvo slagaemyh mnogochlena Q[X]');
 readln(n);
 for k:=1 to n do begin
 q^[k]:=(n-1);
 end;
 for i:=1 to n do
 begin
 write('vvedi kofficient pri x^',i-1,'=');
 readln(q^[i]);
 end;
  writeln('vvedite kolichestvo slagaemyh mnogochlena P[X]');
 readln(a);
  for z:=1 to a do begin
 p^[z]:=(a-1);
 end;
 for w:=1 to a do
 begin
 write('vvedi kofficient pri x^',w-1,'=');
readln(p^[w]);
 end;
 if n=a then begin
 for i:=n downto 1 do
 write(q^[i],'x^',i-1,'+');
 writeln;
 for i:=a downto  1 do
 write(p^[z],'x^',i-1,'+');
   writeln;
   writeln('------------------------');
 for i:=a downto 1 do begin
 r^[i]:=q^[i]-p^[z];
 write(r^[i],'x^',i-1,'+'); end;end;
 if n>a
 then begin
  for i:=n downto 1 do
 write(q^[i],'x^',i-1,'+');
 writeln;
 for i:=a downto  1 do
 write(p^[z],'x^',i-1,'+');
   writeln;
   writeln('------------------------');
 
   for i:=n downto  1 do
    if i>a then begin
      write(q^[i],'x^',i-1,'+'); end
          else
          for i:=a downto 1 do begin
     r^[i]:=q^[i]-p^[z];
     write(r^[i],'x^',i-1,'+');
 end;
 end;
 if a>n
 then begin
  for i:=a downto 1 do
 write(p^[z],'x^',i-1,'+');
 writeln;
 for i:=n downto  1 do
 write(q^[i],'x^',i-1,'+');
   writeln;
   writeln('------------------------');
 
   for i:=a downto  1 do
    if i>n then begin
      write(p^[z],'x^',i-1,'+'); end
          else
          for i:=n downto 1 do begin
     r^[i]:=p^[z]-q^[i];
     write(r^[i],'x^',i-1,'+');
 end;
 end;
 end.
Помогите исправить или написать новую.
Или хотя бы помогите с процедурой PRINT(P, S), которая выводит P как многочлен от переменной, равной коду символьной переменной S. Помогите пожалуйста.

Последний раз редактировалось Stilet; 27.11.2012 в 09:23.
Angelique вне форума Ответить с цитированием
Старый 27.11.2012, 09:31   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Смотрел пример, но так и не увидел в нем процедуру RAZ()
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.11.2012, 11:32   #3
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Анжелика, это неоднократно было. Простой поиск по "многочл*" или "полином*" в разделе "Новички в программировании" выдаст список. Например:
http://programmersforum.ru/showthread.php?t=212945
http://programmersforum.ru/showthread.php?t=167281
Успехов.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 27.11.2012, 15:26   #4
Angelique
 
Регистрация: 27.11.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Смотрел пример, но так и не увидел в нем процедуру RAZ()
Да, там программа не доработана, нет процедуры и не удален аi=0.
Цитата:
Сообщение от TinMan Посмотреть сообщение
Анжелика, это неоднократно было. Простой поиск по "многочл*" или "полином*" в разделе "Новички в программировании" выдаст список....Успехов.
Спасибо большое, я почему-то не сообразила сразу поискать на вашем форуме.
Но у меня проблема с этой программой именно в написании процедуры (процедура PRINT(P, S), которая выводит P как многочлен от переменной, равной коду символьной переменной S.)
Помогите хотя бы алгоритм понять, распишите пожалуйста. (Буду весьма благодарна, если напишите её ещё на Паскале). Надежда на вас, больше никто не знает, спрашивала у многих.
Angelique вне форума Ответить с цитированием
Старый 02.12.2012, 18:11   #5
Angelique
 
Регистрация: 27.11.2012
Сообщений: 8
По умолчанию :(

Помогите процедуру написать.
Код:
program din;  
type intmas=array [1..1000] of integer;  {определяем тип динамического массива}
var P: ^intmas;  {определяем динамическую переменную для хранения массива}
i,k:integer;  
s:char;
{процедура PRINT}
begin  
new(P); {создаем динамический массив в памяти}
writeln('Input symbol');  {запрашиваем ввод символа для указания его в качестве аргумента многочлена}
readln(s);
writeln('vvedite kolichestvo slagaemyh mnogochlena P[',s,']');  {запрашиваем количество членов многочлена}
readln(n);  
for i:=1 to n do begin  P^[i]:=0;  end;  
{заполняем массив коэффициентами}
for i:=1 to n do  
  begin  
    write('vvedi kofficient pri ',s,'^',i-1,'=');  
    readln(p^[i]);   {считываем с клавиатуры очередной коэффициент и помещаем его в массив в памяти}
  end;
PRINT(S);
readln
end.
Angelique вне форума Ответить с цитированием
Старый 14.12.2012, 04:18   #6
Angelique
 
Регистрация: 27.11.2012
Сообщений: 8
По умолчанию

Посмотрите, пожалуйста. Я написала программу, но не знаю как выполнить условие "если ai=0, то соответствующий член не включать в память". Помогите.
Код:
{$R-}
type
 intmas=array [0..0] of integer;
 T=^intmas;
 B=^Byte;
var
 a:T;
 i,k,N:integer;
 x:B;
 S:char;
Function P(z:B; c:T; M:Integer):Real;
Var
 q:Integer;
 R,D:real;
begin
 R:=c^[0];
 D:=1;
 For q:=1 to M do
  begin
   D:=D*z^;
   R:=R+c^[q]*D;
  end;
 P:=R;
end;
Begin
 Write('N= ');
 Readln(N);
 GetMem(a, SizeOf(Integer)*(N+1));
 For i:=0 to N do
  begin
   Write('a[',i,']= ');
   Readln(a^[i]);
  end;
 New(x);
 Write('Enter the symbol: ');
 Readln(S);
 x^:=Ord(S);
 write(a^[0],'+',a^[1],'*',x^);
 for i:=2 to N do Write('+',a^[i],'*',x^,'^',i);
 Writeln;
 FreeMem(a, SizeOf(Integer)*(N+1));
 Dispose(x);
 Readln;
End.
Angelique вне форума Ответить с цитированием
Старый 14.12.2012, 14:37   #7
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Angelique Посмотреть сообщение
не знаю как выполнить условие "если ai=0, то соответствующий член не включать в память".
Анжелика, у тебя в задании сказано:
Цитата:
если ai=0, то соответствующий член не включать в память. Создайте подходящий тип данных
Красным я выделил то, на что обратить внимание, а болдом - к чему это должно относиться. На всякий случай поясню также своими словами..
Надо было выбрать такой тип организации данных, чтобы была возможность не включать в память нулевые элементы. Такой тип данных, в моем разумении - это список. И именно поэтому я тебе дал ссылки на реализацию многочленов с помощью списков. Но.. ты предпочла другой путь, сделала массив - возможно, сочтя списки трудными. Теперь же, чтобы выполнить требование, тебе надо переписывать ВСЮ программу.

Вообще-то, это не очень сложно. Если ты действительно хочешь сделать как надо, я тебе помогу. Идет?
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 14.12.2012, 23:17   #8
Angelique
 
Регистрация: 27.11.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от TinMan Посмотреть сообщение
Надо было выбрать такой тип организации данных, чтобы была возможность не включать в память нулевые элементы. Такой тип данных, в моем разумении - это список.
Cпасибо. До меня это не доходило.
Просто, когда нам эту задачу давали мы ещё списки не изучили. А задачу со списками я только начну скоро делать.
Цитата:
Сообщение от TinMan Посмотреть сообщение
И именно поэтому я тебе дал ссылки на реализацию многочленов с помощью списков. Но.. ты предпочла другой путь, сделала массив - возможно, сочтя списки трудными. Теперь же, чтобы выполнить требование, тебе надо переписывать ВСЮ программу.
Вообще-то, это не очень сложно. Если ты действительно хочешь сделать как надо, я тебе помогу. Идет?
Идет...
(А вообще грустно стало.) Обещаю разобраться с подобными задачами.
Angelique вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические переменные KateMM Помощь студентам 3 21.03.2012 23:36
Динамические переменные Unique Паскаль, Turbo Pascal, PascalABC.NET 6 05.09.2010 14:19
Динамические переменные - Pascal cherr Помощь студентам 1 10.09.2009 20:28
Динамические переменные.. NSvirus Паскаль, Turbo Pascal, PascalABC.NET 2 08.06.2009 22:56