Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Задача 42. Перестановка столбцов матрицы
Условие задачи. Дана матрица В. Поменять в ней местами столбцы с минимальным и максимальным элементами матрицы. Известно, что в матрице имеется только по одному элементу с минимальным и максимальным значением. В этой задаче исходными данными является двумерный массив В и количество строк m и столбцов n, которые заранее неизвестны и вводятся с клавиатуры. Чтобы поменять местами столбцы, в которых расположены минимальный и максимальный элемент матрицы, необходимо найти номера этих столбцов. Для этого используем уже известный алгоритм нахождения наибольшего и наименьшего элементов матрицы. Выберем переменные для хранения наибольшего и наименьшего значений, например max и min, а также переменные, в которых будут храниться номера столбцов, где располагаются эти элементы, например, jmax и jmin. В переменные max и min сначала поместим значение первого элемента матрицы (элемента в левом верхнем углу В[1,1]) max =B[1,1] и min = max, а в переменных jmin и jmax запомним номер столбца этого элемента jmin = 1, jmax =1. Затем будем просматривать всю матрицу в любом порядке. Зададим внешний цикл по строкам i=1,n, а внутренний по столбцам j=1,m. В цикле сначала будем последовательно сравнивать очередной элемент матрицы с содержимым переменной max и если очередной элемент матрицы B[i,j] окажется больше max, то в переменную max запишем этот элемент max = B[i,j] а в переменной jmax запомним номер столбца этого элемента jmax =j. Иначе будем сравнивать очередной элемент матрицы с содержимым переменной min, и если очередной элемент матрицы B[i,j] окажется меньше min, то в переменную min перепишем этот элемент min = B[i,j], а в переменной jmin запомним номер столбца jmin =j. Теперь, когда все элементы будут проверены, и номера столбцов для перестановки известны, можно начинать замену. Нам требуется последовательно менять местами элементы столбца с номером jmin с элементами столбца с номером jmax, т.е. элемент B[1,jmin] c элементом B[1,jmax], элемент B[2,jmin ]c элементом B[2,jmax]… элемент B[n,jmin] c элементом B[ n,jmax]. Перестановка двух элементов всегда осуществляется с использованием третьей вспомогательной переменной, например, buf. Для этого организуем цикл, который будет выполняться n раз i =1, n (столько раз, сколько строк в матрице и, следовательно, сколько элементов в столбце). В цикле последовательно осуществим перестановку, очередной пары элементов с номерами jmin и jmax, находящихся в i –ой строке, используя операторы buf=B[i,jmin]; B[i,jmin]= B[i,jm ax ]; B[i,jm ax ]= buf. При i=1 поменяются местами элемент B[1,jmin] c элементом B[1,jmax], при i =2 B[2,jmin] c элементом B[2,jmax], ….., при i = n B[ n,jmin] c элементом B[ n,jmax].
Структурированная запись алгоритма 42 1. Ввод количества строк матрицы n и количества столбцов m 2. Ввод элементов матрицы 3. Вывод исходной матрицы до перестановки 4. В переменные max и min заносится первый элемент матрицы max = B [1,1], min = max 5. В ячейках j max и j min запоминается номер столбца j max=1 и j min=1 6. Начало внешнего цикла по строкам i=1,n 7. Начало внутреннего цикла по столбцам j =1, m 7.1. Проверка условия: если B[i,j] < min, то min = B[i,j] и jmin=j 7.2. Иначе проверка условия: если B[i,j] > max, то max = B]i,j] и jmax=j Конец внутреннего цикла по столбцам (по j) Конец внешнего цикла по строкам (по i) 8. Повторять n раз (для перестановки. i =1, n) 8.1. Перестановка очередной пары элементов в столбцах Конец цикла по i для перестановки 9. Вывод матрицы после перестановки Схема алгоритма
Программа на языке Си #include <stdio.h> #include <conio.h> #define N 20 #define M 12 int main() { clrscr(); double b[N][M],min,max,buf; int n,m,jmin,jmax,i,j; printf("Введите n и m"); scanf("%d%d",&n,&m); printf("Введите элементы матрицы\n"); for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%lf",&b[i][j]); printf("Исходная матрица\n"); for(i=0;i<n;i++) { for(j=0;j<m;j++) printf("%5.1lf ",b[i][j]); printf("\n"); } min=max=b[0][0]; jmin=jmax=0; for(i=0;i<n;i++) for(j=0;j<m;j++) if(b[i][j]<min) { min=b[i][j]; jmin=j;} else if (b[i][j]>max) { max=b[i][j]; jmax=j;} for (i=0;i<n;i++) {buf=b[i][jmin]; b[i][jmin]=b[i][jmax]; b[i][jmax]=buf;} printf("Новая матрица\n"); for(i=0;i<n;i++) { for(j=0;j<m;j++) printf("%5.1lf ",b[i][j]); printf("\n"); } getch(); return 0; } Программа на языке Паскаль Program main_42; Var i,j,jmin,jmax,n,m:integer; min,max,buf: real; b: array[1..20,1..12] of real; begin writeln('Введите n и m'); readln(n,m); writeln('Введите элементы матрицы'); for i:=1 to n do for j:=1 to m do readln(b[i,j]); writeln('Исходная матрица'); for i:=1 to n do begin for j:=1 to m do write(b[i,j]:5:1,' '); writeln; end; min:=b[1,1]; max:=min; jmin:=1; jmax:=1; for i:=1 to n do for j:=1 to m do
begin if b[i,j]<min then begin min:=b[i,j]; jmin:=j; end else if b[i,j]>max then begin max:=b[i,j]; jmax:=j; end; end; for i:=1 to n do begin buf:=b[i,jmin]; b[i,jmin]:=b[i,jmax]; b[i,jmax]:=buf; end; writeln('Новая матрица'); for i:=1 to n do begin for j:=1 to m do write(b[i,j]:5:1,' '); writeln; end; end. Программа на языке Фортран Program main_42 Implicit none integer n, m integer i, j, jmin, jmax real, allocatable:: b(:,:) real min, max, buf print *,'Введите n и m' read *, n, m allocate (b(n,m)) print*,'Введите элементы матрицы' read*,((b(i,j),j=1,m),i=1,n) print'(A/<m>(F5.1,1x))','Исходная матрица', & ((b(i,j),j=1,m),i=1,n) min=b(1,1) max=min jmin=1 jmax=1 C1:do i=1,n C2:do j=1,m if(b(i,j)<min)then min=b(i,j) jmin=j elseif(b(i,j)>max)then max=b(i,j) jmax=j endif еnddo C2 enddo C1 do i=1,n buf=b(i,jmin) b(i,jmin)=b(i,jmax) b(i,jmax)=buf enddo print'(A)','Изменённая матрица' print '(<m>(F5.1,1x))’,((b(i,j),j=1,m),i=1,n) deallocate (b) end program Программа на языке Python print("Введите n -- число строк матрицы B: ") n=int(input()) print("Введите m -- число столбцов матрицы B: ") m=int(input()) B = [] # Создаем пустой список строк # в Python списки индексируются с 0: for i in range(0, n): B.append([]) # Добавляем пустой список элементов i-й строки for j in range(0, m): print("Введите B[{0},{1}]: ".format(i+1,j+1)) B[i].append(float(input())) print("Исходная матрица до перестановки:") for i in range(0, n): for j in range(0, m): print("{0:5.1}".format(B[i][j]),sep='',end=' ') print(" ") max = B[0][0] min = max jmax = 0 jmin = 0 for i in range(0, n): for j in range(0, m): if B[i][j] < min: min = B[i][j] jmin = j elif B[i][j] > max: max = B[i][j] jmax = j for i in range(0, n): buf = B[i][jmin] B[i][jmin] = B[i][jmax] B[i][jmax] = buf print("Матрица после перестановки:") for i in range(0, n): for j in range(0, m): print("{0:5.1}".format(B[i][j]),sep='',end=' ') print(" ") Программа в системе Матлаб n=input('Введите n='); m=input('Введите m='); disp('Введите эл. матрицы'); for i=1:n for j=1:m b(i,j)=input('b(i,j)='); end end disp('исходная матрица') disp(b) min=b(1,1); max=min; jmin=1; jmax=1; for i=1:n for j=1:m if b(i,j)< min min=b(i,j); jmin=j; elseif b(i,j)>max max=b(i,j); jmax=j; end end end for i=1:n buf=b(i,jmin); b(i,jmin)=b(i,jmax); b(i,jmax)=buf; end disp('Измененная матрица') disp(b)
|
||||||
Последнее изменение этой страницы: 2021-04-12; просмотров: 831; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.125.7 (0.036 с.) |