0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 10
1

Сортировка массивов

28.10.2009, 19:32. Показов 2371. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Люди помогите, пожалуйста, написать программу для сортировки массивов по возрастанию методом выбора минимума... очень-очень нужно... не могу разобраться, т.к. тут двумерная матрица, а в примерах везде одномерная. заранее спасибо!

вот у меня есть уже начало
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
program lab_3;
uses crt;
const m=9;
type aType=array[1..m,1..m] of integer;
var a:aType;
    n:integer;
 
procedure InputMas(var a:aType; n:integer);
var i,j:integer;
begin
randomize;
for i:=1 to n do
  for j:=1 to n do
    a[i,j]:=random(90)+10;
end;
Добавлено через 6 минут
ой забыл дописать сортировку надо делать по столбцам. помогите...

Добавлено через 12 минут
помогите, пожалуйста. просто надо сделать сортировку по столбцам по возрастанию методом выбора минимума в двумерном массиве...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2009, 19:32
Ответы с готовыми решениями:

программы усложненной структуры, обработка двухмерных массивов, использование стандартных функций для работы с массивами, сортировка массивов.
Искала задачи, нашла в с++, а нужно в паскале сотворить следующее. Использование стандартных...

Сортировка массивов. Сортировка выбором
Помогите пожалуйста, я что-то совсем запуталась при составлении данной программы... Сортировка...

Сортировка массивов
Помогите, я уже не могу ничего придумать.. 1)Сортировать вставкой рядки массива по возрастанию...

сортировка массивов
дана квадратная матрица N*M, состоящая из натуральных чисел. зеркально отразить ее элементы...

21
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
28.10.2009, 19:33 2
Цитата Сообщение от Александр88 Посмотреть сообщение
т.к. тут двумерная матрица
а какая разница??? надо всего ли добавить точно такой же цикл
Pascal
1
2
3
for i:=1 to n do{это проход по строчкам}
  for j:=1 to n do{это проход по столбцам}
    ...
если и это вам не поможет то поищите на форуме таких задач уже много нарешали...
0
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 10
28.10.2009, 19:43  [ТС] 3
целый день сижу уже за этой задачей... может кто-нибудь может написать текст программы... у самого никак не получается...
0
Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181
28.10.2009, 19:56 4
Вот здесь и по строкам и по столбцам, переделай, мне некогда.
Сортировка в матрице
0
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 10
28.10.2009, 20:04  [ТС] 5
а МЕТОДОМ ВЫБОРА МИНИМУМА хоть кто-нибудь знает как выглядит это???? очень нужно...
0
Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181
28.10.2009, 20:06 6
Замени в той программе что я указал max на min и знак < на >
0
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 10
28.10.2009, 20:37  [ТС] 7
никак не могу понять... пожалуйста кто-нибудь ну напишите мне как присваивается индекс в массиве где находится наименьшее значение

вот метод решения для одномерного массива
выбор:
Pascal
1
2
3
4
5
6
7
8
9
10
11
for j:= 1 to n-1 do                                                
min:=A[j]; 
nm:=j;                                                                
for t:=j+1 to n do
if a[t]<min then
begin 
min:=a[t];
nm:=t;
перестановка :
a[nm]:=a[j];
a[j]:=min;
где:
min - минимальное значение
nm - индекс в массивt
t - индекс для перебора при поиске миним. знач.

помогите написать для двумерного массива
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
28.10.2009, 20:56 8
не знаю что непонятного в той задаче что прислал puporev, там просто немного надо было подредактировать под себя... видимо не было большого желания... в любом случае держите решение...
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
uses crt;
const
  n=4;{ïîðÿäîê ìàòðèö}
var
  a:array [1..n,1..n] of integer;
  i,j,cz,temp:integer;
begin
  clrscr;
  {çàïîëíÿåì è âûûâîäèì ìàòðèöó a}
  writeln('Èñõîäíàÿ ìàòðèöà A:');
  writeln('------------------');
  for i:=1 to n do
  begin
    for j:=1 to n do
    begin
      a[i,j]:=random(8)-4;
      write(a[i,j],' ')
    end;
    writeln
  end;
  {ñîòèðóåì ìàññèâ ïî âîçðàñòàíèþ}
  cz:=1;
  while cz<>0 do
  begin
    cz:=0;
    for i:=1 to n do
      for j:=2 to n do
        if a[j,i]<a[j-1,i] then{åñëè íóæíî îòñîðòèðîâàòü ïî óáûâàíèþ èçìåíèòå â ýòîé ñòðîêå çíàê ñ < íà >}
        begin
          temp:=a[j-1,i];
          a[j-1,i]:=a[j,i];
          a[j,i]:=temp;
          inc(cz)
        end;
  end;
  {âûâîäèì ìàòðèöó}
  writeln('Ïîëó÷åííàÿ ìàòðèöà À:');
  writeln('------------------');
  for i:=1 to n do
  begin
    for j:=1 to n do
      write(a[i,j],' ');
    writeln
  end;
  writeln('------------------')
end.
1
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 10
28.10.2009, 20:57  [ТС] 9
Inadequate огромное спасибо!!!
0
Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181
28.10.2009, 21:03 10
Inadequate, Одномерный он тоже где-то содрал, а сам вообще ничего не понимат.
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
28.10.2009, 21:26 11
Puporev, да я и не сомневался что "никак не могу понять... помогите..."="я не нашел готового решения а pascal я не понимать..."
0
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 10
28.10.2009, 22:07  [ТС] 12
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
program lab_3;
uses crt;
const m=9;
type aType=array[1..m,1..m] of integer;
var a:aType;
    n:integer;
 
procedure InputMas(var a:aType; n:integer);
var i,j:integer;
begin
randomize;
for i:=1 to n do
  for j:=1 to n do
    a[i,j]:=random(90)+10;
end;
 
procedure ChangeMas(var a:aType);
var t,i,j,n,k,nm,min,z:integer;
begin
writeln;
for i:=1 to n do
 for j:=1 to n do
  if ((i<j)and(i<n-j+1))or((i>j)and(i>n-j+1)) then
    a[i,j]:=0;
 
  for i:=1 to n-1 do
 begin
 
 min:=a[i];
  nm:=i;
 
 for z:=i+1 to n do
 if a[i]<min then
 begin
 min:=a[z];
 nm:=z;
 end;
 a[nm]:=a[i];
 a[i]:=min;
 
 
 
   end;
  end;
 
procedure PrintMas(const a:aType; n:integer);
var i,j:integer;
begin
for i:=1 to n do
 begin
  writeln;
  for j:=1 to n do
  write(a[i,j]:4);
 end;
end;
 
procedure Okno(x1,y1,x2,y2,cf,ct:Byte);
begin
 Window(x1,y1,x2,y2);
 TextBackGround(cf);
 TextColor(ct);
 clrscr
end;
 
 
BEGIN
Okno(1,1,110,85,0,15);
Okno(20,1,55,3,0,15);
write('Работу выполнил: Фомкин A.C. ');
Okno(3,5,75,10,9,15);
write('Задание: в матрице, заполненной случайными целыми числами, отсортировать каждый столбец по возрастанию элементов методом выбора минимума.');
writeln;
Okno(3,12,75,15,2,15);
repeat
write('Введите размер матрицы 1-9:');
readln(n);
until n<10;
Okno(2,17,38,30,4,15);
InputMas(a,n);
writeln('  Исходная матрица: ');
PrintMas(a,n);
ChangeMas(a);
Okno(40,17,77,30,5,15);
writeln('  Отсортированная матрица: ');
PrintMas(a,n);
readkey;
END.

вообще вот моя программа. никак не могу разобраться в чем ошибка в процедуре changemass. очень стараюсь сделать.

Добавлено через 1 минуту
это я вот вопрос задавал как писать для двумерного массива... тут как раз ошибка что у меня а[i,j], а сортировку надо делать по столбцам. и нас не учили для двумерных массивов. а тут наверное исправить не очень много надо...

Добавлено через 52 секунды
а так вроде бы я тут понимаю что происходит, а на этом моменте ступор и все.
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
28.10.2009, 22:10 13
2Александр88, ну во первых мало кто без особого предварительного запала энтузиазма будет читать такую кашу... а во вторых зачем изобретать велосипед??? вам же все написали компактно и аккуратно???
0
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 10
28.10.2009, 22:29  [ТС] 14
мда... у меня просто такое задание... а вот начинку в changemass никак не доделать... даже по образцам... как-то у вас по-другому...а программой я хотел показать что хоть что-то я понимаю)... может подскажете мне. там же не трудно. а энтузиазм я вижу у вас хоть чуть-чуть но есть)
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
28.10.2009, 22:56 15
2Александр88, если я правильно вас понял это таже задача о которой вы спрашивали вначале???
0
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 10
28.10.2009, 22:57  [ТС] 16
так точно)
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
28.10.2009, 23:00 17
А на первый взгляд сразу бросается вот эта не понятно к чему запись:
if ((i<j)and(i<n-j+1))or((i>j)and(i>n-j+1)) then
чтобы отсортировать массив вам не индексы нужно сравнивать, а сами! элементы. поэтому у меня и не так как у вас...
0
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 10
28.10.2009, 23:06  [ТС] 18
эта строка это заполнение нулями нужных мне областей). а сортировка вся в change mass. но ее я как раз не могу сделать. буду очень очень очень благодарен если все таки поможете мне с этой процедурой))
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
29.10.2009, 04:07 19
эта строка это заполнение нулями нужных мне областей). а сортировка вся в change mass.
2Александр88, я вообще не понял для чего надо заполнять нулями... и вообще то я в этой процедуре и взял это:
if ((i<j)and(i<n-j+1))or((i>j)and(i>n-j+1)) then
ну да ладно, вооружившись львиной долей энтузиазма я скопирнул себе в паскаль сие творение:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
program lab_3;
uses crt;
const m=9;
type aType=array[1..m,1..m] of integer;
var a:aType;
    n:integer;
 
procedure InputMas(var a:aType; n:integer);
var i,j:integer;
begin
randomize;
for i:=1 to n do
  for j:=1 to n do
    a[i,j]:=random(90)+10;
end;
 
procedure ChangeMas(var a:aType);
var t,i,j,n,k,nm,min,z:integer;
begin
writeln;
for i:=1 to n do
 for j:=1 to n do
  if ((i<j)and(i<n-j+1))or((i>j)and(i>n-j+1)) then
    a[i,j]:=0;
 
  for i:=1 to n-1 do
 begin
 
 min:=a[i];
  nm:=i;
 
 for z:=i+1 to n do
 if a[i]<min then
 begin
 min:=a[z];
 nm:=z;
 end;
 a[nm]:=a[i];
 a[i]:=min;
 
 
 
   end;
  end;
 
procedure PrintMas(const a:aType; n:integer);
var i,j:integer;
begin
for i:=1 to n do
 begin
  writeln;
  for j:=1 to n do
  write(a[i,j]:4);
 end;
end;
 
procedure Okno(x1,y1,x2,y2,cf,ct:Byte);
begin
 Window(x1,y1,x2,y2);
 TextBackGround(cf);
 TextColor(ct);
 clrscr
end;
 
 
BEGIN
Okno(1,1,110,85,0,15);
Okno(20,1,55,3,0,15);
write('Работу выполнил: Фомкин A.C. ');
Okno(3,5,75,10,9,15);
write('Задание: в матрице, заполненной случайными целыми числами, отсортировать каждый столбец по возрастанию элементов методом выбора минимума.');
writeln;
Okno(3,12,75,15,2,15);
repeat
write('Введите размер матрицы 1-9:');
readln(n);
until n<10;
Okno(2,17,38,30,4,15);
InputMas(a,n);
writeln('  Исходная матрица: ');
PrintMas(a,n);
ChangeMas(a);
Okno(40,17,77,30,5,15);
writeln('  Отсортированная матрица: ');
PrintMas(a,n);
readkey;
END.
подзалатал, подшил, отгладил, постирал получил более читабельную версию:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
uses
  crt;
const
  max=3;{ðàçìåðíîñòü ìàòðèöû íå ñòàâüòå áîëüøóþ äëÿ ïðîâåðêè èñïîëüçóéòå 3}
type
  aType=array[1..max,1..max] of integer;
var
  a:aType;
{ïðîöåäóðà çàïîëíåíèÿ ìàòðèöû}
procedure InputMas(var a:aType);
var
  i,j:integer;
begin
  for i:=1 to max do
    for j:=1 to max do
      a[i,j]:=random(8)-4;
end;
{ïðîöåäóðà ñîðòèðîâêè ìàòðèöû}
procedure ChangeMas(var a:aType);
var
  cz,i,j,temp:integer;
begin
  cz:=1;
  while cz<>0 do
  begin
    cz:=0;
    for i:=1 to max do
      for j:=2 to max do
        if a[j,i]<a[j-1,i] then{åñëè íóæíî îòñîðòèðîâàòü ïî óáûâàíèþ èçìåíèòå â ýòîé ñòðîêå çíàê ñ < íà >}
        begin
          temp:=a[j-1,i];
          a[j-1,i]:=a[j,i];
          a[j,i]:=temp;
          inc(cz)
        end;
  end;
end;
{ïðîöåäóðà âûâîäà ìàòðèöû}
procedure PrintMas(const a:aType);
var i,j:integer;
begin
  for i:=1 to max do
  begin
    writeln;
    for j:=1 to max do
      write(a[i,j]:4);
  end;
end;
{ïðîöåäóðà âûâîäà îêíà}
procedure Okno(x1,y1,x2,y2,cf,ct:Byte);
begin
  Window(x1,y1,x2,y2);
  TextBackGround(cf);
  TextColor(ct);
  clrscr
end;
{îñíîâíàÿ ïðîãðàììà}
begin
  Okno(1,1,110,85,0,15);
  Okno(20,1,55,3,0,15);
  write('Ðàáîòó âûïîëíèë: Ôîìêèí A.C. ');
  Okno(3,5,75,10,9,15);
  write('Çàäàíèå: â ìàòðèöå, çàïîëíåííîé ñëó÷àéíûìè öåëûìè ÷èñëàìè, îòñîðòèðîâàòü êàæäûé ñòîëáåö ïî âîçðàñòàíèþ ýëåìåíòîâ ìåòîäîì âûáîðà ìèíèìóìà.');
  writeln;
  Okno(3,12,75,15,2,15);
  Okno(2,17,38,30,4,15);
  InputMas(a);
  writeln('  Èñõîäíàÿ ìàòðèöà: ');
  PrintMas(a);
  ChangeMas(a);
  Okno(40,17,77,30,5,15);
  writeln('  Îòñîðòèðîâàííàÿ ìàòðèöà: ');
  PrintMas(a);
  readkey;
end.
сразу меня смутила ваша процедура ChangeMass где вы заполняли и сортировали... поэтому я решил её исправить, искал где же начало ошибки... в итоге пришел к началу, все стер и написал свою... далее меня смутили readkey да и вообще ваша затея с разноцветными окнами потому как не вижу мотиваций для покраски окон... сказать что красиво смотрится??? не скажешь... так что я решил убрать это все добро и оформить так как некогда я офрмлял задание по типизированным файлам в универе(простенько строго официально):
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
uses
  crt;
const
  max=3;{ðàçìåðíîñòü ìàòðèöû íå ñòàâüòå áîëüøóþ äëÿ ïðîâåðêè èñïîëüçóéòå 3}
type
  aType=array[1..max,1..max] of integer;
var
  a:aType;
{ïðîöåäóðà çàïîëíåíèÿ ìàòðèöû}
procedure InputMas(var a:aType);
var
  i,j:integer;
begin
  for i:=1 to max do
    for j:=1 to max do
      a[i,j]:=random(8)-4;
end;
{ïðîöåäóðà ñîðòèðîâêè ìàòðèöû}
procedure ChangeMas(var a:aType);
var
  cz,i,j,temp:integer;
begin
  cz:=1;
  while cz<>0 do
  begin
    cz:=0;
    for i:=1 to max do
      for j:=2 to max do
        if a[j,i]<a[j-1,i] then{åñëè íóæíî îòñîðòèðîâàòü ïî óáûâàíèþ èçìåíèòå â ýòîé ñòðîêå çíàê ñ < íà >}
        begin
          temp:=a[j-1,i];
          a[j-1,i]:=a[j,i];
          a[j,i]:=temp;
          inc(cz)
        end;
  end;
end;
{ïðîöåäóðà âûâîäà ìàòðèöû}
procedure PrintMas(const a:aType);
var i,j:integer;
begin
  for i:=1 to max do
  begin
    for j:=1 to max do
      write(a[i,j]:4);
    writeln;
  end;
end;
{îñíîâíàÿ ïðîãðàììà}
begin
  clrscr;
  textbold;
  writeln('===============================================================================');
  textbold;
  writeln('              ÏÐÎÃÐÀÌÌÀ ÍÀ PASCAL ÍÀ ÒÅÌÓ: "ÑÎÐÒÈÐÎÂÊÀ ÌÀÒÐÈÖ"                 ');
  textnormal;
  writeln('===============================================================================');
  writeln('Çàäàíèå:  ìàòðèöå, çàïîëíåííîé ñëó÷àéíûìè öåëûìè ÷èñëàìè, îòñîðòèðîâàòü êàæäûé');
  writeln('         ñòîëáåö ïî âîçðàñòàíèþ ýëåìåíòîâ ìåòîäîì âûáîðà ìèíèìóìà.');
  writeln('===============================================================================');
  writeln('Èñõîäíàÿ ìàòðèöà À:');
  InputMas(a);
  textbold;
  PrintMas(a);
  textnormal;
  writeln('===============================================================================');
  textbold;
  writeln('                       ÂÛÏÎËÍßÅÌ ÑÎÐÒÈÐÎÂÊÓ ÌÀÒÐÈÖÛ A                          ');
  textnormal;
  writeln('===============================================================================');
  ChangeMas(a);
  writeln('Ïîëó÷åííàÿ ìàòðèöà À:');
  textbold;
  PrintMas(a);
  textnormal;
  writeln('===============================================================================');
  textbold;
  writeln('                        ÐÀÁÎÒÀ ÏÐÎÃÐÀÌÌÛ ÇÀÂÅÐØÅÍÀ...                          ');
  textnormal;
  writeln('===============================================================================');
  writeln('                                                   Ðàáîòó âûïîëíèë: Ôîìêèí A.C.')
end.
ну вот в принципе и все... это как говориться прога с выпендрежем, хотя честно скажу она того не стоит надо было просто принести так как я вам написал еще до этого... хотя конечно еще можно было бы объединить InputMas и PrintMas, убрать процедуры так как у нас один единственный массив (их даже не несколько), убрать свой тип, который по сути здесь лишний... но тогда это получился бы мой предыдущий вариант+выпендреж...
никак не могу разобраться в чем ошибка в процедуре changemass. очень стараюсь сделать.
учитесь постигайте познавайте если вам это действительно интересно... НО только я очень сомневаюсь что вы вспомните об этом после того как сдадите прогу... ну теперь вроде усе
0
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 10
29.10.2009, 12:41  [ТС] 20
спасибо, спасибо, спасибо! уж и не думал что еще раз ответите))) задолбал я конечно вас). вообще программирование мне интересно, но нас в институте ему почти не учат, а спрашивают много... да еще плюс куча проблем по другим предметам. так что большое спасибо что помогли)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.10.2009, 12:41
Помогаю со студенческими работами здесь

сортировка массивов
сформировать одномерный массив, состоящий из положительных элементов, заданной квадратной...

Сортировка массивов
Для значений i=1,2,...,n вычислить число сочетаний из n по i и занести результаты в массив с=(с1,...

Сортировка массивов
Я вообще не понимаю как сортировать массивы,приведи те кто-нибудь пример сортировки самым простым...

Сортировка массивов
Дан одномерный массив массив. Получить из него второй массив содержащий только четные элементы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru