1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
uses crt; const nmax=100; type mas=array[1..nmax] of integer; procedure Vvod(var v:mas;var x:byte); var i:byte; begin repeat write('Размер массива ='); readln(x); until x in [1..nmax]; writeln('Введите ',x,' элементов массива:'); for i:=1 to x do begin write('el[',i,']='); readln(v[i]); end; write('Нажмите Enter...'); readln; end; procedure Vyvod(var v:mas;x:byte); var i:byte; begin for i:=1 to x do write(v[i],' '); writeln; writeln; write('Нажмите Enter...'); readln; end; procedure PervOtr(v:mas;x:byte; var p:integer;var i1:byte); var i:byte; begin i1:=0; for i:=x downto 1 do if v[i]<0 then begin p:=v[i]; i1:=i; end; if i1=0 then writeln('В масиве нет отрицательных элементов') else writeln('Первый отрицательный элемент=',p,' его номер=',i1); write('Нажмите Enter...'); readln; end; procedure Summa(v:mas;x:byte;var sm:integer); var i:byte; begin sm:=0; for i:=1 to x do if v[i]<0 then sm:=sm+v[i]; writeln('Сумма отрицательных=',sm); write('Нажмите Enter...'); readln; end; procedure Zamena(var v:mas;x:byte;sm:integer;i1:byte); var i:byte; begin for i:=1 to i1-1 do v[i]:=sm; Vyvod(v,x); end; var a:mas; n,ip:byte; p,sm:integer; c:char; begin clrscr; repeat clrscr; writeln('Выберите действие:'); writeln('1-ввод массива'); writeln('2-вывод массива'); writeln('3-первый отрицательный элемент'); writeln('4-сумма отрицательных'); writeln('5-замена элементов до первого отрицательного суммой'); writeln('другое - выход'); readln(c); case c of '1':Vvod(a,n); '2':begin writeln('Исходный массив:'); Vyvod(a,n); end; '3':PervOtr(a,n,p,ip); '4':Summa(a,n,sm); '5':begin writeln('Массив после замены элементов:'); Zamena(a,n,sm,ip); end; else exit; end; until not(c in ['1'..'5']); 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;
Вы рассмотрели алгоритмы на поиск и выборку элементов в массиве.
На следующем уроке продолжим знакомиться с алгоритмами обработки одномерных массивов.
Напишем программу, которая определяет наличие в массиве отрицательных чисел.
Определение наличия в массиве отрицательных чисел.
program massiv8; 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]:= -100+random (201); write (A[i]:5) end; writeln; k:=0; for i:=1 to N do if a[i] <0 then="" li=""> inc (k); if k>0 then begin writeln ('В массиве есть отрицательные элементы'); writeln ('Количество отрицательных элементов = ',k:5); end else writeln ('В массиве нет отрицательных элементов'); readln end.
В строке №7 записываем переменную для хранения количества отрицательных элементов.
Строка №13-№14 генерируем случайные числа и выводи их на экран.
В строке №17 присваиваем «K» первоначальное значение равное 0.
В строке №19 записываем условие: если значение элемента массива (т.е. если сгенерированное число) меньше 0, тогда увеличиваем переменную «K» на единицу (строка №20).
В строке №21 записываем условие: если K>0 (т.е. если количество отрицательных чисел больше 0), тогда выводим на экран 2 сообщения (строка №23 и №24). В обратном случае (строка №26), выводим другое сообщение (строка №27).
Предыдущая статья : Подсчет количества четных элементов в массиве.
Оглавление : Уроки Паскаль. Массивы.
Следующая статья : Нахождение номера отрицательного элемента в массиве.
Поиск элемента в массиве паскальКомментарии : 0 Просмотры : 18224
Мы знаем , что массив содержит в себе упорядоченные элементы данных , которые имеют свои значения и адреса. Во многих задачах нам потребуется обрабатывать подобные массивы. Например : ( поиск наибольшего элемента , наименьшего элемента и т.п ). Алгоритм поиска элемента в массиве мы разберем в данном уроке. Поиск максимального элемента в массивеЧтобы разобраться в том , как осуществляется поиск элемента в массиве паскаль , мы разберем такую задачу : Условие : С клавиатуры вводятся 5 целых чисел , требуется найти наибольший элемент ( наибольшее число ) и вывести его на экран. Решение : Код program mypascal; for i:= 1 to 5 do max:= a[1]; for i:= 2 to 5 do writeln(max); end. Разбор : В блоке var объявляем массив «а». Диапазон индексов от 1 до 5 , так как максимальное количество введенных чисел = 5 ( исходя из условия задачи ). Тип переменных integer ( вводятся целые числа ). Также нам понадобятся ещё две переменные «i» и «max». Переменная i будет играть роль счетчика для цикла , а переменная max будет хранить в себе максимальное значение элемента в массиве. В начале программы создаем цикл , который будет заносить значения вводимые с клавиатуры в наш массив. Далее присваиваем переменной max значения первого элемента массива. Возможно у вас возникает вопрос для чего это делается ? ведь первый элемент массива может и не быть наибольшим , более того , он может быть наименьшим. Это делается для того , чтобы иметь «точку отправления» , с которой мы будем сравнивать все остальные элементы в массиве. В следующем цикле мы будем проверять все элементы в массиве ( из условия 5 ). Проверять нужно все элементы массива , так как мы не знаем где находится наибольший. Но начинать мы будем со 2 , так как первый элемент уже занесен в максимум и сравнивать одинаковые числа не имеет смысла. Представим , что мы заполнили наш массив так : 4 17 -5 0 8 , тогда переменная max = 4 ( так как a[1] = 4 ). Второй элемент массива больше переменной max , поэтому max присваивается значение 17. В конце программы выводим max на экран ( 17 ). Поиск минимального элемента в массивеУсловие : С клавиатуры вводятся 5 целых чисел , требуется найти наименьший элемент ( наименьшее число ) и вывести его на экран. Решение : Код program mypascal; for i:= 1 to 5 do min:= a[1]; for i:= 2 to 5 do writeln(min); end. алгоритм поиска минимального элемента массива почти полностью аналогичен алгоритму поиска максимального. Отличие заключается только в условии внутри второго цикла. Поиск отрицательного элемента массиваУсловие : С клавиатуры вводятся 5 целых чисел , требуется найти первый отрицательный элемент и вывести его на экран. Если отрицательных элементов нет , то ничего не выводить. Решение : Код program mypascal; for i:= 1 to 5 do for i:= 1 to 5 do end. Разбор : В данной задаче мы будем сравнивать элементы массива с 0. Если элемент меньше 0 ( отрицательный ) , то выводим его на экран. Главное заметить , что нам нужен только первый отрицательный элемент ( выводить остальные не надо ) , поэтому после нахождения мы будем выходить из массива командой break.
Комментарии : 0 Просмотры : 18224
|
НавигацияЛичный кабинетПоискПопулярныеОбсуждаемыеСкачать паскальRSS лента
Подпишитесь на нашу ленту новостей rss и вы всегда сможете быть в курсе обновлений на нашем сайте. Решение задач
Если вас интересует решение какой-либо задачи , то вы можете опубликовать Опубликовать на сайте Опубликовать на форуме Опрос |
Program print; Uses crt; Const n=5; Var a: array[1..n] of integer; i,null,s:integer; Begin s:=0; Writeln('Введите элементы массива:'); For i:=1 to n do begin Readln(a[i]); end; ClrScr; Writeln('Элементы вашего массива:'); For i:=1 to n do Writeln('a[',i,'] = ' ,a[i]); Writeln('<br>'); Writeln; Writeln('Номера отрицательных элементов:'); For i:=1 to n do IF a[i]<0 then begin null:=i; s:=s+1; Writeln(i); end; Writeln('Всего отрицательных элементов: ' ,s); end.