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