ПЗ № 38

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ № 38

ОБРАБОТКА ОДНОМЕРНЫХ МАССИВОВ


№7. ФОРМИРОВАНИЕ МАССИВА ИЗ ЭЛЕМЕНТОВ ДРУГОГО

МАССИВА УДОВЛЕТВОРЯЮЩИХ ЗАДАННОМУ УСЛОВИЮ


ПОСТАНОВКА ЗАДАЧИ: Требуется из данного массива А, состоящего из N элементов, выбрать элементы, удовлетворяющие заданному ( пусть А(i)>T ), и сформировать из них массив B.

Исходный массив А: 4 6 8 2 23 1 9      Условие: A(i)>=8

Новый   массив     B: 8 23 9


Особенность решения: Индексы элементов массивов A и B не совпадают,

        так как не все элементы массива A включаются в массив B.

        Введем переменную, формирующую индексы и являющуюся счетчиком

        элементов нового массива.


Program Massiv_po_Uslowiu; 

Uses crt;

  . . .


  procedure Mass_Usl;

  begin

    write('Введите параметр условия: '); 

    readln(t);

    k:=0;                                {k- счетчик найденых элементов     }

    for i:=1 to n do 

      if a[i]>=t then 

        begin 

           k:=k+1; 

           b[k]:=a[i]; 

        end;

  end;


Begin

  ClrScr;  

  n:=20;

  Input;                                { заполнение исходного массива A     }

  ClrScr;

  Print(а, n);                         { печать исходного массива A                }

   writeln;                     

  Mass_Usl;                        { формирование массива по условию }

  Print(b, k);                         { вывод на экран нового массива B     }

  writeln;        

  Readkey;

End.


З А Д А Н И Я:


1. Набрать и исполнить программу.

2. Изменить условие.

3. Вывести на экран сообщение о количестве найденных элементов.

4. Найти среднее арифметическое элементов нового массива.





Задача

Найти максимальный элемент численного массива.


Алгоритм решения задачи: 

       Значения, составляющие массив, могут быть получены из разных источников: путем вызова функции random, ввода значений пользователем, считывания из файла. 

В программе ниже используется первый вариант.
В задачах подобного рода (поиск максиму или минимума) может быть поставлена цель, найти только 1) индекс элемента, 2) только значение или 3) и то и другое. 

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


  1. В переменной max_num хранится текущее максимальное значение массива, а в max_index – его позиция (индекс).
  2. В программе можно выделить две части: заполнение массива числами с выводом их на экран (первый цикл for) и непосредственно поиск максимума (второй цикл for).
  3. Перед первым циклом запускается процедура randomize для того, чтобы при каждом запуске программы значения массива были разными.
  4. Изначально делается предположение, что первый элемент массива и есть максимум. Поэтому переменной max_indexприсваивается значение 1 (т.е. указатель на первый элемент массива), а max_num – непосредственно значение, хранящееся в первой ячейке массива.
  5. Начиная со второго элемента, каждое очередное значение массива сравнивается с текущим значением max_num. В случае, если текущее значение массива больше, чем хранящиеся в max_num, происходит новое присваивание обоим переменным текущего значения и индекса.



Program Max;

Uses crt;

const  m = 20;

var

    arr: array[1..m] of byte;

    max_num, max_index: byte;

    i: byte;


begin

    randomize;


    for i := 1 to m do begin

        arr[i] := random(100);

        write (arr[i]:3);

    end;


    max_index := 1;

    max_num := arr[1];


    for i := 2 to m do

        if arr[i] > max_num then begin

            max_index := i;

            max_num := arr[i];

     end;


    writeln;

    writeln ('Max = ',max_num);

    writeln ('position: ', max_index);


readln;

end.