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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2008, 21:00   #1
Ser
Пользователь
 
Регистрация: 25.02.2008
Сообщений: 17
По умолчанию Задача на линейные списки

Ребят может у кого есть решение этой задачи?
Написать программу с помощью линейного списка:
Многочлен P(x)=anxn + an-1xn-1 +...+ a1x + a0 с целыми коэффициентами можно представить в виде списка, причем если ai=0, то соответствующее звено не включать в список. Определить функцию, вычисляющую значения многочлена в точке x
Ser вне форума Ответить с цитированием
Старый 02.03.2008, 22:10   #2
Iceman
Форумчанин
 
Регистрация: 08.07.2007
Сообщений: 154
По умолчанию

можеш нормальней написать. у тя тут ошибка и не конкретности есть.
Iceman вне форума Ответить с цитированием
Старый 03.03.2008, 08:51   #3
Ser
Пользователь
 
Регистрация: 25.02.2008
Сообщений: 17
По умолчанию

Реализовать структуры данных «линейный список»
Многочлен P(x)=anxn + an-1xn-1 +...+ a1x + a0 с целыми коэффициентами можно представить в виде списка, причем если ai=0, то соответствующее звено не включать в список. Определить функцию, вычисляющую значения многочлена в точке x.
P.S.: n,n-1,1,0 - нижниие индексы
Ser вне форума Ответить с цитированием
Старый 03.03.2008, 09:30   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от Ser Посмотреть сообщение
n,n-1,1,0 - нижниие индексы
наверное не везде. Это все-таки многочлен - x^(n)

ход решения

Для коэффициентов задаем массив заведомо больше N

var A : array [0..100] of integer;

запрашиваем N. Или с клавиатуры или читаем из файла.
Аналогично запрашиваем коэффициенты a[i]

Функция, вычисляющая многочлен:

Код:
function P(x: ???? - целое | действительное ??? ): ????
begin
    P := 0;
    k := 1;   
    for i:=0 to N do begin
        P = P + A[i] * k;
        k := k * x;       
    end
end;
alexBlack вне форума Ответить с цитированием
Старый 05.03.2008, 00:07   #5
Ser
Пользователь
 
Регистрация: 25.02.2008
Сообщений: 17
По умолчанию

Как реализовать линейный список для этой задачи?
Ser вне форума Ответить с цитированием
Старый 05.03.2008, 08:22   #6
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от Ser Посмотреть сообщение
Как реализовать линейный список для этой задачи?
А чем массив не линейный список ?
alexBlack вне форума Ответить с цитированием
Старый 16.03.2008, 22:19   #7
Ser
Пользователь
 
Регистрация: 25.02.2008
Сообщений: 17
По умолчанию

Просто реализовать нужно с использыванием линейного списка
И с выделением динамической памяти, с указателями
Ser вне форума Ответить с цитированием
Старый 16.03.2008, 22:25   #8
Ser
Пользователь
 
Регистрация: 25.02.2008
Сообщений: 17
По умолчанию

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

type
PElement = ^TypeElement; {указатель на тип элемента}
TypeElement = record {тип элемента списка}
Data: TypeData; {поле данных элемента}
Next: PElement; {поле указателя на следующий элемент}
end;
var
ptrHead: PElement; {указатель на первый элемент списка}
ptrCurrent: PElement; {указатель на текущий элемент}

Для добавления элемента в конец списка используется процедура вставки последующего элемента для случая, когда текущий элемент является последним в списке.

procedure Ins_LineSingleList(DataElem: TypeData;
var ptrHead, ptrCurrent: PElement);
{Вставка непервого элемента в линейный однонаправленный список}
{справа от элемента, на который указывает ptrCurrent}
var
ptrAddition: PElement; {вспомогательный указатель}
begin
New(ptrAddition);
ptrAddition^.Data := DataElem;
if ptrHead = nil then begin {список пуст}
{создаем первый элемент списка}
ptrAddition^.Next := nil;
ptrHead := ptrAddition;
end else begin {список не пуст}
{вставляем элемент списка справа от элемента,}
{на который указывает ptrCurrent}
ptrAddition^.Next := ptrCurrent^.Next;
ptrCurrent^.Next := ptrAddition;
end;
ptrCurrent := ptrAddition;
end;

procedure InsFirst_LineSingleList(DataElem: TypeData;
var ptrHead: PElement);
{Вставка первого элемента в линейный однонаправленный список}
var
ptrAddition: PElement; {вспомогательный указатель}
begin
New(ptrAddition);
ptrAddition^.Data := DataElem;
if ptrHead = nil then begin {список пуст}
{создаем первый элемент списка}
ptrAddition^.Next := nil;
end else begin {список не пуст}
{вставляем новый элемент слева (перед) первым элементом}
ptrAddition^.Next := ptrHead;
end;
ptrHead := ptrAddition;
end;

Операция просмотра списка заключается в последовательном просмотре всех элементов списка.

procedure Scan_LineSingleList(ptrHead: PElement);
{Просмотр линейного однонаправленного списка}
var
ptrAddition: PElement; {вспомогательный указатель}
begin
ptrAddition := ptrHead;
while ptrAddition <> nil do begin {пока не конец списка}
writeln(ptrAddition^.Data); {Вывод значения элемента}
ptrAddition := ptrAddition^.Next;
end;
end;

Функция поиска элементов в списке
function Find_LineSingleList(DataElem: TypeData;
var ptrHead, ptrCurrent: PElement): boolean;
{Поиск элемента в линейном однонаправленном списке}
var
ptrAddition:PElement; {Дополнительный указатель}
begin
if (ptrHead <> nil)then begin {Если существует список}
ptrAddition := ptrHead;
while (ptrAddition <> nil) and
(ptrAddition^.Data <> DataElem) do
{пока не конец списка и не найден элемент}
ptrAddition := ptrAddition^.Next;
{Если элемент найден,
то результатом работы функции является - true}
if ptrAddition <> nil then begin
Find_LineSingleList := true;
ptrCurrent := ptrAddition;
end else begin
Find_LineSingleList := false;
end;
end else begin
Find_LineSingleList:=false;
end;
end;
Ser вне форума Ответить с цитированием
Старый 06.05.2011, 20:22   #9
blondino4ca
Новичок
Джуниор
 
Регистрация: 06.05.2011
Сообщений: 1
По умолчанию

как определить, верно ли, что каждое число содержится в линейном списке только один раз.....
blondino4ca вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Односвязные линейные списки !!! salia Помощь студентам 1 12.10.2009 16:01
Списки Вилен Общие вопросы C/C++ 3 22.05.2008 00:40
списки Влдислаав3911 Паскаль, Turbo Pascal, PascalABC.NET 5 10.05.2008 17:35
Задача: списки/сортировка uranus Паскаль, Turbo Pascal, PascalABC.NET 4 22.05.2007 14:34