Главная Случайная страница


Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






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

for i:=1 to n do

for j:=1 to m do

readln(a[i]);

 

Данный фрагмент позволит ввести элементы массива по строкам.

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

 

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

for i:=1 to n do

begin

for j:=1 to n do

write(a[I,j],‘ ‘);

writeln;

end;

 

Данный фрагмент позволит вывести элементы массива в виде матрицы.

 

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

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

 

Задача.

 

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

Таблица идентификаторов

Наименование переменной Обозначения в программе
Имя массива a
Количество строк n
Количество столбцов m
Индексы массива I,j
Сумма элементов s
Произведение элементов p

 

program matr;

uses

crt;

var

a:array [1...10, 1...10] of real;

i, j, n, m: integer;

s,p :real;

begin

clrscr;

writeln(‘ Введите n<=10 , m<=10 ’);

readln (n,m);

writeln(‘ Введите элементы массива по строкам ’);

for i:=1 to n do

for j:=1 to m do

readln(a[i, j]);

s:=0; p:=1;

{ поиск суммы и произведения }

for i:=1 to n do

for j:=1 to m do

begin

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

p:=p * a[i,j];

end;

writeln(‘ Сумма элементов s=’,s:8:3);

writeln(‘ Произведение элементов p=’,p:8:3);

readln;

end.

 

Задача.

 

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

 

Таблица идентификаторов

 

Наименование переменной Обозначения в программе
Имя массива a
Количество строк и столбцов n
Индексы массива I,j
Сумма элементов над главной диагональю s

 

program matr_1;

uses

crt;

var

a:array [1...10, 1...10] of real;

i, j, n, m: integer;

s,p :real;

begin

clrscr;

writeln(‘ Введите n<=10 , m<=10 ’);

readln (n,m);

writeln(‘ Введите элементы массива по строкам ’);

for i:=1 to n do

for j:=1 to m do

readln(a[i,j]);

for i:=1 to 3 do

for j:=i +1 to 3 do

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

writeln('Сумма элементов s=', s);

readln;

end.

 

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

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

j:=i+1

 

Задача.

 

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

 

Таблица идентификаторов

 

Наименование переменной Обозначения в программе
Имя массива a
Количество строк и столбцов n
Индексы массива I,j
Флажок f

 

program matr_2;

uses

crt;

var

a: array [1...10, 1...10] of integer;

i, j, n, f : integer;

begin

clrscr;

writeln(‘ Введите n<=10 ’);

readln (n,m);

writeln(‘ Введите элементы массива по строкам ’);

for i:=1 to n do

for j:=1 to n do

readln(a[i,j]);

f:=0

for i:=1 to n do

for j:=i to n do

if a[i,j]<>a[j,i] then f:=1;

if f=0 then writeln(‘ матрица симметрична’)

else writeln (‘матрица не симметрична’);

readln;

end.

 

При решении этой задачи сравниваются элементы расположенные над главной диагональю ( a[ i,j ] ) с элементами, расположенными под главной диагональю ( a[ j,i ] ) .

 

Задача.

 

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

Таблица идентификаторов

 

Наименование переменной Обозначения в программе
Имя двумерного массива a
Имя одномерного массива b
Количество строк n
Количество столбцов m
Индексы массива I,j

program matr_3;

uses crt;

var

a: array [1...10, 1...10] of integer;

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

i, j, n, f : integer;

begin

clrscr;

writeln(‘ Введите n<=10 , m<=10 ’); readln (n,m);

writeln(‘ Введите элементы массива по строкам ’);

for i:=1 to n do

for j:=1 to m do

readln (a[i, j]);

writeln(‘ Исходная матрица ’);

for i:=1 to n do

begin

for j:= 1 to n do

write( a[I,j] , ‘ ‘);

writeln;

end;

writeln(‘ Образованный одномерный массив ’);

for j:=1 to m do

begin

b[ j ]:=1;

{ накапливается произведение элементов j столбца }

for i:=1 to n do

b[ j ]:= b[ j ] * a[ i, j ];

write( b[ j] , ‘ ‘);

end;

readln;

end.

 

Задача.

Задана целочисленная матрица a(m*n). Упорядочить элементы каждой строки по возрастанию.

Таблица идентификаторов

Наименование переменной Обозначения в программе
Имя двумерного массива a
Количество строк, столбцов n, m
Индексы массива I,j
Флажок f
Дополнительная переменная для обмена соседних элементов p

 

program mart_4;

uses crt;

var

a: array[1...10, 1...10] of integer;

i,j,n,f : integer;

begin clrscr;

writeln(‘ Введите n<=10 , m<=10 ’); readln (n,m);

writeln(‘ Введите элементы массива по строкам ’);

for i:=1 to n do

for j:=1 to m do

readln(a[i, j]);

writeln(‘ Исходная матрица ’);

for i:=1 to n do

begin

for j:=1 to n do

write(a[I,j],‘ ‘);

writeln;

end;

{ переход от строки к строке }

for i:=1 to n do

{ сортировка i-ой строки }

repeat

f:=0;

for j:=1to m-1 do

if a[i,j]>a[i,j+1] then

begin p:=a[i,j]; a[i,j]=a[i,j+1]; a[i,j+1]:=p; f:=1; end;

until f=0;

writeln(‘ Преобразованная матрица ’);

for i:=1 to n do

begin

for j:= 1 to n do

write( a[I,j] , ‘ ‘);

writeln;

end;

readln;

end.

 

f =0 - признак того, что все элементы данной строки упорядочены.

 

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

 

Задача.

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

2. Таблица идентификаторов.

Наименование переменной Обозначения в программе
Имя двумерного массива a
Количество строк n
Количество столбцов m
Индексы массива I,j
Значение максимального элемента max
Номер строки, где найден максимальный элемент kmax
Номер столбца, где найден максимальный элемент lmax

 

3. Листинг программы.

 

program lab6;

uses

crt;

var

a: array [1...10, 1...10] of real;

i, j, n, m , kmax , lmax: integer;

max :real;

begin

clrscr;

writeln(‘ Введите n<=10 , m<=10 ’);

readln(n,m);

writeln(‘ Введите элементы массива по строкам ’);

for i:=1 to n do

for j:=1 to m do

readln(a[i,j]);

{за максимальный принимается элемент a11 }

max:=a[1,1];

kmax:=1;

lmax:=1;

for i:=1 to n do

for j:=1 to m do

if a[i,j]>max then

begin

max:=a[i,j];

kmax:=i;

lmax:=j;

end;

writeln(‘max=’, max:8:3);

writeln(‘строка - ‘, kmax,’ столбец - ’,lmax);

readln;

end.

 

Вопросы для самоконтроля

 

  1. В чем состоит разница между одномерными и двумерными массивами?
  2. В каких случаях целесообразно создавать двумерные массивы?
  3. Как расположены элементы двумерного массива в памяти компьютера?
  4. Как определить количество элементов в двумерном массиве?
  5. Как определить размер памяти в байтах, выделенной под хранение двумерного массива?
  6. Какая матрица называется квадратной?
  7. Что характеризует элементы, расположенные на главной диагонали, над и под главной диагональю?

 

12.4. Методические указания для выполнения практического задания №8. «Матрицы»

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

Задание:

1. В приложении 9 выбрать свой вариант задания.

2. Выполнить практическое задание, используя пример программы обработки одвумерного массива.

3. Составить блок-схему алгоритма.

4. Написать программу и отладить ее по заранее подготовленному тесту.

5. Оформить задание в тетради для практических работ.

6. Результат выполнения программы предъявить преподавателю.

7. Ответить на вопросы самоконтроля.

8. Защитить выполненную работу у преподавателя.

 

 

Приложение 9. Таблица вариантов заданий

Вариант Задание
В данной действительной матрице размером n*m поменять местами строку, содержащую элемент с наибольшим значением, со строкой, содержащей элемент с наименьшим значением. Предполагается, что эти элементы единственны.
Дана действительная матрица размером n*m, все элементы которой различны. В каждой строке выбирается элемент с наибольшим значением, затем среди этих чисел выбирается наибольшее. Указать индексы элемента с найденным значением.
Дана целочисленная матрица размером n*m. Написать программу, формирующую двумерный массив по следующему правилу: элементы первой строки – в порядке возрастания индексов столбцов, элементы второй строки – в порядке убывания индексов столбцов и т. д.
Дана действительная матрица размером n*m. Найти среднее арифметическое каждого из столбцов, имеющих четные номера.
Дана действительная матрица размером n*m. Все элементы с наибольшим значением заменить нулями (таких элементов может быть несколько).
Дана целочисленная матрица размером n*m. Написать программу, позволяющую находить сумму наибольших значений элементов ее строк.
Дана целочисленная квадратная матрица размером n*m. Написать программу, формирующую два одномерных массива. В один переслать по строкам верхний треугольник матрицы, включая элементы главной диагонали, в другой – нижний треугольник. Полученные массивы распечатать.
Дана целочисленная квадратная матрица размером n*m. Написать программу, позволяющую исключать из нее столбец, в котором расположен минимальный элемент главной диагонали.
Дана целочисленная квадратная матрица размером n*m. Написать программу, позволяющую поменять местами элементы, расположенные в верхней и нижней четвертях, ограниченные главной и побочной диагоналями (за исключением элементов, расположенных на диагоналях)
Задана действительная матрица размером n*m. Написать программу, позволяющую заменить все элементы, наименьшие в строке, на нули.
Задана целочисленная матрица размером n*m. Написать программу, позволяющую находить строки с наименьшей и наибольшей суммой и выводить их на печать.
Задана целочисленная квадратная матрица размером n*n. Написать программу, преобразующую исходную матрицу по правилу: начетные столбцы разделить на среднее значение диагональных элементов матрицы, а четные оставить без изменения.
Задана действительная квадратная матрица размером n*n. Вычислить сумму тех из ее элементов, расположенных на главной диагонали и выше ее, которые превосходят по величине все элементы, расположенные ниже главной диагонали. Если таких элементов нет, то ответом должно служить сообщение об этом.
Задана целочисленная квадратная матрица размером n*n (n - четное). Написать программу, позволяющую менять местами элементы первой и второй строк, элементы третьей и четвертой строк и т. д.
Даны две действительные квадратные матрицы размером n*n. Получить новую матрицу, прибавлением к элементам каждого столбца первой матрицы, произведения элементов соответствующих строк второй матрицы.
Даны две действительные квадратные матрицы размером n*n. Получить новую матрицу умножением элементов каждой строки первой матрицы на наибольшее из значений элементов соответствующей строки второй матрицы.
Дана целочисленная квадратная матрица размером n*n. Найти номера строк, все элементы которых – нули.
Задан массив из целых чисел размером n и число L. Написать программу, формирующую из него матрицу, содержащую по L элементов в строке. Недостающие элементы заполнить нулями.
Дана целочисленная матрица размером n*m (m - четное). Написать программу, позволяющую менять местами элементы первого и последнего столбцов, элементы второго и (n-1)-го столбцов и т. д. до среднего столбца (n - нечетно)
Дана действительная квадратная матрица размером n*n (n - четное), все элементы которой различны. Найти наибольший элемент среди стоящих на главной и побочной диагоналях и поменять его местами с элементом, стоящим на пересечении с этими диагоналями.
Дана целочисленная матрица размером n*m. Найти максимальный по модулю элемент среди отрицательных элементов нечетных столбцов.
Дана целочисленная матрица размером n*m и число K. Написать программу, переставляющую строки и столбцы таким образом, чтобы максимальный по модулю элемент был расположен на пересечении K–ой строки и K–го столбца.
Дана действительная матрица размером n*m. Все элементы с наибольшим значением заменить нулями (таких элементов может быть несколько).
Дана целочисленная матрица размером n*m. Написать программу, формирующую двумерный массив по следующему правилу: элементы первой строки – в порядке возрастания индексов столбцов, элементы второй строки – в порядке убывания индексов столбцов и т. д.
Дана целочисленная квадратная матрица размером n*n. Написать программу, позволяющую исключать из нее столбец, в котором расположен минимальный элемент главной диагонали.
В данной действительной матрице размером n*m обнулить все отрицательные элементы. Подсчитать, количество обнуленных элементов.
Дана целочисленная квадратная матрица размером n*n. Найти номера строк, все элементы которых отрицательны.
Задана целочисленная квадратная матрица размером n*n (n - четное). Написать программу, позволяющую менять местами элементы первой и последней строк, второй и предпоследней строк и т. д.
Задана целочисленная матрица размером n*m. Написать программу, позволяющую находить строки с наименьшим и наибольшим произведением элементов. Вывести на печать номера этих строк.
Даны две действительные квадратные матрицы размером n*n. Получить новую матрицу умножением элементов каждой строки первой матрицы на наименьшее из значений элементов соответствующей строки второй матрицы.

 

Подпрограммы

 

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

 

Функции и процедуры

 

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

К функциям и процедурам обращаются если необходимо:

разбить большую задачу на несколько меньших по объему и сложности задач;

уменьшить объем программы за счет выделения типовых программных действий в функции или процедуре;

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

 

Последнее изменение этой страницы: 2017-09-14

lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда...