78187

Разработка программ обработки двумерных массивов

Лабораторная работа

Информатика, кибернетика и программирование

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

Русский

2015-02-07

70.5 KB

5 чел.

Тема: Разработка программ обработки двумерных массивов

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

Время выполнения: 2 часа

Лабораторная работа №6

Порядок выполнения работы:

  1.  Повторить изученные теоретические  сведения.
  2.  Выполнить программы primer2, matrix и matrix _2.
  3.  Получить индивидуальное задание  у преподавателя и разработать программу в соответствии с поставленной задачей.
  4.  Отлаженную, работающую программу сдать преподавателю. Работу программы показать с помощью самостоятельно разработанных тестов.

Теоретические сведения

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

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

Формат записи массивов:

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

Var <идентификатор,..> : <имя типа>;

Массив может быть описан и без представления типа в разделе описания типов данных:

Var <идентификатор,...> : array [тип индекса] of  <тип компонента>;

Примеры описания двумерных массивов

Если в описании массива задан один индекс, массив называется одномерным, если два индекса - двумерным, если n индексов — n-мерным массивом. Одномерный массив соответствует понятию линейной таблицы (вектора), двумерный - понятию прямоугольной таблицы (матрицы, набору векторов). Размерность ограничена только объемом памяти конкретного компьютера.

Двумерные массивы используются для представления матриц.

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

Type

Vector = array[1..4] of integer;

Massiv = array[1..4] of Vector;

Var

Matrix : Massiv;

Ту же структуру можно получить, используя другую форму записи:

Var Matrix : array[1..4,1..4] of integer ;

Для описания массива можно использовать предварительно определенные константы:

Const

G1 = 4; G2 = 6;

Var

MasY: array[1..Gl, l..G2] of real;

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

Например, если имеется массив A:array[1..5,1..5] of integer; , то в памяти элементы массива будут размещены по возрастанию адресов:

А[1,1] А[1,2] … А[1,5] А[2,1] А[2,2] … А[5,5].

Контроль правильности значений индексов массива может проводиться с помощью директивы компилятора R. По умолчанию директива R находится в пассивном состоянии {$R-}. Перевод в активное состояние вызывает проверку всех индексных выражений на соответствие их значений диапазону типа индекса.

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

Действия над массивами

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

Например, если массивы А и В описаны как

Var

А, В : array[1..20,1..4] of real;

то применение к ним допустимых операций даст следующий результат:

Выражение   Результат

А=В True, если значение каждого элемента массива А равно соответствующему значению элемента массива В

А<>В True, если хотя бы одно значение элемента массива А не равно значению соответствующего элемента массива В

А:=В   Все значения элементов массива В присваиваются соответствующим элементам массива А. Значения элементов массива В остаются неизменны.

Действия над элементами массива

После объявления массива каждый его элемент можно обработать, указав идентификатор (имя) массива и индекс элемента в квадратных скобках. При работе с двумерным массивом указываются два индекса, с n-мерным массивом – n индексов. Например, запись Matr[4,4] делает доступным для обработки значение элемента, находящегося в 4-ой строке 4-го столбца массива Matr.

Индексированные элементы массива называются индексированными переменными и могут быть использованы так же, как и простые переменные. Например, они могут находиться в выражениях в качестве операндов, использоваться в операторах for, while, repeat, входить в качестве параметров в операторы Read, Readin, Write, Writeln; им можно присваивать любые значения, соответствующие их типу.

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

Var  A,D     : array[l..4] of real;

В       : array[1..10,1..15] of integer;

I, J, К : integer;

S : real;

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

Для инициализации двумерного массива обычно используется вложенный оператор for, например:

Инициализация двумерного массива В:

for I := I to 10 do

for J := 1 to 15 do    B[I,J]:= 0;

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

Паскаль не имеет средств ввода-вывода элементов массива сразу, поэтому ввод и вывод значений производится поэлементно. Значения элементам массива можно присвоить с помощью оператора присваивания, как показано в примере инициализации, однако чаще всего они вводятся с экрана с помощью оператора Read или Readln с использованием оператора организации цикла for:

Ввод элементов двумерного массива В:

for I := I to 10 do

for J := 1 to 15 do Readln (B[I,J]) ;

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

Read(B[6,9]);

вводится значение элемента, расположенного в 6-ой строке 9-го столбца матрицы В.

Вывод значений элементов массива выполняется аналогичным образом, но используются операторы Write или Writeln:

Вывод элементов двумерного массива В:

for I := I to 10 do

for J := 1 to 15 do Writeln (B[I,J]);

Копированием массивов называется присваивание значений всех элементов одного массива всем соответствующим элементам другого массива. Копирование можно выполнить одним оператором присваивания, например А:=B; или с помощью оператора for:

for I := 1 to 4 do for j := 1 to 4 do A[I,j] := B[I,j];

В обоих случаях значение элементов массива B не изменяется, а значения элементов массива А становятся равными значениям соответствующих элементов массива B.

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

К := 0;

for I := 1 to 4 do 

for j := 1 to 4 do A[I,j]

if A[I,j] = 0 then К := К + 1;

После выполнения цикла переменная К будет содержать количество элементов массива А с нулевым значением.

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

Например, так запишется фрагмент программы, обменивающий значения 1-го и 5-го элементов 3-й строки массива А:

Vs:= A[3,5]; {Vs - вспомогательная переменная}

А[3,5]:= А[3,1];

А[3,1]:= Vs;

Пример программы ввода-вывода двумерного массива

program primer2;

uses crt;

var

i,j,n,m:integer;

massiv:array[1..10,1..10] of integer; {описан двумерный массив с именем massiv}

BEGiN

clrscr;

write('Введите количество строк массива (не больше 10): ');

read(n);      {n-количество строк}

write('Введите количество столбцов массива (не больше 10):');

read(m);    {m-количество столбцов}

for i:=1 to n do {ввод элементов двумерного массива}

begin

for j:=1 to m do

read(massiv[i,j]);

end;    {конец ввода}

writeln('Введенный массив: ');

for i:=1 to n do {вывод элементов двумерного массива}

begin

for j:=1 to m do  write(massiv[i,j]:5);

end;  {конец вывода}

readkey;

END.

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

В начале программы опишем двумерный массив с именем mas, состоящий из 10 строк и 10 столбцов (максимально) типа integer. Затем опишем переменную S, обозначающую сумму элементов, i, j-индексы соответственно строки и столбца, n,m-количество строк и столбцов.

В основной программе пользователь задает размерность матрицы (количество строк и столбцов). Затем во вложенном цикле (по i и по j) осуществляется ввод с клавиатуры элементов матрицы, а  затем вывод на экран введенного пользователем массива.

В данном примере необходимо найти сумму элементов двумерного массива. Любое нахождение суммы начинается с обнуления переменной суммы: s:=0. Затем в цикле по i и по j  вычисляется сумма:

for i:=1 to n do

begin

for j:=1 to m do

begin

s:=s+mas[i,j];

end;

end;

Program matrix;

Uses crt;

Var mas:array [1..10,1..10] of integer;

s:integer;

i,j,n,m:integer;

Begin

Сlrscr;

writeln('Введите количество строк n:');

readln(n);

writeln('Введите количество столбцов m:');

readln(m);

for i:=1 to n do {ввод элементов двумерного массива}

begin

for j:=1 to m do

begin

writeln('Введите  ',i,',',j,'-й элемент матрицы: ');

readln(mas[i,j]);

end;

end;

writeln('Введенный массив: ');

for i:=1 to n do {вывод элементов двумерного массива}

begin

for j:=1 to m do write(mas[i,j]:5);

end;  {конец вывода}

s:=0;  {обнуление суммы}

for i:=1 to n do

begin

for j:=1 to m do

begin

s:=s+mas[i,j];{вычисление суммы элементов}

end;

end;

write('Summa:');

write('S= ',S);   {вывод на экран полученной суммы}

End.

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

В начале программы опишем двумерный массив с именем mas, состоящий из 10 строк и 10 столбцов (максимально) типа integer, а также массивы B и C для положительных и отрицательных элементов соответственно. Затем опишем переменные k, l-количество положительных и отрицательных элементов соответственно, i, j - индексы соответственно строки и столбца, n, m-количество строк и столбцов.

Проверка на положительность элементов:

for i:=1 to n do

begin

for j:=1 to m do

begin

if mas[i,j]>0 then…

Если условие выполняется (i,j-й элемент является положительным), то количество положительных элементов k увеличивается на 1 и заполняется массив B:

if mas[i,j]>0 then

  begin

    k:=k+1;

    B[k]:=mas[i,j];

  end;

Аналогично выполняется проверка на отрицательность, количество отрицательных элементов l увеличивается на 1 и заполняется массив C.

Program matrix_2;

Uses crt;

Var mas:array [1..10,1..10] of integer;

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

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

i,j,k,l,n,m:integer;

Begin

Сlrscr;

writeln('Введите количество строк n:');

readln(n);

writeln('Введите количество столбцов m:');

readln(m);

{ввод-вывод элементов матрицы mas}

for i:=1 to n do

begin

for j:=1 to m do

begin

if mas[i,j]>0 then

begin

k:=k+1;

B[k]:=mas[i,j];

end;

end;

if mas[i,j]<0 then

begin

l:=l+1;

C[l]:=mas[i,j];

end;

end;

{Вывод на экран полученных массивов B и C}

write('Массив из положительных : ');

for i:=1 to k do write('  ',B[i]);

writeln;

write('Массив из отрицательных : ');

for i:=1 to l do write('  ',C[i]);

readln;

End.

Индивидуальные задания:

  1.  Дан двумерный массив 5*5. Заменить нулем  элементы, расположенные под главной диагональю.
  2.  Дан двумерный массив целых чисел. Вычислить сумму элементов, расположенных на главной и побочной диагоналях.
  3.  Дан двумерный массив целых чисел. Найти произведение максимального и минимального элементов.
  4.  Написать программу, которая вычисляет сумму элементов двумерного массива по столбцам.
  5.  Найти среднее арифметическое элементов двумерного массива.
  6.  Написать программу, которая определяет номер строки квадратной матрицы, сумма элементов которой максимальна (минимальна).
  7.  Дан массив размерностью n*m. Поделить все элементы каждой строки на наибольший по модулю элемент этой строки.
  8.  Дан двумерный массив 5*5. Заменить нулем  элементы, расположенные над главной диагональю.
  9.  Написать программу, которая вычисляет сумму элементов двумерного массива по строкам.
  10.  Написать программу, которая определяет номер столбца квадратной матрицы, сумма элементов которого максимальна.
  11.  Дан двумерный массив 5*5. Заменить нулем все его отрицательные элементы .
  12.  Дан массив размерностью n*m. Поделить все элементы каждого столбца на наименьший по модулю элемент этого столбца.
  13.  Дан двумерный массив 5*5. Заменить нулем элементы, расположенные над побочной диагональю.
  14.  Дан двумерный массив. Получить новый массив путем деления всех элементов массива на наименьший по модулю элемент.
  15.  Дан двумерный массив. Определить количество строк, в которых присутствует хотя бы один отрицательный элемент.
  16.  Дан двумерный массив. Получить новый массив путем деления всех элементов строки на наименьший по модулю элемент строки. Если наименьший элемент некоторой строки равен 0, то элементы этой строки оставить без изменений.
  17.  Дан двумерный массив размерностью 5*5. Вычислить сумму элементов, номера строк у  которых четные.
  18.  Присвоить переменной t значение true, если среднее арифметическое элементов двумерного массива больше произведения элементов, находящихся на главной диагонали. В обратном случае присвоить значение false.
  19.  Дан двумерный массив размерностью n*m, в котором не все элементы равны нулю. Получить новый массив путем деления всех элементов массива на его наименьший элемент. Если наименьший элемент равен нулю, то вывести соответствующее сообщение, а элементы массива оставить без изменения.
  20.  Дан квадратный массив размерностью 5*5. Найти произведение элементов массива, расположенных в строках, которые начинаются с отрицательного элемента.
  21.  Дан двумерный массив размерностью 5*5. Вычислить сумму элементов, номер столбца которых нечетный.
  22.  Дан двумерный массив вещественных чисел размерностью n*m. В каждой строке найти минимальный элемент, а среди них – максимальный.
  23.  Найти среднее арифметическое максимального и минимального по модулю элементов массива.
  24.  Дан двумерный массив размерностью 5*5. Получить новый массив путем деления всех элементов массива на наибольший по модулю элемент.
  25.  Дан двумерный массив размерностью 5*5. Заменить нулевые элементы, расположенные под побочной диагональю.
  26.  Дан двумерный массив размерностью 5*5. Заменить все элементы массива = С нулями. В случае если таких элементов нет, вывести соответствующее сообщение.
  27.  Дан двумерный массив вещественных чисел размерностью n*m. В каждом столбце найти максимальный элемент, а среди них – минимальный.
  28.  Дан двумерный массив 5*5. Заменить нулевые элементы, расположенные над побочной диагональю, на -1.
  29.  Дан двумерный массив размером n*m, заполненный случайным образом. Определить, есть ли в данном массиве строки, в которых есть отрицательные элементы.
  30.  Дан двумерный массив размерностью 3*4, заполненный целыми числами с клавиатуры. Сформировать одномерный массив, каждый элемент которого равен произведению четных положительных элементов.

PAGE   \* MERGEFORMAT6


 

А также другие работы, которые могут Вас заинтересовать

77897. Сравнительный анализ договора поручения, комиссии, агентского договора 27 KB
  Сравнительный анализ договора поручения комиссии агентского договора По договору поручения одна сторона поверенный обязуется совершить от имени и за счет другой стороны доверителя определенные юридические действия. По договору комиссии одна сторона комиссионер обязуется по поручению другой стороны комитента за вознаграждение совершить одну или несколько сделок от своего имени но за счет комитента. По агентскому договору одна сторона агент обязуется за вознаграждение совершать по поручению другой стороны принципала...
77898. Имущественное страхование. Формы и виды страхования 33.5 KB
  Страховой риск это событие на случай наступления которого проводится страхование. Страховой интерес убытки которые могут возникнуть у страхователя при наступлении страхового случая и от которого он страхуется. Виды страхования: I имущественное страхование: а особый объект страхования...
77899. Сравнительный анализ займа и кредита 34 KB
  В случаях когда срок возврата договором не установлен или определен моментом востребования сумма займа должна быть возвращена заемщиком в течение 30 дней со дня предъявления займодавцем требования об этом если иное не предусмотрено договором. По договору финансирования под уступку денежного требования одна сторона финансовый агент передает или обязуется передать другой стороне клиенту денежные средства в счет денежного требования клиента кредитора к третьему лицу должнику вытекающего из предоставления клиентом товаров...
77900. Договор банковского счета 31.5 KB
  Договор банковского счета По договору банковского счета банк обязуется приниматься и зачислять поступающие на счет открытый клиенту денежные средства выполнять распоряжения клиента о перечислении и выдаче соответствующих сумм со счета и проведении других операций со счета. Субъекты: банк иная кредитная организация которая имеет право на ведение банковских операций; клиент ФЛ ЮЛ. Правовое регулирование: закон о ЦБ РФ о банках и банковской деятельности инструкция ЦБ об открытии и закрытии банковских счетов счетов по вкладам...
77901. Обязательства по совместной деятельности 29.5 KB
  Обязательства по совместной деятельности По договору простого товарищества двое или несколько лиц товарищей обязуются соединить свои вклады и совместно действовать без образования ЮЛ для извлечения прибыли или достижения иной не противоречащей закону цели. СУ: вклад который должен внести каждый из товарищей в общее дело. Должна быть дана денежная оценка вклада товарищей которая определяется по соглашению сторон. Правовой режим: имущество является общей долевой собственностью товарищей договором может быть установлено иное.
77902. Інноваційні процеси 35.86 KB
  Технічні новини і нововведення проявляються у формі нових продуктів виробів технологій їх виготовлення засобів виробництва машин устаткування енергії конструкційних матеріалів. Організаційні нововведення охоплюють нові методи і форми організації усіх видів діяльності підприємств та інших ланок суспільного виробництва організаційні структури управління сферами науки і виробництва форми організації різних типів виробів і колективної праці. За масштабністю і степенем впливу на ефективність діяльності певних ланок суспільного...
77903. Инфраструктура. Система технічного обслуговування 35 KB
  Інфраструктура підприємства це комплекс цехів господарств та служб підприємства які забезпечують необхідні умови функціонування підприємства. Інфраструктура являє сотвабою своєрідний тил виробництва без якого неможлива нормальна робота підприємства. Виробнича інфраструктура підприємства це сукупність підприємств які прямо не беруть участі у створенні основної продукції підприємства але своєю діяльністю сприяють роботі основних цехів створюючи необхідні для цього умови. Виробничу структуру підприємства зокрема складають;...
77904. Організація виробництва та забезпечення якості продукції 69.43 KB
  Якість та конкурентноспроможність продукції. Стандартизація та сертифікація продукції. Державна політика у сфері управління якістю продукції.
77905. Собівартість промислової продукції та шляхи її зниження 405 KB
  Собівартість промислової продукції та шляхи її зниження Сутність поняття собівартість та зниження її зниження. Кошторис витрат і собівартість продукції Склад та структура собівартості продукції. Класифікація витрат на виробництво продукції. Фактори та шляхи зниження собівартості продукції.