![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Wait |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 20 Пол: Мужской Репутация: ![]() ![]() ![]() |
Здравствуйте, у меня тут прога со списком с ООП...
Не получается вставить в процедуре obj.insert со второго по шестой элемент... Надо ввести номер позиции для ввода и что вводить... Получилось ввести только первый элемент... Проверьте, пожалуйста, а то уже плохо мне от этой проги... :molitva: Код program ex1; uses crt; type p=^el; el=record data:byte; next:p; end; obj=object root,last,l:p; id:string[5]; constructor init; procedure build; procedure output; procedure insert; end; constructor obj.init; begin root:=nil; last:=nil; new(l); end; procedure obj.build; var eli:p;i:byte; begin randomize; write('input list id: '); readln(id); writeln('list ',id,':'); new(root); root^.data:=random(10); eli:=root; for i:=2 to 5 do begin new(eli^.next); eli^.next^.data:=random(10); eli:=eli^.next end; eli^.next:=nil; end; procedure obj.output; var eli:p; begin eli:=root; while eli<>nil do begin writeln(eli^.data); eli:=eli^.next; end; end; procedure obj.insert; var eli,mem:p;d,i,k:byte; begin write('input element to insert: '); readln(d); write('input the position for inserting of ',d,': '); readln(i); if (i=1) then begin new(eli); eli^.data:=d; eli^.next:=root; if (eli^.next=nil) then eli^.next^.next:=nil; root:=eli; end else if (i=2) then begin mem:=eli^.next; new(eli^.next); eli:=eli^.next; eli^.data:=d; eli^.next:=mem end else begin for i:=3 to 5 do eli:=eli^.next; mem:=eli^.next; new(eli^.next); eli:=eli^.next; eli^.data:=d; eli^.next:=mem end; end; var list:obj; begin list.build; list.output; list.insert; writeln('---------------'); list.output; readln end. Прикрепленные файлы ![]() |
hiv |
![]()
Сообщение
#2
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
В процедуре вставки элемента списка сразу увидел пару оплошностей:
1) при вставке перед первым элементом списка root надо выкинуть бесполезную строку if (eli^.next=nil) then eli^.next^.next:=nil;Скорее там должна быть проверка на пустой список, если root=nil (пустой список), то тогда первым элементом будет тот, что вставляем: root:=eli; 2) при вставке после root элемента нужно сместиться на i позиций, поэтому использование цикла for i:=3 to 5 do eli:=eli^.next;совершенно бессмысленно, ибо мы теряем значение пременной i. Нужно взять другую переменную и сместиться i-2 раз. Например: eli:=root; Сообщение отредактировано: hiv - 17.05.2005 13:12 -------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
Wait |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 20 Пол: Мужской Репутация: ![]() ![]() ![]() |
Код procedure obj.insert; var eli,mem:p;d,i,k:byte; begin write('input element to insert: '); readln(d); write('input the position for inserting of ',d,': '); readln(i); if (i=1) then begin new(eli); eli^.data:=d; eli^.next:=root; if (eli^.next=nil) then eli^.next^.next:=nil; root:=eli; end else begin eli:=root; for k:=1 to k-2 do eli:=eli^.next; mem:=eli^.next; new(eli^.next); eli:=eli^.next; eli^.data:=d; eli^.next:=mem end; end; так? не получается все равно... Пожалуйста, напишите, как точно надо |
Wait |
![]()
Сообщение
#4
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 20 Пол: Мужской Репутация: ![]() ![]() ![]() |
Исправьте, пожалуйста, а то у меня уже голова не варит :molitva: :molitva: :molitva:
|
hiv |
![]()
Сообщение
#5
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 660 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Учите матчасть, я уже все разжевал... Учите циклы... А еще лучше отоспитесь и под подушку положите книжку великого писателя Вирта!
-------------------- Никогда не жадничай. Свои проблемы с любовью дари людям!
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Wait, вопрос на засыпку: Ты действительно хочешь изобрести велосипед, а не пользоваться готовым решением, которое есть в FAQ-е? (Не то, которое в теме "Все о динамических структурах данных", ибо там без ООП, а то, которое здесь: FAQ: Объектно-ориентированное программирование). Основываясь на этом объекте можно дописать 1 (!) функцию, и он будет работать так, как тебе нужно. Ну, если не хочешь - я просто предложил...
![]() |
Wait |
![]()
Сообщение
#7
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 20 Пол: Мужской Репутация: ![]() ![]() ![]() |
Всем огромное спасибо, уже все работает...
Век буду благодарен |
![]() ![]() |
![]() |
Текстовая версия | 19.06.2025 18:47 |