Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

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

Содержание:

Введение

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

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

Цель работы состоит в рассмотрении основных алгоритмов обработки массивов максимально близко к практическому их применению

В работе будут решены следующие задачи:

  1. Изучение типов массивов.
  2. Изучение типовых алгоритмов обработки одномерных и двумерных массивов.
  3. Группировать задачи по методам решения.
  4. Обобщить и систематизировать теоретический и практический материал по теме.

Основные понятия массивов и их типы

Массив представляет собой совокупность однотипных элементов, объединённых общим именем и занимающих в компьютере определённую область памяти. Количество элементов в массиве всегда конечно. Массив является структурированным типом данных, в котором фиксированное количество элементов и все они одного типа.

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

Каждый элемент массива имеет свой номер - индекс, который используют для получения доступа к нему. Индекс имеет целочисленный тип, так как он определяет местоположения элемента в массиве.

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

Массивы могут быть:

    1. одномерными (одна строка – несколько столбцов);
    2. многомерными (несколько строк – несколько столбцов).

Создание массива начинается с его описания либо в разделе var, либо в разделе type. Для задания массива используется зарезервированное слово array , после которого указывается тип индекса (-ов) компонент (в квадратных скобках) и после слова of тип самих компонент:

Type

<имя массива>= array [<тип индекса(-ов)>] of <тип компонент>;

Или

Var

<имя массива>: array [<тип индекса(-ов)>] of <тип компонент>;

После ввода типа массива задается переменные или типизированные константы этого типа. Размерность массива зависит от решаемой задачи, поэтому она может быть любой, а также и сами элементы массива могут быть любого, в том числе и структурированного, типа. Индекс может быть любого порядкового типа, кроме типа longint.

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

Приведем пример:

Type

arr = array [1..3] of real;

matrix = array [1..3, 1..2] of integer;

mas1: arr = (1, 2, 3);

mas2: matrix = ((1, 2), (3, 4), (5, 6));

Тип массив можно вводить и непосредственно при определении соответствующих переменных или типизированных констант.

Приведем пример:

Var

m1, m2 : array [1..3] of integer;

matr :array [1..3, 1..3] ofreal;

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

Например, m1 [2], matr[i,j].

Для обработки массива и последовательного доступа к данным, как правило, используется цикл FOR.

Например ,

for i:=1 to 10 do read(mas[i]);

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

Например,

for i:=1 to 10 do

for j:=1 to 10 do read(mas[i, j]);

Над элементами массива можно производить те же операции, которые допустимы для данных его базового типа. Если два массива имеют одинаковые типы индексов и одинаковые типы элементов, то к ним применимы булевы операции (<>=).

Основные операции обработки одномерного массива

Заполнение одномерного массива

Для того чтобы заполнить массив необходимо последовательно перебрать все ячейки (компоненты) массива и записать в них некоторые значения. Для перебора ячеек массива используется цикл for , в котором с помощью счетчика перебираются индексы ячеек. Заносимые в массив данные могут запрашиваться как с клавиатуры, так и выбираться случайным образом с помощью генератора случайных чисел Random.

Рассмотрим разные варианты ввода одномерного массива.

  1. Ввод массива с использованием цикла с параметром

Программный код:
Program Primer;
Var i: integer;
     X: array [1..30] of Integer;
Begin
     For i := 1 To 30 Do Read (X[i]);
     Readl
End.

Блок схема алгоритма ввода массива представлена на рисунке 1:

Начало

i:=1,30

Ввод x[i]

Конец

Рисунок 1. Блок схема алгоритма ввода массива

  1. Ввод массива с использованием цикла с постусловием

Программный код:
Program Primer;
Var i: integer;
     X: array [1..30] of Integer;
Begin
     i := 1;
     While i <= 30 Do
         Begin
            Read (X[i]); 
            i := i + 1;
          End;
       Readln
End

Блок схема алгоритма ввода массива представлена на рисунке 2:

Начало

Конец

i:=1

i<=30

Ввод x[i]

i:=i+1

Да

Нет

Рисунок 2. Блок схема алгоритма ввода массива( 2 способ)

Можно ввести с клавиатуры элементы следующим образом: -7 _ 4 _ -2 _ 0 _ 12 _ -1 _ -5 _  9 _ 11 _ -3 _ -5 _ … _15, то есть через пробел ввести в строчку и нажать клавишу Enter.

Можно было ввести элементы в столбец, отделяя элементы клавишей Enter, то есть каждый элемент с новой экранной строки:

-7 Enter

4 Enter

-2 Enter

....

15 Enter

Вывод одномерного массива

Вывод одномерного массива осуществляется аналогично. В программе вместо операторов Read или Readln используются операторы Write или Writeln. Но просто заменить одни операторы на другие здесь недостаточно. Для того чтобы выводимые значения не сливались между собой, надо явным образом вставлять между ними разделитель – пробел или перевод строки.

Рассмотрим два варианта вывода массива:

For i := 1 To n Do Write (X[i],’ ‘);

For i := 1 To n Do Writeln (x[i]).

Пример для приведенных двух вариантов вывода массива выглядят так:

Выведем одномерный массив Х1, Х2, …, Хn, состоящий из 30 элементов целого типа (30 единиц), используя цикл с параметром.

Программный код выгладит таким образом:

Program Primer;
Const n = 30;
Var i: Integer;
     X: Array [1..n] Of Integer;
Begin
        For i:=1 to n do x[i]:=1;
        For i:= 1 To n Do Write (X[i]);
        Writeln; {курсор переводит на новую строку}
        Readln;
End.

Блок схема алгоритма представлен на рисунке 3:

Начало

x[i]:=1

Ввод x[i]

i:=1,30

i:=1,30

Конец

Рисунок 3. Блок схема алгоритма вывода массива

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

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

      1. сначала задаются переменные (max и min), в которые в результате выполнения алгоритма будут записаны соответственно максимальное и минимальное значения;
      2. следующим этапом происходит перебор массива. На каждом шаге происходит проверка «является ли данный элемент больше максимального или меньше минимального». Если условие истинно, то значение элемента массива присваивается соответствующей переменной;

Основной алгоритм выглядит следующим образом:

Max:= - 16000;

Min:= 16000;

For i:=1 to n do

begin

If mas[i]>max then max:=mas[i];

If mas[i]<min then min:=mas[i];

End;

Рассмотри ход выполнения.

В таблице представлен массив с элементами и их индексами.

9

-7

0

-10

Элементы

1

2

3

4

Индексы

Таблица 1 - Одномерный массив

В таблице 2 представлены шаги с объяснением действий.

i =

Данные

Условие

Ответ

Действие

Шаг 1

1

Max=-32000

Min=32000

Mas[1] = 9

9 > -32000 9 < 32000

истина

истина

Max=9

Min=9

Шаг 2

2

Max=9

Min=9

Mas[2]= - 7

-7 > 9

-7 < 0

ложь

истина

Max=9

Min= - 7

Шаг 3

3

Max=9

Min= - 7

Mas[3]=0

0 > 9

0 < -7

ложь

ложь

Max=9

Min= - 7

Шаг 4

4

Max=9

Min= - 7

Mas[4] = - 10

-10 > 9

- 10 < -7

ложь

истина

Max=9

Min= - 10

Таблица 2 - Описание шагов алгоритма

Сортировка массива

Сортировкой называется процесс упорядочивания набора данных одного типа по возрастанию или убыванию значения какого-либо признака.

При применении сортировки массива обязательно надо знать:

  1. Так как в отсортированных массивах осуществить поиск необходимой информации значительно быстрее по сравнению с несортированными, то сортировка массивов является значимым действием в системах сбора и поиска информации.
  2. Алгоритмов по сортировке много и основное их отличие это скорость работы;
  3. Способы, обладающие максимальной скоростью сортировки дают огромный выигрыш на больших массивах, которые могут содержать до тысячи элементов, но для малых массивов можно применять способы по проще.

Рассмотрим способы сортировки:

      1. Линейная сортировка (сортировка отбором)

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

      1. Сортировка методом «пузырька»

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

      1. Метод быстрой сортировки с разделением.

В основу этого способа лежит метод последовательного дробления массива на части и обмен элементами между частями.

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

  1. Задача 1. Сформировать одномерный массив из N элементов, где элементы массива- целые случайные числа в пределах от 1 до 45. Напечатать элементы массива в прямом и обратном порядке.

Рассмотрим решение. Для получения случайных чисел воспользуемся следующей функцией: функция Random [(x)], которая формирует случайное число от 0 до X целого или вещественного типа (перед обращением к функции ее целесообразно инициализировать, использовав процедуру Randomize).
X - параметр, несущий информацию о диапазоне значений случайного числа, изменяющегося в пределах 0 до X. Результат в этом случае имеет тип число в диапазоне значений - 0...65535. Если параметр X не задан, результат будет типа Real в пределах 0.0 <Х< 1.0. Для получения массива целых

случайных чисел из диапазона от [А,В] 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 – номер последней строки и последнего столбца матрицы.

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

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

Заключение

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

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

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

Список литературы

  1. Г.Г. Рапаков, С.Ю. Ржеуцкая “Turbo Pascal для студентов и школьников“, Санкт-Петербург, «БХВ-Петербург», 2011г.
  2. А.И. Гусева “ Учимся программировать: Pascal 7.0”, Москва, «Диалог-МИФИ», 2011г.
  3. С.В. Вольский, П.А. Дмитриев “Turbo Pascal 7.0 для студентов и школьников“, Санкт-Петербург, «Наука и Техника», 2007г.
  4. Д.М. Ушаков, Т.А. Юркова “Паскаль для школьников”, Москва-Санкт-Петербург, «ПИТЕР», 2008г.
  5. Информатика: Учеб. пособие для студ. пед. вузов / А.В. Могилев, Н.И. Пак, Е.К. Хеннер – М.: Изд. Центр «Академия», 2001
  6. Мизрохи. Turbo Pascal и объектно-ориентированное программирование. – М.: Финансы и статистика, 1992
  7. Программирование в Delphi – М.: ЗАО «Издательство БИНОМ», 2000