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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2011, 02:18   #1
netiv
Пользователь
 
Регистрация: 12.10.2011
Сообщений: 33
По умолчанию Сортировка массива по убыванию

Код:
Program sortirovka;
Var
N,i, k, c: integer;
max: real; 
b: array [1..50] of real;
begin
writeln ('Введите количество элементов в массиве ');
readln (N);
for i:=1 to N do
begin
write ('Введите b(', i, ') ');
readln (b[i])
end;
for k:=1 to N-1 do {зачем здесь n-1?}
begin
max:=b[k]; c:=k;
for i:=k+1 to N do
if b[i]>max
then begin
        max:=b[i];
        c:=I
      end;
b[c]:=b[k];
b[k]:=max
end;
for i:=1 to N do
writeln ('b[', i, ']=', b[i]:7:3);
readln
end.
Начнём с того что мне задали задание объяснить (for k:=1 to N-1) , почему n-1? Объсните пожалуйста мне тупаку, зачем здесь n-1 Ведь прога работает и так, как надо.
Расчитываю на вашу помощь.
netiv вне форума Ответить с цитированием
Старый 05.11.2011, 05:55   #2
roperd
Пользователь
 
Регистрация: 14.07.2011
Сообщений: 44
По умолчанию

Точно не знаю, но попробую предположить, что -1 служит для того, чтобы заполнить значение K целочисленным значением N, без лишней единицы, если сказать проще, то
Код:
for k:=1 to N-1 do
, это тоже самое, что и
Код:
for k:=0 to N do
, если же написать так
Код:
for k:=1 to N do
, то если я не ошибаюсь, получиться, что K будет равно K := N + 1. Надеюсь я правильно понял суть вашего вопроса...
roperd вне форума Ответить с цитированием
Старый 05.11.2011, 09:10   #3
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

roperd, ты всерьез полагаешь, что от 0 до N это то же самое, что от 1 до N-1??

netiv, во-первых, а меня тебе такой совет на будущее: если непонятно, почему что-то ТАК, а не ЭДАК, ты просто меняй на ЭДАК и запускай прогу и смотри, что получится. Программа - не паровой котел, не взорвется, даже если что-то не совсем правильно.

В данном случае, если бы ты так поступил, как я сказал, и просто убрал бы -1, то совершенно НИЧЕГО бы не изменилось - прога все равно бы работала, как надо. Казалось бы - зачем я тогда это советую? Но на самом деле, то, что ничего не изменилось - это тоже РЕЗУЛЬТАТ. И из этого результата мы можем сделать такой вывод: может, -1 делается для того, чтоб УМЕНЬШИТЬ количество вычислений, СОХРАНИВ работоспособность проги?

Действительно, если вникнуть, то увидишь, что во ВНУТРЕННЕМ цикле идет поиск максимума из элементов, оставшихся до N. Когда элементов осталось много - это нормальный процесс. Но когда остается ВСЕГО ОДИН элемент - то, спрашивается ЗАЧЕМ искать среди них (т.е. него) максимум? Он сам и есть там максимум, вот и все. Поэтому последний шаг опускается за ненужностью. Если его все-таки сделать - тоже никакого вреда не будет (как мы уже выяснили). Но зачем делать лишнее? Вот потому мы и делаем внешний цикл до ПРЕДПОСЛЕДНЕГО элемента.

Понятно? ))
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Fortran] Сортировка столбцов массива по убыванию abit-2010 Помощь студентам 2 13.03.2011 21:46
Сортировка элементов массива по убыванию nadminka Общие вопросы .NET 1 18.05.2010 23:08
1. Сортировка Шелла по убыванию 2. Сортировка вставками по убыванию Arkuz Помощь студентам 1 25.09.2007 17:16