25.11.2012, 20:33 | #1 (permalink) |
С# - learn or die
Регистрация: 17.12.2011
Сообщений: 2,438
Записей в дневнике: 8
Сказал(а) спасибо: 21
Поблагодарили 49 раз(а) в 11 сообщениях
Репутация: 19701
|
Динамические переменные. Free Pascal
Многочлен P(x) = a0 + a1 x + a2 x2 + ... + an xn с целыми коэффициентами представьте в динамической памяти. При этом, если ai=0, то соответствующий член не включать в память. Создайте подходящий тип данных и определите следующие процедуры и функции для работы с такими многочленами: процедуру PRINT(P, S), которая выводит P как многочлен от переменной, равной коду символьной переменной S. |
25.11.2012, 20:33 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Потратьте немного времени на прочтение подобных обсуждений Free Pascal, помогите сделать задачу Использование библиотеки модуля GRAPH. Free Pascal |
27.11.2012, 01:36 | #2 (permalink) |
VIP user
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
|
у тип памяти мне кажется уместно будет использовать byte, т.к. работаем с памятью.
Ну у меня наклевывается 2 варианта, даже 3. хотя даже 4 арифметическая прогрессия геометрическая прогрессия факториал (либо двойной факториал) Из выш.мата. - Ряды... Двойной факториал числа n обозначается n!! и определяется как произведение всех натуральных чисел в отрезке [1,n], имеющих ту же чётность что и n. Таким образом, (2k)!! = 2*4*6*8 и т.п. (2k+1)!! = 1*3*5*7 и т.п. По определению полагают 0!! = 1. |
27.11.2012, 05:10 | #3 (permalink) |
С# - learn or die
Регистрация: 17.12.2011
Сообщений: 2,438
Записей в дневнике: 8
Сказал(а) спасибо: 21
Поблагодарили 49 раз(а) в 11 сообщениях
Репутация: 19701
|
Нашла на просторах интернета похожую задачу:
Многочлен 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. |
27.11.2012, 17:36 | #4 (permalink) | |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
Цитата:
Для коэффициентов определим тип массива целочисленный Integer, он допускает как положительные, так и отрицательные и нулевые значения. Для хранения членов многочлена используем тип longint, он позволяет использовать достаточно большие значения при вычислениях. Думаю, речь идет о значении х, равном chr-коду символа, хранящегося в S. То есть нужно сначала запросить с клавиатуры ввод символа S, получить его chr-код и передать его функции в качестве значения переменной x. Затем вычислить значение многочлена с этим x. |
|
28.11.2012, 18:17 | #5 (permalink) | |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
Начало можно взять из найденного вами листинга, удалив из него лишние многочлены
Цитата:
Код:
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. |
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
04.12.2012, 08:17 | #6 (permalink) |
С# - learn or die
Регистрация: 17.12.2011
Сообщений: 2,438
Записей в дневнике: 8
Сказал(а) спасибо: 21
Поблагодарили 49 раз(а) в 11 сообщениях
Репутация: 19701
|
Я что-то тут намудрила, исправьте пожалуйста.
Код:
program din; type intmas=array [1..1000] of integer; var P: ^intmas; i,k,n:integer; S,x:char; procedure PRINT(P,S: Mnogochlen; var S:Mnogochlen); Begin write('Введите символ: ');readln(S); write('Символ "',S,'" имеет номер в кодовой таблице = ',ord(S)); end; function begin readln(n, x); P := 0; for i := 1 to n + 1 do begin read(a); x:=ord(S); P := P * x + a end; writeln(P:4:2) End; 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. |
04.12.2012, 10:04 | #8 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ох, Анжелика - достали-таки с этими "динамиками"!
Ну а вот что я "намудрил". Хотя честно предупреждал - в динамических размещениях я, по большому счету "не копенгаген" . А потому вот это требование: "При этом, если 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); Writeln('P= ',P(x,a,N):0:3); FreeMem(a, SizeOf(Integer)*(N+1)); Dispose(x); Readln; End. |
04.12.2012, 18:32 | #10 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
Владимир, я все-таки думаю, что моя расшифровка задачи не вполне корректна, скорее всего надо вывести не результат вычисления полинома, а его самого, естественно, со всеми коэффициентами, а в качестве аргумента надо выводить символ, хранящийся в переменной S.
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|