Поиск элементов в массиве(Pascal)
Всем привет! есть задание Найти в массиве элементы, равные числу, заданному пользователем. Подсчитать их количество и вывести номер первого найденного элемента. Массив задается при помощи ввода с клавиатуры.
const count=10; var a,b, i: integer; m: array [1..count] of integer; begin writeln ('Ввод исходного массива: '); for i:=1 to count do begin write('Значение#', i, ':'); readln(m[i]); end; a:=0; b:=0 write('Введите число для поиска > '); readln(n); for i:=1 to count do if m[i]=n then begin if b=0 then a:=i; b:=b+1; end; if b=0 then writeln('Нет таких элементов в массиве?'> else begin writeln('Кол-во элементов массива, имеющих значение',n,'=',b:3); writeln('Первый элемент имеет номер',a:3); end end.
Но все равно почему-то выдает ошибку, что надо исправить?
Отслеживать
задан 18 дек 2020 в 23:35
Никита Пупкин Никита Пупкин
37 1 1 серебряный знак 6 6 бронзовых знаков
«почему-то выдает ошибку» — ??
– user176262
18 дек 2020 в 23:37
Ошибка то в чем заключается? Я не специалист в pascal (ниразу не притрагивался к нему), но где у вас инициализация n ?
18 дек 2020 в 23:43
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Ниже пример рабочего кода. Если хотите узнать в чем были ошибки, сравните коды.
const count=10; var a,b,i,n: integer; m: array [1..count] of integer; begin writeln ('Ввод исходного массива: '); for i:=1 to count do begin writeln('Значение# ', i, ': '); readln(m[i]); end; a:=0; b:=0; writeln('Введите число для поиска > '); readln(n); for i:=1 to count do if m[i]=n then begin if b=0 then a:=i; b:=b+1; end; if b=0 then writeln('Нет таких элементов в массиве') else begin writeln('Кол-во элементов массива, имеющих значение',n,'=',b:3); writeln('Первый элемент имеет номер',a:3); end end.
Весь прикол в том, что я человек, который ниразу не кодил на паскале, просто открыл онлайн компилятор, который сказал где ошибки). Добавил пару табуляций для понимая и нашел еще одну ошибку.
Поиск максимального элемента в массиве
Значения, составляющие массив, могут быть получены из разных источников: путем вызова функции random , ввода значений пользователем, считывания из файла. В программе ниже используется первый вариант.
В задачах подобного рода (поиск максиму или минимума) может быть поставлена цель, найти
- только индекс элемента,
- только значение или
- как индекс, так и значение.
В программе ниже используется последний вариант.
Удобно, когда при запуске программы весь массив выводился на экран. В этом случае пользователь может оценить правильность работы программы.
- В переменной max_num хранится текущее максимальное значение массива, а в max_index – его позиция (индекс).
- В программе можно выделить две части: заполнение массива числами с выводом их на экран (первый цикл for ) и непосредственно поиск максимума (второй цикл for ).
- Перед первым циклом запускается процедура randomize для того, чтобы при каждом запуске программы значения массива были разными.
- Изначально делается предположение, что первый элемент массива и есть максимум. Поэтому переменной max_index присваивается значение 1 (то есть индекс первого элемента массива), а max_num – непосредственно значение, хранящееся в первой ячейке массива.
- Начиная со второго элемента, каждое очередное значение массива сравнивается с текущим значением max_num . В случае, если текущее значение массива больше, чем хранящиеся в max_num , происходит новое присваивание обоим переменным текущего значения и индекса.
Программа на языке Паскаль:
const m = 20; var arr: array[1..m] of byte; max_num, max_index: byte; i: byte; begin randomize; for i := 1 to m do begin arr[i] := random(100); write (arr[i]:3); end; max_index := 1; max_num := arr[1]; for i := 2 to m do if arr[i] > max_num then begin max_index := i; max_num := arr[i]; end; writeln; writeln ('Max = ',max_num); writeln ('position: ', max_index); end.
Нахождение максимального элемента массива.
Напишем программу, которая вычисляем максимальный элемент в массиве.
Нахождение максимального элемента массива.
program massiv5; uses crt; const N=10; type x=array [1..N] of integer; var a:x; i:integer; max:integer; imax:integer; begin clrscr; randomize; for i:=1 to N do begin a[i]:= -50+random(101); write (A[i]:5) end; writeln; imax:=1; max:=A[1]; for i:=2 to N do if maxВ строке №7 записываем переменную для хранения величины максимального элемента.
В строке №8 записываем переменную для хранения индекса максимального элемента.
В строке №11 мы включаем функцию Randomize. Эта функция позволяет генерировать случайные числа в программе. В данном случае нам необходимо каждому элементу массива [1..N] (всего 10 элементов) присвоить какое-нибудь значение. В программе «massiv3» значения для всех элементов массива мы вводили с клавиатуры. В этой задаче мы ничего вводить не будем. Функция Randomize сама создаст значения для каждого элемента массива. В массиве у нас 10 элементов ([1..N], const N=10), соответственно будет сгенерировано 10 случайных чисел.
В строке №12 включаем цикл. Переменная «I» будет изменяться в цикле от 1 до «N»
В строке №14 очередному элементу массива мы присваиваем случайное число, которое лежит в диапазоне от – 50 до + 50. (Сначала пишется минимальное число – 50, затем знак +, затем слово RANDOM, затем в скобках указывается общее количество возможных чисел в диапазоне; в диапазоне от – 50 до + 50 получается 100 чисел + число 0, всего 101)
Строка №15. Если мы запустим программу на данном этапе, у нас выведется на экран 10 различных чисел со значением от – 50 до + 50.В строке №18 в переменную для хранения индекса (номера) максимального элемента мы записали число 1, т.е. будем считать, что первый элемент массива – максимальный.
В строке №19 в переменную для хранения величины максимального элемента записываем значение первого элемента массива (например, если первое сгенерированное число будет 13, то его и будем считать максимальным).
В строке №20 задаем цикл. В него мы не включаем 1-ый элемент. А затем, в строке №21 мы проверяем условие. Мы сравниваем все значения элементов массива (т.е. все сгенерированные числа) начиная со 2-го и до 10-го с 1 - ым числом. И если очередное число в массиве больше чем 1-ое число, то в переменную для хранения максимального числа записываем это очередное число (строка №23), а в переменную для хранения индекса максимального числа записываем индекс этого очередного числа. После выполнения цикла в переменной max должно остаться максимальное число, а в переменной «imax» должен остаться номер этого числа.
После запуска программы в верхней строке у нас вывелось 10 сгенерированных чисел.
Во второй строке вывелось максимальное число из всех этих сгенерированных чисел.
В-третей строке вывелся номер по порядку, где стоит это максимальное число.Если в массиве несколько маскимальных элементов и нужно вывести на экран индексы всех этих элементов, то программа будет выглядет так:
program massiv5; uses crt; const N=10; type x=array [1..N] of integer; var a:x; i:integer; max:integer; imax:integer; begin clrscr; randomize; for i:=1 to N do begin a[i]:= -5+random(3); write (A[i]:5) end; writeln; imax:=1; max:=A[1]; for i:=2 to N do if maxМаксимальный элемент массива
Алгоритм поиска максимального элемента неупорядоченного массива заключается в следующем:
- сначала мы предполагаем, что наибольший элемент находиться в начале массива;
- сохраняем значение первого элемента в переменной;
- затем мы сравниваем его с другими элементами массива один за другим, если какой-либо элемент больше, чем наш предполагаемый максимум, то обновляется значение переменной;
- после обхода всего массива, возвращаем максимальный элемент.
Код программы для поиска максимального элемента массива
program Maximal; const arrayLength = 10; var inputArray : array [1..arrayLength] of integer; maximum, i: integer; begin randomize; writeln ('Исходный массив: '); for i := 1 to arrayLength do begin inputArray[i] := random(100); write (inputArray[i]:4); end; writeln; maximum := inputArray[1]; for i := 2 to arrayLength do if maximum < inputArray[i] then maximum := inputArray[i]; write('Максимальный элемент массива ', maximum); readln; end.
Рекурсивный алгоритм нахождения максимального значения элемента массива
Найти максимальный элемент массива, можно также - рекурсивно. Реализация метода немного сложнее предыдущего, однако полезна для изучения принципов рекурсивных вызовов функций.
program Maximum; const arrayLen = 10; var inputArr : array [1..arrayLen] of integer; max, i: integer; function MaxElement(maximal, index: integer):integer; begin if index > arrayLen then MaxElement := maximal else begin if inputArr[index] > maximal then maximal := inputArr[index]; MaxElement := MaxElement(maximal, index + 1); end; end; begin randomize; writeln ('Исходный массив: '); for i := 1 to arrayLen do begin inputArr[i] := random(100); write (inputArr[i]:4); end; writeln; max := inputArr[1]; max := MaxElement(max, 2); write('Наибольший элемент ', max); readln; end.

