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

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

Дана задача

Составить программу, осуществляющую поиск элемента 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.

3 комментария

  • Мар

    Ответить 10.10.2014 05:20

    Ваш сайт — говно!

  • Дмитрий

    Ответить 17.10.2014 02:21

    Мар, пшёл отсюда. Очень нужная инфа.

  • Fara

    Ответить 24.11.2015 02:21

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

Оставить комментарий