С использованием матричных функций 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

С использованием матричных функций



N=input('Введите число элементов массива ');

disp('Введите элементы массива');

for i=1:N

disp(sprintf('x(%g)=',i))

x(i)= input(' ');

end

max_el=max(x);

disp(sprintf('Максимальный элемент=%4.1f',max_el))

 

Задача 31. Поиск минимума в массиве и его перестановка

Условие задачи. В заданном массиве поменять местами минимальный элемент с первым. Известно, что в массиве имеется только один элемент с минимальным значением.

Для того, чтобы поменять местами два элемента массива, необходимо знать индексы (номера) этих элементов. По условию задачи требуется поменять местами 1-й элемент массива с минимальным, поэтому наша задача сначала найти позицию минимального элемента, а затем осуществить перестановку. Алгоритм поиска наименьшего элемента массива аналогичен алгоритму поиска максимума, его конкретное применение к этой задаче рассмотрим ниже. Обычно обмен местами, или перестановка, значений двух переменных осуществляется с использованием вспомогательной переменной следующим образом. В эту вспомогательную переменную записывается любое из двух переставляемых местами значений, например, первое из них, затем на место первой переменной помещается значение второй переменной, а на место второй переменной переносится содержимое вспомогательной переменной, в которой сохранено исходное значение первой переменной. Аналогичным образом осуществляют перестановку значений двух элементов массива. Например, нам надо переставить элементы массива X с номерами k и p. Выберем переменную, например buf,  в нее запишем значение элемента массива с номером k (buf = X [ k ]), на место этого элемента поместим элемент с номером p (X [ k ]= X [ p ]), а на место элемента с номером p поместим значение переменной buf, в которой сохранено исходное значение X [ k ] (X [ p ]= buf).

В нашей задаче нужно поменять местами первый элемент массива с наименьшим. Для поиска минимального значения и его номера предусмотрим переменные min и   pm in. В переменную min поместим первый элемент массива (min = X [1]), а в pmin - его номер (pmin=1). Далее в цикле i=2, n, со второго элемента массива до последнего, будем последовательно сравнивать каждый элемент массива с содержимым ячейки min. Если очередной элемент массива X [i], окажется меньше, чем значение min, то в переменную min записывается элемент X [i] (min= X [i]), а в pmin запоминается его номер (pmin= i). Так будет продолжаться n -1 раз, пока все элементы массива не будут проверены. В результате в переменной min окажется наименьший элемент массива, а в pmin - его номер. Как мы уже знаем, перестановка элементов массива производится через вспомогательную переменную. Однако, в нашем случае мы определили и позицию минимального элемента (pmin), и само значение этого элемента (min), поэтому в качестве вспомогательной переменной можно использовать переменную min, в которой уже хранится значение минимума. Для перестановки можно выполнить следующие действия: в элемент массива с номером pmin (на место минимума) занести первый элемент массива (X [ pmin ]= X [1]), а на место первого элемента - значение минимального элемента (X [1]= min). Теперь нужно вывести измененный массив.

Структурированная запись алгоритма 31

1. Ввести количество элементов массива n и значения элементов массива X

2. Для контроля вывести исходный массив X

3. В переменную pmin записать номер первого элемента массива (pmin =1), a в min – значение этого элемента (min = X [1])

4. В цикле для i=2, n повторять

4.1. Если   X [ i ]<min, то

4.1.1. min=X[i]

4.1.2. pmin=i

5. Выполнить перестановку элементов X [ pmin ]= X [1]; X [1]= min

6. Вывести массив Х после перестановки элементов.

Схема алгоритма

Программа на языке Си

#include <stdio.h>

#define N 20

int main()

{

int i, n, pmin;

double X[N], min;

printf("n=");

scanf("%d",&n);

printf("\n Введите элементы массива\n");

for(i=0; i<n; i++)

scanf("%lf",&X[i]);

pmin=0;

min=X[0];

for(i=1;i<n;i++)

if (X[i]<min)

{

    min=X[i];

      pmin=i;

}

X[pmin]=X[0];

X[0]=min;

printf("\n Измененный массив\n");

for(i=0; i<n; i++)

printf("%5.2lf\n ", X[i]);

return 0;

}

Программа на языке Паскаль

Program main_31;

Var

X:array of real;

min:real;

n,i,pmin:integer;

begin

writeln('Введите n');

readln(n);

setlength(X,n);

writeln('Введите массив');

for i:=0 to n-1 do readln (X[i]);

pmin:=0;

min:=X[0];

for i:=1 to n-1 do

   if x[i]<min then

   begin

      min:=X[i];

      pmin:=i;

    end;

X[pmin]:=X[0];

X[0]:=min;

writeln('Измененный массив');

for i:=0 to n-1 do write(X[i]:3:0,' ');

writeln;

X:=nil;

end.

Программа на языке Фортран

Program main

Implicit none

real, allocatable:: X(:)

integer i,n,pmin

real min

print*,'Введите n'

read*,n

allocate(X(n))

print*,'Введите массив'

read*,(X(i), i=1,n)

print *, 'Исходный массив'

print '(<n>(F4.1,2x))',(X(i),i=1,n)

min=X(1)

pmin=1

do i=2,n

if (X(i)<min) then

    min=X(i)

      pmin=i

endif

enddo

X(pmin)=X(1)

X(1)=min

print *, 'Измененный массив'

print '(<n>(F4.1,2x))',(X(i),i=1,n)

deallocate(X)

end

Программа на языке Python

print("Введите число элементов массива")

print(" (если N<1 то N=50) ")

N=int(input()) 

if N < 1:

N = 50

Х = [] # Создаем пустой список

for i in range(N): # i = 0,..., N-1 -- всего N

print("Введите {0}-й элемент: ".format(i+1))

Х.append(float(input()))

K=0

Min = Х[K]

for i in range(1,N):

# i = 1,..., N-1 -- всего N-1 сравнений 

if Х[i] <Min:

K = i

Min = Х[K]

Х[K] = Х[0]

Х[0] = Min

print("Измененный массив: ")

for i in range(N):

print("Х[{0}] = {1} ".format(i+1,Х[i]))

Программа в системе Матлаб

n=input('Введите n=');

for i=1:n

X(i)=input('X(i)=');

end

pmin=1;

min=X(1);

for i=2:n 

if X(i)<min

min=X(i);

pmin=i;

end

end

X(pmin)=X(1);

X(1)=min;

disp('Измененный массив');

disp(X)



Поделиться:


Последнее изменение этой страницы: 2021-04-12; просмотров: 76; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.226.4.239 (0.019 с.)