Добро пожаловать, гость
:: алгоритмы  и методы :: :: олимпиадные задачи :: :: связь :: :: о сайте :: :: форум ::

Форум работает в режиме архива, только для чтения и поиска.
Архив 2004 Архив 2007 Архив 2013

 
 
Опции темы Поиск в этой теме Опции просмотра
  #11  
Старый 30.03.2011, 21:00
Новичок

Отправить личное сообщение для neitrosha Посмотреть профиль Найти все сообщения от neitrosha
 
Регистрация: 20.03.2011
Сообщений: 18

большое Вам спасибо, отослал на ящик)
заодно описал новую глупую проблему с моей попыткой решения там же в сообщении)
  #12  
Старый 30.03.2011, 21:45
Пользователь

Отправить личное сообщение для lordKelvin Посмотреть профиль Найти все сообщения от lordKelvin
 
Регистрация: 25.01.2010
Сообщений: 51

А вот и ошибка! А я проглядел.=) Мы из w в этой функции составляем список, поэтому его (w) нужно каждый раз заново создавать (память выделять с помощью new() ).
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
    t1, t2, w: link;
    x:String;
begin
    R := nil;
    t1 := P;
    while t1 <> nil do
    begin
        t2 := Q;
        while t2 <> nil do
        begin
            new( w );
            w^.next := nil;
            w^.coef := t1^.coef * t2^.coef;
            w^.st := t1^.st + t2^.st;
            AddToend( R, w );
            edit7.text := edit7.text + w^.coef + '*x^' + w^.st + ', ';
            t2 := t2^.next;
        end;
        t1 := t1^.next;
    end;
    PrintPolinom( R, edit7 );
end;
И до кучи функция, которая сложит коэффициенты при одинаковых степенях.

Код:
procedure simplify;
var
    start, ptr, prev : link
begin
    start := R;
    while start <> nil do
    begin
        prev := start;
        ptr := start^.next;
        while ptr <> nil
        begin
            if ptr^.st = start^.st then
            begin
                start^.coef := start^.coef + ptr^.coef;
                prev^.next := ptr^.next;
                dispose( ptr );
                break;
            end;
            prev :=  ptr;
            ptr := ptr^.next;
        end;
        start := start^.next;
    end;
end;

Последний раз редактировалось lordKelvin, 30.03.2011 в 22:05. Причина: Дописал недостающий код
  #13  
Старый 30.03.2011, 21:55
Новичок

Отправить личное сообщение для neitrosha Посмотреть профиль Найти все сообщения от neitrosha
 
Регистрация: 20.03.2011
Сообщений: 18

большое вам спасибо)
всё считается правильно)

только тоже маленькая доработка:

>>edit7.text := edit7.text + w^.coef + '*x^' + w^.st + ', ';
в этой строчке он опять выдавал несовместимость типов.
и еще - из-за этого, как мне кажется, он бы не суммировал, а выдавал ответ, скажем, "15x^2, 17x^4, 10x^5" и т.д.
немножко изменил строчку:
edit7.text := edit7.text + inttostr (w^.coef) + 'x^' + inttostr (w^.st) + '+';

и всё прекрасно работает)

еще раз спасибо большое, Вы меня очень сильно выручили)
 


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

Расширенный поиск
Опции просмотра


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Умножение многочленов (где ошибки?) neitrosha Реализация, исходники, языки 0 22.03.2011 16:47
Таблица умножения дробей с использованием класса Alexander_ua Задачи 9 19.02.2010 02:20
Распараллеливание диагонального умножения матрицы на вектор vilza Математические алгоритмы (другое) 1 11.01.2010 12:57
Умножения знаковых чисел гость Математические алгоритмы (другое) 8 17.11.2009 03:14
сортировка связных списков методом вставки sasza Сортировка и поиск 1 10.11.2006 07:38