Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Нахождение количества элементов с данным свойствомСодержание книги
Поиск на нашем сайте Задачи на нахождение номеров элементов с заданными свойствами и на нахождение количества таких элементов во всем массиве останутся практически такими же. В них только добавится второй цикл или вывод двух индексов вместо одного. Задача 1. Найти максимальный элемент массива и его индексы. Так как элементы могут повторяться, то договоримся, что будем запоминать только индексы первого максимального элемента. Опишем процедуру, которой передается массив, и ее результатом является значение максимального элемента и индексы первой встречи такого значения. Procedure Maximum(X: MyArray; n, m: integer; Var Max, Maxi, Maxj: integer); Var i, j: integer; Begin Max:= X[1, 1]; {Предположим, что максимумом является первый элемент} Maxi:= 1; {в этом случае запомним первую строку} Maxj:= 1; {и первый столбец} for i:= 1 to n do for j:= 1 to m do if X[i, j] > Max {если среди элементов массива нашелся больший элемент, то} then begin Max:= X[i, j];{внесем новое найденное значение в переменную Мах} Maxi:= i; {и не забудем запомнить индексы строки} Maxj:= j; {и столбца этого элемента} end; End; Задача 2. Найти количество отрицательных элементов в каждой строке. Рассмотрим несколько способов решения этой задачи. Способ 1 – количество элементов каждой строки хранить в одномерном массиве (Y) соответствующей размерности. Тогда можно описать такую процедуру: Procedure KolOtr1(X: MyArray2; n, m: integer; Var Y: MyArray1); Var i, j: integer; Begin for i:= 1 to n do begin Y[i]:= 0; {записываем начальное значение количества элементов в соответствующую столбцу ячейку} for j:= 1 to m do if X[i, j] < 0 {если отрицательный элемент найден} then Inc(Y[i]); {то увеличиваем текущее значение на единицу} end; End; Способ 2 – использовать счетчик, находить количество элементов строки и выводить значение на экран. Procedure KolOtr2(X: MyArray2; n, m: integer); Var i, j, k: integer; Begin for i:= 1 to n do begin k:= 0; for j:= 1 to m do if X[i, j] < 0 then Inc(k); writeln(i,' – ', k); end; End; Вопрос. Сравните предложенные способы решения задачи. Какой способ Вам понравился больше и почему? Определить, отвечает ли заданный массив некоторым требованиям Задача. Определить, есть ли в заданном массиве элемент, равный 0. Опишем логическую функцию, значение которой равно истине, если такой элемент есть, и ложь в противном случае. Самый простой способ – это просматривать элементы и, если найден искомый элемент, то присвоить функции значение True, иначе – False. Function Check1(X: MyArray; n, m: integer): Boolean; Var i, j: integer; Flag: Boolean; Begin Flag:= False; {Предполагаем, что искомого элемента в массиве нет} i:= 1; while not(Flag) and (i<=n) do {элемент не найден и строки не закончились} begin j:= 1; while (j<=m) and (X[i, j]<>0) do {перебираем все элементы текущей строки, пропуская ненулевые элементы} Inc(j); Flag:= not(j=m+1);{если искомый элемент найден, то переменнойFlag присваиваем значение True} Inc(i); end; Check1:= Flag; End; Задача. Определить, является ли данный квадратный массив симметричным относительно своей главной диагонали. В задачах подобного типа необходимо увидеть зависимость между индексами элементов массива. Для этого удобно представить массив в виде таблицы, обозначив элементы, например, буквой а и написав рядом их индексы.
Заметим, что если массив является симметричным, то для него выполняется равенство A[i, j]=A[j, i] для всех i=1,..., n и j=1,..., n. Поэтому можно составить следующую функцию: Function Check2(X: MyArray; n, m: integer): Boolean; Var i, j: integer; Flag: Boolean; Begin Flag:= True; {Предполагаем, что матрица симметрична} i:= 2; while Flag and (i<n) do begin j:= 1; while (j<i) and (X[i, j]=X[j, i]) do Inc(j); Flag:= (j=i); Inc(i); end; Check2:= Flag; End; Вопрос. Почему в функции употребляется условие i>j? Можно ли без него обойтись и что при этом изменится?
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
|
Последнее изменение этой страницы: 2016-12-30; просмотров: 354; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.214 (0.007 с.) |