Winitar писал(а):Хмм.... Мудрено)) Ну у меня вопрос был - "Как удалить элемент массива?". Просто из массива. Я ей говорю, что нельзя!!! Она говорит - "Нет, можно! В вопросе же написано!"... Так и спорили...
Вообще преподаватель допустил множество ошибок в билетах. Например как вам такой вопрос (Задача) - "На окружности, с центром на заданных координатах x0, y0, есть дуга (начало дуги x1, y1, конец - x2, y2)... Внимание вопрос!!! Определите номера четвертой окружности, имееющие общие точки с дугой..... ". Честно говоря меня задачка озадачила... Написал какую то ересь... Только потоооом, выяснилось что там опечатка, и нужно вычислять номера не ЧЕТВЕРТОЙ ОКРУЖНОСТИ, а ЧЕТВЕРТЕЙ ОКРУЖНОСТИ.... Но времени перерешивать не было.... Короче я влетел. А ведь расчитывал на пятерку!
Winitar писал(а):Ну вот... я в меньшинстве...
У всех такое мнение?
Просто алгоритм удаления элемента слишком мудреный (не уверен что он описывается в учебниках), законичил я тока 2й курс.... то есть прошли только основы... хотя я уже не уверен что это что то значит
А на счет задачи сошибкой... Ну подобных задач я еще не решал (хотя смог бы с легкостью), поэтому не догадался о чем речь
Joo писал(а):О каком массиве идет речь? О динамическом? Или статическом?
Joo писал(а):С динамическим все просто, можно удалить на самом деле, практически без геморроя, как известно в динамических массивах у элемента есть поле хранящее ссылку на следующий элемент, так вот элементу до удаляемого этому самому полю присваиваешь адрес следующего за удаляемым элемента, а удаляемый просто уничтожаешь. Хорош для больших массивов.
SLIM писал(а):Joo писал(а):О каком массиве идет речь? О динамическом? Или статическом?
Вообще-то в Turbo Pascal-е нет динамических массивов.
Далее, советую почитать статью http://vbstreets.ru/VB/Articles/66160.aspx
В ней приведены основные алгоритмы, которые можно применить и в TP (ну не API конечно, но с памятью TP работает нормально и так)Joo писал(а):С динамическим все просто, можно удалить на самом деле, практически без геморроя, как известно в динамических массивах у элемента есть поле хранящее ссылку на следующий элемент, так вот элементу до удаляемого этому самому полю присваиваешь адрес следующего за удаляемым элемента, а удаляемый просто уничтожаешь. Хорош для больших массивов.
Удаляемый просто уничтожаешь? И как же?
З.Ы. Использование динамичных массивов таки возможно, но с очень не хилым бубном и очень криво (через объекты,если не ошибаюсь)
Winitar писал(а):Ха! Значит я все таки был прав?
SLIM писал(а):Winitar писал(а):Ха! Значит я все таки был прав?
...Но есть куча вариантов. Все они как-то кривые (варианты с переносом элементов в другой, варианты с передвижением элементов влево, варианты работы с массивом на уровне памяти и т.д.)
SLIM писал(а):Joo писал(а):О каком массиве идет речь? О динамическом? Или статическом?
Вообще-то в Turbo Pascal-е нет динамических массивов.
SLIM писал(а):Joo писал(а):Далее, советую почитать статью http://vbstreets.ru/VB/Articles/66160.aspx
В ней приведены основные алгоритмы, которые можно применить и в TP (ну не API конечно, но с памятью TP работает нормально и так)
Сам туда иди, я не претендовал на лучший алгоритм, я описал простейший механизм, который замечательно работает на небольших массивах и доступен для понимания даже школьнику. MIT тоже кстати описал подобные манипуляции со сдвигом ))SLIM писал(а):Joo писал(а):С динамическим все просто, можно удалить на самом деле, практически без геморроя, как известно в динамических массивах у элемента есть поле хранящее ссылку на следующий элемент, так вот элементу до удаляемого этому самому полю присваиваешь адрес следующего за удаляемым элемента, а удаляемый просто уничтожаешь. Хорош для больших массивов.
Удаляемый просто уничтожаешь? И как же?
Все руками, все руками.SLIM писал(а):З.Ы. Использование динамичных массивов таки возможно, но с очень не хилым бубном и очень криво (через объекты,если не ошибаюсь)
Winitar писал(а):Ха! Значит я все таки был прав?
Joo писал(а):А про организацию динамических массивов в паскале с применением указателей слышал?
Joo писал(а):Без бубна, просто прямыми руками.
SLIM писал(а):Joo писал(а):А про организацию динамических массивов в паскале с применением указателей слышал?
Еще раз, в Turbo Pascal -е нет динамических массивов. Еще раз повторить? Причем тут организация?Joo писал(а):Без бубна, просто прямыми руками.
Ну ждемс.
Joo писал(а):Ты зацепился за то, что в ПАСКАЛЕ нет динамических массивов, для криворуких их нет, согласен.
В паскале можно создать список из динамически создаваемых объектов, которые в себе хранят ссылку на следующий объект, при верном подходе к произвольному объекту можно обратиться не только перебором но и по индексу, а это не что иное как массив.
Если в паскале нет ключевых слов и операторов для создания и управления динамическими массивами, это не значит что в паскале это невозможно!
Возможно! И довольно просто. Если для тебя это сверхсложная задача, то о чем мы с тобой вообще можем спорить?
Winitar писал(а):...законичил я тока 2й курс...
В паскале можно создать список из динамически создаваемых объектов, которые в себе хранят ссылку на следующий объект, при верном подходе к произвольному объекту можно обратиться не только перебором но и по индексу, а это не что иное как массив.
Если для тебя это сверхсложная задача, то о чем мы с тобой вообще можем спорить?
Хакер писал(а):В паскале можно создать список из динамически создаваемых объектов, которые в себе хранят ссылку на следующий объект, при верном подходе к произвольному объекту можно обратиться не только перебором но и по индексу, а это не что иное как массив.
Поведуешь нам, как, имея начало цепочки, по индексу сразу же (то есть не перебирая элементы цепочки) получить адрес соответствующего элемента?
[/quote]Хакер писал(а):Если для тебя это сверхсложная задача, то о чем мы с тобой вообще можем спорить?
Спорить с ним ты можешь о том, есть ли в TP динамические массивы (а не возможность их организации другими фичами языка). И если действительно нет ключевых слов и операторов для создания и управления, то SLIM в этом споре прав. Но очень советую тебе воздержать от подобных нападок. Ведь не первый уже раз.
Joo писал(а):По умолчанию их нет, но организация возможна, и с этим не поспоришь!
iGrok писал(а):Winitar писал(а):...законичил я тока 2й курс...
То есть это ты уже в универе такие вопросы задаёшь и споришь с преподом, а не в школе? Сильно...
.....
SLIM писал(а):Joo
...
Мы ждем твоего примера - как минимум два человека - я и автор.
З.Ы. Мы здесь собрались чтобы говорить о чем-то, помогать и искать помощи. Не забывай об этом
Хакер писал(а):Мне интересно другое: чел заикнулся о связанных списках как об альтернативе дин. массивов.Разница между массивами (в том числе и динамическими) и списками существенная: элемента массива располагаются в памяти строго друг за другом, в то время как элементы списка располагаются как попало и где угодно.
type
tT= Integer; //Какого типа будет массив
tP = ^T;
var
Ptc,Ptm :tP;
n, index :integer;
begin
n := 10; //Размер массива
Ptm:=nil;
GetMem(Ptm, N * SizeOf(tT)); //Выделяем паямть
Ptc:=Ptm;
index:=5; //Запишем в 5 элемент массива что-нить
If(index in [0..n])then begin
If index<0 then dec(Ptc, -index) else inc(Ptc, index); //Двигаем указатель
Ptc^:=5; //Записываем данные
end;
If Ptm<>nil then FreeMem(Ptm, n * SizeOf(tT)); //Освобождаем память
end.
alibek писал(а):Joo, перечитай еще раз свое первоначальное сообщение. В котором ты говорил, что изменяешь указатель на следующий элемент массива.
Твой код делает то, что во втором сообщении описал MIT.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 71