русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Теоретическая часть


Дата добавления: 2015-08-14; просмотров: 864; Нарушение авторских прав


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

“Обработка двумерных массивов (матриц)”

 

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

Теоретическая часть

1.1. Описание двумерных массивов в языке программирования Pascal.

 

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

1. Полная:

A:array[1..10] of array[1..6] of тип;

где [1..10] – информация о строках,

[1..6] – информация о столбцах.

2. Сокращенная:

Var A:array[1..10,1..6] of тип;

Обращение к элементам двумерного массива в программе происходит по индексу, например:

X[i,j]

X[i,5]

X[1,j]

X[3+i*5,2*j]

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

for i:=1 to N do

for j:=1 to M do



В теле цикла обращение к элементу массива, который находится в i–й строке и j–м столбце, происходит как A[i,j].

1.2. Ввод и вывод двумерных массивов в языке программирования Pascal.

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

for i:=1 to N do

begin

for j:=1 to M do



begin

writeln(‘введите элемент a[’,i,’,’,j,’]’);

read(a[i,j]);

end;

end;

где N – количество строк в двумерном массиве a;

M – количество столбцов.

Можно также организовать формирование элементов массива с помощью генератора случайных чисел random:

for i:=1 to N do

for j:=1 to M do



a[i,j]=random(100);

 

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

for i:=1 to N do

for j:=1 to M do



writeln(a[i,j]);

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

Чтобы при выводе матрицы каждая ее строка выводилась на экран с новой строки, необходимо перед внутренним циклом добавить writeln:

for i:=1 to N do

begin

writeln;

for j:=1 to M do



write(a[i,j]);

end;

 

1.3. Основные алгоритмы обработки двумерных массивов.

 

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

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

S:=0;

for i:=1 to N do

S:=S+A[i,i];

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

for j:=1 to M do



for i:=1 to N do

 

1.4 Пример составления алгоритма и программы на языке Pascal для обработки двумерного массива.

 

Задание: Дана матрица целых чисел A размером 8х10. Получить массив F1,...,F10, каждый элемент которого равен количеству нулевых элементов в соответствующем столбце матрицы A.

Решение.

Описание массива A выполним в разделе описания типов Type, а описание массива F выполним в разделе описания переменных Var.

Для работы с массивом A сначала необходимо сформировать его элементы. Выполним формирование элементов массива с помощью генератора случайных чисел random. Для обозначения количества строк массива A введем переменную N, а количества столбцов – переменную M. В цикле сразу после формирования элемента массива выполним вывод его на экран.

Далее, поскольку необходимо просматривать элементы матрицы по столбцам, организуем внешний цикл с перебором всех столбцов, а внутренний – с перебором всех строк:

for j:=1 to M do

for i:=1 to N do

При этом перед внутренним циклом выполним обнуление элемента Fj, в который в результате перебора элементов j-го столбца запишется количество нулевых элементов в данном столбце. Во внутреннем цикле будем проверять условие, является ли i-элемент j-го столбца нулевым (Aij=0), и если является, то выполним увеличение Fj на единицу.

После обработки всех элементов матрицы массив F выведем на экран.

 

1.2.1 Блок-схема алгоритма решения данной задачи выглядит следующим образом:

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

 

program primer6;

uses crt;

type

matr=array[1..8,1..10] of integer;

var

A:matr;

F:array[1..10] of byte;

i,j,N,M:byte;

Begin

clrscr;

randomize;

N:=8;

M:=10;

writeln('Matrica A:');

for i:=1 to N do

begin

writeln;

for j:=1 to M do



begin

A[i,j]:=random(20)-10;

write(A[i,j]:5);

end;

end;

for j:=1 to M do



begin

F[j]:=0;

for i:=1 to N do

begin

if A[i,j]=0 then F[j]:=F[j]+1;

end;

end;

writeln;

writeln('Matrica F');

for j:=1 to M do



write(F[j]:5);

readkey;

End.

 

 

1.2.3 Результаты работы программы:

 

Matrica A:

 

7 -4 5 1 7 3 -6 -2 5 5

-7 -8 0 -9 -7 -4 -3 0 7 3

8 2 -5 -8 1 -5 -7 4 7 9

4 5 -7 7 4 8 -7 -2 -8 -3

-2 3 -9 -8 0 -8 -4 5 1 -1

3 4 -2 -2 -8 -5 2 -3 -9 3

2 -9 0 2 -9 -10 5 -6 0 5

-4 2 -2 7 -10 5 -3 -1 7 -6

 

Matrica F

0 0 2 0 1 0 0 1 1 0

 



<== предыдущая лекция | следующая лекция ==>
ПРОГРАММИРОВАНИЕ МАТРИЧНЫХ ОПЕРАЦИЙ | Практическая часть


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.782 сек.