Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Задача 45. Поиск упорядоченных по возрастанию строк матрицы
Условие задачи. В заданной матрице определить количество строк, которые упорядочены по возрастанию. В данной задаче исходным данным является матрица вещественных чисел А. Её размер в условии не определён. Поэтому число строк и число столбцов матрицы (целочисленные N и M) также являются исходными данными и должны вводиться пользователем. Результатом должно стать найденное количество упорядоченных по возрастанию строк матрицы – целое число К. Для подсчёта количества упорядоченных строк необходимо использовать переменную–счётчик К, которая будет увеличиваться на 1 при выполнении условия упорядоченности каждой строки. Для анализа всех строк действия по их проверке должны производиться в цикле, изменяющем номер строки i от первого до последнего. Чтобы узнать, упорядочены ли по возрастанию элементы одной строки, требуется сравнить все пары стоящих рядом элементов этой строки: последующий элемент в паре должен быть больше предыдущего. Такие сравнения в строке нужно сделать по количеству пар, т.е. в цикле M -1 раз (на 1 раз меньше, чем количество элементов в строке). Но вывод об упорядоченности строки можно сделать только после проведения всех сравнений в ней или досрочно в случае, если какой-то элемент оказался не больше предыдущего. В такой ситуации, как правило, используют логическую переменную (f), которой до начала сравнений присваивают одно из двух её возможных значений, например, истина. Далее в цикле М -1 раз сравнивают пары соседних элементов, и если требуемое соотношение элементов нарушено, то значение переменной f меняют на ложь (при этом сравнения в данной строке можно прервать, так как уже ясно, что она не упорядочена). После окончания цикла проверяют f: если она осталась с исходным значением истина, то это значит, что в каждой паре следующий элемент больше предыдущего, и, следовательно, строка упорядочена по возрастанию, а значит счётчик К надо увеличить на 1. Если же f поменяла значение на ложь, то это значит, что требуемое условие в данной строке было нарушено, и увеличивать К не надо. Структурированная запись алгоритма 45 1. Ввести размеры матрицы N и M и элементы самой матрицы А. 2. Обнулить счётчик К =0. 3. В цикле для каждой строки i = 1,N повторять:
3.1. Присвоить начальное значение истина переменной f. 3.2. В цикле для j=1,M-1 повторять 3.2.1. Сравнивать соседние элементы, и если A[i,j] ³ A [ i, j +1], то переменная f меняет своё значение на ложь, и цикл прерывается. 3.3. По окончании цикла проверить: если f имеет значение истина, то К=К+1. 4. Вывести К. Схема алгоритма
Текст программы на языке Си #include <stdio.h> #include <math.h> #define N 25 int main (void) { int n,m,i,j,k,f; double a[N][N]; printf ("\nВведите n и m\n"); scanf ("%d%d", &n,&m); for (i=0; i<n; i++) { printf ("Введите элементы %d строки\n",i); for (j=0; j<m; j++) scanf ("%lf", &a[i][j]); } k=0; for (i=0; i<n; i++) { f=1; for (j=0; j<m-1; j++) if (a[i][j]>=a[i][j+1]) { f=0;break; } if (f) k++; } printf ("Кол-во упорядоченных строк - %d",k); return 0; } Текст программы на языке Паскаль Program Pr_45; Var A: array of array of real; N, M, i, j, K: integer; f: boolean; begin writeln(‘ Введите размеры матрицы'); readln(N,M); SetLengh(A,N,M); N:=N-1; M:=M-1; for i:=0 to N do begin writeln(‘Введите элементы ‘,i,’ строки’); for j:=0 to M do read(A[i,j]); end; K:=0; for i:=0 to N do begin f:=true; for j:=0 to M-1 do if A[i,j]>=A[i,j+1] then begin f:=false; break end; if f then K:=K+1 end; writeln(‘Кол-во упорядоченных строк - ’,K); A:=nil; end. Текст программы на языке Фортран Program Pr_45 Implicit none real, allocatable:: A(:,:) integer N, M, i, j, K logical f print *,‘ Введите размеры матрицы’ read *, N,M allocate(A(N,M)) do i=1,N print *, ‘Введите элементы ‘,i,’ строки’) read(A(i,j),j=1,M) enddo K=0 do i=1, N f=.true. do j=1, M-1 if (A(i,j)>=A(i,j+1)) then f=.false. exit endif enddo if (f) K=K+1 enddo print *, ‘Кол-во упорядоченных строк - ’,K deallocate(A) end Программа на языке Python # В качестве матрицы используется стандартный тип # list (список), элементами которого являются списки print("Введите N -- число строк матрицы A: ") N=int(input()) print("Введите M -- число столбцов матрицы A: ") M=int(input()) A = [] # Создаем пустой список строк # в Python списки индексируются с 0: for i in range(0, N): A.append([]) # Добавляем пустой список элементов i-й строки for j in range(0, M): print("Введите A[{0},{1}]: ".format(i+1,j+1)) A[i].append(float(input())) K = 0 for i in range(0, N): f = True for j in range(0, M-1): if A[i][j] >= A[i][j+1]: f = False break if f: K += 1 # K = K + 1 print("Количество строк, строго", end=' ') print("упорядоченных по",end=' ') print("возрастанию - {0}".format(K))
Программа в системе Матлаб N=input('Введите N='); M=input('Введите M='); for i=1:N disp(sprintf('Введите эл. %d строки матрицы',i)) for j=1:M A(i,j)=input('A(i,j)='); end end K=0; for i=1:N f=true; for j=1:M-1 if A(i,j)>=A(i,j+1) f=false; break; end end if f K=K+1; end end disp(sprintf('Кол-во упорядоченных строк - %d',K))
|
||||||
Последнее изменение этой страницы: 2021-04-12; просмотров: 567; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.42.168 (0.012 с.) |