Еngee как альтернатива PascalABC
Работа с массивами. ЛР №9-11
Обозначение массивов
Массивы в Engee являются матрицами или векторами. Для обозначения матриц и векторов используются квадратные скобки, в которых перечисляются элементы матрицы:
y = [1 3 6 9 10]
y = [1, 3, 6, 9, 10]
Для ввода двумерных массивов применяется та же конструкция, но для разделения на строки используется ;, как в примере ниже:
y = [1 3 6; 9 10 11]
Ввод значений массива с клавиатуры
Для ввода значений с клавиатуры мы можем использовать несколько разлиных способов.
- Первый способ - поэлементный ввод при помощи цикла
x1 = []
println("Введите одномерный массив поэлементно")
for i=1:3
k = parse(Int,readline());
push!(x1,k)
end
x1
- Второй способ - считать массив из строки
print("Введите массив чисел через пробел: ")
строка = readline()
x2 = parse.(Int64, split(строка))
- Третий способ - ввод массива из кодовой ячейки
Введите_массив = "1 2 3 4 5" # @param {type:"string"}
x3 = parse.(Int64, split(Введите_массив))
Массив случайных значений
Для получения массива, а точнее матрицы любой размерности, заполненой случайными числами используется функция rand(). В неё передаётся левый_край_интервала:шаг:правый_край_интервала, количество_строк, количество_столбцов.
z=rand(-2:0.1:3, 2, 3)
Преобразование массивов
Представим, что перед нами стоит задача поменять местами второй элемент массива из 6 элементов, введённого с клавиатуры, и элемент массива имеющий наибольшее значение. Для решения этой задачи воспользуется уже известными методами ввода и функцией findmax(), которая выводит кортеж состоящий из значения ииндекса максимального элемента.
# Определяем массив
mas1 = Int64[] # Создаем пустой массив целых чисел
println("Введите значения массива:")
# Ввод значений массива
for i in 1:6
println("mas[$i] = ")
push!(mas1, parse(Int64, readline()))
end
println("\nВведенный массив:")
println(mas1)
# Нахождение максимального значения и его индекса
max_value, max_index = findmax(mas1)
println("\nМаксимальное значение массива:")
println("mas[$max_index] = $max_value")
# Обмен максимального значения со вторым элементом
mas1[2], mas1[max_index] = mas1[max_index], mas1[2]
println("\nМассив, в котором максимальное значение поменяли со вторым элементом:")
println(mas1)
Сортиировка.
Также, мы можем сотрировать массив несколькими способами. В примере показана реализация алгоритма сортировки вставками:
# Ввод значений массива
Введите_8_чисел = "9 23 32 12 19" # @param {type:"string"}
a1 = parse.(Int64, split(Введите_8_чисел))
println("\nВведенный массив:")
println(a1)
# Сортировка вставками
for j in 2:length(a1)
b = a1[j]
i = j - 1
while i >= 1 && a1[i] < b
a1[i + 1] = a1[i]
i -= 1
end
a1[i + 1] = b
end
println("\nОтсортированный массив:")
println(a1)
Либо, можно использовать встроенную функцию sort(), которая выбирает один из 4 алгоритмов сортировки, основываясь на эвристике, учитывающей размер и тип входных данных:
Введите_массив = "9 23 32 12 14 2" # @param {type:"string"}
a2 = parse.(Int64, split(Введите_массив))
sort(a2)
Чтобы отсортировать массив в обратном порядке, нужно указать параметр rev=true:
Введите_массив = "26 65 12 77 42 56 43" # @param {type:"string"}
a3 = parse.(Int64, split(Введите_массив))
sort(a3, rev=true)