Сообщение от EzCoding
Ну если убрать N- будет норм.
да и при N будет нормально, ошибки не будет, просто на экран выведется мусор, переменная то не инициализирована
Сообщение от EzCoding
Не понимаю зачем вы делаете проверку i>-1 если можно проверять i>=0;
этот код выполнит одно и тоже но при записи i>=0 возможен вариант что будут две проверки на больше и на равно
неизвестно как компилятор откомпилирует, оптимизирует или нет, на каком камне это будет исполнятся
а так я просто показал еще один путь решения
не люблю мыслить шаблонно
Сообщение от EzCoding
А если выводить вне цикла — лучше иметь счетчик отдельно и отдельно переменную вывода, счетчик может понадобится еще для каких то подзадач.
так если он не нужен снаружи объявляй его в цикле
да и счетчик это не приговор
можешь в одном цикле объявить i а в другом ii
почитай Криса Касперски «Техника отладки программ без исходных кодов» «Основы хакерства» и другие книги
и поймешь что получается в исполняемом коде, хороший оптимизатор может так перелопатить твою программу, что её никто не узнает
Сообщение от Andrey027
Помогите найти ошибку.
одну
Сообщение от Andrey027
Microsoft visual C++ 6.0
Сообщение от Andrey027
double a[5],
Сообщение от Andrey027
cout<<«Vvedite razmer massiva»;
зачем? он итак известен 5
а что будет, если я введу100
Сообщение от Andrey027
cout<<«nVvedite massiv:n»;
cin>>a[n];
выход за пределы массива
и где ввод всех элементов массива?
Сообщение от Andrey027
for(i=0;i<n;i++)
{
cout<<«nMassiva:n»<<a[i];
p*=a[i];
k++;
}
и где проверка на отрицательный элемент?
k будет равно n
Урок 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;
Вы рассмотрели алгоритмы на поиск и выборку элементов в массиве.
На следующем уроке продолжим знакомиться с алгоритмами обработки одномерных массивов.
const N = 13; var c: Array[1..N] Of Integer; i, id: 0..N; begin id := 0; for i := 1 to N do begin Write('c[', i, ']='); ReadLn(c[i]); if (c[i] < 0) then id := i; end; if (id > 0) then WriteLn('Hомер последнего отрицательного элемента ', id) else WriteLn('Не найдено отрицательных чисел!'); end.
Если идти циклом по строкам сверху вниз, то нужно перебрать все значения:
Sub n12()
Dim i As Long, n As Long
For i = 1 To 8
If Cells(i, 1).Value < 0 Then n = i
Next i
If n > 0 Then MsgBox ("Значение = " & Cells(n, 1).Value & ", номер = " & n), 64, "РЕЗУЛЬТАТ"
End Sub
Но если цикл «развернуть», диапазон просматривается только до первого отрицательнного значения:
Sub n12()
Dim i As Long
For i = 8 To 1 Step -1
If Cells(i, 1).Value < 0 Then Exit For
Next i
If i > 0 Then MsgBox ("Значение = " & Cells(i, 1).Value & ", номер = " & i), 64, "РЕЗУЛЬТАТ"
End Sub
Если есть желание, можно добавить сообщение о том, что отрицательные не найдены.
Пример 1
Задача. Дан целочисленный одномерный
массив, состоящий из n элементов. Найти сумму и произведение нечетных элементов,
кратных 3.
Ход решения:
Введем обозначения: n –
количество элементов в массиве; А – имя массива; i – индекс элемента массива;
Ai – i-й элемент массива A; s – сумма нечетных элементов массива, кратных
3; p – произведение нечетных элементов массива, кратных 3.
Входные
данные: n, A.
Выходные
данные: s, p.
Первоначально сумма искомых
элементов равна нулю: не просуммировано ни одно слагаемое, то есть s:=0. Далее,
используя любой оператор цикла, просматриваем весь массив от первого и до
последнего элемента. И если при этом элемент массива нечетный и кратен 3, то к
уже накопленной сумме добавляется очередное слагаемое, т.е. s:= s + A[i]. Здесь
слева и справа от знака присваивания записано имя одной и той же переменной s,
именно это обеспечивает постепенное накопление суммы: s справа – уже
вычисленное известное значение суммы, s — ее новое, вычисляемое значение.
При просмотре массива можно
сразу вычислить и произведение элементов массива, удовлетворяющих заданному
условию. Произведение вычисляется с помощью оператора p:=p*A[i]. При этом p
справа и p слева имеют разные значения: p справа – уже известное, вычисленное
ранее значение произведения, p слева – новое, вычисляемое его значение.
Первоначально искомое произведение равно единице, т.е. p:=1.
При решении этой задачи
можно использовать любой из видов циклов.
Блок-схема цикл с параметром: |
Для решения используется цикл с параметром: |
Блок-схема цикл с предусловием: |
Для решения используется цикл с предусловием: Program Primer;
|
Пример 2
Задача. Дан массив целых чисел. Найти
количество тех элементов, значения которых положительны и не превосходят заданного
натурального числа А.
Ход решения:
Введем обозначения: n
– количество элементов в массиве; X – имя массива; i – индекс
элемента массива; Xi – i-й элемент массива X; А – заданное число; k –
количество элементов, значения которых положительны и не превосходят заданного
числа А.
Входные данные: n, X,
A.
Выходные данные: k.
Вводим с клавиатуры
значение числа А. Количество элементов, значения которых положительны и не
превосходят заданного числа А, вначале полагаем равным нулю, то есть k:=0. Если
очередной элемент массива положителен и не превосходят заданного числа A, то
количество таких элементов нужно увеличить на единицу, то есть k:=k + 1. Таким
образом, обрабатываются все элементы массива.
При решении этой задачи можно
использовать любой из видов циклов.
Блок-схема:
|
Для решения используется цикл с параметром: Program Primer; Var X: Array[1..20] Of Integer; i, n, k, A: Integer; Begin Write (‘n=’); Readln (n); For i:=1 To n Do Readln (X[i]); {ввод массива} Write (‘A=’); Readln (A); k:= 0; For i:=1 To n Do {обработка массива} If (X[i] >0) and (X[i] <= A) Then k:=k + 1; Writeln (‘k=’, k); Readln End. |
Пример
3
Задача. Дан одномерный целочисленный массив, состоящий из n элементов. Найти номера четных элементов,
стоящих на нечетных местах.
Ход решения:
Введем обозначения: n –
количество элементов в массиве; X – имя массива; i – индекс элемента массива;
Xi – i-й элемент массива Х.
Входные данные: n, X.
Выходные данные: i.
Необходимо просмотреть весь
массив. Если просматриваемый элемент является четным, а его порядковый номер –
нечетный, то вывести его номер. При решении этой задачи можно использовать
любой из видов циклов.
Блок-схема:
|
Для решения используется цикл с параметром: Program Primer; |
Пример 4
Задача. Дан одномерный целочисленный массив, состоящий из n элементов.Найти номер последнего
отрицательного элемента массива.
Ход
решения:
Введем обозначения: n – количество элементов в массиве; А – имя массива; i –
индекс элемента массива; Ai – i-й элемент массива A; m – номер последнего
отрицательного элемента массива.
Входные данные: n, A.
Выходные данные: m.
Последний отрицательный
элемент массива – это первый отрицательный элемент, который встретится при
просмотре массива с конца. Если очередной элемент не является отрицательным, то
нужно уменьшать значение текущего индекса (i:=i-1), пока он не станет меньше
номера первого элемента или не будет найден отрицательный элемент. Переменная m
получает значение i (номер отрицательного элемента), т.е. m := i. Если в
массиве нет отрицательного элемента, то значение переменной m остается равным
нулю.
Блок-схема:
|
Для решения используется цикл с параметром: Program |
Задачи
1. Дан целочисленный одномерный массив, состоящий из n
элементов. Найти сумму и произведение всех элементов массива.
2. Дан целочисленный одномерный массив, состоящий из n
элементов. Найти сумму и произведение четных элементов.
3. Дан
целочисленный одномерный массив, состоящий из n элементов. Найти среднее
арифметическое всех элементов массива.
4. Дан целочисленный
одномерный массив, состоящий из n элементов. Выяснить, какое число встречается
раньше — положительное или отрицательное.
5. Дан одномерный
массив, состоящий из n действительных чисел. Выяснить, является ли
последовательность возрастающей или убывающей.
6. Дан целочисленный одномерный массив, состоящий из n
элементов. Найти сумму и произведение элементов, кратных 3 и 5.
7. Дан целочисленный
одномерный массив, состоящий из n элементов. Вывести его элементы, индексы
которых являются степенями двойки (1, 2, 4, 8, 16, …).
8. Дан массив целых чисел. Найти количество отрицательных
элементов, больше -9.
9. Дан целочисленный одномерный массив, состоящий из n
элементов. Найти количество элементов кратных 7.
10. Дан целочисленный
одномерный массив, состоящий из n элементов. Вывести на экран элементы, которые
являются квадратами какого-либо числа.
11. Дан одномерный
целочисленный массив, состоящий из n элементов. Найти номера нечетных
элементов, стоящих на четных местах.
12. Дан целочисленный
одномерный массив, состоящий из n элементов. Найти максимум и минимум. Поменять
их местами.
13. Дан целочисленный
одномерный массив, состоящий из n элементов. Заменить все элементы на их
квадраты.
14. Дан целочисленный
одномерный массив, состоящий из n элементов. Заменить все элементы на их
противоположные значения.
15. Дан целочисленный
одномерный массив, состоящий из n элементов. Поменять местами первый и
последний элементы.
16. Дан одномерный
массив, состоящий из n действительных чисел. Сформировать новый массив,
состоящий из отрицательных элементов.
17. Дан целочисленный
одномерный массив, состоящий из n элементов. Вывести на экран те элементы, у
которых остаток от деления на m равен k.
18. Вводятся
результаты контрольной работы 10 учащихся. Определите число неудовлетворительных,
удовлетворительных, хороших, отличных оценок. Вывести среднюю оценку,
полученную учащимися за контрольную работу.
19. Ввести оценки N
учеников по K предметам. Определить и вывести на экран количество учеников, не
получивших ни одной «5».
20. В группе учится N
студентов, студенты получили по четыре отметки за экзамен. Определить
количество неуспевающих студентов и средний балл группы.
21. В одномерном
массиве размещены: в первых элементах — значения аргумента, в следующих —
соответствующие им значения функции. Напечатать элементы этого массива в виде
двух параллельных столбцов (аргумент и значения функции).
22. Дан целочисленный
одномерный массив, состоящий из n элементов. Вычислить сумму чисел,
порядковые номера которых являются числами фибоначчи.
23. Сформировать
массив простых множителей заданного числа.
24. В одномерном
массиве с четным количеством элементов (2n) находятся координаты n точек
плоскости. Они располагаются в следующем порядке: х1, у1, х2, у2, х3, у3 и т.д.
Найти номера наиболее и наименее удаленных друг от друга точек.
Упражнение «Программирование одномерных массивов»
1. Дан фрагмент программы,
обрабатывающий массив А из 10 элементов:
n := 10;
for i:=1 tо n do A[i] := i;
j := 1;
for i:=1 tо n-1 do
if A[i] < A[i+1] then j := j + 1;
Чему будет равно значение переменной j после выполнения этого алгоритма?
а) 1 б)2 в)10 г)11
keruch07 0 / 0 / 0 Регистрация: 10.10.2016 Сообщений: 2 |
||||
1 |
||||
Найти номер последнего отрицательного элемента массива11.10.2016, 08:52. Показов 12504. Ответов 3 Метки нет (Все метки)
Дан массив С(13).Найти номер последнего отрицательного элемента массива. Как раз не могу найти номер последнего отрицательного элемента — правильно не выдает.
я написал, но номер последнего отрицательного элемента не выдает. может кто поможет исправить ошибку! Спасибо!
__________________ 0 |
Kapytan 133 / 148 / 64 Регистрация: 27.06.2013 Сообщений: 535 |
||||
11.10.2016, 09:56 |
2 |
|||
Решение
0 |
JokeR.BY CAPITAL OF ROCK! 1281 / 708 / 982 Регистрация: 03.03.2010 Сообщений: 2,286 |
||||
11.10.2016, 12:15 |
3 |
|||
РешениеKapytan, а если нет отрицательных?
0 |
0 / 0 / 0 Регистрация: 10.10.2016 Сообщений: 2 |
|
11.10.2016, 18:06 [ТС] |
4 |
Спасибо большое друзья! Вы мне очень помогли! Я очень рад, что есть добрые люди! 0 |
Урок 23. Поиск элемента в массиве
Просмотров 2.8к. Обновлено 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;
Вы рассмотрели алгоритмы на поиск и выборку элементов в массиве.
На следующем уроке продолжим знакомиться с алгоритмами обработки одномерных массивов.
Напишем программу, которая определяет номер отрицательного элемента в массиве.
Нахождение номера отрицательного элемента в массиве.
program massiv9; uses crt; const N=10; type x=array [1..N] of integer; var a:x; i:integer; k:integer; begin clrscr; randomize; for i:=1 to N do begin a[i]:= -10+random (91); write (A[i]:4) end; writeln; k:=0; for i:=1 to N do if a[i] <0 then begin k:=I end; if k>0 then writeln (‘Индекс отрицательного элемента = ’,k) else writeln (‘В массиве нет отрицательных элементов'); readln end.
В строке №7 мы записали переменную для хранения индекса отрицательного элемента.
В строке №19 мы задаем условие, при котором перебираются все 10 сгенерированных чисел и среди них ищется отрицательный, и если отрицательное число находится, то его индекс (номер) заносится в переменную K (строка №21).
В строке №23 записывается условие: если переменная «K» больше 0 (т.е. есть отрицательные элементы), то на экран выводится сообщение (строка №24). В обратном случае (если нет отрицательных элементов, и «K» так и останется равным 0), выведется сообщение (строка №26)
Из всех сгенерированных чисел у нас 2 числа отрицательные. Так как цикл начинался с первого элемента и закончился на 10-ом элементе, у нас выводится номер последнего найденного отрицательного числа (т.к. именно этот номер последним был записан в переменную «K»). Если бы нам нужно было найти номер первого отрицательного числа, то мы бы заменили строку №16 (for i:=1 to N do) на такую строку: for k:=N downto 1 do (т.е. перебирали бы элементы с конца).
Предыдущая статья : Определение наличия в массиве отрицательных чисел.
Оглавление : Уроки Паскаль.
Следующая статья : Двумерные массивы в Pascal.
Найти
номер последнего отрицательного элемента
массива.
Решение
Последний
отрицательный
− это
первый отрицательный элемент, который
встретится при просмотре массива с
конца. Если очередной элемент не является
отрицательным, то нужно уменьшать
значение текущего индекса, пока он
не станет меньше номера первого элемента
или не будет найден отрицательный
элемент. Таким образом, можно
модифицировать предыдущую функцию.
Но поскольку надо найти номер элемента,
тип результата будет целым.
Договоримся,
что если в массиве нет отрицательного
элемента, то значение функции будет
равно
0.
Program
Example_96;
Function
Control2 (m: myarray):
Integer;
Var
i: Integer;
Begin
i:=n;
While
(i>=1) And (m[i]>=0) Do Dec(i);
Control2:=i;
End.
§37. Методы работы с элементами одномерного массива
Рассмотрим
еще несколько типов задач.
Изменение
значений некоторых элементов
Пример
1
Заменить
отрицательные элементы массива на их
абсолютные величины.
Решение
Для
решения задачи опишем процедуру. Ей
будем передавать один параметр
− массив,
который и будет результатом, при этом
значения некоторых элементов могут
быть изменены.
Program
Example_97;
Procedure
Substitution1 (Var
m: myarray);
Var
i: Integer;
Begin
For
i:=1 To n Do
If m[i]<0
Then m[i]:=-m[i];
End;
Пример
2
Прибавить
к каждому элементу массива число
25.
Решение
Преобразуем
предыдущую процедуру.
Program
Example_98;
Procedure
Substitution2 (Var m: myarray);
Var
i: Integer;
Begin
For
i:=1 To n Do m[i]:=m[i]+25;
End;
Пример
3
Если
очередной элемент массива четный, то
прибавить к нему первый, если нечетный
− прибавить
последний. Первый и последний элементы
не изменять.
Решение
Просмотрим
все элементы массива, кроме первого и
последнего, и если очередной элемент
четный, то есть делится на
2
без остатка, то увеличим его на значение
первого элемента, иначе
− увеличим
его на значение последнего элемента.
Program
Example_99;
Procedure
Substitution3 (Var m: myarray);
Var
i: Integer;
Begin
For
i:=2 To n-1 Do
If
m[i] Mod
2=0
Then m[i]:=m[i]+m[1]
Else
m[i]:=m[i]+m[n];
End;
Создание массива
Рассмотрим
два примера.
Пример 1
Даны
два одномерных массива одинаковой
размерности. Получить третий массив
такой же размерности, каждый элемент
которого равен сумме соответствующих
элементов данных массивов.
Решение
Пусть
даны два массива
− А
и В,
состоящие из пяти элементов. Получим
из них массив С,
тоже состоящий из пяти элементов, причем
первый элемент этого массива равен
сумме первых элементов массивов А
и В,
второй
− сумме
вторых элементов данных массивов −
и так далее.
i |
1 |
2 |
3 |
4 |
5 |
A |
14 |
2 |
7 |
8 |
9 |
B |
3 |
6 |
5 |
12 |
4 |
C |
17 |
8 |
12 |
20 |
13 |
Для
решения этой задачи опишем процедуру,
которой передаются три параметра. Первые
два
− это два
исходных одномерных массива, третий
− это
одномерный массив той же размерности,
который является результатом и заполняется
по указанному правилу.
Program
Example_100;
Procedure
Sum_Ar(a, b: myarray;
Var
с:
myarray);
Var
i: Integer;
Begin
For
i:=1 To n Do c[i]:=a[i]+b[i];
End;
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #