0 / 0 / 0 Регистрация: 16.12.2018 Сообщений: 45 |
|
1 |
|
В упорядоченном массиве определить номер элемента16.03.2019, 23:27. Показов 4659. Ответов 29
Петя перешёл в другую школу. На уроке физкультуры ему понадобилось определить своё место в строю. Помогите ему это сделать. Входные данные Примеры
0 |
431 / 361 / 130 Регистрация: 09.09.2011 Сообщений: 1,313 |
|
16.03.2019, 23:32 |
2 |
зачем упорядочивать массив, если он по условию задачи уже упорядочен? тут бинарный поиск, а с учетом отсутствия ограничений по времени – то пойдет и линейный, программируется в 4 строчки.
0 |
PascalProgram 0 / 0 / 0 Регистрация: 16.12.2018 Сообщений: 45 |
||||
17.03.2019, 15:24 [ТС] |
3 |
|||
При компиляции такого кода выдаёт Can’t evaluate constant expression.
0 |
ZX Spectrum-128 6805 / 4564 / 4817 Регистрация: 05.06.2014 Сообщений: 22,438 |
||||
17.03.2019, 19:26 |
4 |
|||
1 |
bormant Модератор 7534 / 4394 / 2785 Регистрация: 22.11.2013 Сообщений: 12,586 Записей в блоге: 1 |
||||||||
17.03.2019, 22:21 |
5 |
|||||||
Сообщение было отмечено ZX Spectrum-128 как решение Решение
writeln(‘Нет такого числа!’); разве нельзя встать после последнего в шеренге?
1 |
6805 / 4564 / 4817 Регистрация: 05.06.2014 Сообщений: 22,438 |
|
18.03.2019, 07:26 |
6 |
bormant, да, недодумал. Спасибо!
0 |
bormant Модератор 7534 / 4394 / 2785 Регистрация: 22.11.2013 Сообщений: 12,586 Записей в блоге: 1 |
||||||||
18.03.2019, 11:31 |
7 |
|||||||
А можно было попроще:
Добавлено через 26 минут
1 |
0 / 0 / 0 Регистрация: 16.12.2018 Сообщений: 45 |
|
18.03.2019, 16:34 [ТС] |
8 |
Спасибо, конечно, всем, но массив должен вводиться, а не быть постоянным.
0 |
Модератор 7534 / 4394 / 2785 Регистрация: 22.11.2013 Сообщений: 12,586 Записей в блоге: 1 |
|
18.03.2019, 16:59 |
9 |
массив должен вводиться, а не быть постоянным И что от этого поменяется? Допишите недостающий ввод массива.
0 |
0 / 0 / 0 Регистрация: 16.12.2018 Сообщений: 45 |
|
18.03.2019, 17:04 [ТС] |
10 |
Поменяется. Например, если вводить данные из примера, на выход пойдёт первый номер, а должен быть третий.
0 |
Модератор 7534 / 4394 / 2785 Регистрация: 22.11.2013 Сообщений: 12,586 Записей в блоге: 1 |
|
18.03.2019, 17:07 |
11 |
Если утверждаете, что изменение инициализированного массива на ввод значений приведет к изменению алгоритма, продемонстрируйте.
0 |
PascalProgram 0 / 0 / 0 Регистрация: 16.12.2018 Сообщений: 45 |
||||
18.03.2019, 17:12 [ТС] |
12 |
|||
Программа получает на ввод массив из элементов 165 163 160 160 157 157 155 154 и число 162. По условию, должно выводиться число 3. А выводится число 1. Как так?
0 |
Модератор 7534 / 4394 / 2785 Регистрация: 22.11.2013 Сообщений: 12,586 Записей в блоге: 1 |
|
18.03.2019, 17:49 |
13 |
Программа Какая программа? То, что выше, программой не является ввиду наличия синтаксических ошибок. Добавлено через 3 минуты
0 |
0 / 0 / 0 Регистрация: 16.12.2018 Сообщений: 45 |
|
18.03.2019, 18:05 [ТС] |
14 |
Ошибки нашёл и исправил. Но все равно проходит не все тесты.
0 |
Модератор 7534 / 4394 / 2785 Регистрация: 22.11.2013 Сообщений: 12,586 Записей в блоге: 1 |
|
18.03.2019, 18:12 |
15 |
Так там количество бывает явно больше 8. Добавлено через 2 минуты
0 |
0 / 0 / 0 Регистрация: 16.12.2018 Сообщений: 45 |
|
18.03.2019, 18:19 [ТС] |
16 |
Какое количество ни подставь – все равно проходит не все тесты.
0 |
Модератор 7534 / 4394 / 2785 Регистрация: 22.11.2013 Сообщений: 12,586 Записей в блоге: 1 |
|
18.03.2019, 18:22 |
17 |
Какое количество ни подставь Выходит, маловато подставляете А может дело-то не в количестве, а в том, как написан ввод данных?
Давайте посмотрим на то, как описан ввод…
0 |
0 / 0 / 0 Регистрация: 16.12.2018 Сообщений: 45 |
|
18.03.2019, 18:27 [ТС] |
18 |
Выходит, маловато подставляете Сотни хватит?)
А может дело-то не в количестве, а в том, как написан ввод данных? Я исправил ошибки, сказал же.
0 |
Модератор 7534 / 4394 / 2785 Регистрация: 22.11.2013 Сообщений: 12,586 Записей в блоге: 1 |
|
18.03.2019, 18:32 |
19 |
Я исправил ошибки, сказал же. Воля ваша, не хотите — как хотите. Нет кода — нечего и обсуждать. У вас всё правильно (но это неточно).
0 |
PascalProgram 0 / 0 / 0 Регистрация: 16.12.2018 Сообщений: 45 |
||||
18.03.2019, 18:42 [ТС] |
20 |
|||
0 |
НАЙТИ НОМЕР ЭЛЕМЕНТА ПАСКАЛЬ
12312312321312554
Мыслитель
(5332),
закрыт
2 года назад
Как найти номер элемента в паскале? Например минимального элемента. И как его вывести?
Alexandr
Мудрец
(11943)
2 года назад
const
N = 10;
var
A: array[1..N] of integer;
i: integer;
i_min: integer;
begin
randomize;
for i := 1 to N do
begin
A[i] := 1 + random(10);
write(A[i], ‘ ‘);
end;
i_min := 1;
for i := 1 to N do
if A[i] < A[i_min] then
i_min := i;
writeln(#10#13,’Index minimal”nogo elementa:’, i_min);
write(‘Nazhmite klavishu Enter dlya prodolzheniya…’);
readln;
end.
Урок 23. Поиск элемента в массиве
Просмотров 3.1к. Обновлено 23 ноября 2020
Урок из серии: «Язык программирования Паскаль»
На этом уроке рассмотрим алгоритмы поиска элемента в одномерном массиве. Эти алгоритмы очень похожи на обработку последовательностей (поиск, выборка и т.д.).
Отличие заключается в том, что в массиве одновременно доступны все его компоненты. Такой доступ называется параллельным.
Рассмотрим несколько примеров.
Пример 1. Найти номера четных элементов.
Решение.
Для нахождения четных элементов необходимо просмотреть весь массив, и если будут попадаться четные элементы, то нужно выводить их на экран. Напишем процедуру, которая принимает в качестве входного параметра массив и выводит на экран нужные элементы.
Procedure Solve(m : myarray); Var i: Integer; Begin For i:=1 To n Do If m[i] Mod 2 = 0 Then Write(i:5);{если элемент четный, то вывести на экран} End;
Пример 2. Есть ли отрицательный элемент в массиве?
Решение.
Для решения таких задач удобнее использовать циклы с условиями и составлять функции, результат которых имеет логический тип.
Начинаем с первого элемента (i = 1).
Пока не просмотрен последний (i<=n) и не найден отрицательный (m [i]>=0), будем переходить к следующему (inc (i)).
Таким образом, мы закончим просмотр в одном из двух случаев:
- первый — просмотрели все элементы и не нашли отрицательный, тогда i>n;
- второй — нашли нужный, при этом i<=n.
Напишем функцию, значение которой истина (True), если такой элемент есть, и ложь (False), если его нет.
Function Controll (m: myarray): Boolean; Var i : Integer; Begin i := 1; While (i<=n) And (m[i]>0) Do Inc(i); Control1:=(i<=n) End;
Пример 3. Найти номер последнего отрицательного элемента массива.
Решение.
Последний отрицательный — это первый отрицательный элемент, если начать просмотр с конца.
Если очередной элемент не является отрицательным, то нужно уменьшать значение текущего индекса, пока он не станет меньше номера первого элемента или не будет найден отрицательный элемент.
Таким образом, можно модифицировать предыдущую функцию. Но поскольку надо найти номер элемента, тип результата будем целым.
Договоримся, что если такого элемента нет, то значение функции будет равно 0.
Function Control2 (m: myarray): Integer; Var i : Integer; Begin i:=n; While (i>=1) And (m[i]>0) Do Des(i); If i<1 Then Control2:=0 Else Control2:=i; End;
Вы рассмотрели алгоритмы на поиск и выборку элементов в массиве.
На следующем уроке продолжим знакомиться с алгоритмами обработки одномерных массивов.
Дана задача
Составить программу, осуществляющую поиск элемента 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.
Минимум в некоторой последовательности чисел это наименьшее значение. Например, среди чисел последовательности 431, 85, 200, 125 минимумом является число 85. Если числа последовательности сохранить в массиве, то можно найти номер минимального элемента массива.
Сохраним числа в массиве: a[1]=431, a[2]=85, a[3]=200, a[4]=125.
Минимум хранится в ячейке с номером 2, значит номер минимального элемента это число 2.
В этой публикации приведем примеры программ поиска номера минимального элемента массива.
Будем считать, что в массиве хранятся целые числа, диапазон значений не известен.
Исходные данные: a – массив целых чисел
Выходные данные: min – минимальный элемент, kmin – номер минимального элемента массива
За начальное значение минимума min возьмем значение первого элемента, тогда за номер минимального элемента kmin возьмем номер 1.
Далее будем сравнивать каждый элемент массива со значением min, если a[k]<min
, то перезапишем значение min на значение a[k], а значение kmin на значение k.
Программа решения на языке Паскаль
var a:array[1..10] of integer;
k,min,kmin:integer;
begin
for k:=1 to 10 do
begin
read(a[k]);
end;
min:=a[1];
kmin:=1;
for k:=2 to 10 do
begin
if a[k]<min then
begin
min:=a[k];
kmin:=k;
end;
end;
writeln(‘Минимальный элемент ‘,min);
writeln(‘Номер минимального элемента массива ‘,kmin);
end.
Результат выполнения программы
Чтобы не вводить значения элементов массива с клавиатуры, можно воспользоваться датчиком случайных чисел.
Еще одна программа
Теперь не будем сохранять само минимальное значение, а будем пользоваться номером минимального элемента.
За номер минимального элемента kmin возьмем 1. Далее будем сравнивать a[k]<a[kmin]
, в случае истины, будем перезаписывать kmin на k.
Программа решения на языке Паскаль
var a:array[1..10] of integer;
k,min,kmin:integer;
begin
for k:=1 to 10 do
begin
read(a[k]);
end;
kmin:=1;
for k:=2 to 10 do
begin
if a[k]<a[kmin] then
begin
kmin:=k;
end;
end;
writeln(‘Минимальный элемент ‘,a[kmin]);
writeln(‘Номер минимального элемента массива ‘,kmin);
end.
Еще одна программа с применением методов последовательностей PascalABC.NET
a.min
– определяет минимальное значение в массиве
a.indexof(a.min)
– определяет номер элемента, равного минимальному
Массив описан как динамический (не указываются номера элементов, нумерация начинается с 0). Оператор setlength(a,10)
выделяет память под массив (десять ячеек).
var a:array of integer;
k:integer;
begin
setlength(a,10);
for k:=0 to 10-1 do
begin
read(a[k]);
end;
writeln(‘Минимальный элемент ‘,a.min);
writeln(‘Номер минимального элемента массива ‘,a.indexof(a.min));
end.
Как еще можно найти номер минимального элемента массива?
Предложите свои способы.
Читайте также: