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

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

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

> Сортировка матрицы, динамика, файлы, драйверы
punkska
сообщение 6.01.2006 18:07
Сообщение #1


Пионер
**

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

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


Проверрить, Все лия строки матрицы упорядочны по убыванию. Упорядочить массив по неубыванию элементов второго столбца. Сортировка вставкаими.


program laba2;
uses Crt;
type
 Mas=array[1..1] of integer;
 dinmas=^mas;

function takesize:integer;
var
 i:integer;
begin
 writeln('KO/\U4ECTBO ELEMEHTOB MACCUBA:');
 repeat
  readln(i);
 until i>0;
 takesize:=i;
end;

procedure EnterMassive(var A:dinmas; const n:integer);
var
 i:integer;
begin
 writeln;
 writeln('BBEgUTE MACCUB:');
 i:=0;
 repeat
  i:=i+1;
  write(i,' element = ');
  readln(A^[i]);
 until i=n;
end;

procedure ShowMassive(var A:dinmas; const n:integer);
var
 i:integer;
begin
 writeln;
 writeln('BBEgEHHb|U MACCUB:');
 i:=0;
 repeat
  i:=i+1;
  write(A^[i],' ');
 until i=n;
 writeln;
end;

procedure sorting(var A:dinmas; const n:integer);
var
 j,i:integer;
 endof:boolean;
 add:integer;
begin
 writeln;
 writeln('COPTUPOBKA MACCUBA...');
 for i:=2 to n do
 begin
  j:=i;
  endof:=true;
  while( j>1 ) and endof do
   if (A^[j]<A^[j-1]) then
   begin
    add:=A^[j-1];
    A^[j-1]:=A^[j];
    A^[j]:=add;
    j:=j-1;
   end
   else
    endof:=false;
 end;
end;


var
 n:integer;
 A:dinmas;

begin
clrscr;
writeln('LABA 2');

n:=takesize;
GetMem(A,sizeof(real)*n);
EnterMassive(A,n);
showMassive(A,n);

{////}
sorting(A,n);
showMassive(A,n);
Freemem(A,sizeof(real)*n);
writeln('THE END.');
readln;
end. 





1 вопрос как сделать сортировку *по неубыванию элементов второго столбца. Сортировка вставкаими.*
я написал..но явно не для 2ого столбца....что-то я не понял...
и пока что-то ни как ни хочет работать *Проверрить, Все лия строки матрицы упорядочны по убыванию*
хелп


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 8)
punkska
сообщение 6.01.2006 18:18
Сообщение #2


Пионер
**

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

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


блин матрица а не массив! ёмоё


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.01.2006 18:52
Сообщение #3


Гость






Цитата
Упорядочить массив по неубыванию элементов второго столбца
Задание уточни... Что именно тебе нужно - отстртировать ТОЛЬКО второй столбец по неубыванию, не трогая остальные, или поменять местами строки матрицы так, что второй столбец окажется отсортированным по неубыванию?

Это разные вещи...
 К началу страницы 
+ Ответить 
punkska
сообщение 6.01.2006 18:59
Сообщение #4


Пионер
**

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

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


т.к. сказано Упорядочить массив, то я думаю нужно *поменять строки матрицы так, что второй столбец окажется отсортированным по неубыванию* unsure.gif

Сообщение отредактировано: punkska - 6.01.2006 19:03


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.01.2006 19:23
Сообщение #5


Гость






Ну, тогда я могу тебе сказать, что ты СОВСЕМ неправильно работаешь с матрицей... Тот способ, которым ты пользуешься - работает с массивами... Матрицы - вот так: FAQ: Работа с динамическими матрицами

Ну, а вот рабочий каркас программы, только поставь где тебе нужно функции/процедуры...
{$R-}
Type
  TType = Word;
Type
  PVector = ^TVector;
  TVector = Array[1 .. 1] of TType;

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

Var
  mxDynamic: PDynMatrix;
  n, i, j: Word;
  T: PVector;
Begin
  Write('n = '); ReadLn(n);
  { Alloc }
  GetMem(mxDynamic, n * SizeOf(PVector));
  For i := 1 To n Do
    GetMem(mxDynamic^[i], n * SizeOf(TType));

  { Enter Data }
  Randomize;
  For i := 1 To n Do
    For j := 1 To n Do
      mxDynamic^[I]^[J]:=random(20);
  { Show: Before }
  For i := 1 To n Do Begin
    WriteLn;
    For j := 1 To n Do
       Write(mxDynamic^[I]^[J]:4);
  End;

  {Sorting}
  For i := 1 To n do Begin
    T := mxDynamic^[i];
    j := Pred(i);
    While (T^[2] < mxDynamic^[j]^[2]) and (j > 0) Do Begin
      mxDynamic^[Succ(j)] := mxDynamic^[j]; Dec(j);
    End;
    mxDynamic^[Succ(j)] := T;
  End;


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

  { Free }
  For i := 1 To n Do
    FreeMem(mxDynamic^[i], n * SizeOf(TType));
  FreeMem(mxDynamic, n * SizeOf(PVector));
End.
 К началу страницы 
+ Ответить 
punkska
сообщение 7.01.2006 15:13
Сообщение #6


Пионер
**

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

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



{$R-}
uses Crt;
Type
  TType = Word;
Type
  PVector = ^TVector;
  TVector = Array[1 .. 1] of TType;

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

procedure EnterMatr(var mxDynamic: PDynMatrix; const n:integer );
  Var i,j:integer;
  Begin
    For i := 1 To n Do
    For j := 1 To n Do
     read( mxDynamic^[I]^[J]);
  end;

procedure ShowMatr(var mxDynamic: PDynMatrix; const n:integer );
  Var i,j:integer;
  Begin
  For i := 1 To n Do Begin
    WriteLn;
    For j := 1 To n Do
       Write(mxDynamic^[I]^[J]:4);
    End;
  End;

procedure TakeSize(var mxDynamic: PDynMatrix; const n:integer );
  Var i,j:integer;
  Begin
   GetMem(mxDynamic, n * SizeOf(PVector));
  For i := 1 To n Do
    GetMem(mxDynamic^[i], n * SizeOf(TType));
  end;

procedure FreeSize(var mxDynamic: PDynMatrix; const n:integer );
 Var i,j:integer;
 Begin
 For i := 1 To n Do
  FreeMem(mxDynamic^[i], n * SizeOf(TType));
  FreeMem(mxDynamic, n * SizeOf(PVector));
 end;


procedure SortMatr( mxDynamic: PDynMatrix; const n:integer );
 Var i,j:integer;
     T: PVector;
  Begin
   For 
    i := 1 To n do Begin
    T := mxDynamic^[i];
    j := Pred(i);
    While (T^[2] < mxDynamic^[j]^[2]) and (j > 0) Do Begin
      mxDynamic^[Succ(j)] := mxDynamic^[j]; Dec(j);
    End;
    mxDynamic^[Succ(j)] := T;
  End;

Var
  mxDynamic: PDynMatrix;
  n, i, j: Word;
  
Begin
  Write('n = '); ReadLn(n);
 
  
  takesize(mxDynamic,n);
  EnterMatr(mxDynamic,n);
  clrscr;
  ShowMatr(mxDynamic,n); 
  FreeSize(mxDynamic,n);
  
End.




сортировку ни пойму как заставить работать!(


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.01.2006 15:25
Сообщение #7


Гость






Во-первых, у тебя не хватает одного End-а в процедуре сортировки, а во-вторых, поменяй условие
While (T^[2] < mxDynamic^[j]^[2]) and (j > 0) Do Begin

на
While (j > 0) and (T^[2] < mxDynamic^[j]^[2]) Do Begin

, тогда оно перестанет зависеть от настроек компилятора...
 К началу страницы 
+ Ответить 
punkska
сообщение 7.01.2006 17:20
Сообщение #8


Пионер
**

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

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


unsure.gif не перестал
ему всё равно не нравиться что-то T^[2] Error 76 wacko.gif


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.01.2006 17:39
Сообщение #9


Гость






Пример входных данных и версию компилятора приведи...
У меня как на FPC 2.0.0 так и на TP70 при матрице размером 3*3:
Цитата
1 8 3
4 1 5
2 7 3
прекрасно отрабатывает...

Вот так тоже попробуй, иногда помогает:
procedure SortMatr( mxDynamic: PDynMatrix; const n:integer );
Var
  i,j:integer;
  T: PVector;
Var
  Two: Byte;
Begin
  Two := 2;

  For i := 1 To n do Begin
    T := mxDynamic^[i];
    j := Pred(i);
    While (j > 0) and (T^[Two] < mxDynamic^[j]^[Two]) Do Begin
      mxDynamic^[Succ(j)] := mxDynamic^[j]; Dec(j);
    End;
    mxDynamic^[Succ(j)] := T;
  End;
End;
 К началу страницы 
+ Ответить 

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

 

- Текстовая версия 29.07.2025 1:47
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"