0 / 0 / 1 Регистрация: 01.06.2012 Сообщений: 15 |
|
1 |
|
Найти порядковый номер первого положительного элемента массива18.12.2012, 17:38. Показов 3059. Ответов 1
Необходимо найти порядковый номер первого положительного элемента одномерного массива с помощью 3 разных циклов.
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
18.12.2012, 17:38 |
1 |
v.a.l.i.d 424 / 389 / 113 Регистрация: 21.09.2012 Сообщений: 913 |
||||
18.12.2012, 19:19 |
2 |
|||
Сообщение было отмечено dragonborn как решение Решение
0 |
Ищем индекс первого положительного элемента: enumerate
выдаёт пары (индекс, значение), if
из них отбирает положительные значения, next
отбирает только первый индекс.
x = [-3, -5, 3, 4, -4, 2, -2, -6, 5]
print(next(i for i, v in enumerate(x) if v > 0))
# ^ ^ ------------------------ --------
# | | ^ ^
# | | | отбираем только положительные значения
# | | |
# | | перебираем пары (индекс, значение)
# | |
# | значение не нужно, возвращаем только индекс
# |
# все индексы не нужны, только первый
Результат:
@>>> x = [-3, -5, 3, 4, -4, 2, -2, -6, 5]
@>>> print(*enumerate(x))
(0, -3) (1, -5) (2, 3) (3, 4) (4, -4) (5, 2) (6, -2) (7, -6) (8, 5)
@>>> print(*((i, v) for i, v in enumerate(x)))
(0, -3) (1, -5) (2, 3) (3, 4) (4, -4) (5, 2) (6, -2) (7, -6) (8, 5)
@>>> print(*((i, v) for i, v in enumerate(x) if v > 0))
(2, 3) (3, 4) (5, 2) (8, 5)
@>>> print(*(i for i, v in enumerate(x) if v > 0))
2 3 5 8
@>>> print(next(i for i, v in enumerate(x) if v > 0))
2
Примеры задач на массивы
Рассмотрим задачи различных уровней сложности на одномерные массивы.
Рассмотрим задачи различных уровней сложности на одномерные массивы.
Элементы массива, которые больше предыдущего
Элементы массива, которые больше предыдущего
Вывести элементы числового массива, которые больше, чем элементы, стоящие перед ними.
Например, дан массив [3, 9, 8, 4, 5, 1]. Следует вывести числа 9 и 5, так как перед ними стоят соответственно числа 3 и 4, которые меньше их.
Для решения задачи нужно каждый элемент сравнить с последующим или предыдущим. Если перебор идет с первого элемента, то должен продолжаться до предпоследнего. В таком случае выводятся элементы с индексом i+1 (что реализовано в коде ниже) в случае совпадения условия. Если перебор идет со второго элемента до последнего, то выводится элемент под индексом i.
const
N = 20;
var
a: array[1..N] of integer;
i: byte;
begin
randomize;
for i:=1 to N do begin
a[i] := random(100);
write(a[i]:4);
end;
writeln;
writeln(‘Элементы больше предыдущего: ‘);
for i:=1 to N—1 do
if a[i] < a[i+1] then
write(a[i+1]:4);
writeln;
end.
Разделить элементы массива на максимальный
Разделить элементы массива на максимальный
Все элементы массива поделить на значение наибольшего элемента этого массива.
Поменять местами минимальный и максимальный элементы массива
Задача состоит из двух подзадач:
-
Поиск максимума.
-
Деление на него элементов массива.
const
M = 10;
var
C: array[1..M] of word;
maxC: word;
i: byte;
begin
randomize;
maxC := 0;
write(‘Исходный массив: ‘);
for i := 1 to M do begin
C[i] := random(1000);
write (C[i]:4);
if maxC < C[i] then
maxC := C[i];
end;
writeln;
writeln(‘Максимум: ‘, maxC);
write(‘Частные: ‘);
for i := 1 to M do begin
write (C[i]/maxC:6:2);
end;
writeln;
end.
Первый положительный элемент массива
Первый положительный элемент массива
Найти номер и значение первого положительного элемента массива.
Данная задача решается просто, если использовать оператор break. Массив перебирается в цикле. Каждый элемент проверяется на условие «больше нуля». Как только оно будет выполнено, элемент следует вывести на экран, а цикл прервать.
const N = 20;
var
arr: array[1..N] of integer;
i: byte;
begin
randomize;
for i:=1 to N do begin
arr[i] := random(100) — 75;
write(arr[i]:4);
end;
writeln;
for i:=1 to N do
if arr[i] > 0 then begin
writeln(i, ‘ ‘, arr[i]);
break;
end;
end.
Есть и другие задачи на массивы самых разнообразных уровней сложности.
Есть и другие задачи на массивы самых разнообразных уровней сложности.
Подробнее о них можно узнать в этом видеоролике.
Подробнее о них можно узнать в этом видеоролике.
Найти номер первого положительного элемента массива в паскале.
На этой странице вы найдете ответ на вопрос Найти номер первого положительного элемента массива в паскале?. Вопрос
соответствует категории Информатика и уровню подготовки учащихся 10 — 11 классов классов. Если ответ полностью не удовлетворяет критериям поиска, ниже можно
ознакомиться с вариантами ответов других посетителей страницы или обсудить с
ними интересующую тему. Здесь также можно воспользоваться «умным поиском»,
который покажет аналогичные вопросы в этой категории. Если ни один из
предложенных ответов не подходит, попробуйте самостоятельно сформулировать
вопрос иначе, нажав кнопку вверху страницы.
Большинство задач на обработку массива сводятся к комбинированию следующих алгоритмов:
- Заполнение
- Заполнение случайными числами.
- Использование в формуле заполнения индекса элемента.
- Использование рекуррентного соотношения.
- Анализ
- Задачи подсчета — нахождение суммы или количества элементов таблицы, обладающих заданным свойством.
- Нахождение минимального или максимального среди элементов массива.
- Задачи, в которых требуется найти какие-то характеристики массива.
- Поиск
- Перестановка
- Задачи, в которых требуется поменять местами элементы массива.
- Задачи циклической перестановки.
- Задачи сортировки элементов массива.
- Некоторые свойства элементов массива
- Задачи поиска
Основной вопрос задач поиска — где в массиве находится элемент, обладающий нужным свойством. При этом свойство должно быть абсолютным: для определения пригодности элемента достаточно знать только этот элемент. Большинство задач поиска сводится к задаче — найти в массиве элемент с заданным значением.
Некоторые свойства элементов массива
Свойство |
Запись свойства |
четные | a[i] mod 2 = 0 |
нечетные |
a[i] mod 2 <> 0 |
кратные k |
a[i] mod k = 0 |
некратные k |
a[i] mod k <> 0 |
на четных местах |
i mod 2 = 0 |
запись числа заканчивается на цифру k | a[i] mod 10=k |
на нечетных местах |
i mod 2 <> 0 |
положительные |
a[i] > 0 |
неотрицательные |
a[i] >= 0 |
меньше х1 или больше х2 | (a [i]<x1) or (a [i]>x2) |
в интервале (х1; х2) |
(a [i]>x1) and (a [i]<x2) |
Задача 1. Найти номер первого по счету положительного элемента массива.
Использование цикла с параметром (.pas) |
|
Исходные данные: массивa, содержащий n вещественных чисел. |
|
program z; const n=30; type mas= array [1..n] of real; var a: mas; i, k: integer; begin k:=0; for i:=1 to n do read (a[i]); for i:=n downto 1 do if a[i]>0 then k:=i; if k=0 then writeln (‘положительных элементов нет’) else writeln(k); end. |
|
Использование цикла с постусловием (.pas) |
|
Исходные данные: массивa, содержащий n вещественных чисел. Результат: k — номер первого положительного элемента массива . Метод решения: — просматриваем массив, начиная с первого элемента, если находим положительный элемент, то переменной k присваиваем номер данного положительного элемента; -работа цикла заканчивается, если значение k изменилось или если просмотрен весь массив; — если значение k осталось равным 0, то положительных элементов в данном массиве нет. |
|
program z; const n=5; type mas= array [1..n] of real; var a: mas; i,k: integer; begin for i:=1 to n do read (a[i]); k:=0; i:=0; repeat i:=i+1; if a[i]>0 then k:=i; until (k>0) or (i=n); if k=0 then writeln (‘положительных элементов нет’) else writeln(k); end. |
|
Использование цикла с предусловием (.pas) |
|
Исходные данные: массивa, содержащий n вещественных чисел. Результат: k — номер первого положительного элемента массива . Метод решения: — просматриваем массив: если текущий элемент неположительный и i < n, то значение переменной i увеличиваем на 1, иначе если текущий элемент положительны, то переменной k присваиваем номер данного положительного элемента; — если значение k осталось равным 0, то положительных элементов в данном массиве нет. |
|
program z; const n=7; type mas= array [1..n] of real; var a: mas; i,k: integer; begin for i:=1 to n do read (a[i]); k:=0; i:=1; while (a[i]<=0) and (i<n) do i:=i+1; if a[i]>0 then k:=i; if k=0 then writeln (‘положительных элементов нет’) else writeln(k); end. |
Вопросы:
К началу страницы
№ |
Фрагмент программы |
Блок — схема |
1 |
Вычисление суммы всех элементов массива |
|
2 |
Вычисление среднего арифметического чётных элементов массива |
|
3 |
Найти произведение всех элементов массива |
|
4 |
Количество четных элементов массива |
|
5 |
Удвоить все положительные элементы массива, и поменять знак у остальных |
|
6 |
Перестановка всех элементов массива в обратном порядке |
|
7 |
Перестановка соседних элементов массива |
|
8 |
Обмен половин массива |
|
9 |
Проверить, есть ли в массиве четные числа |
|
10 |
Проверить, что массив упорядочен строго по возрастанию |
|
11 |
Поиск максимального элемента массива (границы изменения значений элементов массива неизвестны) |
|
12 |
Значения элементов массива принадлежат промежутку от -500 до 500. Найти максимальный элемент массива. |
|
13 |
Поиск количества элементов произвольного массива равных максимальному |
|
14 |
Найти номер максимального элемента массива, если он единственный, или количество максимальных элементов, если их несколько. |
|
15 | Поиск второго по величине максимального элемента массива max:=a[1]; max2:=a[2]; if max<max2 then begin max:=a[2]; max2:=a[1]; end; for i:=3 to n do if a[i]>max then begin max2:=max; max:=a[i]; end else if a[i]>max2 then max2:=a[i]; |
|
16 |
Поиск номера максимального элемента |
|
17 |
Значения элементов массива принадлежат диапазону от – 500 до 500. найти максимальный отрицательный элемент массива. Гарантируется, что отрицательные элементы есть. |
|
18 |
Номера двух элементов массива наименее отличающихся друг от друга |
|
19 |
Номера двух последовательных элементов массива наименее отличающихся друг от друга |
Задача 1 (..pas) Дан целочисленный массив из 30 элементов. Элементы могут принимать значения от 0 до 100 – баллы, полученные на ЕГЭ. Опишите на русском языке или на одном из языков программирования алгоритм, который подсчитывает и выводит средний балл учащихся, сдавших экзамен (получивших оценку более 20 баллов). Гарантируется, что хотя бы один ученик в классе успешно сдал экзамен. Исходные данные объявлены так, как показано ниже. Использовать другие переменные запрещается.
const N = 30;
var A: array[1..N] of integer;
i, x, y: integer;
s: real;
begin
for i:=1 to N do readln(A[i]);
…
end.
Задача 2 (..pas) Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 100 – баллы учащихся выпускного класса за итоговый тест по информатике. Для получения положительной оценки за тест требовалось набрать не менее 20 баллов. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит минимальный балл среди учащихся, получивших за тест положительную оценку. Известно, что в классе хотя бы один учащийся получил за тест положительную оценку. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
const N=30;
var a: array [1..N] of integer;
i, j, min: integer;
begin
for i:=1 to N do readln(a[i]);
…end.
Задача
3 (.pas) Дан массив, состоящий из 30 вещественных чисел. Вычислить сумму всех элементов. Массив вводится с клавиатуры.
а) Наберите программу или воспользуйтеть файлом .pas, заменив многоточие на необходимые команды:
Program z;
Const n=5;
type mas=array[1..n] of real;
var a: mas;
s: real;
i: integer;
begin
for i:=…….. to ……. do
begin
writeln (‘введите элемент массива’);
………………….;
S:=S+…….. ;
end;
writeln (‘ Сумма равна’,…….);
End.
б) запустите данную программу и посмотрите результат её работы.
Задача
4. Дан массив целых чисел.
а) каждый положительный элемент, заменить на его квадрат;
б) выяснить, верно ли, что максимальный элемент больше среднего арифметического на 5.
Задача
5 (.pas) Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от 0 до 1000. Опишите на русском языке или на одном из языков программирования алгоритм, позволяющий найти и вывести минимальное значение среди элементов массива, которые имеют чётное значение и не делятся на три. Гарантируется, что в исходном массиве есть хотя бы один элемент, значение которого чётно и не кратно трем. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но использовать все описанные переменные не обязательно.
const
N = 20;
var
a: array [1..N] of integer;
i, j, min: integer;
begin
for i := 1 to N do
readln(a[i]);
……….
end.