![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
FENIX |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 45 Пол: Мужской Репутация: ![]() ![]() ![]() |
Объект - однонаправленный список без головного элемента.
Частное от деления первых 2-х элементов поместить на 3-е место, если первый элемент больше, иначе заменить первые элементы их суммой. Что-то не допираю, как сделать ![]() |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Для начала прочитать здесь: FAQ: Списки, и создать сам список... Я думаю, после прочтения проблема исчезнет
![]() |
FENIX |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 45 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата(volvo @ 29.03.05 21:36) Для начала прочитать здесь: FAQ: Списки, и создать сам список... Я думаю, после прочтения проблема исчезнет ![]() Список я создал и все вроде работает (я только не пойму, что с памятью - ПОСЛЕ работы проги ее становится больше ![]() :low: Код Uses Crt; type Inf = Real; Ptr = ^EL; EL = record Dn : Inf; Nx : Ptr; end; List = object Last, First : ptr; Count : integer; Constructor Init; Destructor Done; Procedure Delenie; Procedure Add_End (D : Inf); Procedure Add_Head (D : Inf); Procedure Clear; Procedure EraseElement (p : ptr); Procedure Print; end; Constructor List.Init; begin Count := 0; First := nil; Last := nil; end; Destructor List.Done; begin Clear; end; Procedure List.Clear; begin EraseElement(First); Count := 0; Last := nil; end; Procedure List.EraseElement(p : ptr); begin if p <> nil then begin EraseElement(p^.Nx); Dispose(p); p := nil; end; end; Procedure List.Add_Head(D : Inf); var p, q : Ptr; begin New(p); p^.Dn := D; p^.Nx := q; q := p; end; procedure List.Add_End(D : Inf); var p : Ptr; begin New(p); p^.Dn := D; p^.Nx := nil; if Last = nil then begin First := p; Last := p; end else begin Last^.Nx := p; Last := p; end; Inc(Count); end; Procedure List.Print; var p : Ptr; begin p := First; While p <> nil do begin write(p^.Dn : 4,' '); p := p^.Nx; end; writeln; end; ===================================================== Procedure List.Delenie; var q, s, c : ptr; Chastnoe, a, b : inf; begin a := First^.Dn; q := First^.Nx; b := s^.Dn; If a > b then begin Chastnoe := a / b; s := q^.Nx; s := nil; end else writeln('Help plz;) '); end; ===================================================== var L1 : List; A : integer; BEGIN ClrScr; {$I+} Assign(input, 'input.txt'); Reset(input); {$I-} while not EoF do begin Read(A); {L1.Add_Head(A);} L1.Add_End(A); end; writeln('Pamyati DO= ',MemAvail); writeln; L1.Print; L1.Delenie; Close(Input); L1.Done; writeln; writeln('Pamyati POSLE= ',MemAvail); readln; END. В процедуре Delenie я и намерен все сделать. Частное находит верно, но не могу понять, как 3-ий элемент заменить частным... Сообщение отредактировано: FENIX - 29.03.2005 22:21 |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата(FENIX @ 29.03.05 21:18) Список я создал и все вроде работает (я только не пойму, что с памятью - ПОСЛЕ работы проги ее становится больше ![]() ![]() А насчет процедуры - я бы исправил вот так ... Код Procedure List.Delenie; var Chastnoe, a, b : inf; pp: ptr; begin pp := first; a := pp^.Dn; { берем первый элемент } pp := pp^.Nx; { перемещаемся ко второму } b := pp^.Dn; { берем второй элемент } pp := pp^.Nx; { перемещаемся к третьему } If (a > b) and (abs(b) > 10E-6) then begin { на ноль не делим } Chastnoe := a / b; pp^.Dn := Chastnoe; { результат - в третий элемент } else begin { вот тут немного условие неясно, но я думаю, по аналогии разобраться можно } end; end; |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Кстати, FENIX, в программе есть еще 2 недочета:
1. В процедуре добавления в список спереди - не увеличивается счетчик элементов и начнутся проблемы при добавлении элемента в пустой список. Вот более правильный вариант: Код Procedure List.Add_Head(D : Inf); var p, q : Ptr; begin New(p); p^.Dn := D; p^.Nx := q; If First = nil Then Last := p; { <--- Это было упущено } q := p; Inc(Count); { <--- Это тоже } end; 2. Процедуру добавления элементов в хвост списка можно немного оптимизировать: Код procedure List.Add_End(D : Inf); var p : Ptr; begin New(p); p^.Dn := D; p^.Nx := nil; if Last = nil then First := p else Last^.Nx := p; Last := p; Inc(Count); end; |
FENIX |
![]()
Сообщение
#6
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 45 Пол: Мужской Репутация: ![]() ![]() ![]() |
Спасибо за замечания и дополнения :D
{Ушел кодить} ========================== Доделал! :D Может, кривовато, но работает: :low: Код else {2 sly4ai - zamena pervbIx elementov ix symmoi} begin p := first; a := p^.Dn; p := p^.Nx; b := p^.Dn; Symma := a + b; p := first; a := p^.Dn; p^.Dn := Symma; p := p^.Nx; b := p^.Dn; p^.Dn := Symma; end; Сообщение отредактировано: FENIX - 30.03.2005 12:09 |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Ну, зачем же так сложно?
Ведь a и b уже считаны !!! Код Procedure List.Delenie; var Chastnoe, a, b : inf; pp: ptr; begin pp := first; a := pp^.Dn; { берем первый элемент } pp := pp^.Nx; { перемещаемся ко второму } b := pp^.Dn; { берем второй элемент } pp := pp^.Nx; { перемещаемся к третьему } If (a > b) and (abs(b) > 10E-6) then begin { на ноль не делим } Chastnoe := a / b; pp^.Dn := Chastnoe; { результат - в третий элемент } else begin p := first; p^.Dn := a + b; p := p^.Nx; p^.Dn := a + b; end; end; |
FENIX |
![]()
Сообщение
#8
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 45 Пол: Мужской Репутация: ![]() ![]() ![]() |
Хм...
Как оказалось, оба задания я понял неправильно... И решать их нужно по-другому... ![]() =========================== Но я решил :D volvo Огромное спасибо еще раз :D :molitva: |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 6:32 |