1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
| osa |
Сообщение
#1
|
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: 0 |
Здравствуйте , мне необходимо
1) создать массив 2) установить его указатели на массив и на след элемент (создать список указателей на массив и на следуюющий элемент еще в сегменте данных) 3) и поменять эти указатели П.С. эсли 1) и 2) я представляю как сделать то 2) да еще и в сегменте данных я не представляю . |
| volvo |
Сообщение
#2
|
|
Гость |
osa, поточнее можно? Что значит
Цитата указатели на массив и на след элемент ? На следующий за чем элемент?Если уже Цитата 1) и 2) я представляю как сделать , то почему бы не привести пример, что именно нужно, а то не вполне понятен смысл задания... |
| osa |
Сообщение
#3
|
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: 0 |
Цитата(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 Пол: Мужской Репутация: 0 |
смотри нам нужно создать список не динамически, а в сегменте данных ! а в списке должны храняться указатели на массив ! ну и на следующий элемент списка
|
| volvo |
Сообщение
#6
|
|
Гость |
Ты толком объяснить можешь? У тебя есть список... Само собой, что каждый элемент списка содержит адрес следующего элемента списка, но ведь кроме этого он тоже что-то содержит !!! Так вот я и хочу узнать, ЧТО ИМЕННО должен содержать каждый элемент списка??? Допустим, первый - содержит адрес массива, а второй? А третий? Четвертый? ...
Вот так задается список: Код type tlist = record data: ... { <--- вот тут что хранится будет ???} next: ^tlist; { тут-ясно, что след. элемент списка } end; Неужели тебе надо просто рядом с массивом оформить еще и список, который будет содержать адреса соответствующих элементов массива? Это же как минимум 4-х кратный проигрыш в размере !!! |
| osa |
Сообщение
#7
|
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: 0 |
!Смотри 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 Пол: Мужской Репутация: 0 |
Я может не так обьясняю ) Дело в том что например как создать динамический массив я знаю !
Но а как его создать статически ??? Вот этим способом ты взял и по ходу выполнения програмы записал в ячейки данных списка адресса массивов! А мне надо это сделать еще до выполнения программы ! т е до начала БЕГИНА в сегменте данных ! |
| osa |
Сообщение
#10
|
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: 0 |
А начет памяти ! дело в том что мне надо написать свои процедуры Рид Врайт Для паскаля ! и там есть 4 способа их реализации ! так вот я выбрал как бы самый эфективный... просто можно создать массив и динамически ! но это не правельно ..
|
| volvo |
Сообщение
#11
|
|
Гость |
Что-то я совсем запутался. Что значит "Статически" в твоем понятии? До Begin? Это не называется "Статически", это называется "На этапе компиляции", и это просто невозможно...
А вот "Статически" я как раз и сделал - хип (динамическая память) не использовался. |
| osa |
Сообщение
#12
|
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: 0 |
Понятно ! ты знаешь если честно я тоже думал что это нельзя сделать ... у нас препод старый уже (это лаба такая) и постоянно хочет такого что невозможно.
Это уже не первый раз. Просто я решил полазить по форумам может кто - то более умнее и скажет что - то новое п.с. Спасибо за потраченое время |
![]() ![]() |
|
Текстовая версия | 7.11.2025 14:54 |