Все о Pascal
Главная
Вход
Регистрация
Суббота, 18.05.2024, 10:00Приветствую Вас, программист Гость | RSS
Меню сайта

Категории раздела
Уроки Pascal [36]
Мемы - "Типичный программист" [1]
Задачи [10]
Заработок в интернете [14]
Олимпиадные задчи [1]

Наш опрос
Оцените мой сайт
Всего ответов: 249

Статистика

Форма входа

Главная » Статьи » Уроки Pascal

Урок 27.

 Лекция 27.Двумерные массивы. Сортировка двумерного массива.
автор: Садовский Ефим Моисеевич

1. Повторение.
    Двумерные массивы. Описание. Ввод и вывод. Поиск максимального и минимального элемента массива.
2. Двумерный массив. Сортировка двумерного массива.
    Одна из основных задач по обработке двумерных массивов – сортировка (как правило, любые данные в таблице для оптимизации поиска предварительно сортируются, например, телефонный справочник, классный журнал и т.д.).
Существует два основных вида сортировки двумерного массива: сортировка отдельной строки (столбца) и сортировка по конкретной строке (столбцу).

                                        Массив до сортировки:                                                                                                                            Массив после сортировки 2 строки по убыванию:
37592 37592
61843 86431
09531 09531
64283 64283
75924 75924

    Алгоритм такой сортировки сводится к сортировке одномерного массива (действительно, строка или столбец двумерного массива – одномерный массив с фиксированной второй координатой).
    Например: Отсортировать вторую строку двумерного массива по убыванию:
program sort;
 var a:array[1..10,1..10] of integer;
 t,f,n,i,max,k:integer;
begin
{Ввод массива}
write('Введите количество строк массива: ')
readln(n);
write('Введите количество столбцов массива: ')
readln(m);
for i:=1 to n do
for j:=1 to m do
begin
write('A[',i,',',',j,']=');
readln(a[i,j]);
end;
{Сортировка. Обратите внимание, что в строке m элементов}
 for t:=1 to m-1 do
 begin
 max:=a[2,t];
 k:=t;
 for i:=t+1 to m do
 if a[2,i]>max then
 begin
 max:=a[2,i];
 k:=i;
 end;
 f:=a[2,t];
 a[2,t]:=a[2,k];
 a[2,k]:=f;
 end;
{Вывод массива на экран }
for i:=1 to n do
 begin
 for j:=1 to m do
 write(A[i,j]:6); 
 writeln;
 end;
end.
            Программа сортировки готова.
    Обратите внимание, что это та же самая сортировка одномерного массива, только при указании индексов для массива во всех случаях фиксируется строка (указывается [2,..]).
    Если бы надо было отсортировать столбец, то фиксировался бы второй индекс, например [..,2].
    Для сортировки указанной строки, в начале программы номер строки вводился бы в указанную переменную (например, nn), а далее при сортировке вместо конкретного значения (в нашем примере цифра 2) указывалась бы эта переменная (для сортировки строки: [nn,..], для столбца: [..,nn]). 
    Гораздо чаще встречается сортировка массива по столбцу (строке), в этом случае после сортировки сохраняются данные в строках (столбцах). Например, при сортировке учащихся по среднему баллу переставляются не только средние баллы, но и номера учеников в журнале, чтобы средний балл не записался кому-то другому.

                                        Массив до сортировки:                                                                                                                            Массив после сортировки 2 строки по убыванию:
37592 09531
61843 37592
09531 75924
64283 64283
75924 61843

    Самое главное, что принцип сортировки практически сохраняется, только на каждом шаге не просто определяется максимальный (минимальный) элемент и меняется местами с первым, вторым и т.д., а происходит перестановка соответствующих строк (столбцов), например, строки с максимальным элементом в нужном столбце с первой, затем строки с максимальным элементом из оставшихся со второй и т.д.
    Например: Отсортировать двумерный массив по третьему столбцу по убыванию:

program sort;
 var a:array[1..10,1..10] of integer;
 t,f,n,i,max,k:integer;
begin
{Ввод массива}
write('Введите количество строк массива: ')
readln(n);
write('Введите количество столбцов массива: ')
readln(m);
for i:=1 to n do
for j:=1 to m do
begin
write('A[',i,',',',j,']=');
readln(a[i,j]);
end;
{Сортировка}
 for t:=1 to n-1 do
 begin
 max:=a[t,3];
 k:=t;
 for i:=t+1 to n do
 if a[i,3]>max then
 begin
 max:=a[i,3];
 k:=i;
 end;
 {Вместо перестановки элементов, переставляем строки с номерами k и t}
 for j:=1 to m do
 begin
f:=a[k,j];
a[k,j]:=a[t,j];
a[t,j]:=f;
 end;
 end;
{Вывод массива на экран }
for i:=1 to n do
 begin
 for j:=1 to m do
 write(A[i,j]:6); 
 writeln;
 end;
end.

3. Задачи.
1. Отсортировать третий столбец двумерного массива по возрастанию.
2. Отсортировать двумерный массив по убыванию по пятой строке.
3. Отсортировать двумерный массив по возрастанию k-го столбца.
Категория: Уроки Pascal | Добавил: yurabobr1 (13.11.2012)
Просмотров: 10564 | Комментарии: 3 | Теги: строка, двумерного, Max, readln, End, сортировка, элемент, массив, отсортировать, столбец | Рейтинг: 5.0/1
Всего комментариев: 1
1 Зимфира  
0
Спасибо!

Имя *:
Email *:
Код *:
Поиск

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz


  • Copyright MyCorp © 2024