Организация поиска и сортировки в массивах

Автор работы: Пользователь скрыл имя, 14 Января 2014 в 16:09, лабораторная работа

Краткое описание

Цель работы:
1. Закрепить знания и навыки по работе с массивами.
2. Познакомиться с понятием сортировка массива, изучить различные алгоритмы сортировки ( сортировка методом прямого выбора и методом обмена).
3. Научиться находить элементы массива с заданными свойствами с помощью метода перебора.
4. Изучить и реализовать в виде программы алгоритм бинарного поиска. ( метод деления пополам, двоичного поиска ).

Вложенные файлы: 3 файла

Лр_6_ПоискИсортировкаВмассиве.doc

— 136.50 Кб (Просмотреть документ, Скачать файл)

ОАиП_Лр_4_ОдномерныеМассивы.doc

— 110.00 Кб (Просмотреть документ, Скачать файл)

ОАиП_Лр_5_ДвумерныеМассивы.doc

— 844.50 Кб (Скачать файл)

write(a[ij]/'); writeln;

end;

kol:=0;

for i:=l to n do

   for j:=l to m do

          if a[i,j]=l then kol:=kol+l;

writeln('Кол-во элем., равных 1, = !, kol);

End.

Ввод элементов  в массив можно осуществить с  клавиатуры, как это сделано выше, но массив можно задать и как константу. Посмотрите, что изменится в алгоритме, в этом случае:

program zadacha5_7a;

 const n=3;m=4;

a: array[l..n, l..in] of integer =  ( (1,2,-3,4),

                                                    (5,6,1,-4),

                                                 (4,3,-2,1));

 

Пример 2. Дана матрица  действительных чисел размером 3x5.  Вычислить сумму элементов матрицы.

PROGRAM EX_1;

CONST

   n=3;  {Количество  строк}

   m=5;  {Количество столбцов}

TYPE

   mas=array[1..n,1..m] of real;

VAR

   b: mas;      {Массив}

   i: integer;  {Индекс строки}

   j: integer;  {Индекс столбца}

   s: real;     {Сумма}

BEGIN

                                               {Ввод значений матрицы}

       Writeln('Введите значения элементов  матрицы:');

  for i:=1 to n do

   for j:=1 to m do

    readln(b[i,j]);

                                                  {Вычисление суммы}

  s:=0;

  for i:=1 to n do

   for j:=1 to m do

    s:=s+b[i,j];

  writeln('Сумма = ',s);

END.

 

 

 

Пример3.  Дана матрица целых  чисел размером 4x4.  Заменить все  элементы главной диагонали на нули. Вывести на экран монитора содержимое матрицы до обработки и после обработки.

PROGRAM EX_2;

VAR

  matr: array[1..4,1..4] of integer;  {Матрица}

  i: integer;                         {Индекс строки}

  j: integer;                         {Индекс солбца}

BEGIN

                                                    {Ввод значений матрицы}

     for i:=1 to 4 do

     for j:=1 to 4 do

          begin

            write('Введите элемент ',i,' ',j,' ');

            readln matr[i,j];

          end;

                                    {Вывод содержимого матрицы до обработки}

     Writeln('Содержимое  матрицы до обработки');

     for i:=1 to 4 do begin

     for j:=1 to 4 do

         write(matr[i,j]:4);

     writeln;

                      end;

                                                     {Обработка матрицы}

     for i:=1 to 4 do matr[i,i]:=0;

 

                               {Вывод содержимого матрицы после обработки}

     Writeln('Содержимое  обработанной матрицы ');

     for i:=1 t0 4 do begin

     for j:=1 to 4 do

         write(matr[i,j]:4);

     writeln;                      end;

END.

Пример 4. В матрице P(5, 6) поменять местами  максимальный и минимальный элементы. Программа решения этой задачи содержится в следующем листинге.

program Swaping;

{Обмен местами  max и min элементов матрицы}

uses

CRT;

const

N = 5; M = 6; {Количество строк и столбцов матрицы}

var

MatP : array [1..N, 1..M] of Integer; {Матрица}

Pmax, Pmin : Integer; {Значения max и min элементов}

Imax, Jmax,        {Индексы max элемента}

Imin, Jmin,        {Индексы min элемента}

i, j : Byte; {Параметры циклов}

begin {Swaping}

{Заполнение  матрицы случайными числами и  вывод по строкам}

Randomize; {Инициализация  генератора случайных чисел}

ClrScr;  Writeln;

Writeln (' ':4, 'Исходная  матрица P');

 for i := 1 to N do

begin

for j := 1 to M do

begin

 MatP [i, j] := Random (50);

Write (' ', MatP [i, j]:3);

end; {for j}

Writeln;

end; {for i}

 {Начальные значения max и min}

 Pmax := MatP [1, 1];  Imax := 1;  Jmax := 1;

Pmin := MatP [1, 1];  Imin := 1;  Jmin := 1;

 {Поиск max и min элементов матрицы}

 for i := 1 to N do {Перебор строк}

for j := 1 to M do

begin {Перебор элементов строки}

if MatP [i, j] > Pmax then

 begin {Запоминание max элемента и его индексов}

 Pmax := MatP [i, j];  Imax := i;  Jmax := j;

end; {if max}

 

if MatP [i, j] < Pmin then

 begin {Запоминание min элемента и его индексов}

 Pmin := MatP [i, j];  Imin := i;  Jmin := j;

end; {if min}

end; {for j}

Writeln;

Writeln (' ':4, 'max: ', 'P [', Imax, ', ', Jmax, '] = ',

MatP [Imax, Jmax]:2);

Writeln (' ':4, 'min: ', 'P [', Imin, ', ', Jmin, '] = ',

 MatP [Imin, jmin]:2);

{Обмен местами  max и min элементов матрицы}

 MatP [Imax, Jmax] := Pmin;

MatP [Imin, Jmin] := Pmax;

 {Вывод измененной матрицы P по строкам}

Writeln;

Writeln (' ':3, 'Измененная  матрица P');

 for i := 1 to N do

begin {Перебор строк}

 for j := 1 to M do {Перебор элементов строки}

 Write (' ', MatP [i, j]:3);

Writeln;

end; {for i}

end. {Swaping}

Вначале во вложенных  циклах по i и j происходит построчное заполнение элементов матрицы P. Априорно в качестве максимального и минимального элементов принимается элемент P [1,1]. Во вложенных циклах по i и j построчно перебираются и просматриваются элементы матрицы, при этом запоминаются наибольший и наименьший элементы среди просмотренных, а также номера строк и столбцов, в которых они расположены.

Далее на место  максимального элемента записывается минимальный и наоборот.

Вывод измененной матрицы производится построчно  аналогично заполнению.

 

Пример 5. Дана матрица A(3,4), и вектор B (4), состоящие из целых чисел . Умножить матрицу А на вектор В .program  pr4-2 ;

const m=3;   n=4;

var

a  : array [ 1 .. m, 1 .. n ] of    integer; (* описание матрицы *)

b  : array [ 1 .. n ] of   integer;                      (* описание вектора *)

c  : array [ 1 .. m ]  of  integer;                      ( * описание  С  *)

i,  j: integer;

begin

for i:=1 to m do                  (* ввод матрицы  *)

begin

writeln (‘введите  элементы ‘, i , ‘-той строки’);

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

end;

writeln (‘введите  элементы вектора’);

for j:=1 to n  do                             (* ввод  вектора *)

read (b[ j]);   writeln;

for i:=1 to m do

begin

c [ i ]:=0;        for j:=1 to n do       c[i] := c[ i ]+ a[i , j]* b[j];

end;

for i:=1 to m do      (*форматный вывод матрицы  *)

begin

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

end;

for j:=1 to n do  write (b [ j ] :4);    (* вывод  массива B *)

writeln ;

for i:=1 to m do  write (c [ i ] :4);   (* вывод  массива С  *)

readln;

end.

В программе элементы матрицы вводятся по строкам по одному с подтверждением клавишей Enter. А выводятся в общепринятом виде: каждая строка матрицы  с новой строки экрана (цикл i по строкам  внешний, а цикл j – внутренний)

Пример  6. Дана целочисленная квадратная матрица. Найти в каждой строке наибольший элемент и поменять его местами с элементом главной диагонали.

Program Obmen;

Var N, I, J, Max,Ind, Vsp : Integer;A : Array [1..15, 1..15] Of Integer;

 Begin

  WRITE('Введите  количество элементов в массиве: '); READLN(N);

 FOR I := 1 TO N DO

  FOR J := 1 TO N DO

  Begin

   WRITE('A[', I, ',', J, '] '); READLN(A[I, J])

  End;

FOR I := 1 TO N DO

 Begin

  Max := A[I, 1]; Ind := 1;

   FOR J := 2 TO N DO

      IF A[I, J] > Max THEN

       Begin

        Max := A[I, J]; Ind := J

       End;

   Vsp := A[I, I]; A[I, I] := A[I, Ind]; A[I, Ind] := Vsp

  End;

     FOR I := 1 TO N DO

      Begin

       WriteLn;

       FOR J := 1 TO N Do Write(A[I, J] : 3);

      End; WriteLn

End.

 

Пример 7. Заполнить матрицу порядка n по следующему образцу:

1     2    3  ... n-2 n-1 n

2     1    2  ... n-3 n-2 n-1

3     2    1  ... n-4 n-3 n-2

...  ...  ... ... ... ... ...

n-1  n-2  n-3 ...  2   1   2

n    n-1  n-2 ...  3   2   1

Program Massiv12;

  Var I, J, K, N : Integer;

      A : Array [1..10, 1..10] Of Integer;

  Begin

  Write('Введите порядок матрицы: '); ReadLn(N);

    For I := 1 To N Do

     For J := I To N Do

      Begin

       A[I, J] := J - I + 1; A[J, I] := A[I, J];

      End;

     For I := 1 To N Do

      Begin

       WriteLn;

       For J := 1 To N Do Write(A[I, J]:4);

      End

  End.

 

Пример 8. Дан двухмерный массив.  Вычислить количество чётных элементов ниже главной и выше побочной диагоналей.

program zadacha5_9;


const n=4; a:array[l..n,l..n] of real = ((1, 2, 3, 4),

                                                           (5, 6, 7, 8), 

                                                           (3, 9, 0, 7),

                                                            (1,5,7,3));

var i,j,kol:integer;

Begin

for i:=l to n do        {Вывод элементов массива}

 begin

      for j:=1 to n do

         write(a[i,j],''); writeln;

end;

kol:=0;

for i:=l to n do

        for j := 1 to n do

            if (i>j) and (i+j<n+l) and (a[i,j] mod 2 =0) then kol:=kol+l;

writeln('CyMMa эл. находящихся выше гл. диагонали =',s); End.

 

 

Индивидуальные  задания

Задание №1_Обработка и поиск в двумерном  массиве (Выбрать задание в соответствии с вашим индивидуальным вариантом)

Необходимо  организовать ввод двумерного массива  указанным способом, произвести обработку  массива, организовать поиск в массиве.

 

 

 

 

 

вар.

Размер  массива

 Способ   ввода 

Способ  вывода

Обработка массива

Поиск 

1

3X5

вещественные

Ввод с клавиатуры, описать в константах количество элементов

Вывод массива  осуществить в виде матрицы

 Сумма элементов  второй строки

Max в 1 строке

2

2X4

целые

Ввод с клавиатуры, описать в константах количество элементов

Вывод массива  осуществить в виде матрицы

Произведение  элементов третьего столбца

Min во 2 столбце

3

3X6

 целые

Ручной ввод с клавиатуры

Вывод массива  осуществить в виде матрицы

Сумма положительных  элементов 

Min в 5 строке

4

2X5

 целые

Ручной ввод с клавиатуры

Вывод массива  осуществить в виде матрицы

Сумма отрицательных  элементов

Min в 5 столбце

5

2X4

 целые

Ручной ввод с клавиатуры

Вывод массива  осуществить в виде матрицы

Подсчет количества четных элементов в первой строке

max

6

3X3

 целые

Датчик случайных  чисел

Вывод массива  осуществить в виде матрицы

Подсчет количества нечетных элементов

min

7

3X2

вещественные

Присваиванием конкретных значений элементам массива

Вывод массива  осуществить в виде матрицы

Произведение  отрицательных элементов 

Max в 3 строке

8

4X2

вещественные

Датчик случайных  чисел

Вывод массива  осуществить в виде матрицы

Найти количество элементов равных 10

Элементов, равных нулю

9

5X5

 целые

Датчик случайных  чисел

Вывод массива  осуществить в виде матрицы

Вывести все  элементы третьего столбца

Элементов, равных 10

10

6X2

 целые

Присваиванием конкретных значений элементам массива

Вывод массива  осуществить в виде матрицы

Сумма положительных  элементов

Элементов, равных 100

11

3X3

 вещественные

Ручной ввод с клавиатуры

Вывод массива  осуществить в виде матрицы

Найти количество отрицательных элементов 

Max в 3 столбце

12

3X5

 вещественные

Датчик случайных  чисел

Вывод массива  осуществить в виде матрицы

Сумма отрицательных  элементов

Элементов, равных числу   5

13

7X7

 целые

Датчик случайных  чисел

Вывод массива  осуществить в виде матрицы

Подсчитать  количество четных эдементов в массиве

Элементов, равных  числу 88

14

2X5

 вещественные

Ручной ввод с клавиатуры

Вывод массива  осуществить в виде матрицы

Произведение  элементов первого столбца 

Min в 3 строке

15

3X3

 целые

Присваиванием конкретных значений элементам массива

Вывод массива  осуществить в виде матрицы

Среднее арифметическое элементов массива

Max во 2 столбце




 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Задание №2_Действия с двумерными массивами

  1. Дана  матрица  целых  чисел  размером 4x3.  Определите сумму элементов каждой строки этой матрицы. Результат вывести на экран монитора.
  2. Дана  матрица  целых  чисел размером 3x4.  Определите сумму элементов каждого столбца этой матрицы. Результат вывести на экран монитора.
  3. Дана  матрица целых чисел размером 4x4.  Определите сумму элементов расположенных выше главной диагонали.  Результат вывести  на  экран монитора.
  4. Дана матрица целых чисел размером 5x3.  Заменить все  отрицательные элементы матрицы на нули. Вывести содержимое матрицы до обработки и после обработки.
  5. Дана матрица целых чисел размером 5x3.  Определить  максимальный элемент в каждой строке матрицы. Результат вывести на экран монитора.
  6. Дана матрица целых чисел размером 5x4.  Определить  минимальный элемент в каждом столбце матрицы. Результат вывести на экран монитора.
  7. Дана матрица целых чисел размером 4x4.  Увеличить все чётные  элементы на 16,  а нечётные элементы увеличить втрое. Вывести на экран содержимое обработанной матрицы.
  8. Дана  матрица  целых  чисел размером 4x4.  Повернуть матрицу на 90    градусов и вывести содержимое матрицы на экран.
  9. Дана матрица целых чисел размером 4x4.  Вычислить сумму элементов матрицы, расположенных на главной диагонали.
  10. Дана матрица целых чисел размером 4x6.  Вычислить сумму элементов матрицы, сумма индексов у которых четная.
  11. Дана матрица целых чисел размером 3x4.  Заменить на 0 значения отрицательных элементов матрицы.
  12. Дана матрица целых чисел размером 7x4.  Вычислить сумму элементов матрицы, расположенных на побочной диагонали.
  13. Дана матрица целых чисел размером 4x2.  Вычислить сумму элементов матрицы, сумма индексов у которых нечетная.
  14. Дана матрица целых чисел размером 4x4.  Заменить на 0 значения элементов, лежащих выше главной диагонали.
  15. Дана матрица целых чисел размером 4x4.  Заменить на 0 значения элементов массива с нечетной суммой индексов.

 

 

 

 

 

Информация о работе Организация поиска и сортировки в массивах