Как найти минимальное значение массива pascal

На занятии объясняется, как работать с одномерными массивами в Паскале, как использовать генератор случайных чисел — функцию random в Паскале. Рассматривается пример того, как вывести числа Фибоначчи

Материалы сайта labs-org.ru направлены на практическое освоение языка программирования Pascal. Краткие теоретические сведения не претендуют на полное освещение материала по теме; необходимую информацию можно найти в сети Интернет в большом количестве. В наши же задачи входит предоставление возможности получения практических навыков программирования на Паскале. Решенные наглядные примеры и задания изложены по мере увеличения их сложности, что позволит с легкостью изучить материал с нуля.

Содержание:

  • Одномерные массивы в Паскале
    • Объявление массива
    • Инициализация массива
    • Вывод элементов массива
    • Динамические массивы (pascalAbc.Net)
    • Функция Random в Pascal
    • Числа Фибоначчи в Паскале
    • Максимальный (минимальный) элемент массива
    • Поиск в массиве
    • Циклический сдвиг
    • Перестановка элементов в массиве
    • Выбор элементов и сохранение в другой массив
    • Сортировка элементов массива

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

Объявление массива

Массивы в Паскале используются двух типов: одномерные и двумерные.
Определение одномерного массива в Паскале звучит так: одномерный массив — это определенное количество элементов, относящихся к одному и тому же типу данных, которые имеют одно имя, и каждый элемент имеет свой индекс — порядковый номер.
Описание массива в Паскале (объявление) и обращение к его элементам происходит следующим образом:

Описание массива в Паскале

Объявление массива

var dlina: array [1..3] of integer;
begin
dlina[1]:=500; 
dlina[2]:=400; 
dlina[3]:=150;
...
  • dlina — идентификатор (имя) массива;
  • для объявления используется служебное слово Array (в переводе с англ. «массив» или «набор»);
  • [1..3] — в квадратных скобках ставится номер (индекс) первого элемента, затем две точки и индекс последнего элемента массива, т.е. по сути, указывается количество элементов; количество элементов массива называется размерностью массива
  • of integer (с англ. «из целых чисел») — указывает, к какому типу относится массив, of здесь — служебное слово.
  • Объявить размер можно через константу:

    размер массива через константу

    Инициализация массива

    Кроме того, массив может быть сам константным, т.е. все его элементы в программе заранее определены. Описание такого массива выглядит следующим образом:

    const a:array[1..4] of integer = (1, 3, 2, 5);

    Заполнение последовательными числами:
    заполнение массива

    Результат:
    A[1] = 8, A[2] = 9, A[3] = 10, ..., A[N] = A[N-1] + 1
    

    Ввод с клавиатуры:

    Пример: Рассмотрим, как происходит ввод массива в Паскале:

    writeln ('введите кол-во элементов: ');
    readln(n); {если кол-во заранее не известно, - запрашиваем его}
    for i := 1 to n do begin
       write('a[', i, ']=');
       read(a[i]);
       ...
    end;
    ...

    ввод массива с клавиатуры
    ✍ Пример результата:

    введите кол-во элементов: 
    3
    a[1]=5
    a[2]=7
    a[3]=4
    

    Вывод элементов массива

    Пример: Рассмотрим, как вывести массив в Паскале:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    var
      a: array[1..5] of integer; {массив из пяти элементов}
      i: integer;
    begin
    a[1]:=2;
    a[2]:=4;
    a[3]:=8;
    a[4]:=6;
    a[5]:=3;
    writeln('Массив A:');
    for i := 1 to 5 do
        write(a[i]:2); {вывод элементов массива}
    end.

    ✍ Пример результата:

    Для работы с массивами чаще всего используется в Паскале цикл for с параметром, так как обычно известно, сколько элементов в массиве, и можно использовать счетчик цикла в качестве индексов элементов.

    Задача Array 0. Необходимо задать вещественный массив размерностью 6 (т.е. из шести элементов); заполнить массив вводимыми значениями и вывести элементы на экран. Использовать два цикла: первый — для ввода элементов, второй — для вывода.

    Пример результата:

    введите элемент массива: 3.0
    введите элемент массива: 0.8
    введите элемент массива: 0.56
    введите элемент массива: 4.3
    введите элемент массива: 23.8
    введите элемент массива: 0.7
    Массив =  3, 0.8, 0.56, 4.3, 23.8, 0.7

    [Название файла: taskArray0.pas]

    В данном примере работы с одномерным массивом есть явное неудобство: присваивание значений элементам.

    Обработка массивов в Паскале, так же как и заполнение массива, происходит обычно с использованием цикла for.

    Динамические массивы (pascalAbc.Net)

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

  • Основной особенностью динамических массивов является возможность выделения для них памяти на любом этапе выполнения программы.
  • Имеется возможность корректировки размера динамического массива как в сторону его уменьшения, так и в сторону увеличения.
  • Объявление:

    var a: array of integer;
    var n:=readInteger;
    a:=new integer[n]; // инициализация, выделение памяти для элементов массива

    или:

    var a: array of integer;
    var n:=readInteger;
    SetLength(a,n); // устанавливаем размер

    Аналогичным образом массивы могут описываться в качестве параметров подпрограмм, например:

    procedure p(a: array of integer);

    Созданные элементы сразу получают начальное значение, равное нулевому значению соответствующего типа: для чисел это целый или вещественный нуль, для символов — символ с кодом 0, для строк и других ссылочных типов данных — нулевая ссылка nil

    Объявление и инициализация массива:

    Пример:

    begin
      var a: array of integer;
      a := new integer[3];
      a[0] := 5;
      a[1] := 2;
      a[2] := 3;
    end.

    или в одну строку:

    begin
      var a: array of integer;
      a := new integer[3](5,2,3);
      print(a)
    end.

    или короткая запись:

    var a:=Arr(1,2,3);// по правой части - integer

    Элементы динамического массива всегда индексируются от 0.

    Ввод элементов:

    Пример:

    var a:=ReadArrInteger(5); // ввод пяти целых
    var a:=ReadArrReal(5); // ввод пяти вещественных

    Функции генерации массивов:

    1. ArrFill :

    var a := ArrFill(10, 1); // массив из 10 целых чисел, равных 1

    2. ArrGen :

    var a := ArrGen(ReadInteger, 1, e -> e + 2); // массив, состоящий из n первых положительных нечетных чисел
    a.Print;

    Проход по элементам массива:

    Пример:

    for var i:=0 to a.Length-1 do
      a[i] += 1;

    или:

    for var i := 0 to a.High do
      a[i] += 1;

    Проход по элементам (только для чтения):
    Пример:

    foreach var x in a do
      Print(x)
  • Размер динамического массива (т. е. количество его элементов) можно определить с помощью его свойства Length
  • Для динамического массива определены еще два свойства: Low и High, определяющие соответственно нижнюю и верхнюю границу диапазона изменения индекса. Свойство a.Low всегда возвращает 0, а свойство a.High определяется как a.High = a.Length – 1
  • Простой вывод элементов:

    Writeln(a); // пример вывода: [1,5,3,13,20]

    или метод массива Print:

    a.Print; // пример вывода: 1 5 3 13 20
    a.PrintLines; // каждый элемент с новой строки

    Функция Random в Pascal

    Для того чтобы постоянно не запрашивать значения элементов массива используется генератор случайных чисел в Паскаль, который реализуется функцией Random. На самом деле генерируются псевдослучайные числа, но суть не в этом.

    Для генерации чисел от 0 до n (не включая само значение n, целые числа в интервале [0,N)) используется запись random (n).
    Перед использованием функции необходимо инициализировать датчик случайных чисел с помощью процедуры randomize.

    Диапазон в Паскале тех самых случайных чисел от a до b задается формулой:

    Пример: Заполнение массива случайными числами в Pascal:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    var f: array[1..10] of integer;
        i:integer;
    begin
    randomize;
    for i:=1 to 10 do
      begin
       f[i]:=random(10); { интервал [0,9] }   
       write(f[i],' ');
      end;
    end.

    ✍ Пример результата: 

    Для вещественных чисел в интервале [0,1):

    var x: real;
    ...
    x := random(0.0,1.0);;         { интервал [0,1), т.е. единица не включена }

    PascalABC.NET:

  • Сгенерированный случайным образом кортеж из двух (Random2), либо из трех (Random3) элементов:
  • var (a, b, c) := Random3(10.0, 20.0); // диапазон [10, 20)
    write(a:0:2,' ',b:0:2,' ', c:0:2) // 14.73 18.63 19.72
  • Массив из 10 сгенерированных случайным образом целых чисел в диапазоне [0;99]:
  • Пример:

    var a:=arrRandomInteger(10);

    или с дополнительными параметрами (диапазон [5;15]):

    var a:=arrRandomInteger(10,5,15);

    Задача Array 1. Необходимо задать массив размерностью 5, заполнить массив случайными числами в интервале [-1,1] и вывести элементы на экран: определить три позиции для вывода каждого элемента, с двумя знаками после запятой.

    Пример результата:

    Массив =  0.22 0.00 -0.69 -0.35 -0.11 

    [Название файла: taskArray1.pas]

    Числа Фибоначчи в Паскале

    Наиболее распространенным примером работы с массивом является вывод ряда чисел Фибоначчи в Паскаль. Рассмотрим его.

    Пример: Ряд чисел Фибоначчи: 1 1 2 3 5 8 13…

    f[0]:=1;   
    f[1]:=1; 
    f[2]:=2;

    или

    f[2]:=f[0]+f[1];
    f[3]:=f[1]+f[2];

    или

    Получили формулу элементов ряда.

    Пример: Вычислить и распечатать первые 20 чисел Фибоначчи.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    var i:integer;
    f:array[0..19]of integer;
    begin
    f[0]:=1;
    f[1]:=1;
    for i:=2 to 19 do
    begin
      f[i]:=f[i-1]+f[i-2];
      writeln(f[i])
    end;
    end.

    На данном примере, становится понятен принцип работы с числовыми рядами. Обычно, для вывода числового ряда находится формула определения каждого элемента данного ряда. Так, в случае с числами Фибоначчи, эта формула-правило выглядит как f[i]:=f[i-1]+f[i-2]. Поэтому ее необходимо использовать в цикле for при формировании элементов массива.

    Задача Array 2. Дан ряд из 10 произвольных чисел: a[1], a[2], ... , a[10] (использовать функцию random()). Подсчитать и напечатать суммы троек стоящих рядом чисел: a[1]+a[2]+a[3], a[2]+a[3]+a[4], a[3]+a[4]+a[5], …… , a[8]+a[9]+a[10]

    Пример результата:

    Массив =  2 0 4 29 3 11 26 11 9 4 
    mas[1] + mas[2] + mas[3] = 6
    mas[2] + mas[3] + mas[4] = 33
    mas[3] + mas[4] + mas[5] = 36
    mas[4] + mas[5] + mas[6] = 43
    mas[5] + mas[6] + mas[7] = 40
    mas[6] + mas[7] + mas[8] = 48
    mas[7] + mas[8] + mas[9] = 46
    mas[8] + mas[9] + mas[10] = 24

    [Название файла: taskArray2.pas]

    Задача Array 3. Написать программу решения задачи о печати ряда чисел 2 4 8 16 32 ... 512; для заполнения массива использовать цикл Repeat
    [Название файла: taskArray3.pas]

    Максимальный (минимальный) элемент массива

    Псевдокод:
    Максимальный (минимальный) элемент массива

    Поиск максимального элемента по его индексу:
    максимальный элемент по номеру


    PascalABC.NET:

    Минимальный элемент и его индекс:

    Решение 1:

      // …
      var (min, minind) := (a[0], 0);  
      for var i:=1 to a.Length-1 do
        if a[i]<min then
          (min, minind) := (a[i], i);  Result := (min, minind);

    Решение 2:

      // …
      var (min, minind) := (real.MaxValue, 0);  
      for var i:=0 to a.Length-1 do
        if a[i]<min then
          (min, minind) := (a[i], i);  Result := (min, minind);

    Решение 3:

    begin
      var a := new integer[5];
      a := arrRandomInteger(5); // [86,37,41,45,76] 
      print(a.Min,a.IndexMin); // 37  1
    end.

    Задача Array_min: Найдите минимальный элемент массива. Выведите элемент и его индекс.

    Пример результата:

    9 5 4 22 23 7 3 16 16 8 
    Минимальный элемент массива A[7]=3
    

    [Название файла: taskArray_min.pas]

    Задача Array 4. Дан массив из 10 целочисленных элементов. Найти количество отрицательных и вывести количество на экран.

    Пример результата:

    3 4 6 -1 6 -2 1 5 0 1 
    Количество отрицательных элементов: 2
    

    [Название файла: taskArray4.pas]

    Задача Array 5. Найти минимальное и максимальное из n введенных чисел (массива). Определить расстояние между этими элементами.

    3  2  6  1  3  4  7  2  >>>  min=1, max=7, distance=3
    

    [Название файла: taskArray5.pas]

    Задача Array 6. Дан целочисленный массив размера N. Вывести все содержащиеся в данном массиве четные числа в порядке убывания их индексов, а также их количество K.

    N=4
    mas: 8 9 2 5
    >>> 2 8 количество= 2
    

    [Название файла: taskArray6.pas]

    Задача Array 7. Ввести с клавиатуры массив из 5 элементов, найти в нем два максимальных элемента и их номера.

    Пример:

    Исходный массив:
    4   -5   10  -10  5
    максимальные A[3]=10, A[5]=5
    

    [Название файла: taskArray7.pas]

    Поиск в массиве

    Рассмотрим сложный пример работы с одномерными массивами:

    Пример: Дан массив из 10 чисел. Определить, есть ли в массиве число, введенное пользователем. Если есть – выводить «найдено», если нет – «не найдено».
    Сложность задания заключается в том, что выводить слова «найдено» или «не найдено» необходимо один раз.

    Для решения поставленной задачи понадобится оператор break — выход из цикла.
    Решение Вариант 1. Цикл for:


    PascalABC.NET:

    Cтандартные методы a.IndexOf(x) и a.LastIndexOf(x):

    begin
      var a := new integer[10];
      a := arrRandomInteger(5,0,5); //[1,3,5,4,5] 
      print(a.IndexOf(3)) // 1
    end.

    или метод a.Contains(x) наравне с x in a:

    begin
      var a := new integer[10];
      a := arrRandomInteger(5,0,5); //[1,3,5,4,5] 
      print(a.Contains(3)); // True
      print(3 in a)// True
    end.

    Рассмотрим эффективное решение:

    Задача: найти в массиве элемент, равный X, или установить, что его нет.

    Алгоритм:

    • начать с 1-го элемента (i:=1);
    • если очередной элемент (A[i]) равен X, то закончить поиск иначе перейти к следующему элементу.

    решение на Паскале Вариант 2. Цикл While:

    Поиск элемента в массиве

    Поиск элемента в массиве

    Предлагаем посмотреть подробный видео разбор поиска элемента в массиве (эффективный алгоритм):

    Задача Array 8. Заполнить массив из 10 элементов случайными числами в интервале [0..4] и вывести номера всех элементов, равных X.

    Пример:

    	 Исходный массив:
    	 4  0  1  2  0  1  3  4  1  0
    	 Что ищем? 0
    	 A[2], A[5], A[10]
    

    [Название файла: taskArray8.pas]

    Циклический сдвиг

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

    Решение:

    Алгоритм:
    A[1]:=A[2]; A[2]:=A[3];… A[N-1]:=A[N];

    Программа:
    сдвиг элементов массива


    PascalABC.NET:

    Циклический сдвиг влево:

      // …
      var v := a[0];
      for var i:=0 to a.Length-2 do
        a[i] := a[i+1];
      a[a.Length-1] := v;

    Циклический сдвиг вправо:

      // …
      var v := a[a.Length-1];
      for var i:=a.Length-1 downto 1 do
        a[i] := a[i-1];
      a[0] := v;

    Задача Array 9. Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и выполнить циклический сдвиг влево без первого элемента.
    Пример:

    Исходный массив:
      4  -5   3  10  -4  -6   8 -10  1  0
    Результат:
      4   3  10  -4  -6   8 -10   1  0 -5
    

    [Название файла: taskArray9.pas]

    Перестановка элементов в массиве

    Рассмотрим, как происходит перестановка или реверс массива.

    Пример: переставить элементы массива в обратном порядке
    реверс массива

    Решение:

    Алгоритм:
    алгоритм перестановки элементов массива

    Псевдокод:
    2

    Программа:
    перестановка элементов массива


    PascalABC.NET:

    Перестановка (ревёрс):

    Решение 1:

    begin
    var a: array of integer := (1,3,5,7); 
    var n := a.Length;
    for var i:=0 to n div 2 - 1 do
        Swap(a[i],a[n-i-1]);
    End.

    Решение 2 (стандартная процедура Reverse()):

    begin
    var a:=new integer[10];
    a:=arrRandomInteger(10);
    print(a);// [41,81,84,63,12,26,88,25,36,72] 
    Reverse(a);
    print(a) //[72,36,25,88,26,12,63,84,81,41] 
    end.

    Задача Array 10. Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и сделать реверс всех элементов, кроме последнего.
    Пример:

     Исходный массив:
    -5  3   10  -4  -6   8 -10  1   0  4
     Результат:
    0  1  -10   8  -6  -4  10  3  -5  4
    

    [Название файла: taskArray10.pas]

    Выбор элементов и сохранение в другой массив

    Пример: найти в массиве элементы, удовлетворяющие некоторому условию (например, отрицательные), и скопировать их в другой массив
    выбор элементов массива

    Решение:

    Решение: подсчитывать количество найденных элементов с помощью счетчика count, очередной элемент устанавливать на место B[count]. Переменой count необходимо присвоить 1.

    сохранение элементов массива в другой
    Вывод массива B:

    writeln('Выбранные элементы');
    for i:=1 to count-1 do
       write(B[i], ' ')

    PascalABC.NET:

    Процедура SetLength():

    // ...
    for var i := 0 to a.length - 1 do 
        if a[i] < 0 then
        begin
          b[j] := a[i];
          j += 1;
        end;
      SetLength(b, j);

    Задача Array 11. Заполнить массив случайными числами в интервале [20,100] и записать в другой массив все числа, которые оканчиваются на 0.
    Пример:

    	 Исходный массив:
    	 40   57   30  71  84
    	 Заканчиваются на 0:
    	 40 30
    

    [Название файла: taskArray11.pas]

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

    Сортировка методом «Пузырька»

    • В таком типе сортировок массив представляется в виде воды, маленькие элементы — пузырьки в воде, которые всплывают наверх (самые легкие).
    • При первой итерации цикла элементы массива попарно сравниваются между собой:предпоследний с последним, пред предпоследний с предпоследним и т.д. Если предшествующий элемент оказывается больше последующего, то производится их обмен.
    • При второй итерации цикла нет надобности сравнивать последний элемент с предпоследним. Последний элемент уже стоит на своем месте, он самый большой. Значит, число сравнений будет на одно меньше. То же самое касается каждой последующей итерации.

    сортировка методом пузырька

    Pascal PascalABC.NET
    1
    2
    3
    4
    5
    6
    7
    8
    
    for i:=1 to N-1 do begin
       for j:=N-1 downto i do
         if A[j] > A[j+1] then begin
           с := A[j];
           A[j] := A[j+1];
           A[j+1] := с;
         end;
     end;
    1
    2
    3
    4
    
    for var i := 0 to arr.High - 1 do
        for var j := arr.High - 1 downto i do
          if arr[j] > arr[j + 1] then 
            Swap(arr[j], arr[j + 1]);

    Задача Array 12. Заполнить массив из 10 элементов случайными числами в интервале [0..100] и отсортировать первую половину массива по возрастанию, а вторую – по убыванию (методом ‘Пузырька’).

    Пример:
    Исходный массив:
    14  25  13  30  76  58  32  11  41  97
    Результат:
    13  14  25  30  76  97  58  41  32  11

    [Название файла: taskArray12.pas]

    Сортировка методом выбора

    • в массиве ищется минимальный элемент и ставится на первое место (меняется местами с A[1]);
    • среди оставшихся элементов также производится поиск минимального, который ставится на второе место (меняется местами с A[2]) и т.д.

    сортировка методом вставки

    Pascal PascalABC.NET
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    for i := 1 to N-1 do begin
      min:= i ;
      for j:= i+1 to N do
        if A[j] < A[min] then min:=j; 
      if min <> i then begin
        c:=A[i]; 
        A[i]:=A[min]; 
        A[min]:=c;
      end;
    end;
    1
    2
    3
    4
    5
    6
    7
    8
    
    for var i := 0 to a.High-1 do
      begin
        var (min,imin) := (a[i],i);
        for var j := i + 1 to a.High do
          if a[j] < min then
            (min,imin) := (a[j],j);
        Swap(a[imin],a[i]);
      end;

    Задача Array 13: Заполнить массив из 10 элементов случайными числами в интервале [0..50] и отсортировать его по возрастанию суммы цифр

    Пример:
    Исходный массив:
    14  25  13  12  76  58  21  87  10  98
    Результат:
    10  21  12  13  14  25  76  58  87  98  
    

    [Название файла: taskArray13.pas]


    PascalABC.NET:

    Стандартная процедура sort():

    Sort(a);
    SortByDescending(a);

    Быстрая сортировка или quick sort

    Алгоритм:

    1. Выбирается и запоминается средний элемент массива (присвоим X):
    2. быстрая сортировка

    3. Инициализируем две переменные (будущие индексы массива): L:=1, R:=N (N — количество элементов).
    4. Увеличиваем L и ищем первый элемент A[L], который больше либо равен X (в итоге он должен находиться справа).
    5. Уменьшаем R и ищем элемент A[R], который меньше либо равен X (в итоге он должен находиться слева).
    6. Смотрим, если L<=R, то меняем местами A[L] и A[R], возвращаемся к пункту 3.

    быстрая сортировка паскаль

    Выполнение на Паскале:
    1

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    procedure QSort ( first, last: integer);
    var L, R, c, X: integer;
    begin
      if first < last then begin
        X:= A[(first + last) div 2];
        L:= first; R:= last;
     while L <= R do begin
       while A[L] < X do L:= L + 1;
       while A[R] > X do R:= R - 1;
       if L <= R then begin
         c:= A[L]; A[L]:= A[R]; A[R]:= c;
         L:= L + 1; R:= R - 1;
       end;
     end;
      QSort(first, R);   QSort(L, last);
      end;
    end.

    Задача Array 14:
    Заполнить массив из 10 элементов случайными числами в интервале [-50..50] и отсортировать его с помощью алгоритма быстрой сортировки.

    [Название файла: taskArray14.pas]

    Основные операции обработки массивов:

    • вычисление суммы элементов массива;
    • поиск максимального или минимального значения в массиве;
    • поиск максимального или минимального среди всех элементов массива, удовлетворяющих некоторому условию;
    • обмен значениями между элементами;
    • реверс — перестановка элементов массива местами в обратном порядке (последний становится первым, первый — последним и т. д.

    Рассмотрим подробнее каждую операцию.

    Вычислим сумму элементов массива из предыдущей теории — усовершенствуем программу. Цикл, с помощью которого выводился массив, заменим на цикл, который будет прибавлять к переменной (s) каждый последующий элемент массива.

    Ответ: (55).

    Задачи на поиск в массиве

    Поиск максимального значения.

    Идея поиска максимального значения заключается в следующем: каждый элемент массива поочерёдно сравнивается со следующим. Если он больше, то некоторой переменной max будет присвоено значение этого элемента. Напишем программу.

    Ответ: (100).

    Найдём наибольшее число, удовлетворяющее некоторому условию.

    Задача: найти максимальное чётное число. Для этого добавим в условие проверку на чётность при помощи операции mod.

    Ответ: (8).

    Обмен значениями между элементами

    Допустим, нам нужно удалить некоторый элемент массива.

    Скриншот 15-10-2021 023238.jpg

    Удалим элемент с индексом (6). Для этого добавляем ещё одну переменную, которая будет обозначать индекс удаляемого элемента. Далее массив будем выводить по частям. До удаляемого элемента — без изменений, пропустим удаляемый элемент и выведем остаток массива.

    Скриншот 15-10-2021 030215.jpg

    Скриншот 15-10-2021 030236.jpg

    Ниже представлен пример поиска минимального и максимального элемента в одномерном массиве на языке Pascal . В программе используются стандартные константы языка Free Pascal

    MaxInt содержит самое большое целое число (32,767)
    MaxLongint содержит самое большое двойное целое (2,147,483,647)

    var a:array[1..5] of integer;
        min:integer;
        max:integer;
        i:integer;
    begin
         writeln('введите 5 элементов массива');
         min:=MAXINT;
         max:=not(MAXINT);
         for i:=1 to 5 do begin
            readln( a[i] );
            if min>a[i] then min:=a[i];
            if max<a[i] then max:=a[i];
         end;
         writeln( 'Минимальный элемент массива = ', min );
         writeln( 'Максимальный элемент массива = ', max );
    end.
    

    Ниже представлен пример поиска минимального и максимального элемента в двумерном массиве на языке Pascal . Дополнительно подключение генератор простых чисел для быстрого заполнения данных.

    var a:array[1..3,1..3] of integer;
        min:integer;
        max:integer;
        i,j:integer;
    begin
         randomize;
         writeln('Искомый массив 3 на 3');
         for i:=1 to 3 do 
            for j:=1 to 3 do begin
                a[i,j]:=random(100);
                if j<>3 then write(' ', a[i,j]) else writeln(' ',a[i,j]);
         end;
         
         min:=MAXINT;
         max:=not(MAXINT);
         for i:=1 to 3 do 
            for j:=1 to 3 do begin
            if min>a[i,i] then min:=a[i,j];
            if max<a[i,j] then max:=a[i,j];
         end;
         writeln( 'Минимальный элемент массива = ', min );
         writeln( 'Максимальный элемент массива = ', max );
    end.
    

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

    1 способ

    Задача 1: Дан одномерный массив, состоящий из n целых чисел. Найти минимальный элемент массива. В первой строке вводится количество чисел в массиве n. Затем выводятся сами числа, заданные случайным образом. В третьей строке выводится результат: минимальный элемент массива.

    Исходные данные:

    Результат:

    10
    5  -2  14  7  -4  23  0  8  6  -1

    -4

    10
    0  4  5  2  77  62  4  8  0  45

    0

    Считаем, что первый элемент массива – минимальный.  Затем, сравниваем, начиная со второго до последнего все элементы массива с минимальным. Используем для этого цикл. Если очередной элемент на каком-то шаге цикла оказывается меньше минимального, то значение минимального изменяем, присвоив ему значение этого очередного элемента. По окончании цикла выводим результат: минимальный элемент.

    program min1;
    var a:array[1..100] of integer;
    i,min,n:integer;
    begin
    //заполнение массива и вывод массива в строчку
    readln(n);
    for i:=1 to n do begin
    a[i]:=random(-100,100);
    write(a[i],’ ‘);
    end;
    //нахождение минимального элемента массива
    min:=a[1];
    for i:=2 to n do
    if min>=a[i] then min:=a[i];
    //вывод результата
    writeln;
    write(min);
    end.

    Заметим, что для нахождения максимального элемента массива достаточно заменить имя переменной min на max и знак >= на знак <=.

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

    Исходные данные:

    Результат:

    10
    5  -2  14  7  -4  23  0  8  6  -1

    5

    10
    0  4  5  2  77  62  4  8  0  45

    9

    Если в задаче требуется найти индекс минимального (максимального), то вводим переменную imin, в которую будем запоминать индекс минимального (максимального), причем первоначально ее значение равно 1.

    program min2;
    var a:array[1..100] of integer;
    i,min,n,imin:integer;
    begin
    //заполнение массива и вывод массива в строчку
    readln(n);
    for i:=1 to n do begin
    a[i]:=random(-100,100);
    write(a[i],’ ‘);
    end;
    //нахождение индекса минимального элемента массива
    min:=a[1];
    imin:=1;
    for i:=2 to n do
    if min>=a[i] then begin
    imin:=i;
    min:=a[i];
    end;
    //вывод результата
    writeln;
    write(imin);
    end.

    Если в массиве есть несколько равных между собой минимальных элементов, то данная программа найдет номер последнего (правого) элемента. Для того чтобы найти индекс первого (левого) элемента достаточно изменить знак  >= на строгий знак >.
    Эту программу можно оптимизировать, так как, зная индекс минимального элемента, можно найти значение минимального элемента массива. Значит, переменная min не нужна:

    var a:array[1..100] of integer;
    i,n,imin:integer;

    Фрагмент нахождения индекса минимального элемента массива выглядит так:

    imin:=1;
    for i:=2 to n do
    if a[imin]>=a[i] then imin:=i;

    Задача 3: Дан одномерный массив, состоящий из n целых чисел. Найти количество минимальных элементов массива. В первой строке вводится количество чисел в массиве n. Затем выводится массив, заданный случайным образом. В третьей строке выводится результат: количество минимальных элементов массива.

    Исходные данные:

    Результат:

    10
    5  -2  14  7  -4  23  0  8  -4  -1

    2

    10
    0  4  5  2  77  0  4  8  0  45

    3

    program min3;
    var a:array[1..100] of integer;
    i,min,n,k:integer;
    begin
    //заполнение массива и вывод массива в строчку
    readln(n);
    for i:=1 to n do begin
    a[i]:=random(-5,5);
    write(a[i],’ ‘);
    end;
    //нахождение минимального элемента массива
    min:=a[1];
    for i:=2 to n do
    if min>=a[i] then
    min:=a[i];
    //считаем количество равных элементов
    k:=0;
    for i:=1 to n do
    if a[i]=min then k:=k+1;
    //вывод результата
    writeln;
    write(k);
    end.

    Задача 4: Дан целочисленный массив из n элементов. Элементы массива могут принимать целые значения от 0 до 1000. Напишите программу, находящую минимальное значение среди элементов массива, которые имеют чётное значение и не делятся на четыре. Гарантируется, что в исходном массиве есть хотя бы один элемент, значение которого чётно и не кратно четырем. В первой строке вводится количество чисел в массиве n. Затем выводится массив, заданный случайным образом. В третьей строке выводится результат: минимальное значение среди элементов массива, которые имеют чётное значение и не делятся на четыре.

    Исходные данные:

    Результат:

    10
    5  -2  14  7  -4  22  0  -8  -6  -1

    -6

    10
    0  4  5  -10  77  0  4  -12  0  45

    -10

    В этой задаче первый способ нахождения минимального не подойдет. Первый элемент массива может оказаться меньше, чем минимальный четный и не кратный четырем и программа выведет неверный результат. Каким должно быть начальное значение переменной min? Его нужно выбрать таким, чтобы для первого же «подходящего» элемента выполнилось условие a[i] < min, и это «временное» начальное значение было бы заменено на реальное. Такое «подходящее» обязательно будет, так как это гарантировано условием задачи. Оно должно быть большим и таким, какое не может быть по условию задачи, например, 1001.

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

    Итак, находим минимальный элемент вторым способом.

    2 способ

    Записываем в переменную min значение 1001. Затем в цикле просматриваем все элементы массива, с первого до последнего. Если остаток от деления очередного элемента на 2 равен 0 и остаток от его деления на 4 не равен нулю и значение элемента меньше, чем значение переменной min, сохраняем в переменную min значение очередного элемента массива. После окончания работы цикла выводим значение переменной min.

    program min4;
    var a:array[1..100] of integer;
    i,min,n:integer;
    begin
    //заполнение массива и вывод массива в строчку
    readln(n);
    for i:=1 to n do
    readln(a[i]);
    for i:=1 to n do
    write(a[i],’ ‘);
    //нахождение минимального элемента массива
    min:=1001;
    for i:=1 to N do
    if (a[i] mod 2=0) and (a[i] mod 4 <> 0) and (a[i]<min) then
      min:=a[i];
    //вывод результата
    writeln;
    write(min);
    end.

    Проверяем на тестах:

    10
    411 837 755 90 520 203 581 798 401 640

    90

    10
    195 264 127 936 658 152 339 504 395 553

    658

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

    program min5;
    var a:array[1..100] of integer;
    i,min,n,j:integer;
    begin
    //заполнение массива и вывод массива в строчку
    readln(n);
    for i:=1 to n do
    readln(a[i]);
    for i:=1 to n do
    write(a[i],’ ‘);
    //нахождение первого четного и не кратного 4 числа
    i:=1;
    while (i<=n)and not((a[i] mod 2=0) and (a[i] mod 4 <> 0)) do i:=i+1;
    //в переменной i запомнился номер первого элемента, удовлетворяющего условию
    //нахождение минимального, начиная со следующего за найденным
    min:=a[i];
    for j:=i+1 to N do
    if (a[j] mod 2=0) and (a[j] mod 4 <> 0) and (a[j]<min) then
      min:=a[j];
    //вывод результата
    writeln;
    write(min);
    end.

    Задача 5: Дан целочисленный массив из n элементов. Элементы массива могут принимать произвольные целые значения. Напишите программу, которая находит и выводит второй максимум массива (элемент, который в отсортированном по невозрастанию массиве стоял бы вторым).

    Исходные данные:

    Результат:

    10
    5  -2  14  7  -4  22  0  -8  -6  -1

    14

    10
    0  4  5  -10  77  0  4  -12  0  45

    45

    Мы знаем, как найти первый максимум, а в этой задаче нужно найти второй по величине максимум. Попробуем это сделать это за один проход по массиву. Нам нужны две переменные, max1 (максимальный элемент) и max2 (второй максимум). Сначала выбираем максимальный из первых двух элементов и записываем его значение в max1, а второй по величине записываем в max2.

    Затем в цикле перебираем все элементы, начиная с 3-го до последнего. Если очередной элемент a[i] больше, чем max1, записываем значение max1 в max2 (предыдущий максимум становится вторым), а значение a[i] – в max1. Иначе, если a[i] больше, чем max2, записываем значение a[i] в max2. После завершения цикла выводим значение переменной max2.

    program min6;
    var a: array [1..100] of integer;
    i, k,n, max1, max2: integer;
    begin
      //заполнение массива и вывод массива в строчку
    readln(n);
    for i:=1 to n do begin
    a[i]:=random(0,100);
    write(a[i],’ ‘);
    end;
    //начальные значения max1 и max2
    if a[1] > a[2] then begin
    max1:=a[1]; max2:=a[2]
    end
    else begin
    max1:=a[2]; max2:=a[1]
    end;
    // поиск второго максимального
    for i:=3 to N do
    if a[i] > max1 then begin
    max2:= max1;
    max1:= a[i]
    end
    else
    if a[i] > max2 then max2:=a[i];
    //вывод результата
    writeln;
    writeln(max2);
    end.

    Задача 6: Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от 1 до 10000 включительно. Напишите программу, позволяющую найти и вывести минимальный элемент массива, шестнадцатеричная запись которого содержит ровно две цифры, причём первая (старшая) цифра больше второй (младшей).  Если таких чисел нет, нужно вывести ответ 0.

    Исходные данные:

    Результат:

    20
    5  -2  14  7  -4  22  0  -8  -6  -1

    14

    10
    0  4  5  -10  77  0  4  -12  0  45

    45

    Эта задача усложнена только тем, что элементы массива должны быть в диапазоне от 16 до 255. В этом случае первая цифра находится как результат деления нацело на 16, а вторая цифра – как остаток от деления на 16.

    Кроме этого здесь массив можно объявить через константу n, так как размер массива задан явно: 20 элементов.

    program z6;
    //объявление массива через константу
    const n=20;
    var a: array [1..n] of integer;
    i,min: integer;
    begin
      //заполнение массива и вывод массива в строчку
    for i:=1 to n do begin
    a[i]:=random(0,10000);
    write(a[i],’ ‘);
    end;
    writeln;
    min := 10001;
    for i := 1 to n do begin
    //для проверки правильности программы выведем две шестнадцатеричные цифры:
    //write(a[i] div 16,a[i] mod 16,’ ‘);
    if (16 <= a[i]) and (a[i] < 256) and (a[i] div 16 > a[i] mod 16) and (a[i] < min) then
        min := a[i];
    end;
    writeln;
    //вывод результата
    if min = 10001 then
      writeln(0)
    else
      writeln(min);
    end.

    Задачи для самостоятельного решения:

    1. Дан целочисленный массив из n элементов. Элементы могут принимать значения от 150 до 210 ­– рост учащихся выпускного класса. В волейбольную команду берут тех, чей рост не менее 170 см. Напишите программу, которая определяет и выводит минимальный рост игрока баскетбольной команды. Гарантируется, что хотя бы один ученик играет в баскетбольной команде.
    2. Дан целочисленный массив из n элементов. Элементы массива могут принимать целые значения от 0 до 100 – баллы учащихся выпускного класса за экзамен по информатике. Для получения положительной оценки за экзамен требовалось набрать не менее 50 баллов. Напишите программу, которая находит и выводит минимальный балл среди учащихся, получивших за экзамен положительную оценку. Известно, что в классе хотя бы один учащийся получил за экзамен положительную оценку.
    3. Дан целочисленный массив – сведения о температуре за каждый день октября. Элементы массива могут принимать целочисленные значение значения от -15 до 20. Напишите программу, которая находит и выводит максимальную температуру среди дней, когда были заморозки (температура опускалась ниже нуля). Гарантируется, что хотя бы один день в октябре была отрицательная температура.
    4. Дан целочисленный массив из n элементов, все элементы которого – неотрицательные числа, не превосходящие 10000. Напишите программу, которая находит и выводит минимальное трехзначное число, записанное в этом массиве. Если таких чисел нет, нужно вывести сообщение «Таких чисел нет».
    5. Дан целочисленный массив из n элементов. Элементы массива могут принимать целые значения от 1 до 10000 включительно. Напишите программу, позволяющую найти и вывести наибольший из элементов массива, шестнадцатеричная запись которого оканчивается на букву F. Если таких чисел нет, нужно вывести ответ 0.
    6. Дан целочисленный массив из n элементов. Элементы массива могут принимать произвольные целые значения. Напишите программу, которая находит и выводит номера двух элементов массива, сумма которых минимальна.
    7. Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от 1 до 10000 включительно. Напишите программу, находящую минимальный элементов массива, шестнадцатеричная запись которого содержит ровно две цифры, причём вторая (младшая) цифра – это буква (от A до F). Если таких чисел нет, нужно вывести ответ 0.

    Источники информации

    1. Угринович Н.Д. Информатика и информационные технологии. Учебник для 10-11 классов/ Н.Д. Угринович. – М.:Бином. Лаборатория знаний, 2005.
    2. Сайт К. Полякова http://kpolyakov.spb.ru/school/ege.htm

    0 / 0 / 0

    Регистрация: 01.04.2010

    Сообщений: 8

    1

    Поиск минимального элемента в массиве

    29.04.2010, 11:47. Показов 121748. Ответов 21


    Студворк — интернет-сервис помощи студентам

    дан одномерный массив А[n]. Написать программу на языке паскаль, реализующую поиск минимального элемента в массиве А[n]. результат вывести на экран.
    зарание спасибо



    0



    mamedovvms

    2923 / 844 / 324

    Регистрация: 30.04.2009

    Сообщений: 2,633

    29.04.2010, 11:49

    2

    Pascal
    1
    2
    3
    4
    5
    
    min:=1;
    for i:=2 to n do
     if a[i]<a[min] then min:=i;
     
    writeln('минимальный элемент ', a[min]);



    1



    Snoopy

    1915 / 1065 / 384

    Регистрация: 06.12.2008

    Сообщений: 2,802

    29.04.2010, 11:49

    3

    Pascal
    1
    2
    3
    4
    
    min:=a[1];
    for i:=2 to n do
     if a[i]<min then
      min:=a[i];



    1



    0 / 0 / 0

    Регистрация: 01.04.2010

    Сообщений: 8

    29.04.2010, 12:18

     [ТС]

    4

    если вас не затруднитвыложите всю программу



    0



    1915 / 1065 / 384

    Регистрация: 06.12.2008

    Сообщений: 2,802

    29.04.2010, 12:25

    5

    GenociD, стыдно…это самый примитив…



    0



    0 / 0 / 0

    Регистрация: 01.04.2010

    Сообщений: 8

    29.04.2010, 12:27

     [ТС]

    6

    знаю что стыдно…я только начинаю разбираться…



    0



    Snoopy

    1915 / 1065 / 384

    Регистрация: 06.12.2008

    Сообщений: 2,802

    29.04.2010, 12:44

    7

    Pascal
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    const n=10;
    var a:array[1..n] of integer;
        min,i:integer;
    begin
    for i:=1 to n do
     begin
      a[i]:=random(20);
      Write(a[i],'  ');
     end;
    min:=a[1];
    for i:=2 to n do
     if a[i]<min then
      min:=a[i];
    Writeln('Min ',min);
    end.



    3



    Artorias05

    1 / 1 / 0

    Регистрация: 27.08.2019

    Сообщений: 16

    23.09.2019, 17:36

    8

    Pascal
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    var a :array [1..100] of integer;
    min, nom, i,n:integer;
    begin
      i:=0;
      min:=1000;
      nom:=0;
      n:=10;
      writeln('Массив до изменений');
      for i:=1 to n do
        begin
          a[i]:= random(1,5);
          writeln(a[i]);
        end;
        for i:=1 to n do
        begin
          if (a[i]<min) or (a[i]=min) then
            begin
              min := a[i];
              nom:=i;
            end;
        end;
         writeln('Массив после изменений');
         for i:=1 to n do
        begin
          if i=nom then
              a[i]:=0;
          writeln(a[i]);
        end;
    end.



    0



    mr-Crocodile

    23.09.2019, 17:52

    Не по теме:

    Artorias05, и не стыдно тебе чушь выкладывать?



    0



    1 / 1 / 0

    Регистрация: 27.08.2019

    Сообщений: 16

    26.09.2019, 09:29

    10

    mr-Crocodile, не понял претензии, поясни если есть что сказать.

    Добавлено через 2 минуты
    mr-Crocodile, я показал как можно найти минимум в одномерном массиве, на примере одного своего алгоритма, который использовал для решения другой задачи.



    0



    mr-Crocodile

    2878 / 1533 / 619

    Регистрация: 19.03.2019

    Сообщений: 5,121

    26.09.2019, 09:52

    11

    Цитата
    Сообщение от Artorias05
    Посмотреть сообщение

    не понял претензии, поясни если есть что сказать.

    тебе пояснить?
    поясняю. Тема 2008 года. Чтобы написать в ней что-то, нужно, чтобы это «что-то» было того достойно.
    А что в данном случае?
    твой алгоритм намного хуже, чем те, которые уже есть в теме (сравни с пост #7). Этот код и короче и работает.
    если ты не понимаешь, чем твой код хуже — то посмотри, чему ты начально берёшь значение min и чему его надо брать.
    дальше. у тебя ДВЕ переменные, чтобы хранить минимальное значение и его номер. а более чем достаточно одной.
    дальше. где ты в этой теме увидел, что минимальное значение нужно заменить нулём? Это из твоей другой задачи?
    Так какого ты тут выкладываешь решение ДРУГОЙ задачи? у меня есть код сортировки массива. Может, его тоже тут выложим? А что — крайний элемент после сортировки и будет минимальный/максимальный?! (*сарказм*)
    Ну и вишенка на торте.
    это вот этот код

    Цитата
    Сообщение от Artorias05
    Посмотреть сообщение

    Pascal
    1
    2
    3
    4
    5
    6
    
    for i:=1 to n do
    * * begin
    * * * if i=nom then
    * * * * * a[i]:=0;
    * * * writeln(a[i]);
    * * end;

    Ты вообще понимаешь, что тут написано?!
    ты перебираешь все элементы массива и каждый элемент проверяешь, не имеет ли он индекс, который тебе нужен.
    А зачем это?!
    У тебя есть индекс. вот по нему и запиши.
    вместо цикла и сравнения нужна всего ОДНА строчка

    Pascal
    1
    
    a[nom]:=0;

    ВСЁ.
    да, нужен цикл для вывода массива — так напиши цикл для вывода. Без всяких глупых If.

    да, я понимаю, что ты только изучаешь Паскаль, что-то получилось сделать и тебе переполняет чувство поделится своим творчеством.
    Но ничего, опыт и знания приходят в процессе. Изучай и улучшай свой уровень и тогда ты сам поймёшь, «какие претензии»



    0



    1 / 1 / 0

    Регистрация: 27.08.2019

    Сообщений: 16

    26.09.2019, 10:26

    12

    mr-Crocodile, вы правы по поводу не уместности данного кода в этой теме, возможно мне стоило поставить метку «не по теме», но относительно моих методов построения кода, использования переменных и т.д. у нас с вами разные понимания о достойном коде, я считаю, что мой код не менее достойный чем седьмой пост. К тому же мой код работает (и в части нахождения минимума тоже) и если люди, которым нужен минимум в одномерном массиве понимают паскаль, то они найдут в моем коде все, что им нужно, если же нет, то пусть копипастят код из седьмого поста и буду счастливы с ним. Что же касается вас, mr-Crocodile, я уважаю вашу точку зрения, но если вам до скрежета зубов не нравиться мой код, то просто поставьте отрицательную оценку и все.



    0



    2878 / 1533 / 619

    Регистрация: 19.03.2019

    Сообщений: 5,121

    26.09.2019, 10:35

    13

    Цитата
    Сообщение от Artorias05
    Посмотреть сообщение

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

    да не буду я Вам отрицательную оценку ставить, не тот это случай.
    И не настолько всё плохо.
    я просто не понимаю, почему Вы упорствуете. Всякий может ошибаться. Но отстаивать заведомо ошибочный код — это глупо.
    вот, конкретно, по вашему коду. присваивать min := 1000; — вот это неверно и потенциальный баг. хорошо, у вас случайные числа из диапазона. а если кто-то хочет числа вводить с клавиатуры? Всё? Нужно переписывать код? и как Вы тогда напишете?

    Ладно. я сказал достаточно. умолкаю.

    *не нравится (что делает)



    0



    1 / 1 / 0

    Регистрация: 27.08.2019

    Сообщений: 16

    26.09.2019, 11:28

    14

    mr-Crocodile, я еще раз повторяю: я уважаю вашу позицию, но эти приемы работали везде, где я их применял, и я не сомневаюсь в их работоспособности во всех задачах такого плана, именно поэтому я их и использовал здесь. Если мне когда-нибудь попадется задание, где этот метод не будет работать, то я просто приравняю переменную минимума самому большому числу для данного типа и этот алгоритм будет работать всегда.
    Что касается ошибочности кода, то с моей сточки зрения этот код выполняет все функции которые на него возложены, а утверждать, что этот код плохой только потому что здесь используются приемы которые вы не используйте — это глупо уже с вашей стороны.
    С моей точки зрения, моя единственная ошибка — это то, что я разместил свой код в данной теме без пометки «не по теме»? Во всех других аспектах, я считаю свой код, безусловно не идеальным, но явно не подходящим под определение «говнокод» (я знаю, что вы этого не говорили, но по количеству замечаний связанных с целесообразностью использования различных конструкций для решения конкретной задачи, я понял что вы так думайте).



    0



    bormant

    Модератор

    Эксперт Pascal/DelphiЭксперт NIX

    7534 / 4394 / 2785

    Регистрация: 22.11.2013

    Сообщений: 12,588

    Записей в блоге: 1

    26.09.2019, 14:41

    15

    Цитата
    Сообщение от Artorias05
    Посмотреть сообщение

    Если мне когда-нибудь попадется задание, где этот метод не будет работать, то я просто приравняю переменную минимума самому большому числу для данного типа

    Отчего ж сразу (а не потом) не написать:

    Pascal
    1
    
      min:=High(min);

    Цитата
    Сообщение от Artorias05
    Посмотреть сообщение

    считаю свой код, безусловно не идеальным, но явно не подходящим под определение «говнокод»

    Зря. Он самый и есть. Практически эталонный:

    Pascal
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
        for i:=1 to n do 
        begin  { займемся фигней многократно }
          if (a[i]<min) or (a[i]=min) then { сравнение тоже стоит процессорного времени }
    ...
        for i:=1 to n do
        begin  { займемся фигней многократно }
          if i=nom then { сравнение тоже стоит процессорного времени }
            a[i]:=0;
          writeln(a[i]);
        end;



    0



    1 / 1 / 0

    Регистрация: 27.08.2019

    Сообщений: 16

    26.09.2019, 14:52

    16

    bormant, позвольте спросить как же вы будете искать минимум а также его последний экземпляр, в массиве не пройдя все его элементы? Может быть вы будете копипастить if пока не проверите каждый элемент в отдельности. Ну тогда ваша правда, в таком случае, мой код, как вы выразились, «фигня».



    0



    bormant

    Модератор

    Эксперт Pascal/DelphiЭксперт NIX

    7534 / 4394 / 2785

    Регистрация: 22.11.2013

    Сообщений: 12,588

    Записей в блоге: 1

    26.09.2019, 15:04

    17

    Цитата
    Сообщение от Artorias05
    Посмотреть сообщение

    искать минимум а также его последний экземпляр

    А чем последний экземпляр отличается от любого другого? Пока я вижу только одну задачу:

    Цитата
    Сообщение от GenociD
    Посмотреть сообщение

    дан одномерный массив А[n]. Написать программу на языке паскаль, реализующую поиск минимального элемента в массиве А[n]. результат вывести на экран.

    Pascal
    1
    2
    3
    4
    5
    6
    7
    8
    
    var n, m, t: Integer;
    begin
      Read(n); m:=High(m);
      for n:=1 to n do begin
        Read(t); if m>t then m:=t;
      end;
      WriteLn('min = ',m);
    end.

    Будут другие задачи, обсудим другие решения.

    Добавлено через 2 минуты
    Если же таки дан массив и поискать нужно только среди n первых элементов:

    Pascal
    1
    2
    3
    4
    5
    
    function vMin(const v: array of Integer; n: Integer): Integer;
    var r: Integer;
    begin
      r:=v[0]; for n:=1 to n-1 do if r>v[n] then r:=v[n]; vMin:=r;
    end;

    либо

    Pascal
    1
    2
    3
    4
    
    function vMin(const v: array of Integer; n: Integer): Integer;
    begin
      Result:=v[0]; for n:=1 to n-1 do if Result>v[n] then Result:=v[n];
    end;

    Добавлено через 3 минуты
    А если строго по заданию с A[n], то и вовсе:

    Pascal
    1
    2
    3
    4
    5
    
    function vMin(const v: array of Integer): Integer;
    var e: Integer;
    begin
      Result:=v[0]; for e in v do if Result>e then Result:=e;
    end;
    Pascal
    1
    2
    3
    4
    5
    
    function vMin(const v: array of Integer): Integer;
    var i: Integer;
    begin
      Result:=v[Low(v)]; for i:=Low(v)+1 to High(v) do if Result>v[i] then Result:=v[i];
    end;



    0



    1 / 1 / 0

    Регистрация: 27.08.2019

    Сообщений: 16

    26.09.2019, 15:10

    18

    bormant, если вы не заметили? я уже два раза в разговоре с господином mr-Crocodile признал свою ошибку по поводу темы сообщения с кодом, очевидно же, что это разные задачи, я же настаиваю лишь на том, что люди, умеющие читать на паскале, смогут понять, как найти минимум в массиве и по моему коду.

    PS В коде, который вы привели в пример, к слову, тоже есть и цикл и условие для поиска минимума. Что же вы свой то код фигней не называете?



    0



    Модератор

    Эксперт Pascal/DelphiЭксперт NIX

    7534 / 4394 / 2785

    Регистрация: 22.11.2013

    Сообщений: 12,588

    Записей в блоге: 1

    26.09.2019, 15:36

    19

    Цитата
    Сообщение от Artorias05
    Посмотреть сообщение

    Что же вы свой то код фигней не называете?

    Он минимально необходимый и достаточный.

    Добавлено через 4 минуты
    Но оптимизировать есть куда: например, на x86-64 ходить по выровненному на 64 бита массиву читая из памяти в регистр по 64 битному значению за 1 раз, уже в регистре разбивая его на 2х32 или 4х16 :-)



    0



    pistonidrisov

    1 / 1 / 0

    Регистрация: 06.12.2017

    Сообщений: 95

    04.05.2021, 15:02

    20

    bormant,

    Цитата
    Сообщение от bormant
    Посмотреть сообщение

    Pascal
    1
    2
    3
    4
    5
    6
    7
    8
    
    var n, m, t: Integer;
    begin
      Readln(n); m:=High(m);
      for n:=1 to n do begin
        Read(t); if m>t then m:=t;
      end;
      WriteLn('',m);
    end.

    (чуть изменил)

    а как вывести в конце все элементы массива?



    0



    Понравилась статья? Поделить с друзьями:
  • Как составить исковое заявление в верховный суд
  • Как найти процентное соотношение двух чисел калькулятор
  • Как исправить горбинку на носу массажем
  • Как исправить репутацию в пабг мобайл
  • Компас как найти каабу