Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
practikumporesheniyuzadachnaibm (1).doc
Скачиваний:
6
Добавлен:
14.07.2019
Размер:
665.6 Кб
Скачать

Поиск и сортировка данных

Пример 1.

Сформировать массив a[1..10] случайным образом и определить, содержит ли он заданное число.

Пример 2.

Сформировать упорядоченный по возрастанию массив a[1..10] и определить, содержит ли он введенное число (методом бинарного поиска).

Пример 3.

Сформировать массив a[1..n] случайным образом и удалить из него элемент c индексом m.

Пример 4.

Сформировать массив a[1..n] случайным образом и вставить на m-ое место элемент k (m и k вводятся с клавиатуры).

Пример 5.

Сформировать массив a[1..n], элементы которого выбираются случайным образом из интервала [0,50]. Удалить из него те элементы, которые больше 40.

Пример 6.

Сформировать массив a[1..20], элементы которого выбираются случайным образом и отсортировать его по неубыванию методом “пузырька”.

Пример 7.

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

Пример 8.

Определить, какое максимальное число можно получить из цифр введенного натурального числа.

Пример 1.

   Сформировать массив a[1..10] случайным образом и определить, содержит ли он заданное число.

    Используемые  переменные: а - массив, i - номер очередного элемента массива,  k - ключ поиска

Program Pr1;

  Var

       a: array[1..10] of integer;

       k: real; i: integer;

BEGIN

     Randomize;

     for i:=1 to 10 do

          begin         {формирование массива}

                a[i]:=random(20); write(a[i]:4);

         end;

     writeln;   {перевод курсора на новую строку}

     write(' Введите ключ поиска: '); readln(k);

 

{перебор элементов массива и сравнение их с ключом поиска}

     i:=1; while (a[i]<>k) and (i<=10) do i:=i+1;

     if    i<=10   then    writeln('Элемент найден. Его номер - ',i)  else writeln('Элемент не найден');

END.

Пример 2.

    Сформировать упорядоченный по возрастанию массив a[1..10] и определить, содержит ли он введенное число (методом бинарного поиска).

    В программе использованы следующие обозначения: l - левая граница, r - правая граница, m - номер серединного элемента.

Program Pr2;

   Var

       a: array[1..10] of integer;

       k: real;    l, r, m, i: integer;

BEGIN

            {формирование и вывод массива}

     for i:=1 to 10 do

          begin

               a[i]:=2*i-1; write(a[i]:4);

     end;  

     writeln;

     write('Введите ключ поиска'); readln(k);

      l:=1; r:=10;    {установка начальных границ поиска}

      m:=(l+r) div 2;     {выбор серединного элемента}

                  {поиск заданного элемента}

      while (l<=r) and (k<>a[m]) do

             begin       

                   if     k<a[m]    then r:=m-1    else l:=m+1;

                   m:=(l+r) div 2;

            end;

     if   k=a[m]   then writeln('Элемент найден. Его номер - ',m)  else writeln('элемент не найден');

END.

Пример 3.

Сформировать массив a[1..n] случайным образом и удалить из него элемент c заданным индексом.

    Используемые переменные: а - массив, n - размерность массива,   m - индекс удаляемого элемента.

Program Pr3;

   Var 

       a: array[1..100] of integer;

       m, i, n: integer;

 

{процедура, удаляющая элемент с заданным индексом}

Procedure Udal(m: integer);

   Var

         j: integer;

   Begin

        if   m<>n   then    for j:=m to n-1 do a[j]:=a[j+1];

        n:=n-1;

   End;

BEGIN    {основная программа}

     n:=15;    randomize;

             {формирование и вывод элементов массива}

     for i:=1 to n do

           begin     

                a[i]:=random(50); write(a[i]:4);

           end;

    writeln;

    write('Введите номер удаляемого элемента '); readln(m);

    Udal(m);    {удаление элемента с индексом m }

    for i:=1 to n   do write(a[i]:4);    { просмотр элементов массива}

    writeln

END.

 

Пример 4.

Сформировать массив a[1..n] случайным образом и вставить на  m-ое место элемент k (m и k вводятся с клавиатуры).

Program Pr4;

   Var

        a: array[1..100] of integer;

        k, m, n, i: integer;

 

{процедура, вставляющая элемент k на m-ое место}

Procedure Vstavka(k, m:integer);

   Var

         j: integer;

Begin

       if    m<>n+1   then    for j:=n downto m do a[j+1]:=a[j];

       a[m]:=k; n:=n+1;

End;

BEGIN        {основная программа}

         write('Введите количество элементов массива’); readln(n);

         randomize;   

         {формирование и вывод массива}

         for i:=1 to n do

              begin

                    a[i]:=random(20)-10; write(a[i]:4);

              end;

         writeln;  write('Введите число и его номер'); readln(k,m);

         Vstavka(k,m);      {вставка элемента k на m-ое место}

          for i:=1 to n do write(a[i]:4); {просмотр массива}

          writeln; readln

END.

 

Пример 5.

Сформировать массив a[1..n], элементы которого выбираются случайным образом из интервала [0, 50]. Удалить из него те элементы, которые больше 40.

Program Pr5;

    Var

          a: array[1..100] of integer;

          m, i, n: integer;

{процедура, удаляющая элемент с указанным   индексом}

Procedure Udal(m: integer);

    Var

          j: integer;

Begin

         if    m<n    then   for j:=m to n-1 do a[j]:=a[j+1];

         n:=n-1;

End;

             

BEGIN    {основная программа}

      write(‘n=‘); readln(n); randomize;

                 {формирование и вывод массива}

      for i:=1 to n do

           begin

                a[i]:=random(50); write(a[i]:4);

           end;

      writeln;

              {перебор и удаление элементов массива, больших 40}

      i:=1;   while     i<=n    do   if a[i]>40    then   Udal(i)     else i:=i+1;

      for i:=1 to n do write(a[i]:4);      {просмотр массива}

      readln

END.

 

Пример 6.

Сформировать массив a[1..20], элементы которого выбираются случайным образом и отсортировать его по неубыванию методом “пузырька”.

Program Pr6;

  Var

        a: array[1..20] of integer;

        i, j, t :  integer;

BEGIN

          {формирование исходного массива}

      for i:=1 to 20 do

           begin

                a[i]:=random(100); write(' ',a[i]);

           end; 

      writeln;

                   {сортировка}

      for i:=1 to 19 do

           for j:=i+1 to 20 do

                if    a[i]>a[j]   then

                     begin

                           t:=a[i]; a[i]:=a[j]; a[j]:=t;

                     end;

            {вывод отсортированного массива}

      for i:=1 to 20 do write(a[i]:4);

END.

Пример 7.

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

Program Pr7;

   Const

           n=5;

   Type

        mas=array[1..n,1..n] of integer;

   Var

        a: mas;

        i, j, k, m, t: i nteger;

BEGIN

         {формирование и вывод на экран матрицы}

       for i:=1 to n do begin

            for j:=1 to n do begin

                 a[i,j]:=random(50); write(a[i,j]:3);

            end;

            writeln;

      end;

      writeln;

     {сортировка матрицы по строкам}

         for i:=1 to n do

              for k:=1 to n-1 do

                   for    m:=k+1 to n do

                          if    a[i,k]>a[i,m]   then

                               begin   

                                    t:=a[i,k]; a[i,k]:=a[i,m]; a[i,m]:=t;

                               end;

{вывод на экран отсортированной матрицы}

         for   i:=1 to n do 

                begin

                    for    j:=1 to n do write(a[i,j]:3);

                    writeln;

               end;

         readln

END.

Пример 8.

    Определить, какое максимальное число можно получить из цифр введенного натурального числа.

    Для решения задачи достаточно отсортировать по невозрастанию цифры введенного числа (число вводится как строка цифр)

Program Pr8;

    Var

        St: string;

        i, j, n: integer; c:char;

BEGIN

       write('Введите число '); readln(St);

       n:= length(st); {количество цифр}

       {сортировка}

       for   i:=1   to n-1 do

            for     j:=i+1 to n do

                    if    st[i]<st[j]   then

                         begin

                            c:=st[i];   st[i]:=st[j];   st[j]:=c;

                         end;

     writeln(st); {вывод отсортированной строки}

readln

END.