Поиск элемента в массиве

Поиск элемента в массиве

Дана задача
Составить программу, осуществляющую поиск элемента p в массиве , состоящем из n элементов. В случае присутствия этого числа в массиве вывести его порядковый номер, в случае отсутствия - вывести соответствующее сообщение
Итак, что нам необходимо сделать? Нам известно ,что есть некоторый массив , длина которого n элементов. Также нам нужно проверить ,есть ли среди этих элементов число p. Как решать? Ничего сложного нет : необходимо просто сравнить каждый элемент массива с числом p.

const
  n = 5;
var
  s: array [1..n] of integer;
  x, i, p: integer;
begin
  writeln('Введите число ,которое будем искать в массиве');
  readln(p);
  writeln('заполните ', n, ' элементов массива');
  for i := 1 to n do
  begin
    readln(s[i]);
    if s[i] = p then x := i;
  end;
  if x = 0 then writeln('В массиве нет такого числа!') else writeln('Число найдено, его порядковый номер = ', x);
end.

Данный код представляет собой самый простой поиск элемента в массиве. Однако в нем есть один существенный недостаток. Здесь не рассматривается случай , когда в массиве 2 и одинаковых элементов равных p. Проще говоря , если например p=5 , а в массиве 5 повторяется 2 раза , первый раз в позиции 2 ,второй - в позиции 6, то в результате вышенаписанного кода будет выведено , что число 5 стоит а позиции 6. Объясняется это просто : в результате цикла , записывается сначала более ранняя позиция , которая потом стирается другой . То есть при нахождении новой позиции старая стирается, и в итоге цикла записывается только конечная позиция. Многих данный код устроит, но лучше его доработать. Будем считать все случаи , включая наихудший, в котором все элементы массива равны p. Поэтому для позиций создаем дополнительный цикл (назовем его k) . Итак модифицируем программу

const
  n = 5;
var
  s, k: array [1..n] of integer;
  y, i, p: integer;
begin
  writeln('Введите число ,которое будем искать в массиве');
  readln(p);
  writeln('заполните ', n, ' элементов массива');
  for i := 1 to n do
  begin
    readln(s[i]);
    if s[i] = p then begin
      y := y + 1;
      k[y] := i;
    end;
  end;
  if y = 0 then writeln('В массиве нет такого числа!')  else
  if y = 1 then writeln('Число найдено, его порядковый номер = ', k[y]) else
  begin
    write('Число найдено, его порядковые номера = ');
    for i := 1 to y do
      write(k[i], ',');
  end;  
end.
Понравилась новость? Добавь в закладки!
Хочешь получать свежие новости? Подпишись на обновления с сайта!
Рекомендуем посмотреть:
#1 | написал: Мар | 10 октября 2014 12:48 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
Ваш сайт - говно!

#2 | написал: Дмитрий | 17 октября 2014 10:09 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
Мар, пшёл отсюда. Очень нужная инфа.

#3 | написал: Fara | 24 ноября 2015 21:02 | ICQ: |

Группа: Гости
Публикаций: 0
Комментариев: 0
Создать массив из 20 случайных чисел в диапазоне от -30 до 0. Нечетные элементы возвести в квадрат и вывести на экран поиск массива. a как решить?

Добавление комментария

Ваше Имя:
Ваш E-Mail:
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Вставка исходного кода Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера

Введите два слова, показанных на изображении: