Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/30: Рейтинг темы: голосов - 30, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 05.03.2009
Сообщений: 13
1

Построение многочленов и арифметические операции с ними

05.03.2009, 01:02. Показов 5541. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
дан многочлен вида
p(x) = c1xe1 + c2xe2 + … + cnxen , где e1 > e2 > … > en >= 0.
Этот многочлен можно представить в виде связанного списка, где каждая ячейка имеет три поля: первое – для коэффициента ci, второе – для показателя степени ei, третье – для указателя на следующую ячейку. Далее требуется совершить арифмет операции.
помогите составить такие многочлены.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2009, 01:02
Ответы с готовыми решениями:

Арифметические операции с комплексными числами
Написать программу на языке Паскаль производящую сложение,вычитание,умножение и деление двух...

Арифметические операции над матрицами
Выполнив действия над матрицами A(n,n) и B(n,n) вычислить матрицу C(n,n) по формуле...

арифметические операции в паскале, использование ассемблера
Написать программу вычисляющую арифметические операции(+,-,*,/). При этом результат результат...

Арифметические операции в q-ричной системе счисления
помогите написаь програамму пожалуйста зараннее спасибо. вот есть код const a: string =...

16
257 / 173 / 27
Регистрация: 17.10.2008
Сообщений: 770
05.03.2009, 09:21 2
Цитата Сообщение от zadrot Посмотреть сообщение
дан многочлен вида
p(x) = c1xe1 + c2xe2 + … + cnxen , где e1 > e2 > … > en >= 0.
Этот многочлен можно представить в виде связанного списка, где каждая ячейка имеет три поля: первое – для коэффициента ci, второе – для показателя степени ei, третье – для указателя на следующую ячейку. Далее требуется совершить арифмет операции.
помогите составить такие многочлены.
А что такое у тебя x--это вводимая величина? Да и нужно ли тебе пройдя все элементы возвратится к первому элементу или просто нуно проганять каждый раз этот многочлен? Какие арифметические операции потом будут, просто самое сложное в списке это ссылки на нужные места...
0
0 / 0 / 0
Регистрация: 05.03.2009
Сообщений: 13
05.03.2009, 10:28  [ТС] 3
Рассмотрим многочлены вида
p(x) = c1xe1 + c2xe2 + … + cnxen , где e1 > e2 > … > en >= 0.Такой многочлен можно представить в виде связанного списка, где каждая ячейка имеет три поля: первое – для коэффициента ci, второе – для показателя степени ei, третье – для указателя на следующую ячейку. Для описанного представления многочленов напишите программу их сложения и умножения. вот условие полностью... Мб нужно на выводе получить некий многочлен равный произведению или сумме многочленов..
0
257 / 173 / 27
Регистрация: 17.10.2008
Сообщений: 770
06.03.2009, 02:40 4
Аго понял, что то подобное делал уже, вечерком постараюсь накатать...

Добавлено через 12 часов 20 минут 19 секунд
Рассмотрим многочлены вида
p(x) = c1xe1 + c2xe2 + … + cnxen , где e1 > e2 > … > en >= 0.Такой многочлен можно представить в виде связанного списка, где каждая ячейка имеет три поля: первое – для коэффициента ci, второе – для показателя степени ei, третье – для указателя на следующую ячейку. Для описанного представления многочленов напишите программу их сложения и умножения. вот условие полностью... Мб нужно на выводе получить некий многочлен равный произведению или сумме многочленов..
Вот написал тебе програмку, только лудше разбери то как я работаю со списком на бумажке, иначе завалят сразу...
Только в этой программе я не считал сумму и произведение, как я понял это нужно 2 раза выполнить 1 и 2 процедуру и сложить полученные значения(или умножить) это попробуй сам додумать,если что то пиши там легко, главное что тебе нуно тут это очистка списка L:=nil;
Держи:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
program Project2;
 
type
   IntPerem=integer;
   List=^First;
 
   First=record
   dataCi,dataEi:IntPerem;
   next,las:List;
   end;
 
 
procedure Add(var  L:List);
var s1,s2:IntPerem;
    r1,r2:string;
    t1,t2:integer;
    NowElem:List;
    bool,fir:boolean;
begin
   fir:=true;
   repeat
    Write('Ci=');
    Readln(r1);
    Write('Ei=');
    Readln(r2);
       val(r1,s1,t1);
       val(r2,s2,t2);
     if (t1=0) and (t2=0) then
          begin
            bool:=false;
             if fir<>true then
              begin
          if (s2<0) or (L^.las^.dataEi<s2) then
                    begin
                       bool:=true;
                       WriteLn('mistake!!!');
                       L:=nil;
                    end;
              end;
                if bool<>true then
                  begin
                      new(NowElem);
                      NowElem^.next:=nil;
                      NowElem^.dataCi:=s1;
                      NowElem^.dataEi:=s2;
                        if L=nil then
                          L:=NowElem
                        else
              L^.las^.next:=NowElem;
              L^.las:=NowElem;
          end
        else
          begin
            t1:=0;
            t2:=0;
          end;
        fir:=false;
      end;
   until (t1<>0) or (t2<>0);
end;
 
 
procedure Summ(var L:List; x:integer);
var NowElem:List;
    P:Real;
begin
    P:=0;
    NowElem:=L;
    while NowElem<>nil do
      begin
     P:=P+NowElem^.dataCi*exp(NowElem^.dataEi*Ln(x));
     NowElem:=NowElem^.next;
      end;
    WriteLn('P(x)=',P:1:5);
end;
 
 
procedure print(var L:List);
var NowElem:List;
begin
   NowElem:=L;
    while NowElem<>nil do
      begin
     Writeln(NowElem^.dataCi,' ',NowElem^.dataEi);
     NowElem:=NowElem^.next;
      end;
end;
 
 
var i,x:integer;
    L:List;
begin
   Write('x=');
   ReadLn(x);
   repeat
   Writeln('vvedi comandu i:');
   Readln(i);
     case i of
      1: Add(L);
      2: Summ(L,x);
      3: Print(L);
      4: i:=4;
     end;
   until i=4;
   L:=nil;
end.
Добавлено через 7 минут 31 секунду
Да кстати если будеш проверять и вылезет ошибка вдруг какая то скажи я исправлю, только укажи что за данные вводил, что получилось и что получиться должно...Нормально потестировать прогу времени небыло...
1
0 / 0 / 0
Регистрация: 05.03.2009
Сообщений: 13
06.03.2009, 16:29  [ТС] 5
спасибо большое.)) сеня днем потестю))

Добавлено через 12 часов 45 минут 29 секунд
Имхо косяк(... иси значение х сделать 3 и потом вводить значение i=3 и потом все время 3 вводить, то прога бесконечно запрашивает ввод числа i... или я настолько нуб что не втыкаю смысл программы(
0
257 / 173 / 27
Регистрация: 17.10.2008
Сообщений: 770
06.03.2009, 17:19 6
Да чтобы закончить ввод нужно просто при вводе DataCi, и DataEi оставить пустыми и понажимать интер...Кстати у тебя не сказано что число элементов не может быть больше X, или это не нуно???Когда прога выдаёт mistake--последовательность обнуляется....но задаёт что типо нуно ввести элементы...

Добавлено через 2 минуты 27 секунд
Значение Х кстати не зависит от самого ввода последовательности ci,ei X-используется только при рассчёте формулы...

Добавлено через 8 минут 17 секунд
Тьфу понял, е очень трезвый просто, тебе вначале нужно нажать i=1 чтобы заполнить последовательность какими ли числами, если ты будешь сразу i=3 тогда просто данных нет, чтобы их вывести, вот она типо выводит пустую строчку и запрашивает снова i.Для понимания вначале i=1 введи данные, а потом уже i=3 и прога выдаст введённые данные...
0
0 / 0 / 0
Регистрация: 05.03.2009
Сообщений: 13
06.03.2009, 18:52  [ТС] 7
все ранво не оч понял что делает прога... что как-то я ввожу цифирки а он меня просит их вводить снова и снова.... имхо это бред... нельзя ли сначала запрашивать количетсво многочленов, которые нужно задать, а потом для каждого вводить цифирки??... и по идее мне нужно на выходе просуммировать либо коэффициенты, либо показатели степеней и получить не число а такой же структуированный многочлен вида
c1xe1 + c2xe2 + … + cnxen , где e1 > e2 > … > en >= 0. но как я понял это нужно через список замутить, а я не оч рублю как это сделать..
0
257 / 173 / 27
Регистрация: 17.10.2008
Сообщений: 770
06.03.2009, 22:03 8
что как-то я ввожу цифирки а он меня просит их вводить снова и снова-----ты код программы хоть смотрел? если ты просто не введёшь ничего вместо dataci и DataEi то и ввод прекратится и ты попадёшь в меню где нужно и ввести i и выбрать то действие которое ты хочешь.

нельзя ли сначала запрашивать количетсво многочленов, которые нужно задать, а потом для каждого вводить цифирки??----у тебя в задаче ничего про это небыло сказано, вот я и не делал, моё решение заключено в этом ответе в пункте первом

и по идее мне нужно на выходе просуммировать либо коэффициенты, либо показатели степеней и получить не число а такой же структуированный многочлен вида-------ты сам то понял что сказал, зачем просуммировать и вывести многочлен? тогда суммировать и вовсе не нужно получается...И у тебя в вопросе написано что нужно представить в виде связного списка, а не выводить этот список...Если выводить список, то нужно строчку формировать...

(из задания)Для описанного представления многочленов напишите программу их сложения и умножения. вот условие полностью...------может нужно создать 2 списка и с между каждыми элементами многочлена из списка 1 и списка 2 сделать арифметическое действие...Например1=1x2+1x1... p2=4x3+10x2 и получится p3=(1x2+4x3)+(1x1+10x2)+... Так что ли?

Самое лудшее уточни задание...
0
0 / 0 / 0
Регистрация: 05.03.2009
Сообщений: 13
06.03.2009, 23:09  [ТС] 9
Цитата Сообщение от Arriba Посмотреть сообщение
что как-то я ввожу цифирки а он меня просит их вводить снова и снова-----ты код программы хоть смотрел? если ты просто не введёшь ничего вместо dataci и DataEi то и ввод прекратится и ты попадёшь в меню где нужно и ввести i и выбрать то действие которое ты хочешь.

нельзя ли сначала запрашивать количетсво многочленов, которые нужно задать, а потом для каждого вводить цифирки??----у тебя в задаче ничего про это небыло сказано, вот я и не делал, моё решение заключено в этом ответе в пункте первом

и по идее мне нужно на выходе просуммировать либо коэффициенты, либо показатели степеней и получить не число а такой же структуированный многочлен вида-------ты сам то понял что сказал, зачем просуммировать и вывести многочлен? тогда суммировать и вовсе не нужно получается...И у тебя в вопросе написано что нужно представить в виде связного списка, а не выводить этот список...Если выводить список, то нужно строчку формировать...

(из задания)Для описанного представления многочленов напишите программу их сложения и умножения. вот условие полностью...------может нужно создать 2 списка и с между каждыми элементами многочлена из списка 1 и списка 2 сделать арифметическое действие...Например1=1x2+1x1... p2=4x3+10x2 и получится p3=(1x2+4x3)+(1x1+10x2)+... Так что ли?

Самое лудшее уточни задание...
спасибо)) я просто немного нуб в этой теме( хотя ща я код посмотрел и разобрался... а терь ещё маленький вопрос: что эта программа выводит в конечном итоге?? я что-то не оч этот момент понял)
0
257 / 173 / 27
Регистрация: 17.10.2008
Сообщений: 770
07.03.2009, 10:38 10
В данный момент она выводит посчитанное значение p(x) т.е. после того как ты введёшь Ci и Ei эта программа вычисляет формулу,которую ты всё пишешь p(x)=сi*x^ei+...

Добавлено через 3 минуты 12 секунд
чтоб понять что она выводить введи в dataCi всегда 1 а вместо ei последовательно 3-2-1 при х=2 должно получиться 14
1
0 / 0 / 0
Регистрация: 05.03.2009
Сообщений: 13
07.03.2009, 15:49  [ТС] 11
спасибо большое.... но объясни мне плиз ещё 1 момент... как сделать чтоб вначале спрашивалось сколько нужно ввести многочленов...а потом вводилось все так же как ты написал, только после пропуска Еi и Ci требовалось вводить остальные многочлены...я понятно написал свою мысль? т.е чтобы получалось в конце P1, P2, и т.д.
просто я не оч могу понять откуда взять остальные многочлены для провидения арифмет операций
0
257 / 173 / 27
Регистрация: 17.10.2008
Сообщений: 770
07.03.2009, 19:19 12
Я понял твой вопрос и к чему ты клонишь, т.е. ты хочешь как я раньше и писал вписывать несколько многочленов а потом их считать и делать между ними арифметические операции...Тут есть два варианта решения:

1)Самый сложный, это создать список списков--в данном случае их будет можно будет создать в любом колличестве и они все будут храниться в памяти, я даж не смогу сказать на сколько усложнится программа в данном случае, такого ещё не писал
2)Второй способ подразумевает использование массива, т.е. ты объявляешь массив длинны например 90000 а при вводе указываешь то колличество P(x)i сколько тебе нужно, т.е. после того как ты введёшь первый P(x)1 и второй P(x)2 их результаты(т.е. результат 2 процедуры) будет записан в данный массив-- получится что у тебя есть массив с посчитанными многочленами P(x)i и с ними ты сможешь делать что хочешь...
Только в данном случае, как я думаю, более 2 вводить не имеет смысла--из-за того что они допустим будут тупо все складываться или умножаться или делиться, смотря что нужно...

Ты мне скажи где ты учишся(вышка школа, техникум или училище) и на кого...таким образом можно оценить сложность твоей задачки...Так же хорошо знать что вы проходите и по какой теме задали задание, мож это курсовая у тебя...

в принципе кстати 2 способ очень простой...надо просто создать цикл, а в цикл запихнуть первую и вторую процедуру и всего то...
0
0 / 0 / 0
Регистрация: 05.03.2009
Сообщений: 13
07.03.2009, 22:40  [ТС] 13
Цитата Сообщение от Arriba Посмотреть сообщение
Ты мне скажи где ты учишся(вышка школа, техникум или училище) и на кого...таким образом можно оценить сложность твоей задачки...Так же хорошо знать что вы проходите и по какой теме задали задание, мож это курсовая у тебя...
учусь в универе на физика-теоретика)) тема структура данных и алгоритмы..
2 способ имхо выход... сможешь добавить/изменить свою прогу а то я не оч представляю в какую чать программы это засовывать.
0
257 / 173 / 27
Регистрация: 17.10.2008
Сообщений: 770
08.03.2009, 00:05 14
ооо,родная душа, наконец то физики пошли, я на физико-техническом на специальности радиофизика и электроника
Агась сейчас изменю, а изменять нуно в самом начале проги.. там где просится ввод i...

Добавлено через 1 час 19 минут 49 секунд
Вот я написал програмку, правда имеется куча изменений по сравнению с той что была,это я сделал для того, чтобы проще разобраться было...
Так что потрудись и разберись, что не понятно будет спрашивай...
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
program Project2;
 
type mas=array[1..100] of real;
type
   IntPerem=integer;
   List=^First;
 
   First=record
   dataCi,dataEi:IntPerem;
   next,las:List;
   end;
 
procedure Add(var  L:List);
var s1,s2:IntPerem;
    r1,r2:string;
    t1,t2:integer;
    NowElem:List;
    bool,fir:boolean;
begin
   fir:=true;
   repeat
    Write('Ci=');
    Readln(r1 );
    Write('Ei=');
    Readln(r2);
       val(r1,s1,t1);
       val(r2,s2,t2);
     if (t1=0) and (t2=0) then
          begin
            bool:=false;
             if fir<>true then
              begin
                  if (s2<0) or (L^.las^.dataEi<s2) then
                    begin
                       bool:=true;
                       WriteLn('mistake!!!');
                       L:=nil;
                    end;
              end;
                if bool<>true then
                  begin
                      new(NowElem);
                      NowElem^.next:=nil;
                      NowElem^.dataCi:=s1;
                      NowElem^.dataEi:=s2;
                        if L=nil then
                          L:=NowElem
                        else
                          L^.las^.next:=NowElem;
                      L^.las:=NowElem;
                  end
                else
                  begin
                    t1:=0;
                    t2:=0;
                  end;
            fir:=false;
          end;
   until (t1<>0) or (t2<>0);
end;
 
 
procedure Summ(var L:List;x:real;i:integer;var mass:mas);
var NowElem:List;
    P:Real;
begin
    P:=0;
    NowElem:=L;
    while NowElem<>nil do
      begin
         P:=P+NowElem^.dataCi*exp(NowElem^.dataEi*Ln(x));
         NowElem:=NowElem^.next;
      end;
    mass[i]:=P;
end;
 
 
procedure Inter(var L:List;var  mass:mas; NumElems:integer);
var i:integer;
    x:real;
begin
    for i:=1 to NumElems do
      begin
         L:=nil;
         Write('x=');
         ReadLn(x);
         Add(L);
         Summ(L,x,i,mass);
         WriteLn('mass[',i,']=',mass[i]:1:5);
      end;
end;
 
procedure ArifDeistvie(mass:mas; NumElems:integer);
var c,m:integer;
    Results:real;
begin
    repeat
         WriteLn;
         WriteLn('1-summa');
         WriteLn('2-proisvedenie');
         WriteLn('3-exit');
         Write('comanda=');
         Readln(c);
           case c of
            1: begin
                  Results:=0;
                   for m:=1 to NumElems do
                     Results:=Results+mass[m];
                  WriteLn('Results=',Results:1:5);
               end;
            2: begin
                  Results:=1;
                   for m:=1 to NumElems do
                     Results:=Results*mass[m];
                  WriteLn('Results=',Results:1:5);
               end;
            3: begin
                  c:=3;
               end;
           end;
    until c=3;
end;
 
 
var i:integer;
    L:List;
    mass:mas;
    NumElem:integer;
begin
       Write('NumberElements=');
       ReadLn(NumElem);
       if NumElem>1 then
         repeat
         WriteLn;
         WriteLn('1-Inter');
         WriteLn('2-ArifDeistvie');
         WriteLn('3-Exit');
         Write('comanda=');
            Readln(i);
              case i of
               1: Inter(L,mass,NumElem);
               2: ArifDeistvie(mass,NumElem);
               3: i:=3;
              end;
         until i=3
       else
         begin
            Write('Error,needs NumberElements>1');
            ReadLn;
         end;
end.
Кстати на самом верху можешь изменить максимальное число P(x) по умолчанию их 100, но я в программе спрашиваю сколько нуно P(x)ов. Кстати на данный момент арифметически действия выполняются со всеми P(x) что были введены если ты введёшь 2 то с двумя, если 10 то с десятью, тут я не знаю как тебе нуно...Если ошибки какие встретишь тож сообщай...но вроде я проверил всё...Да я удалил процедуру вывода, она тут совершенно думаю не к месту т.к. нуно несколько P(x) вводить...
Удачи в разбирательстве...
1
0 / 0 / 0
Регистрация: 05.03.2009
Сообщений: 13
25.03.2009, 17:41  [ТС] 15
нужно объяснить пару моментов
L^.las^.dataEi; NowElem^.next; L^.las^.next; L^.las что это значит?? я просто такие записи никогда не всречал(( со всем остальным вроде норм
0
257 / 173 / 27
Регистрация: 17.10.2008
Сообщений: 770
25.03.2009, 23:10 16
zadrot, ^-называется указателем
L^.las-указатель на последний элемент списка L
L^.las^.next;-указатель на следующий(next) элемент стоящий после последнего(las) элемента
NowElem^.next;-указатель на следующий элемент списка NowElem
L^.las^.dataEi;-указатель на данные(dataEi) последнего элемента из списка L

вот что то в этом роде если тупо, насчёт этого возьми книжку по паскалю в которой рассматриваются списки и там всё это подробно описано--кстати это наибольшие проблеммы в списках,знать что за чем следует и как к чему обратиться с помощью указателей...
1
0 / 0 / 0
Регистрация: 15.04.2015
Сообщений: 4
29.03.2009, 21:53 17
у меня та же проблема не могу написать программу( я чайник. Етот код код должен выдавать значение или чтото в виде такого исходные: (x^3+3x^2+2)*x^2
результат: x^5+3*x^4+2*x^2? заранее спс...

Добавлено через 5 минут 38 секунд
У меня задача многочлен представлен в виде односвязного списка нужно 2 многочлена или больше в виде ax^y+....+ bx+c выполнить произведение и производную
0
29.03.2009, 21:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.03.2009, 21:53
Помогаю со студенческими работами здесь

Двумерные массивы, операции над ними
Всем, здравствуйте! Набрала текст программы на паскале, но ответ выводит неправильно. Не могу...

Найти сумму чисел n используя только элементарные арифметические операции
дано натуральное число n, найти сумму чисел n используя только элементарные арифметические...

Простые типы данных и операции над ними.
Имеются вещественные переменные a:=-2345.78 и b:=1.8351e2; целая переменная c:=367; переменные...

Подсчитать результат, выполняя арифметические операции в порядке их приоритета
Строка – это правильное арифметическое выражение, содержащее только натуральные числа и знаки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru