Навигация

Ярославский химико-механический техникум



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


Данный вопрос рассмотрим на примере нескольких задач. Дан одномерный массив целых чисел. Определить минимальный элемент этого массива и поменять его местами с элементом, имеющим индекс 1.


Program task_1;

    Var a:array[1..100] of byte;{определяем одномерный массив}

      N, {количество элементов массива}

      K, {текущий индекс}

      Min, {значение минимального элемента этого массива}

      Number_min:byte; {индекс минимального элемента}


Begin

{для заполнения массива используем генератор случайных чисел}

    Randomize;

    Write('количество элементов массива: n=');Readln(n);

    For k:=1 to n do

      Begin

        A[k]:=Random(100);{случайное целое число от 0 до 99}

        Write(a[k]:4);{выводим на экран}

      End;

    Writeln;

    {ищем минимальный элемент этого массива и его индекс}

    min:=a[1];number_min:=1;

    for k:=2 to n do

      if min>a[k] then;


        begin

          min:=a[k];

          number_min:=k;

        end;

    {меняем местами первый элемент и минимальный}

    a[number_min]:=a[1];

    a[1]:=min;

    {выводим на экран результат}

    for k:=1 to n do write(a[k]:4);

    writeln;


End.


Теперь добавим к нашей программе следующую задачу:


Среди оставшихся элементов найти минимальный и поставить его на второй место.


Для этого перед выводом результата на экран необходимо добавить следующие строки программы:


    Min:=a[2];number_min:=2;


    For k:=3 to n do

      If min>a[k] then

        Begin

          Min:=a[k];

          Number_min:=k;

        End;


    A[number_min]:=a[2];


    A[2]:=min;


Нетрудно заметить, что меняются только начальные установки, а действия выполняются одни и те же. Поэтому объединим все это в один цикл и получим упорядочивание по возрастанию.

    For i:=1 to n-1 do

      Begin

        Min:=a[i];

        Number_min:=i;

        For k:=i+1 to n do

          If min>a[k] then;

            Begin

              Min:=a[k];

              Number_min:=k;

            End;

            A[number_min]:=a[i];

            A[i]:=min;

        End;


      Нам пришлось добавить новую переменную i типа byte, которая задает индекс элемента, с которого производится поиск минимального элемента. Обратите внимание на то, что эта переменная принимает значения от 1 до n-1. Это связано с тем, что после того как будет упорядочено n-1 элементов оставшийся последний n-й элемент не нуждается в упорядочивании.


      А.М. Гелоян



      Кто работает в Центре?

Адрес: 150023, Россия, г. Ярославль, ул. Гагарина,дом 8
Тел. (0852) 44-44-63 (приемная комиссия), (0852) 44-84-74 (заочное отделение), (0852) 30-61-71 (секретарь)
Факс: (0852) 30-61-71, E-mail: yxmt@yaroslavl.ru

Hosted by uCoz