IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Работа с указателями на массив, указатели на массив и их перенос
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Здравствуйте , мне необходимо
1) создать массив
2) установить его указатели на массив и на след элемент (создать список указателей на массив и на следуюющий элемент еще в сегменте данных)
3) и поменять эти указатели

П.С.
эсли 1) и 2) я представляю как сделать то 2) да еще и в сегменте данных я не представляю .
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 11)
сообщение
Сообщение #2


Гость






osa, поточнее можно? Что значит
Цитата
указатели на массив и на след элемент
? На следующий за чем элемент?

Если уже
Цитата
1) и 2) я представляю как сделать
, то почему бы не привести пример, что именно нужно, а то не вполне понятен смысл задания...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 10.04.05 12:00)
osa, поточнее можно? Что значит ? На следующий за чем элемент?

Если уже , то почему бы не привести пример, что именно нужно, а то не вполне понятен смысл задания...

Опечатался 1 и 3 представляю .
А затем что это как бы будет список ! который я смогу потом свободно перебирать ! я понял что тут не понятно ! не на следующий элемент массива а на следующий елемент списка
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Я так и не понял, какой выигрыш дает использование списка вместо массива, но вообще-то обращаться через указатель к элементу массива (да еще и расположенного в сегменте данных, а не в хипе) - это просто извращение.
Код
Type
 pArrType = ^arrType;
 arrType = array[1 .. 2000] of integer;
Var
 x: arrType;
 p: pArrType;
begin
 p := @x;
 p^[1] := ...; { и работаем через указатель }
end;

Если нужно работать со списками - то сначала сюда: FAQ: Динамические структуры данных (списки)

А вообще-то приведи пример, КАК ты хочешь обращаться к массиву (ну, или списку), и я помогу тебе это реализовать.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


смотри нам нужно создать список не динамически, а в сегменте данных ! а в списке должны храняться указатели на массив ! ну и на следующий элемент списка
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Ты толком объяснить можешь? У тебя есть список... Само собой, что каждый элемент списка содержит адрес следующего элемента списка, но ведь кроме этого он тоже что-то содержит !!! Так вот я и хочу узнать, ЧТО ИМЕННО должен содержать каждый элемент списка??? Допустим, первый - содержит адрес массива, а второй? А третий? Четвертый? ...

Вот так задается список:
Код

type tlist = record
 data: ... { <--- вот тут что хранится будет ???}
 next: ^tlist; { тут-ясно, что след. элемент списка }
end;

Неужели тебе надо просто рядом с массивом оформить еще и список, который будет содержать адреса соответствующих элементов массива?

Это же как минимум 4-х кратный проигрыш в размере !!!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 раза память ! чем я бы использовал другой метод !
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.

Теперь твоя очередь... Каким образом ЭТО экономит память по сравнению с простым использованием массива?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Я может не так обьясняю ) Дело в том что например как создать динамический массив я знаю !
Но а как его создать статически ???
Вот этим способом ты взял и по ходу выполнения програмы записал в ячейки данных списка адресса массивов! А мне надо это сделать еще до выполнения программы ! т е до начала БЕГИНА в сегменте данных !
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


А начет памяти ! дело в том что мне надо написать свои процедуры Рид Врайт Для паскаля ! и там есть 4 способа их реализации ! так вот я выбрал как бы самый эфективный... просто можно создать массив и динамически ! но это не правельно ..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Что-то я совсем запутался. Что значит "Статически" в твоем понятии? До Begin? Это не называется "Статически", это называется "На этапе компиляции", и это просто невозможно...

А вот "Статически" я как раз и сделал - хип (динамическая память) не использовался.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Понятно ! ты знаешь если честно я тоже думал что это нельзя сделать ... у нас препод старый уже (это лаба такая) и постоянно хочет такого что невозможно.
Это уже не первый раз.
Просто я решил полазить по форумам может кто - то более умнее и скажет что - то новое

п.с.
Спасибо за потраченое время
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 7.11.2025 14:54
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name