Д. М. Златопольский Санкт-Петербург «бхв-петербург» 2011 удк



Pdf көрінісі
бет257/271
Дата04.02.2022
өлшемі7,99 Mb.
#24830
1   ...   253   254   255   256   257   258   259   260   ...   271

часть  оказывается  ложной  (имеет  место  так  называемая  "полная  проверка 


Приложение 3. Работа с одномерными числовыми массивами 
253 
сложных  условий").  Поэтому,  когда  искомого  числа  в  массиве  нет,  при  
искомый_индекс = n + 1
  произойдет  обращение  к  элементу  с  несущест-
вующим индексом (
a[искомый_индекс] = a[n + 1]
). Аналогичная ошиб-
ка может иметь место и в программе на языке Паскаль при определенных 
настройках  компилятора.  Поэтому  при  использовании  языков  Бейсик  
и Паскаль следует в цикле проводить проверку не до последнего, а до пред-
последнего элемента: 
искомый_индекс := 1 
нц пока искомый_индекс < n и а[искомый_индекс] <> значение 
  искомый_индекс := искомый_индекс + 1 
кц 
В  результате  величина 
искомый_индекс
  не  будет  превышать  значение 
n + 1
.  Если  значение  элемента,  на  котором  обработка  массива  останови-
лась  (на  последнем  элементе  или  "досрочно"),  равно  заданному  числу,  то 
это определяет один из вариантов ответа, в противном случае — второй ва-
риант ответа: 
|Вывод результата 
если a[искомый_индекс] = значение 
  то 
   вывод нс, "Индекс этого элемента: ", искомый_индекс 
  иначе 
   вывод нс, "Такого числа в массиве нет" 
все 
Для нахождения первого (при просмотре массива слева направо) элемента, 
равного некоторому числу, можно также провести проверку, начиная с по-
следнего элемента массива: 
искомый_индекс := 0 
нц для i от n до 1 шаг –1 
  если а[i] = значение 
    то 
     искомый_индекс := i 
  все 
кц 
|Вывод результата 
если искомый_индекс > 0 
  то 
   вывод нс, "Индекс этого элемента: ", искомый_индекс 
  иначе 
   вывод нс, "Такого числа в массиве нет" 
все 


Приложения 
254 
П3.38.  Проверка факта наличия в массиве элемента с заданными свойствами
Если перебрать все элементы массива, для каждого проверять заданное ус-
ловие и, если оно выполняется, выводить "Да, имеется", в противном слу-
чае — выводить "Нет, такого элемента нет": 
нц для i от 1 до n 
  если <условие> 
    то 
     вывод нс, "Да, имеется" 
    иначе 
     вывод нс, "Нет, такого элемента нет" 
  все 
кц 
то  на  экран  будет  выведено  несколько  ответов  (причем  противоречащих 
друг другу). Ясно, что ответ (правильный) должен выводиться только один 
раз, и приведенное решение неприемлемо. 
Еще одна типичная ошибка, встречающаяся при решении обсуждаемой за-
дачи, —  использование  переменной  (логического  типа  или  принимающей 
значения  0  и  1),  которая  фиксирует  факт  соблюдения  для  каждого  прове-
ряемого элемента заданных свойств, и вывод ответа в зависимости от зна-
чения этой переменной: 
нц для i от 1 до n 
  если <условие> 
    то 
     имеется := 1 
    иначе 
     имеется := 0 
  все 
кц 
если имеется = 1 
  то 
   вывод нс, "Да, имеется" 
  иначе 
   вывод нс, "Нет, такого элемента нет" 
все 
Здесь ответ, выводимый на экран один раз, может быть ошибочным — он 
зависит  от  того,  обладает  ли  заданными  свойствами  последний  элемент 
массива! 


Приложение 3. Работа с одномерными числовыми массивами 
255 
Наиболее простой способ решения с правильным результатом такой: 
 
подсчитать количество элементов массива с заданными свойствами (та-
кую задачу мы уже решали — см. задачу П3.32); 
 
в  зависимости  от  найденного  количества  вывести  соответствующий  
ответ. 
Можно  также  использовать  оператор  цикла  с  условием  и  прекратить  про-
верку  при  нахождении  первого  элемента  с  заданными  свойствами 
(см. задачу П3.37)
П3.39.  Проверка того факта, что все элементы массива удовлетворяют некоторому 
условию. 
Наиболее простой способ решения данной задачи: 
 
подсчитать количество элементов массива, удовлетворяющих заданно-
му условию (такая задача уже рассматривалась — см. задачу П3.32); 
 
в зависимости от найденного количества вывести соответствующий от-
вет: 
если количество = n 
  то 
   вывод нс, "Да, удовлетворяют" 
  иначе 
   вывод нс, "Нет, удовлетворяют не все" 
все 
Можно также использовать оператор цикла с условием и прекратить про-
верку  при  нахождении  первого  элемента,  не  обладающего  заданными 
свойствами. 
П3.40.  Проверка  массива  на  упорядоченность  по  неубыванию,  т. е.  определение 
того,  верно  ли,  что  каждый  его  элемент,  начиная  со  второго,  не  меньше 
предыдущего. 
Здесь также можно решить задачу следующим образом: 
 
начиная  со  второго  элемента  массива,  подсчитать  количество  элемен-
тов, которые не меньше предыдущих: 
количество := 0 
нц для i от 2 до n 
  |Сравниваем (- 1)-й элемент с предыдущим 
  если a[i] >= a[i — 1] 
    то 
     количество := количество + 1 
  все 
кц 


Приложения 
256 
 
зная значение величины 
количество
, можно вывести ответ 
если количество = n — 1 
  то 
   вывод нс, "Массив упорядочен по неубыванию" 
  иначе 
   вывод нс, "Массив не упорядочен по неубыванию" 
все 
Можно, как и при решении ряда предыдущих задач, применить оператор 
цикла  с  условием,  прекратив  проверку,  как  только  встретится  элемент 
массива, меньший предыдущего. 
П3.41.  Определение максимального элемента массива. 
Алгоритм решения этой задачи аналогичен алгоритму действий человека, 
который определяет максимальное значение в некоторой одномерной таб-
лице с числами. Сначала он смотрит в первую ячейку таблицы и запоми-
нает  записанное  там  число.  Затем  смотрит  во  вторую  ячейку  и  в  случае, 
если  имеющееся  там  число  больше  запомненного,  в  качестве  максималь-
ного запоминает новое число. Для остальных ячеек действия аналогичны. 
Соответствующий фрагмент программы: 
|Начальное присваивание значения искомой величине 
максимальное := а[1] 
нц для i от 2 до n 
  |Сравниваем i-й элемент со значением максимальное 
  если a[i] > максимальное 
    то 
  |  |Принимаем встреченный элемент в качестве максимальное 
     максимальное := а[i] 
  все 
кц 
|Вывод результата или использование его в расчетах 
... 


Достарыңызбен бөлісу:
1   ...   253   254   255   256   257   258   259   260   ...   271




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет