Найти разность между максимальным и минимальным элементами массива

Задача

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

Например, дан массив [3, 5, 9, 4, 2, 6]. Максимальным числом является 9, минимальным является 2. Разность составляет 9-2=7.

Решение

В данном случае минимум и максимум можно искать по индексу и по значению.

Рассмотрим сначала поиск по значению: пусть в переменные min и max записываются соответственно значения минимального и максимального элементов. До цикла им надо присвоить такие значения, которые выходят за границы диапазона массива. При этом переменная max должна получить значение, выходящее за нижнюю границу (меньше возможного), а min - за верхнюю границу (больше возможного).

Будем в цикле перебирать элементы массива и сравнивать их значения с min и max. Если очередной элемент больше max, то присвоим его значение переменной max. Если меньше значения переменной min, то присвоим min. При этом если первое условие "сработало", то незачем проверять второе. Поэтому следует использовать else, в которое вложено второе if.

После цикла, чтобы ответить на вопрос задачи, надо из max вычесть min. Результат вывести на экран.

const N = 10;
var
    a: array[1..N] of integer;
    i: byte;
    min, max: integer;
begin
    randomize;
    for i:=1 to N do a[i]:=random(100);
    for i:=1 to N do write(a[i]:4);
    writeln;
    min := 100;
    max := -1;
    for i:=1 to N do begin
        if a[i] > max then max := a[i]
        else if a[i] < min then min := a[i];
    end;
    writeln(max,'-',min,'=',max-min);    
end.

При поиске по индексу в переменные min и max (в данном случае им лучше иметь тип byte) следует записывать не значения элементов массива, а индексы минимального и максимального элементов.

До цикла предполагается, что первый элемент является и минимальным и максимальным. Поэтому обоим переменным присваивается значение 1. Цикл начинается со второго элемента. Ниже показана часть кода, отличная от программы выше:

...
    min := 1;
    max := 1;
    for i:=2 to N do begin
        if a[i] > a[max] then max := i
        else if a[i] < a[min] then min := i;
    end;
    writeln(a[max],'-',a[min],'=',a[max]-a[min]);
...

Пример выполнения программы:

  75  22  31  61  87  49  85  31  36  56
87-22=65

Тема

Одномерные массивы

Уровень

Простые задачи

Последняя редакция

Комментарии

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

const N = 15;
var 
    arr: array[1..N] of integer;
    min, max, i: byte;
    b: integer;
begin
    randomize;
    for i:=1 to N do begin
        arr[i] := random(100);
        write(arr[i],' ');
    end;
    writeln;
    min := 1;
    max := 1;
    for i:=1 to N do begin
        if arr[i] < arr[min] then
            min := i;
        if arr[i] > arr[max] then
            max := i;
    end;
    writeln('min=',arr[min],' max=',arr[max]);
    writeln('max > min в ', arr[max]/arr[min]:5:2, ' раз');
    writeln('min < max на ', arr[max]-arr[min]);
    b := arr[min];
    arr[min] := arr[max];
    arr[max] := b;
    for i:=1 to N do
        write(arr[i],' ');
    writeln;
end.

Добавить комментарий