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

Упорядочить строки двумерного массива элементов типа Char по возрастанию их ординальных номеров методом прямого включения

26.11.2013, 18:41. Показов 1675. Ответов 3
Метки нет (Все метки)

Как полагаю данная программа выполняет свою задачу,но хотелось бы знать какую роль выполняют циклы repeat и как происходит сортировка т.е. какие действия происходят в данной программе построчно.Заранее благодарю за ответ!
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
const nmax=20;
var a:array[1..nmax,1..nmax] of char;
m,n,i,j,k:byte;
x:char;
begin
clrscr;
randomize;
repeat
write('Количество строк до ',nmax,' m=');
readln(m);
until m in [1..nmax];
repeat
write('Количество столбцов до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Исходная матрица:');
for i:=1 to m do
begin
for j:=1 to n do
begin
a[i,j]:=chr(65+random(26));
write(a[i,j]:2);
end;
writeln;
end;
write('Нажмите Enter');
readln;
for i:=1 to m do
for j:=1 to n-1 do
for k:=j+1 to n do
if a[i,j]>a[i,k] then
begin
x:=a[i,j];
a[i,j]:=a[i,k];
a[i,k]:=x
end;
writeln('Сортировка строк:');
for i:=1 to m do
begin
for j:=1 to n do
write(a[i,j]:2);
writeln
end;
readln
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.11.2013, 18:41
Ответы с готовыми решениями:

Упорядочить элементы массива по возрастанию их модулей методом прямого включения
Упорядочить элементы массива по возрастанию их модулей методом прямого включения. Напишите...

Упорядочить строки матрицы по возрастанию первого элемента строки методом прямого включения
Упорядочить строки матрицы по возрастанию первого элемента строки методом прямого включения.

Упорядочить строки двумерного массива по возрастанию их наибольших элементов.
Нужно упорядочить его строки по возрастанию их наибольших элементов. #include "stdafx.h"...

Упорядочить элементы массива по возрастанию методом прямого выбора
В одномерном массиве , состоящем из n вещественных элементов, упорядочить элементы массива по...

3
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7520 / 4384 / 2781
Регистрация: 22.11.2013
Сообщений: 12,546
Записей в блоге: 1
27.11.2013, 19:04 2
С таким форматированием это действительно сложно читать, с вашего позволения наведу чуть-чуть "красоты":
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
const
  nmax=20;
var
  a:array[1..nmax,1..nmax] of char;
  m,n,i,j,k:byte;
  x:char;
begin
  randomize;
  repeat
    write('Количество строк до ',nmax,' m=');
    readln(m);
  until m in [1..nmax];
  repeat
    write('Количество столбцов до ',nmax,' n=');
    readln(n);
  until n in [1..nmax];
  writeln('Исходная матрица:');
  for i:=1 to m do begin
    for j:=1 to n do begin
      a[i,j]:=chr(65+random(26));
      write(a[i,j]:2);
    end;
    writeln;
  end;
  write('Нажмите Enter'); readln;
  for i:=1 to m do
    for j:=1 to n-1 do
      for k:=j+1 to n do
        if a[i,j]>a[i,k] then begin
          x:=a[i,j]; a[i,j]:=a[i,k]; a[i,k]:=x
        end;
  writeln('Сортировка строк:');
  for i:=1 to m do begin
    for j:=1 to n do write(a[i,j]:2);
    writeln
  end;
  readln
end.
Вот, так, кажется, намного лучше.


Циклы вида:
Pascal
1
2
3
4
  repeat
...
    readln(m);
  until m in [1..nmax];
(в строках 9-12, 13-16) завершаются, только если введено значение от 1 до nmax (20). Поскольку множества TP/BP ([]) не могут содержать больше 256 значений, если захочется nmax свыше 255, то условие придётся переписать: (m >= 1) and (m <= nmax).

Массив заполняется символами латинского алфавита от 'A' (код 65) до 'Z' (65+25). Возможно, это было бы понятнее, если бы в строке 20 было написано
Pascal
1
a[i,j]:=chr(ord('A')+random(26));
или даже
Pascal
1
a[i,j]:=chr(ord('A')+random(ord('Z')-ord('A')+1));
Сама сортировка:
Pascal
1
2
3
4
5
6
for i:=1 to m do                               { для каждой строки повторить:                            }
  for j:=1 to n-1 do                           {  для эл-та от первого до предпоследнего                 }
    for k:=j+1 to n do                         {  для эл-та, от следующего за текущим по i до последнего }
      if a[i,j]>a[i,k] then begin              {  если текущий по j больше текущего по k, ...            }
        x:=a[i,j]; a[i,j]:=a[i,k]; a[i,k]:=x   {  ... то обменять их друг с другом                       }
      end;
1
2 / 0 / 0
Регистрация: 17.09.2013
Сообщений: 84
27.11.2013, 19:20  [ТС] 3
безумно вам благодарна
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7520 / 4384 / 2781
Регистрация: 22.11.2013
Сообщений: 12,546
Записей в блоге: 1
27.11.2013, 19:48 4
Если в код сортировки добавить вывод отладочных сообщений, можно увидеть протокол происходящих действий, например так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
  l: integer;
...
  for i:=1 to m do begin
    Write('*', i:3, ':':8); for l:=1 to n do Write(a[i,l]:2); WriteLn();
    for j:=1 to n-1 do
      for k:=j+1 to n do begin
        WriteLn('*', i:3, j:3, k:3, a[i,j]:2+j*2, '?':(k-j)*2-1, a[i,k]);
        if a[i,j]>a[i,k] then begin
          x:=a[i,j]; a[i,j]:=a[i,k]; a[i,k]:=x;
          Write('*', i:3, '>':8); for l:=1 to n do Write(a[i,l]:2); WriteLn();
        end;
      end;
  end;
протокол сортировки массива 2х6, где видно, что с чем сравнивается на каком шаге, и что на что меняется:
Код
Количество строк до 20 m=2
Количество столбцов до 20 n=6
Исходная матрица:
 D H D A A N
 U O L S X N
Нажмите Enter
*  1       : D H D A A N
*  1  1  2   D?H
*  1  1  3   D  ?D
*  1  1  4   D    ?A
*  1       > A H D D A N
*  1  1  5   A      ?A
*  1  1  6   A        ?N
*  1  2  3     H?D
*  1       > A D H D A N
*  1  2  4     D  ?D
*  1  2  5     D    ?A
*  1       > A A H D D N
*  1  2  6     A      ?N
*  1  3  4       H?D
*  1       > A A D H D N
*  1  3  5       D  ?D
*  1  3  6       D    ?N
*  1  4  5         H?D
*  1       > A A D D H N
*  1  4  6         D  ?N
*  1  5  6           H?N
*  2       : U O L S X N
*  2  1  2   U?O
*  2       > O U L S X N
*  2  1  3   O  ?L
*  2       > L U O S X N
*  2  1  4   L    ?S
*  2  1  5   L      ?X
*  2  1  6   L        ?N
*  2  2  3     U?O
*  2       > L O U S X N
*  2  2  4     O  ?S
*  2  2  5     O    ?X
*  2  2  6     O      ?N
*  2       > L N U S X O
*  2  3  4       U?S
*  2       > L N S U X O
*  2  3  5       S  ?X
*  2  3  6       S    ?O
*  2       > L N O U X S
*  2  4  5         U?X
*  2  4  6         U  ?S
*  2       > L N O S X U
*  2  5  6           X?U
*  2       > L N O S U X
Сортировка строк:
 A A D D H N
 L N O S U X
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.11.2013, 19:48
Помогаю со студенческими работами здесь

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

Упорядочить по возрастанию элементы каждой строки двумерного массива
Составьте программу упорядочения по возрастанию элементов каждой строки двумерного массива C....

Сортировки массива методом пузырька и методом прямого включения
сортировки массива методом пузырька и методом прямого включения Очень срочно надо помогите плис

Упорядочить по возрастанию все строки двумерного массива, которые неупорядочены по убыванию
как упорядочить по возрастанию все строки двумерного массива, которые неупорядочены по убыванию....

Изменение двумерного массива элементов типа char
Доброго дня суток всем. Прошу помочь с одной задачей. Нужно ввести с клавиатуры целое число и текст...

Сортировка массива методом прямого включения
Здравствуйте, только что начал изучать C, прошу помочь в решении задачи. Необходимо написать...


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

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

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