Файл: Особенности и примеры использования массивов при разработке программ (Основные понятия массивов и их типы).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 30.03.2023

Просмотров: 86

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

случайных чисел из диапазона от [А,В] random(B-A+1)+A.

Текст программы выглядит следующим образом:

uses crt;
var i, n:integer;
a:array[1..10000] of integer;
begin
clrscr;
randomize;
write(' размер =' );readln(n);
for i:=1 to n do
begin
{Получаем случайные числа в пределах от 1 до 45.}
a[i]:=random(46))+1;
{Выводим элементы массива на экран.}
write(a[i], ' ' );
end;
{Полученный массив печатаем в обратном порядке.}
for i:=n downto 1 do
write(a[i],' ');
readkey;
end.

  1. Задача 2. Переставить элементы, стоящие на нечетных местах, с соответствующими элементами на четных местах.

Текст программы приведен с коментариями.

uses crt;
var i, n, r: integer;
a: array[1.. 10000] of integer;
begin
clrscr;
randomize;
write ('число элементов ');
readln(n);
for i:=1 to n do
begin
{Получаем случайные числа и выводим их на экран.}
a[i]:=random(45)-22;
write(a[i],' ');
end;
{В полученном массиве меняем соседние элементы.}
i:=1;
{Пока I<=N-1.}
while i<=n-1 do
begin
{Меняем значения соседних элементов. }
r:=a[i];a[i]:=a[i+1];a[i+1]:=r;
{Увеличиваем индекс на два.}
inc(i,2);
end;
{Распечатываем измененный массив.}
for i:=1 to n do
write(a[i],' ');
readkey;
end.

  1. Задача 3. Найти максимальный (минимальный) элемента массива, а также его порядковый номер.

Текст программы приведен с комментариями.

uses crt;
var i,n,r,max,min,imax,imin:integer;
a:array[1..10000] of integer;
begin
clrscr;
randomize;
write('число элементов n= ');
readln(n);
for i:=1 to n do
begin
a[i]:=random(45)-22;
{Получаем случайные числа и выводим их на экран.}
write(a[i],' ');
end;
{За начальный максимум (минимум) берем первый элемент массива.}
min:=a[1]; max:=a[1];
for i:=1 to n do
begin
{Если найдется элемент, меньший MIN, то MIN будет равен этому элементу. Одновременно запоминаем индекс промежуточного минимума.}
if a[i]<=min then
begin
min:=a[i]; imin:=i;
end;
{Если найдется элемент, больший МАХ, то МАХ будет равен этому элементу. Одновременно запоминаем индекс промежуточного максимума.}
if a[i]>= max then
begin
max:=a[i]; imax:=i;
end;
end;
{Печатаем минимальный элемент и его индекс.}
writeln(min,' номер' , imin);
{Печатаем максимальный элемент и его индекс.}
writeln(max, ' номер' ,imax);
readkey;
end.

  1. Задача 4. Вычисление суммы положительных элементов массива.

Текст программы приведен с комментариями.

const N=10;
type Mas=fray [1..N] of integer;
var a: Mas;
i: integer; { Счетчик цикла}
S:integer; { Копилка - переменная для суммирования положительных элементов}
begin
{ Заполним массив случайными числами в диапазоне -100..+100 }
randomize;
for i:=l to N do
begin
a[i]:=-100+random(201);
write(a[i]:5)
end;
writeln;
{ Присвоим переменным начальные значения }
S:=0; { Переменная S - аккумулятор. Она будет накапливать сумму всех положительных элементов. Нужно присвоить ей такое начальное значение, чтобы оно не повлияло на результат суммирования. Таким числом является ноль }
for i:=l to N do { Перебираем все элементы массива }
if A[i]>0 then { Проверяем каждый элемент на положительность }
S:=S+A[i]; { Если элемент положительный, добавляем значение элемента к аккумулятору }
{ Выводим результат на экран: }
writeln('Сумма положительных элементов =',S);
readln
end.


  1. Задача 5. Подсчитать количество четных элементов массива, заданного датчиком случайных чисел.

Текст программы приведен с комментариями.

uses crt;
var i,k,,r:integer;
a:array[1..10000] of integer;
begin
clrscr;
randomize;
write(' число элемен. п=');readln(n);
for i:=1 to n do
begin
a[i]:=random(45)-22;
write(a[i], ' ');
{Проверяем на четность и считаем количество четных элементов.}
if a[i] mod 2=0 then inc(k, 1);
end;
write('k= ',k);
readkey
end.

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

Описание двумерного массива

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

Для описания двумерных массивов используются те же способы, что и для одномерных массивов.

Рассмотрим создание двумерного массива на примере целочисленного массива размерностью 5×7 (5 строк, 7 столбцов). В этом случае записи будут выглядеть следующим образом:

      1. Type mas=array[1..5,1..7] of integer;
      2. Var mas:array[1..5,1..7] of integer.

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

  1. For i:=1 to 5 do  {перебор строк матрицы};
  2. For j:=1 to 7 do  {перебор столбцов (ячеек) в строке}.

Из записей следует, что значение индекса строки (i) увеличится при условии если индекс столбца (j) дойдет до своего конечного значения, т.е. в данном примере при j = 7.

Примеры задач с двумерными массивами

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

  1. Задача 1. Найти сумму всех элементов двумерного массива и сумму элементов каждой строки.

Программа приведена с пояснениями.

uses crt;
type mas=array[1..100, 1..100] of integer;
var a:mas;
i,j,n,s,sl :integer;
begin
clrscr;
randomize;
write('n=');readln(n);
for i:=1 to n do
begin
for j:=1 to n do
begin
{Получаем случайные значения элементов матрицы.}
a[i,j]=random(45)-22;
write(a[i,j]:4);
{Находим сумму элементов.}
s:=s+a[i,j]; sl:=sl+a[i,j];
end;
{Печатаем сумму всех элементов каждой строки и обнуляем значение суммы.}
writeln('сумма строки =',s);s:=0;
writeln;
end;
writeln('сумма всех элем. sl=',sl);
readln;
end.

  1. Задача 2. Найти максимальный элемент каждой строки массива и его индексы (всего массива и его индексы).

Так как элементы могут повторяться, то в программе запоминаются только индексы первого максимального элемента.


Программа приведена с комментариями.

uses crt;
type mas=array[1..100,1..100] of integer;
var a:mas;
i,j,n: integer;
max,min,i1,j1,i2,j2:integer;
begin
clrscr;
randomize;
write('n=');readln(n);
for i:=1 to n do
begin
{Так как тип массива integer, то за начальные значения возьмем.}
max: =-32 768;
for j:=1 to n do
begin
{Получаем случайные значения элементов матрицы.}
a[i,j]:=random(45)-22;
{Выводим элементы матрицы на экран.}
write(a[i,j]:4);
{Находим максимальный элемент в каждой строке и его индексы.}
if a[i,j]>max then
begin
max:=a[i,j];i1 :=i; j1 :=j;
end;
end;
{Печатаем максимальный элемент в каждой строке и его индекс.}
write (' тах=',тах, ' строка=',i1,' cmon6eц =',j1);
writeln;
end;
readln;
end.

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

  1. Задача 3. Найти количество элементов, больших некоторого заданного числа X в каждой строке массива (во всем массиве).

Программа приведена с комментариями.

uses crt;
var a: =array[1.. 100,1..100] of integer;
i,j,n:integer;
k,l,x:integer;
begin
clrscr;
randomize;
write('n=');readln(n);
{Задаем значение Х.}
x:=0;
for i:=1 to n do
begin
k:=0;l:=0;
for j:=1 to n do
begin
a[i,j]:=random(45)-22;
write(a[i,j]:4);
{Считаем число элементов, удовлетворяющих условию задачи.}
if a[i,j]>x then k:=k+1 else l:=l+1
end;
{Если находим для всего массива, то следующую строку надо убрать, а начальные значения K=0:L=0 перенести выше на одну строку.}
write('k=',k, 'l=',l);k:=0;l:=0;;
end;
{Печатаем число элементов, удовлетворяющих условию задачи во всем массиве.}
write('k=',k, 'l=',l);
readln;
end.

  1. Задача 4. Определить, является ли данный квадратный массив симметричным относительно своей главной диагонали.

Если массив является симметричным, то для него выполняется равенство a[i,j]=a[j,i] для всех i=l,..., n и j=l,..., n при условии, что i>j. Но если встретится хотя бы одна такая пара, что соответствующие элементы не будут равны, то массив будет не симметричным.

uses crt;
var a: array[1..100,1..100] of integer;
i,j,n:integer;
begin
clrscr;
randomize;
write('n='); readln(n);
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:=random(45)-22;
write(a[i,j]:4);
end;
writeln;
end;
readln;
for i:=1 to n do
for j:=1 to n do
if (i>j) and (a[i,j]<>a[j,i] then
begin
writeln ('no');
exit;
end;
writeln('yes');
readln;
end.

  1. Задача 5. Удалить строку с номером k.

Для того чтобы удалить строку с номером к, необходимо: - Сдвинуть все строки, начиная с данной, на одну вверх. - Последнюю строку "обнулить", то есть всем элементам последней строки присвоить нулевое значение. Будем выводить на экран сначала все строки, а второй раз, после удаления, на одну меньше.
uses crt;
type mas=array[1..100,1.. 100] of integer;
var a:mas;
i,j,k,n:integer;
begin
clrscr;
randomize;
write('n=');readln(n);
{Создаем и распечатываем двумерный массив.}
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:=random(45)-22;
write(a[i,j]:4);
end;
writeln;
end;
{Вводим номер удаляемой строки.}
write('k=');readln(k);
{Сдвигаем строки на одну вверх, начиная с данной.}
for i: =K to n-1 do
for j:=1 to n do a[i,j]:=a[i+1,j];
{Обнуляем последнюю строку.}
for j:=1 to n do a[n,j]:=0;
{Печатаем новый массив, в котором на одну строку меньше.}
for i:=1 to n-1 do
begin
for j:=1 to n do
begin
write(a[i,j]:4);
end;
writeln;
end;
readln;
end.


  1. Задача 6. Поменять местами строки с номерами К1 и К2.
    uses art;
    type mas=array[1..100,1..100] of integer;
    var a:mas;
    i,j,n,k1,k2,r: integer;
    begin
    clrscr;
    randomize;
    write('n=');readln(n);
    {Создаем и распечатываем двумерный массив.}
    for i:=1 to n do
    begin
    for j:=1 to n do
    begin
    a[i,j]:=random(45)-22;
    write(a[i,j]:4);
    end;
    writeln;
    end;
    {Вводим номера строк, которые будем менять местами.}
    write('stroki k1=k2=');readln(k1,k2);
    {Меняем значения К1 и К2 строк между собой.}
    for j:=1 to n do
    begin
    r:= a[k1,j];a[k1,j]:=:=a[k2,j];
    a[k2,j]:=r;
    end;
    {Распечатаем измененный массив.}
    for i:=1 to n do
    begin
    for j:=1 to n do
    begin
    write(a[i,j]:4);
    end;
    writeln;
    end;
    readln;
    end.
  2. Задача 7. Заполнить массив А размером п*m следующим образом, например, n=5 и m=5:

1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
21 22 23 24 25

Массив заполняется в виде "змейки". Для того, чтобы заполнить, надо вывести правило заполнения, а оно в данном случае будет таким: если ряд нечетный (то есть номер строки - нечетное число), то A [i,j]=(i-1)*m+j, иначе (то есть когда строка четная) A[i,j]==i*m-j+l. По этому правилу и составляем процедуру заполнения. 

uses crt;
type mas=array[1..100,1.. 100] of integer;
var a:mas;
i,j,n,m:integer;
begin
clrscr;
write('n=m=');readln(n,m);
for i:=1 to n do
begin
for j:=1 to m do
begin
{Заполняем массив по выведенному правилу заполнения и выводим его на экран.}
if i mod 2 =1 then
a[i,j]:=(i-1)*m+j
else a[i,j]:=i*m-j+1;
write(a[i,j]:4);
end;
writeln;
end;
readln;
end.

Открытые массивы

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

Приведем пример использования открытого массива. Задача заключается в вычислении максимального элемента в массиве.

function Max (Var Mas: array of integer): integer;

Var Ma : integer;

i : Byte;

Begin

Ma : = Mas [0];

for i : = 1 to High (Mas) do

if Ma < Mas [i] then

Ma : = Mas [i];

Max : = Ma

End.

Данная функция может работать с любым одномерным массивом целых чисел.

Обработка квадратных массивов

Квадратной называют матрицу, у которой число строк равно числу столбцов. В общем случае обработка квадратных матриц принципиально не отличается от обработки прямоугольной матрицы. Для нее также используют вложенные циклы, с той лишь разницей, что диапазоны значений для внешнего и внутреннего счетчиков будут одинаковыми. Так как размеры у квадратной матрицы совпадают, то для их хранения достаточно одной переменной. В квадратной матрице n строк и n столбцов. Следовательно, вместо двух блоков ввода (ввод числа строк и ввод числа столбцов) будет один – ввод размера матрицы. Поэтому номера последней строки и столбца будут на единицу меньше соответствующего размера. n -= 1.


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

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

Побочная диагональ идет из верхнего правого угла матрицы в левый нижний угол, то есть от элемента с индексами (0, n) до элемента с индексами (n, 0), где n – номер последнего столбца и строки матрицы. На каждой строке матрицы находится ровно один элемент, стоящий на побочной диагонали. Для этого элемента всегда будет выполняться условие i + j = n, где i – номер строки, j – номер столбца, n – номер последней строки и последнего столбца матрицы. Побочная диагональ разбивает матрицу на два треугольника. Все элементы верхнего треугольника расположены над побочной диагональю. Для них выполняется условие i + j < n, где i – номер строки, j – номер столбца, n – номер последней строки и последнего столбца матрицы. Все элементы нижнего треугольника расположены под побочной диагональю. Для них выполняется условие i + j > n, где i – номер строки, j – номер столбца, n – номер последней строки и последнего столбца матрицы.

Как правило, элементы, стоящие на диагонали, не включаются ни в один треугольник. Если же по условию задачи требуется включить диагональные элементы в один из треугольников, то в соответствующем условии строгое неравенство.

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

Заключение

В данной курсовой работе рассмотрены типы массивов, изучены основные методы обработки одномерных и двумерных массивов натуральных и действительных чисел. Этот вопрос очень актуален в наше время, потому что в настоящее время размер обрабатываемых данных постоянно увеличивается.