Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2015, 06:43   #1
Sanscrit
Пользователь
 
Регистрация: 23.03.2015
Сообщений: 24
Смущение Делфи. Объясните прицип работы.

Здравствуйте, господа, у меня довольно ламерский вопрос. Есть код:
Код:
 
 for j:=0 to 6-1 do
    for c:=0 to 6 do
    for i:=0 to 6-j-1 do
    if a[i,c] > a[i+1,c] then
    begin
    r:= a[i,c];
    a[i,c]:= a[i+1,c];
    a[i+1,c]:= r;
  end;
который сортирует элементы строк в двумерной массиве. Со второй частью кода все понятно, проблемы у меня возникают с пониманием происходящего в первых четырех строках, если можно вкратце, что там происходит. Дело в том что насколько я понимаю, одновременно меняются все 3 значения, которые используются в качестве индексов массива, т.е. непонятно почему программа проходит именно по каждой строке в отдельности, а не перепрыгивает с каждым проходом на следующую.
Sanscrit вне форума Ответить с цитированием
Старый 29.03.2015, 08:29   #2
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
Сообщение от Sanscrit Посмотреть сообщение
... одновременно меняются все 3 значения, которые используются в качестве индексов массива
Во-первых:
Меняются не значения, которые используются в качестве индексов, а значения элементов массива.
Во-вторых
Одновременно меняются не 3 значения, а 2. r используется в качестве временного хранения (буфер). Как то: Чтобы положить что-то в коробку, нужно сначало достать из неё то, что там уже лежит и при этом не потерять это.

Цитата:
Сообщение от Sanscrit Посмотреть сообщение
Со второй частью кода все понятно, проблемы у меня возникают с пониманием происходящего в первых четырех строках ...
Чтобы отсортировать вектор в 7 элементов по нему нужно пройтись 6 раз

Цитата:
Сообщение от Sanscrit Посмотреть сообщение
... непонятно почему программа проходит именно по каждой строке в отдельности...
Не понятно, что именно не понятно. Сортировка ведь построчная.

Цитата:
Сообщение от Sanscrit Посмотреть сообщение
а не перепрыгивает с каждым проходом на следующую.
Автор так захотел. Можно и так:
Код:
    for c:=0 to 6 do
for j:=0 to 6-1 do
    for i:=0 to 6-j-1 do
    if a[i,c] > a[i+1,c] then
    begin
    r:= a[i,c];
    a[i,c]:= a[i+1,c];
    a[i+1,c]:= r;
  end;
Это ни чего не меняет.

Последний раз редактировалось Sibedir; 29.03.2015 в 12:30.
Sibedir вне форума Ответить с цитированием
Старый 29.03.2015, 10:29   #3
Sanscrit
Пользователь
 
Регистрация: 23.03.2015
Сообщений: 24
По умолчанию

Ладно, видимо я непонятно выразился.
При j=0 сколько раз изменятся c и i?
Sanscrit вне форума Ответить с цитированием
Старый 29.03.2015, 12:30   #4
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

7 (строк) * 6 (сравнений за проход) = 42 раза
Sibedir вне форума Ответить с цитированием
Старый 29.03.2015, 13:18   #5
Sanscrit
Пользователь
 
Регистрация: 23.03.2015
Сообщений: 24
По умолчанию

То есть при j=0 c изменяется от 0 до 6, проходя всю строку, потом то же самое при j=1 и т.д., правильно?
Sanscrit вне форума Ответить с цитированием
Старый 29.03.2015, 14:27   #6
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

j = 0
перебираем все строки
строка от начала до конца -> в итоге, самое большое оказывается в конце
j = 1
перебираем все строки
строка от начала до предпоследней
...
...
...
j = 5
перебираем все строки
только одно сравнеие первых двух элементов в каждой строке
Sibedir вне форума Ответить с цитированием
Старый 29.03.2015, 14:41   #7
Sanscrit
Пользователь
 
Регистрация: 23.03.2015
Сообщений: 24
По умолчанию

Спасибо, теперь все понятно.
Sanscrit вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объясните принцип работы программы(удаление столбца из матрицы) jon4eg Помощь студентам 2 10.01.2015 14:26
Объясните принцип работы danada1 Помощь студентам 1 27.03.2013 15:20
Объясните принцип работы ф-ции.... MyXa C# (си шарп) 2 01.11.2012 16:56
Объясните пример работы с файлами. spamer Общие вопросы C/C++ 6 04.06.2009 01:55
компоненты делфи для работы с php motorov Компоненты Delphi 5 10.08.2008 10:54