Помощь - Поиск - Пользователи - Календарь
Полная версия: Массив и вектор
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
baran
дан массив A(M,N) и вектор B(M). Эллементы первого столбца массива упорядочены по убыванию. Включить в массив вектор, не нарушая при этом упорядочность.

Я вначале добавлял вектор в конец массива, а потом сортировал. А нужно "раздвинуть" строки и вставить вектор.

как это сделать? (я понимаю, что для вас это легко, но прошу...)
volvo
(Название темы поменяй)...

Идешь по всем строкам, пока первый элемент НЕ меньше первого элемента вставляемого вектора. Как только станет меньше - ты нашел позицию, куда вставлять. Перемещаешь вектора ОТ ПРЕДПОСЛЕДНЕГО до найденного номера на один назад (кстати, попутно - вопрос: что должно быть с последним вектором матрицы? Удаляется? Или это такой динамический массив векторов?), и вставляешь новый вектор в найденную позицию...
baran
Массив должен быть динамическим. ни одной строки нельзя потерять!!
я так и действовал, но что-т не работает. напишите код пожалуйста(с того момента, как находится элллемент менше 1-го еллемента массива).
мисс_граффити
а давай лучше ты напишешь свой код - который не работает?
и еще... ты на чем пишешь-то? на чистом паскале? и массив должен быть именно динамическим?
baran
именно динамический!! я пишу на си, но если будет код на паскале, то я пойму и реализую на си.
volvo
Цитата
я пишу на си
Перенести в раздел, где решаются задачи на С? И, кстати, чистый С или С++? В С++ это вообще в десяток строк уложится...
baran
пока что С.

если хочеш, то переноси. но мне бы код на паскале(для визуального восприятия логики реализации программы, а синтаксис изменить не тяжело)
volvo
Цитата
а синтаксис изменить не тяжело
Но и не всегда легко. Это - как раз тот случай. Попробуй перевести ЭТО на С... rolleyes.gif На Паскале работает как положено...

{$R-}
const
vectorSize = 10;
type
TType = Word;
Type
PVector = ^TVector;
TVector = Array[1 .. vectorSize] of TType;

PDynMatrix = ^TDynMatrix;
TDynMatrix = Array[1 .. 1] of PVector;

const
insertVector: TVector = (17, 0, 0, 0, 0, 0, 0, 0, 0, 0);
Var
T, mxDynamic: PDynMatrix;
n, i, j: Word;


Begin
writeln('before: ', memavail);
Write('num lines = '); ReadLn(n);

GetMem(mxDynamic, n * SizeOf(PVector));
For i := 1 To n Do
GetMem(mxDynamic^[i], SizeOf(TVector));

For i := 1 To n Do Begin
mxDynamic^[i]^[1] := 10 * (n - i);
For j := 2 To vectorSize Do
mxDynamic^[I]^[J] := I*J;
End;

For i := 1 To n Do Begin
WriteLn;
For j := 1 To vectorSize Do
Write(mxDynamic^[I]^[J]:4);
End;

i := 1;
while mxDynamic^[i]^[1] > insertVector[1] do inc(i);

GetMem(T, (n + 1) * SizeOf(PVector));
Move(mxDynamic^[1], T^[1], n * SizeOf(PVector));
FreeMem(mxDynamic, n * SizeOf(PVector));
inc(n);

mxDynamic := T;
Move(mxDynamic^[i], mxDynamic^[i + 1], (n - i) * SizeOf(PVector));
GetMem(mxDynamic^[i], SizeOf(TVector));
mxDynamic^[i]^ := insertVector;


For i := 1 To n Do Begin
WriteLn;
For j := 1 To vectorSize Do
Write(mxDynamic^[I]^[J]:4);
End;


For i := 1 To n Do
FreeMem(mxDynamic^[i], SizeOf(TVector));
FreeMem(mxDynamic, n * SizeOf(PVector));
writeln('after: ', memavail);
End.
baran
попробую... спасибо большое! smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.