Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 992; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.119 (0.008 с.) |