Как сделать рандомный массив паскаль

Обновлено: 05.07.2024

Описание и выделение памяти

Динамический массив описывается так:

Память под динамический массив a выделяется в момент работы программы:

Здесь - первое преимущество динамических массивов - в переменной a может храниться массив любого размера, память выделяется в процессе работы программы. Кроме того, выделенная память гарантированно автоматически заполняется нулевыми значениями.

Можно совместить описание и выделение памяти - тип динамического массива выводится автоматически:

Индексация в динамических массивах и использование статических массивов

Динамические массивы индексируются с нуля - это эффективно. В качестве индексов в динамических массивах могут выступать только целые.

Статические массивы тем не менее иногда удобно использовать - в задачах, где индексы либо символьные, либо по-существу начинаются не с нуля. Например, для подсчёта количества слов на каждую букву может использоваться стаический массив

Заполнение статических массивов - увы - производится в цикле. Кроме того, они не помнят свою длину и передача таких массивов в качестве параметров подпрограмм связана с техническими сложностями 40-летней давности, не нужными начинающим.

Простейшее заполнение

Важную роль играют функции заполнения динамических массивов. Перед заполнением они выделяют для массива память, поэтому в одной строке можно совмещать описание, выделение памяти и заполнение.

Простейшее заполнение - набором значений:

Заполнение диапазоном целых или символьных значений делается с использованием функции Arr:

Заполнение определённым значением осуществляется с помощью операции умножения массива на число:

Для заполнения можно также использовать функцию ArrFill:

Для заполнения массива случайными значениями следует использовать

Не рекомендуется использовать алгоритм для заполнения массива случайными в каждой задаче:

Повторять этот текст в каждой задаче - странно. Для этого есть стандартные функции.

Ввод и вывод элементов массива

Для ввода элементов массива базовых типов используются функции

Стандартная процедура вывода Write или Print выводит значения в массиве в квадратных скобках черезх запятую:

Однако лучше всего для вывода воспользоваться методом Print, выводящим все значения в массиве через пробел:

Не рекомендуется вводить и выводить элементы массива в цикле

Повторять этот текст в каждой задаче - странно. Для этого есть стандартные функции.

Циклы по массиву

Для обработки элементов массива используются следующие циклы:

    Цикл for по индексам (если требуется менять элементв или нужна информация об индексах)

Что такое массивы и матрицы. Как их объявить и использовать в языке программирования Pascal. Открытые массивы.

Комментарии

Сколько значений чётных в массиве и сколько нечётных

Заполнить массив случайными числами из промежутка 1-100 и определить в массиве, сколько значений чётных и сколько нечётных.

Решение

Массивы в Pascal

Ответ на Решение от Гость (не проверено)

В каждой строке заменить все восклицательные знаки точками.

Решение

Задача

Школьников отправили на распределение яблок из кучи. Количество яблок в куче не известно. Распределяют яблоки на 4 корзины. 1(Красные), 2(Зеленые), 3(Желтые), 4(Испорченные). Требуется написать программу для распределения и подсчета яблок в каждой корзине и куче. Количество яблок в куче должно быть рандомизировано. Если цифра один, то в первую корзину ,если 2 то во вторую ,а если 3 ,то в 3 ,ну а если 4 то в 4 (когда выпадает ноль то все конец).

Одномерный массив – это именованная последовательность, состоящая из пронумерованных элементов одного типа. Элементы могут быть любого имеющегося в Pascal (за исключение файлового) типа данных. Номер, также называемый индексом, имеет каждый элемент массива. Индекс должен быть порядкового типа. Одномерный массив можно объявить как в качестве переменной:

var : array[m..n] of ;

type = array[m..n] of ;

Здесь m – номер первого элемента, а n – последнего. Например, если диапазон задан так: [1..10], то это означает, что определен одномерный массив размерностью в 10 элементов, с индексами от 1 до 10.

Для обращения к элементу массива нужно указать его имя и номер: mas[i], тут mas – имя, i – номер. В программе ниже мы объявим массив и произведем простые операции над его элементами.

program array_primer;
uses crt;
var mas , A : array [ 1 .. 10 ] of real ;
begin
clrscr;
mas [ 1 ] := 32 ;
mas [ 5 ] := 13 ;
mas [ 9 ] := 43 ;
A [ 1 ] := ( mas [ 9 ] — mas [ 1 ] ) * mas [ 5 ] ;
write ( A [ 1 ] : 5 : 2 ) ;
readkey;
end .

В каком-то смысле с массивами можно работать, как и с обычными переменными, но представьте, например ситуацию, когда необходимо заполнить массив, состоящий из десятков или тысяч элементов. Это будет удобней сделать посредством цикла. Следующая конструкция заполняет массив числами и выводит их на экран.

for i:=1 to n do
begin
mas[i]:=i;
write(mas[i]:3);
end;

Если необходимо, чтобы массив состоял из значений, введенных с клавиатуры, то просто замените присвоение на оператор read. Также бывают ситуации, когда требуется заполнить массив случайными числами. Программа ниже поочередно присваивает каждому элементу случайную величину.

program array_random;
uses crt;
var i : integer ;
mas : array [ 1 .. 100 ] of integer ;
begin
clrscr;
randomize;
for i := 1 to 100 do
begin
mas [ i ] := random ( 10 ) ;
write ( mas [ i ] : 2 ) ;
end ;
readkey;
end .

Широко распространены задачи связанные с разного рода алгоритмами применимыми к массивам. Среди них особенно популярны методы поиска и сортировки элементов. Но каждый из таких алгоритмов требует индивидуального изучения, поэтому ознакомиться с ними вы можете в других статьях:

К числу менее сложных и в тоже время востребованных относятся методы определения количества положительных и отрицательных, минимального и максимального элементов. Рассмотрим их.

Поиск максимального элемента в массиве:

program array_max;
uses crt;
type massiv = array [ 1 .. 10 ] of word ;
var i , max : integer ;
A : massiv;
begin
clrscr;
for i := 1 to 10 do
begin
write ( ‘Элемент №’ , i : 2 , ‘=’ ) ;
read ( A [ i ] ) ;
end ;
max := A [ 1 ] ;
for i := 1 to 10 do
if max[ i ] then max := A [ i ] ;
writeln ;
write ( ‘Максимальный элемент = ‘ , max ) ;
readkey;
end .

Для того чтобы сделать программу для поиска минимального элемента нужно всего лишь поменять знак .

Определение количества положительных элементов:

program array_pol;
uses crt;
var i , k : integer ;
mas : array [ 1 .. 10 ] of integer ;
begin
clrscr;
randomize;
for i := 1 to 10 do
begin
mas [ i ] := random ( 40 ) — 20 ;
writeln ( ‘Элемент №’ , i : 2 , ‘=’ , mas [ i ] : 3 ) ;
end ;
k := 0 ;
for i := 1 to 10 do
if mas [ i ] > = 0 then k := k + 1 ;
writeln ;
write ( k : 3 , ‘ положительных элементов’ ) ;
readkey;
end .

Также как и в предыдущей программе, для нахождения отрицательных чисел необходимо просто поменять знак.

Массивы – это переменные Паскаля, которые используются для хранения таблиц. Например таблицу

можно хранить в массиве, который описывается следующим образом

var a:array[1..5] of integer;
Таблица пока пуста, но в любую ячейку можно записать некоторое целое число. Каждая ячейка массива имеет свой номер - индекс. Например, номера ячеек массива a 1, 2, 3, 4, 5. Число, которое содержится в ячейке с номером i часто будем также называть элементом с номером i. В теле программы содержимое любой ячейки массива можно использовать, как обычную переменную, при этом нужно указывать имя массива и далее в квадратных скобках индекс ячейки в массиве. Например после выполнения операторов
a[2]:=11;

В таблице будут записаны следующие числа

Общий формат описания массива следующий


: array [ .. ] of
может быть любым допустимым именем

array – служебное слово, указывающее, что описывается массив

индекс1 >.. индекс2 > - диапазон изменения индексов, , - целые числа или константы.

- типы данных, которые могут содержаться в ячейках массива. Массив может содержать данные только одного типа, например, если описать массив

a : array [1..20] of integer ;

то в ячейках этого массива можно будет хранить целые числа.

Пример 1 . Прочитать с клавиатуры 10 целых чисел. Вывести их на экран в обратном порядке.

Решение. Сначала в цикле прочитаем все числа и запишем их в массив, а потом выведем элементы массива в обратном порядке.

Var i:integer;

A:array[1..10] of integer;

For i:=1 to 10 do

For i:=10 downto 1 do

Пример 2. Заполнить массив в соответствии с закономерностью 1, 2, 1, 2, 1….

Решение. Как видно из представленной закономерности, в ячейки с нечетными номерами нужно записать число 1, а в ячейки с четными – 2. Значит нужен цикл с условием.

a:array[1..20] of integer;

for i:=1 to 20 do

if i mod 2=1 then a[i]:=1

for i:=1 to 20 do write(a[i]);

Генератор случайных чисел

При решении задач на компьютере человек часто использует случайные числа. Для того, чтобы генерировать случайные числа, в паскале предусмотрена функция random. У нее один целочисленный аргумент. Функция возвращает неотрицательное целое случайное число, меньшее аргумента, пример использования

Если аргумент не указывать, то функция возвратит вещественное число от 0 до 1.

Если вы собираетесь использовать функцию random в своей программе, то до ее первого использования необходимо выполнить процедуру randomize без параметров, которая устанавливает генератор в начальное состояние. Если не использовать randomize, то вызовы random будут все время выдавать одну и ту же последовательность чисел.

Пример 3. Заполнить массив случайными числами от 0 до 9 и вывести на экран его элементы через пробел.

var a:array[1..20] of integer;

for i:=1 to 20 do a[i]:=random(10);

for i:=1 to 20 do write(a[i],’ ‘);


  1. Прочитать числа с клавиатуры, как в примере 1.

  2. Заполнить массив по заданным формулам, как в примере 2.

  3. Заполнить массив случайными числами, как в примере 3.

Задачи


  1. Прочитать с клавиатуры элементы массива. Вывести на экран те элементы, индексы которых нечетны.

  2. Записать в ячейки массива последовательность вида 1,2,3,1,2,3,1,2,3,1,2,3,1,2,3…

  3. Заполнить массив случайными числами от 0 до 100 и вывести все элементы, которые лежат от 30 до 50.

  4. Заполнить массив случайными числами от 10 до 90 и вывести все элементы, которые лежат от 30 до 50.

  5. Ряд чисел образуется следующим образом. Сначала записывают числа 1 и 2. Каждое следующее число получается как сумма двух предыдущих. Вывести на экран первые 10 чисел ряда в порядке убывания.

Сумма, произведение и количество элементов массива.

Пример 4. Заполнить массив случайными числами, и найти сумму его нечетных элементов.

a:array[1..20] of integer;

for i:=1 to 20 do a[i]:=random(15);

for i:=1 to 20 do if a[i] mod 2<>0 then s:=s+a[i];


  1. Заполнить массив случайными числами. Вывести элементы массива на экран. Вывести на экран сумму всех элементов массива.

  2. Заполнить массив случайными числами. Вывести элементы массива на экран. Вывести на экран количество всех нечетных элементов массива.

  3. Заполнить массив случайными числами. Вывести элементы массива на экран. Вывести на экран сумму всех элементов массива с нечетными индексами.

  1. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Вывести на экран сумму элементов массива, больших 5 и произведение элементов, меньших 5.

  2. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Вывести на экран сумму нечетных элементов массива и количество четных элементов.

  3. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Вывести на экран сумму элементов массива, равных 8, 2 или 4.

  4. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Вывести на экран произведение четных элементов массива.

  5. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Вывести на экран количество элементов массива, больших 5.

  6. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Вывести на экран количество элементов массива, меньших 5 и количество нечетных элементов.

  7. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Каких элементов в массиве больше – четных или нечетных.

  8. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Вывести на экран разность между суммой четных элементов массива и количеством элементов, больших 10.

  9. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Вывести на экран произведение элементов массива, равных 5 или 8.

  10. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Вывести на экран произведение элементов массива, меньших 8.

  11. Массив из 5 элементов заполнить случайными числами от 0 до 9, вывести элементы массива на экран. Вывести на экран разность между суммой четных элементов массива и суммой его нечетных элементов.

Константы.


  • значения констант нельзя изменять в программе

  • константы можно использовать вместо чисел в квадратных скобках при описании массива, а переменные – нельзя.

Рассмотрим использование константы на примере.

Пример 5. Массив из 20 элементов заполнить случайными числами от 0 до 99 и найти количество двузначных чисел среди его элементов.

const n =20; k =100;

a:array[1.. n ] of integer;

for i:=1 to n do a[i]:=random( k );

for i:=1 to n do if (a[i]>9) and (a[i] n do a[i]:=random( 100 );

for i:=2 to n do if a[i]>a[imax] then imax:=i;

writeln(‘максимальный элемент ’,a[imax]);

writeln(‘индекс максимального элемента’,imax);

Задачи.


  1. Заполнить массив случайными числами. Вывести элементы массива на экран. Вывести на экран минимальный элемент массива.

  2. Заполнить массив случайными числами. Вывести элементы массива на экран. Вывести на экран количество его элементов, расположенных после максимального. Если максимальных элементов несколько, то считать после первого из них.

  3. Заполнить массив случайными числами. Вывести элементы массива на экран. Найти второй по величине элемент массива.

  4. Заполнить массив случайными числами. Вывести элементы массива на экран. Найти максимальный из элементов массива, расположенный после первого четного элемента.

Задачи по вариантам


  1. Заполнить массив случайными числами. Вывести элементы массива на экран. Заменить все его минимальные элементы нулями.

  2. Заполнить массив случайными числами. Вывести элементы массива на экран. Заменить его первый минимальный элемент нулем.

  3. Заполнить массив случайными числами. Вывести элементы массива на экран. Заменить его первый элемент на минимальный.

  4. Заполнить массив случайными числами. Вывести элементы массива на экран. Вывести на экран разность между его максимальным и минимальным элементами.

  1. Заполнить массив случайными числами. Вывести элементы массива на экран. Вычесть из каждого его элемента минимальный элемент.

  1. Заполнить массив случайными числами. Вывести элементы массива на экран. Заменить его минимальные элементы на максимальные.

Вставка и удаление элементов массива.

после удаления третьего элемента

Пример 7. Прочитать с клавиатуры число k. Удалить элемент массива с номером k

Решение. Нужно элемент с номером k+1 записать в ячейку с номером k, затем элемент с номером k+2 записать в ячейку с номером k+1 и так далее, пока не дойдем до конца массива. Пример показан на рисунке

Фрагмент программы для массива из n элементов приводится ниже:

for i:=k to n-1 do

Пример 8. Прочитать с клавиатуры числа x и k. Вставить в массив число x после элемента с номером k.

Решение. Пусть в массив записано n-1 элементов. При этом массив состоит из n ячеек. Последняя ячейка пуста. Для вставки элемента нужно сначала сдвинуть все элементы массива, начиная с k+1-го элемента вправо. Затем в освободившуюся k+1 - ую ячейку можно записать число x.

Фрагмент программы, реализующий эти действия

for i:=n-1 downto k+1 do

Задачи.


  1. Удалить первый отрицательный элемент массива. Подсказка. Сначала определяем его номер. Затем применяем стандартный фрагмент программы.

  2. Вставить число 13 после первого четного элемента массива.

  3. (*) Удалить все отрицательные элементы массива. Подсказка здесь необходим вложенный цикл.

  4. (*)Вставить число 13 после каждого четного элемента массива.

  5. (**)Удалить все отрицательные элементы массива. Вложенный цикл и дополнительный массив не использовать

  6. (**)Вставить число 13 после каждого четного элемента массива. Вложенный цикл и дополнительный массив не использовать.

Задачи по вариантам.


  1. Удалить последний отрицательный элемент массива

  2. Удалить второй отрицательный элемент массива

  3. Удалить максимальный элемент массива.

  4. Прочитать с клавиатуры число k. Вставить в массив число 15 после k-1-го элемента

  5. Вставить число, равное первому элементу массива после его третьего элемента

  6. Вставить 0 после максимального элемента массива

  7. Вставить минимальный элемент массива после его третьего элемента.

  8. Удалить минимальный элемент массива

  9. Вставить в начало массива число, равное сумме его элементов

  10. Вставить в начало массива число, равное количеству его элементов

  11. Вставить после первого максимального элемента массива еще один такой же элемент

Задачи по вариантам на дом.


  1. Удалить все элементы массива, равные максимальному

  2. Повторить все четные элементы массива

  3. После каждого отрицательного элемента массива вставить его максимальный элемент

  4. Удалить все элементы массива, равные количеству его элементов

  5. Удалить все элементы массива, стоящие перед его нулевыми элементами.

  6. Удалить все элементы массива, стоящие после его нулевых элементов

Использование нескольких массивов.

Пример 9. Заполнить массив a случайными числами. Квадраты его четных элементов записать в массив b.

a,b:array[1..n] of integer;

for i:=1 to n do a[i]:=random(15);

for i:=1 to n do write(a[i]:4);

for i:=1 to n do b[i]:=sqr(a[i]);

for i:=1 to n do write(b[i]:4);

Многие задачи решаются проще, если используются дополнительные массивы.

Пример 10. Заполнить массив случайными числами. После каждого отрицательного элемента массива вставить нулевой элемент.

Решение. Будем переписывать элементы массива a в массив b. При этом индексом элементов массива a будет счетчик цикла for. Индекс элемента массива b будем хранить в переменной k. Сначала k=1. На каждом шаге цикла записываем a[i] в b[k], увеличиваем k на 1. Если a[i] repeat

changed:=false;

for i:=2 to n do

changed:=true;

until not changed;


  1. Запрограммировать задачу о сортировке по возрастанию

  2. Переделать программу так, чтобы она упорядочивала элементы по убыванию.

  3. Вывести на экран третий по величине элемент массива. Указание: предварительно массив удобно упорядочить.

  4. Заполнить массив случайными числами, прочитать с клавиатуры число k и вывести на экран сумму k самых больших элементов массива.

  5. Все четные элементы массива упорядочить по возрастанию. Нечетные элементы оставить на своих местах.

Задачи повышенной сложности.


  1. Переставить цифры числа так, чтобы оно стало максимально возможным. Указание. Записать цифры числа в ячейки массива, затем массив упорядочить и из полученных элементов вновь собрать число.

  2. Нечетный элементы массива переставить в его начало, не меняя порядок следования. Новый массив не заводить.

  3. Заданы два массива с одинаовым число элементов. Элементы масивов упорядочены по возрастанию. Слить элементы в один массив, который также должен быть упорядочен.

Двумерные массивы.

Одномерный массив предназначен для хранения одномерной таблицы, показанной на рисунке (а). Рассмотрим теперь таблицу, показанную на рисунке (б). Каждая ее ячейка задается двумя параметрами – номером строки и номером столбца. Для хранения таких таблиц предназначен двумерный массив. Его элемент определяется двумя индексами. Первый – номер строки, второй – номер столбца. Например, если массив на рисунке (б) называется a, то в ячейке a[2,3] записано число 6. Двумерный массив описывается так

var a:array[1..5,1..6] of integer;

Описание отличается от описания одномерного массива наличием еще одного диапазона изменения индекса 1..6, так как элемент двумерного массива двухиндексный. При работе с двумерными массивами используются вложенные циклы. С элементом массива можно делать все действия, допустимые для переменных этого типа. При этом пишем имя массива, а затем в квадратных скобках через запятую следуют два индекса, например a[i,j].

Пример. Заполнить двумерный массив случайными числами от 20 до 40, вывести его на экран, вывести на экран сумму его элементов

Читайте также: