![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
osa |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: ![]() ![]() ![]() |
Здравствуйте , мне необходимо
1) создать массив 2) установить его указатели на массив и на след элемент (создать список указателей на массив и на следуюющий элемент еще в сегменте данных) 3) и поменять эти указатели П.С. эсли 1) и 2) я представляю как сделать то 2) да еще и в сегменте данных я не представляю . |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
osa, поточнее можно? Что значит
Цитата указатели на массив и на след элемент ? На следующий за чем элемент?Если уже Цитата 1) и 2) я представляю как сделать , то почему бы не привести пример, что именно нужно, а то не вполне понятен смысл задания... |
osa |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата(volvo @ 10.04.05 12:00) osa, поточнее можно? Что значит ? На следующий за чем элемент? Если уже , то почему бы не привести пример, что именно нужно, а то не вполне понятен смысл задания... Опечатался 1 и 3 представляю . А затем что это как бы будет список ! который я смогу потом свободно перебирать ! я понял что тут не понятно ! не на следующий элемент массива а на следующий елемент списка |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Я так и не понял, какой выигрыш дает использование списка вместо массива, но вообще-то обращаться через указатель к элементу массива (да еще и расположенного в сегменте данных, а не в хипе) - это просто извращение.
Код Type pArrType = ^arrType; arrType = array[1 .. 2000] of integer; Var x: arrType; p: pArrType; begin p := @x; p^[1] := ...; { и работаем через указатель } end; Если нужно работать со списками - то сначала сюда: FAQ: Динамические структуры данных (списки) А вообще-то приведи пример, КАК ты хочешь обращаться к массиву (ну, или списку), и я помогу тебе это реализовать. |
osa |
![]()
Сообщение
#5
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: ![]() ![]() ![]() |
смотри нам нужно создать список не динамически, а в сегменте данных ! а в списке должны храняться указатели на массив ! ну и на следующий элемент списка
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Ты толком объяснить можешь? У тебя есть список... Само собой, что каждый элемент списка содержит адрес следующего элемента списка, но ведь кроме этого он тоже что-то содержит !!! Так вот я и хочу узнать, ЧТО ИМЕННО должен содержать каждый элемент списка??? Допустим, первый - содержит адрес массива, а второй? А третий? Четвертый? ...
Вот так задается список: Код type tlist = record data: ... { <--- вот тут что хранится будет ???} next: ^tlist; { тут-ясно, что след. элемент списка } end; Неужели тебе надо просто рядом с массивом оформить еще и список, который будет содержать адреса соответствующих элементов массива? Это же как минимум 4-х кратный проигрыш в размере !!! |
osa |
![]()
Сообщение
#7
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: ![]() ![]() ![]() |
!Смотри 0 элем списка указывает указывает на 1 ; 1 на 2ой и тд вплоть до последнего ! ясно что в списке будет даные даные указывайт на елемент массива , т е в 1 елементе списка храниться адресс 1 ячейки массива ... и т.д. !
впроть до последнего там понятно nil. ! Как задаеться переменные списка я знаю мне бы надо чтобы в данных он уже был полностью создан ! тоесть у меня массив из 8 елементов и был бы список из 10 эелементов BegL -> 1 -> 2 -> 3 -> 4 -> ... 8-> EndL @A[1] @A[2] @A[3] @A[4] @A[8] Цитата(volvo @ 10.04.05 12:46) Неужели тебе надо просто рядом с массивом оформить еще и список, который будет содержать адреса соответствующих элементов массива? Это же как минимум 4-х кратный проигрыш в размере !!! А на память мне все равно! вернее этим способом я освобождаю как минимум в 2 раза память ! чем я бы использовал другой метод ! |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Цитата(osa @ 10.04.05 13:03) вернее этим способом я освобождаю как минимумв 2 раза память ! чем я бы использовал другой метод ! А вот теперь я тебе покажу, КАК это делается, а ты мне приведешь пример того, как при этом ИЗВРАТЕ ты в 2 раза минимум освобождаешь память... Не забудь, что в DS хранится И массив И список, что уже забирает лишнюю память. Кстати, это почему у тебя при массиве длинной 8 элементов длина списка = 10? Это тоже часть твоей суперстратегии? Код const n = 10; arr: array[1 .. n] of integer = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); type pint = ^integer; plist_rec = ^list_rec; list_rec = record data: pint; next: plist_rec; end; var list: array[1 .. n] of list_rec; p, head: plist_rec; i: integer; begin head := @list[1]; for i := 1 to n do begin list[i].data := @arr[i]; if i <> n then list[i].next := @list[succ(i)] else list[i].next := nil; end; p := head; while p <> nil do begin writeln(p^.data^); p := p^.next end; end. Теперь твоя очередь... Каким образом ЭТО экономит память по сравнению с простым использованием массива? |
osa |
![]()
Сообщение
#9
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: ![]() ![]() ![]() |
Я может не так обьясняю ) Дело в том что например как создать динамический массив я знаю !
Но а как его создать статически ??? Вот этим способом ты взял и по ходу выполнения програмы записал в ячейки данных списка адресса массивов! А мне надо это сделать еще до выполнения программы ! т е до начала БЕГИНА в сегменте данных ! |
osa |
![]()
Сообщение
#10
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: ![]() ![]() ![]() |
А начет памяти ! дело в том что мне надо написать свои процедуры Рид Врайт Для паскаля ! и там есть 4 способа их реализации ! так вот я выбрал как бы самый эфективный... просто можно создать массив и динамически ! но это не правельно ..
|
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Что-то я совсем запутался. Что значит "Статически" в твоем понятии? До Begin? Это не называется "Статически", это называется "На этапе компиляции", и это просто невозможно...
А вот "Статически" я как раз и сделал - хип (динамическая память) не использовался. |
osa |
![]()
Сообщение
#12
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: ![]() ![]() ![]() |
Понятно ! ты знаешь если честно я тоже думал что это нельзя сделать ... у нас препод старый уже (это лаба такая) и постоянно хочет такого что невозможно.
Это уже не первый раз. Просто я решил полазить по форумам может кто - то более умнее и скажет что - то новое п.с. Спасибо за потраченое время |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 10:39 |