В прошлом уроке мы узнали о процедурах, как их использовать, их описание. Сегодня мы узнаем о новом понятии в Pascal — массивы. Что же такое массив? Для чего он нужен? Как его использовать?
Об этом и другом, связанном с массивами далее.
Массив в паскале — это хранилище данных, причём каждое из хранимых значений имеет определённый индекс для обращения к нему.
Он используется для хранения числовых значений в определённом количестве.
К какому типу относится массив? Как его создать?
#15 Одномерные массивы и работа с ними в Паскале. Задание собственного типа данных. Примеры
Одномерный массив — это фиксированное количество элементов одного и того же типа, объединенных одним именем, где каждый элемент имеет свой номер (индекс).
Для чего нужны массивы
Фактически массивы позволяют использовать огромное количество переменных (своих элементов) без отдельного объявления каждого из этих элементов.
ЧТО ТАКОЕ МАССИВЫ | ОДНОМЕРНЫЙ МАССИВ C# ПРИМЕРЫ | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ | # 24
То есть — если вы программируете, используя массивы, то это значит, что ваша программа может запоминать большое количество сущностей, для каждой из которых не требуется отдельно объявлять переменную, а можно просто использовать элементы массива.
При дальнейшем чтении урока последняя мысль станет более понятной.
Объявление массива
Массив является сложным (составным) типом данных, так как представляет из себя целый набор элементов.
Объявить массив можно двумя способами:
-
Не объявляя новый тип данных — например так:
var a : array [1..10] of integer; // объявляем массив целых чисел из 10 элементов
//или type // секция объявления типов myArr = array[1..10] of integer; // массив из 10 элементов < Мы объявили myArr — тип данных представляющий собой массив целых чисел из 10 элементов с индексами от 1 до 1 >var a: myArr; // объявляем переменную типа myArr
— то есть в конечном итоге всё сводится к объявлению переменной в секции var, но имеется возможно отдельно задать собственный тип в секции type (до секции var) как это показано выше.
Работа с конкретными элементами массива
К конкретным элементам массива можно обращаться указывая их индекс в квадратных скобках после имени переменной-массива, им можно присваивать значения, выводить их на экран — в общем работать с ними как с обычными переменными.
Рассмотрим пример программы (можно запустить):
type // секция объявления типов myArr = array[1..3] of char; // массив из 3 элементов символьного типа var a: myArr; // объявляем переменную типа myArr begin // инициаллизируем первый и третий элементы массива a[1] := ‘3’; a[3] := ‘ // присваиваем значение элементу по индексу 3 // выведем на экран значения трёх элементов через пробел writeln(a[1], ‘|’, a[2], ‘|’, a[3]); // проверим равен ли неициаллизированный элемент пробелу: if (a[2] = ‘ ‘) then writeln(‘[‘+a[2]+’] — probel’) else writeln(‘[‘+a[2]+’] — ne probel, kod simvola:’, ord(a[2])); readln(); end.
— в этой программе мы:
Что такое массив. Примеры. Теория. Array. Одномерный массив. Синтаксис. C++. Урок #25.
- объявили собственный тип данных (массив из 3 символьных элементов);
- присвоили первому и третьему элементу значения (инициализировали их);
- вывели на экран все три элемента массива — причём второй неинициализированный элемент отобразится как пустой;
- c помощью оператора ветвления узнали совпадает ли этот неинициаллизрованный элемент с пробелом (является ли он пробелом — вышло что нет) и с помощью стандартно функции ord() вывели его код в таблице ASCII, код $0$ соответствует пустому элементу. Таким образом мы выяснили, что неициализированные элементы массива типа char равны т.н. пустому символу.
Обход/перебор элементов массива
В программировании распространён термин т.н. обхода массива — то есть перебора его элементов каком-то порядке с произвольной целью.
Перебор нужен в том числе чтобы:
- Инициализировать значения нескольких или вообще всех элементов массива.
- Считывать значения элементов массива.
- И вообще для любой «массированной» работы с элементами (т.е. такой где их используется много).
Например, получим от пользователя все значения для элементов массива, а затем выведем их на экран через пробел:
type // секция объявления типов myArr = array[1..3] of integer; // массив из 3 элементов var a: myArr; // объявляем переменную типа myArr i : integer; begin < обходим первый раз массив, значения которого ещё не инициализированы, с целью присвоить значения элементам >for i:=low(a) to high(a) do begin writeln(‘vvedite element massiva nomer ‘, i, ‘:’); // пояснение для пользователя readln(a[i]); // считываем элемент i массива ‘a’ из консоли end; // выводим массив значения элементов на экран writeln(‘elementi vvedennogo vami massiva:’); for i:=low(a) to high(a) do // обходим массив второй раз, теперь уже с целью вывода его значений writeln(a[i], ‘
— обход массива здесь мы выполняли с помощью цикла с параметром.
Инициализация массива в процедуре — пример
Инициализация массива случайными значениями — пример процедуры
Используя стандартный генератор случайных чисел и, например, передачу аргумента в процедуру по ссылке можно инициализировать массив случайными числами.
Приведём пример программы, которая делает подобное:
var i: integer; a: array [1..10] of integer; < Процедура получает значение переменной a по ссылке >procedure initIntArrayOfSeven(var a: array of integer); var min, max: integer; begin randomize(); // инициал. датчик случайных чисел (вызов стандартной процедуры) min := -5; // левая граница max := 10; // правая граница < обходим переданный массив и инициализируем массив случайными числами>for i:=low(a) to high(a) do a[i] := min + random(max — min + 1); end; begin // далее программа использующая нашу процедуру initIntArrayOfSeven(a); < заполняем массив случайными числами, передаем переменную в процедуру по ссылке >for i:=low(a) to high(a) do // обходим наш массив write(a[i], ‘ ‘); // выводим очередное его значение readln(); // удерживаем консоль end.
abs(min)
min + random(max — min + 1)
Самостоятельная работа
Задачи
- Задайте в коде программы массив из чисел семи чисел:
1 12 45 6 7 18 99
type myArr = array[1..8] of integer; var a: myArr;
1 2 2 1 1 1 1 Ответ: 2 2 -1 -2 -2 -1 -1 -1 -1 Ответ: -1 -1 -1 -2 -2 5 4 -1 -1 Ответ: 5 4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|1|3|4|5|4|7|-8|-9|
Путь n=2, тогда после работы программы мы должны получить:
|1|4|5|4|7|-8|-9|0|
|1|3|7|5|4| // исходный массив 3 // ввод пользователя |1|3|5|4|0| // промежуточный результат 3 // ввод пользователя |1|3|4|0|0| // промежуточный результат 2 // ввод пользователя |1|4|0|0|0| // промежуточный результат 1 // ввод пользователя |4|0|0|0|0| // промежуточный результат 1 // ввод пользователя |0|0|0|0|0| // промежуточный результат // Cообщение о завершении, т.к. все элементы удалены
- 1) Любым
- 2) Провести операцию сдвига за одно прочтение исходного массива (для этого нам потребуется еще один массив, где мы будем хранить какие-то значения)
|1|5|4|5|6|7|8|
— функция должна «сообщить», что он неуникальный а для:
|1|15|4|5|6|7|8|
type newArr = array [1..5] of integer; procedure shiftArr(var promArr: newArr; k:integer); var j:integer; begin for j:=k to 4 do promArr[j]:=promArr[j+1]; promArr[high(promArr)]:=0; end;
Задача: У вас есть исходный массив случайных целых чисел из 5 элементов. Пользователь вводит три числа целых числа, сохраните их во второй массив и затем проведите сдвиг элементов исходного массива, для каждого случая их совпадения с элементами из второго массива, для сдвига используйте процедуру shiftArr(). Пример 1:
Исходный массив: 1 5 6 8 9 Числа пользователя: 2 4 5 Ответ: 1 6 8 9 0
Исходный массив: 1 5 6 8 9 Числа пользователя: 8 4 6 Ответ: 1 5 9 0 0
Исходный массив: 1 5 6 5 9 Числа пользователя: 5 4 6 Ответ: 1 9 0 0 0
|1|-3|5|-3|9|5|8|
|1|9|8|0|0|0|0|
a1 # a2 # . # aN
- a1, a2. aN — случайные числа из диапазона от 1 до 100
- # — один из случайных знаков (*, +, -)
- Разбор предложенного решения с замечаниями
type ArrOfInt = array[1..100] of integer;
1 | 2 | -10 | 5 | 0 | 12 | 2 | 8 .
0 | 3 | 4 | 9 | 7 | 5 | -8 | 3.
для них программа должна вывести:
-10 меньше 3 12 больше 9
— других сравнений не последует, так как новых из «каждых третьих элементов» в 1-ом массиве больше нет.
Выведите на экран все числа из первого массива, которые не содержаться во втором.
Пояснение:
На картинке выше фото часов, которые показывают время следующим образом:
Задача:
Напишите программу, которая принимает у пользователя два целых числа (часы и минуты) и выводит в консоль полученное время в формате бинарных ASCII-часов 0-11 ч. и 0-59 мин.
Также отметим, что:
- 12 часов «не выводиться» а соответствует пустым значениям/нулям (- — — -)
- аналогично в минутах «не выводиться» 60 минут (- — — — — -)
Для случая с фотографии выше (время 3:25) ASCII-вариант будет выглядеть как:
А, если бы время было 10:40, то :
- Решение данной задачи не требует вычислений в двоичной системе (достаточно знать как считают в обычной десятичной)
- Историческая справка: задача была предложена к добавлению в курс по Паскалю участником boris68 летом 2021 г. (см. исходный текст)
Пользователь вводит целое число — сумму в некоторой валюте, требуется выдать эту сумму купюрами наибольшего достоинства. Напишите программу, которая в качестве результата скажет как именно надо разменять указанную сумму купюрами наибольшего достоинства (укажет количество для купюры каждого типа)
- Сумму 350 рублей: по задаче следует выдать как: 3 по 100 и 1 по 50
- Сумму 520 рублей: таким набором разменять нельзя.
Указания по возможному оформлению (можно оформлять и иначе):
Напишите процедуру, которая:
- принимает на вход число (сумму) по значению
- массив «достоинств» купюр отсортированный по убыванию (предположим, что видов купюр не может быть больше 10) по значению
- массив для «количеств купюр» по ссылке
- булевский параметр успешности подбора купюр (некоторые суммы вообще разменять нельзя)
После выполнения процедуры в четвертом параметре должен быть true или false, а в массиве «количеств» должены находится находится значения, на основании которых банкомант мог бы выдать купюры.
Что ещё почитать
- Урок 14. Одномерные массивы. Работа с элементами: http://learnpascal.ru/vvedenie-v-paskal/.
Key Words for FKN + antitotal forum (CS VSU):
- Массивы в Паскаль примеры
- как узнать длину массива паскаль
- Паскаль учебник для начинающих с нуля онлайн примеры
- Паскаль процедура для заполнения массива случайными числами — пример кода
- обход массива
- массивы
- Паскаль
- задачи на массивы
- работа с массивами
Источник: fkn.ktu10.com
Массивы в Паскале
Для описания совокупности однотипных данных в программировании используется массив, который являются одним из основных инструментов программирования. Массивы используются в комбинации с циклами. Основы обработки массивов данных в Паскале изучаются в курсе информатики 9 класса.
Массивы в Паскале
Кроме простых типов данных в языке программирования Паскаль есть несколько сложных, одним из которых является регулярный тип. Структура, описываемая таким типом, называется массивом.
Массивы в Паскале представляют именованную собой совокупность элементов одного типа, ранжированных по возрастанию их индексов.
Объявление массива выполняется с помощью ключевого слова ARRAY с указанием размерности массива и типа его элементов.
Например, массив в разделе описания переменных можно задать так:
Var Mass: array[1..10] of integer;
Доступ к элементу в массиве осуществляется через указание индекса. Например, число 10 в массиве Mass имеет порядковый номер 6. Обращаться к конкретной ячейке следует по имени массива, указывая в квадратных скобках номер индекса, например, Mass [6].
Массивы могут быть как одномерными, так и многомерными. Двумерный массив выглядит в виде таблицы, трехмерный массив с виду похож на кубик Рубика.
Заполнение массива данными
Заполнить пустой массив данными можно следующими способами:
- В тексте программы присвоить ячейкам числа.
- Организовать ввод с клавиатуры.
- Воспользоваться процедурой генерации случайных чисел.
Для отладки программного модуля на разных диапазонах значений, необходимо вводить новые числа в ячейки массива при каждом выполнении программы. Для этого лучше воспользоваться вводом с клавиатуры или генерацией случайных чисел. Однако, клавиатурный ввод неудобен в том случае, когда массив имеет большое количество ячеек. Поэтому удобнее всего воспользоваться генерацией.
Заполнение массива Mass (10) случайными числами можно программное реализовать так:
program Massiv ;
var i: integer; Mass: array[1..10] of integer;
begin
for i:=1 to 10 do Mass [i]:=random(100);
Чтобы увидеть на экране сгенерированный массив, можно дополнительно в основную часть программы добавить процедуру вывода элементов массива на экран:
for i:=1 to 10 do write (Mass [i],` `);
Как видно из примера, для организации перебора индексов массива, используется циклическая конструкция оператора повтора с заданным числом повторений FOR .. TO.. DO.
Действия с массивами
Работа с массивами данных основывается на решении таких типовых задач, как:
- Определение суммы или произведения элементов массива.
- Поиск элемента в соответствии с определенным критерием.
- Сортировка массива.
Рассмотрим примеры программ обработки массивов
Определение суммы элементов массива
Расчет суммы элементов массива выполняется за счёт последовательного добавления слагаемых. Для этого следует задать некоторую переменную, в которой будет сохраняться результат сложения. Для каждого элемента массива его значение складывается с текущим значением переменной-аккумулятора и снова сохраняется в этой переменной. Аналогично вычисляется и произведение.
Перед фрагментом программы, вычисляющим сумму или произведение, следует инициализировать переменную, в которой будет накапливать результат. Если вычисляется сумма, то начальное значение переменной должно быть равно нулю. Если определяется произведение, то переменная должна иметь начальное значение равное единице.
Программно определение суммы можно записать так:
var summ, i: integer; Mass: array[1..10] of integer;
for i:=1 to 10 do Mass[i]:=random(100);
for i:=1 to 10 do write (Mass[i],` `);
for i:=1 to 10 do summ:=summ+Mass[i];
writeln (‘Сумма элементов массива десяти целых чисел равна ‘, summ)
Поиск элемента массива
В программируемых задачах обычно ищут наибольшее или наименьшее число, или число равное заданному.
Для организации поиска элемента массива, равного заданному, необходимо последовательно перебирать каждый из ячеек массива и сравнивать значения ячеек с заданной величиной. Перебор элементов организуют с использованием оператора повтора.
Программа для поиска элемента в массиве может выглядеть так:
var x, i, k: integer; Mass: array[1..10] of integer;
write(‘Введите некоторое целое число k = ‘);
for i:=1 to 10 do Mass[i]:=random(100);
for i:=1 to 10 do write (Mass[i],` `);
for i:=1 to 10 do
if Mass[i]=k then n:=i;
if n=0 then write(‘В массиве нет числа, равного заданному’) else write (‘Порядковый номер искомого числа равен’,i)
Сортировка массива
Сортировка массива заключается в упорядочении элементов массива по возрастанию или убыванию. Существуют разные способы сортировок элементов массива.
Самый простой способ при сортировке по возрастанию заключается в поиске наименьшего элемента, который затем меняется местами с элементом первой ячейки. В неотсортированной части снова выбирается наименьший элемент и обменивается с первым неотсортированным. Это выполняется до тех пор, пока все элементы массива не встанут на свои места.
Что мы узнали?
Массивы представляют собой именованную совокупность данных одного типа. Ввод элементов массива удобнее всего осуществлять с клавиатуры или путем генерации случайных чисел. Обработка массива включает в себя вычисление суммы или произведения элементов массива, поиска элемента в соответствии с заданным условием и сортировку массива.
Источник: obrazovaka.ru