Top.Mail.Ru
Ответы

Помогите понять цикл тут.

Вот задача: Дан массив чисел. Расставить их по убыванию.

Вот решение, но я не понимаю алгоритм.

Вот
FOR J := 1 TO N-1 DO
BEGIN
NEW := MAS[N];
К := N;

Что значит FOR J := 1 TO N-1 DO ?
А что значит NEW := MAS[N] и К := N;

Кто объяснит эту часть кода?

Вот весь код.

1. CONST M = 100;
2. VAR MAS : ARRAY[1..M] OF INTEGER;
3. I, J, K, NEW, N : INTEGER;
4. BEGIN
5. WRITE('BBЕДИTE РАЗМЕР МАССИВА N = ');
6. READLN(N);
7. WRITELN('BBЕДИTE N,' ЭЛЕМЕНТОВ МАССИВА');

8. FOR I := 1 TO N DO
9. READ(MAS[I]);
10.WRITELN;

11.FOR J := 1 TO N-1 DO
12.BEGIN
13.NEW := MAS[N];
14.К := N;

15.FOR I := N DOWNTO 1 DO
16.IF MAS[I]>NEW THEN
17.BEGIN
18.К := I;
19.NEW := MAS[I]
20.END;
21.MAS[K] := MAS[1];
22.MAS[1] := NEW;

23.FOR I := 1 TO N DO
24.WRITE(MAS[I] : 4);
25.WRITELN
26.END

По дате
По Рейтингу
Аватар пользователя
Новичок
8лет

Если ты спрашиваешь, что такое FOR, значит ты вообще не читал учебник. Хочешь, чтобы его тебе здесь пересказывали???

И могу тебя обрадовать: это не решение. Представленный код работает абсолютно неправильно.

for i := 1 to n-1 do begin
k := i;
for j := i + 1 to n do if mas[j] > max[k] then k := j;
if k <> i then begin
tmp := mas[i];
mas[i] := mas[k];
mas[k] := tmp
end
end

Аватар пользователя
Оракул
8лет

чет сложный алгоритм, ещё капсом да без отступов...
обычную пузырьковую сортировку написать не судьба?

Аватар пользователя
Мастер
8лет

FOR J := 1 TO N-1 DO
Присвоение переменной J значение 1, и совершать этот цикл, пока J не будет равен n-1, при каждом цикле J увеличивается на 1.

NEW := MAS[N]
Присвоение переменной NEW значение N элемента массива MAS

К := N
Присвоить значение N переменной K

Аватар пользователя
Мастер
8лет

Это называется сортировка вставками.
Вот ваш код с исправлениями (чтобы работал на самом деле) и исчерпывающими комментариями.
http://pastebin.com/cw0nCzxN
Самое важное исправление:
В каждом проходе цикла надо складывать найденный элемент не в первую ячейку, а в j-ю, иначе работать не будет.
На будущее:
1) Вот так надо форматировать код. Намного удобнее читать, не так ли?
2) Абстрактный массив стоит обзывать a или arr (от слова array, а не от слова massiv). Вы же не по-русски пишете, а латиницей, и ваш транслит выглядит убого. Если так вас научил ваш учитель программирования - он не прав.