Максимальный элемент матрицы паскаль - Мир ПК
Fruitsekta.ru

Мир ПК
10 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Максимальный элемент матрицы паскаль

Двумерные массивы паскаль

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

Рассмотрим матрицу 3*3, то есть она будет состоять из 3 строк и 3 столбцов:

Каждый элемент обладает 2-мя индексами. Первый — номер строки, в котором располагается элемент, а второй – номер столбца. Следовательно, индекс элемента определяется местом пересечением столбца и строки . Например, a13 – это элемент, стоящий в первой строке и в третьем столбце массива.

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

Имеется ряд методов объявления двумерного массива.

Рассмотри способ, в котором указывается тип элемента и переменные.

В данном варианте матрица mas состоит из 4 строк, в каждой из которых 9 столбцов. При этом мы можем обратиться к любой i -й строке через mas [ i ], а к j -му элементу внутри i строки – m [ i , j ].

Во втором и третьем способе матрицу можно задать в одну строку.

Как и в предыдущем варианте, матрица имеет 4 строки и 9 столбцов, обращение к какому-либо элементу массива имеет вид: mas [ i , j ]. Значит, что элемент, расположен в i -й строке и j -м столбце. Важно не перепутать строки со столбцами, иначе произойдет ошибка в ответе.

Основные действия с двумерными массивами Паскаля

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

в ходе выполнения такой программы матрице а можно присвоить значения матрицы b ( a := b ).

Ввод двумерного массива Паскаля.

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

Проанализируем образец ввода двумерного массива Паскаля с клавиатуры:

Способ заполнения двумерного массива Паскаля зависит от поставленной задачи. Например, функцию random (N) позволяет заполнять матрицу случайными величинами a[i,j]:=random(25)-10. Некоторые задачи требуют содержание выражений в матрице. Не забывайте, что в любом случае должен быть определен каждый элемент в каждых строках и столбцах.

Вывод двумерного массива Паскаля на экран.

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

Примечание! Использовать операторы readln ( a [ i , j ]), writeln именно в таком виде, в противном случае компилятор не сможет считать и напечатать элемент. Ввод в программу операторов в таком виде readln (a), writeln (a) не допустим, так как а – это переменная типа массив.

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

В памяти ЭВМ элементы двумерного массива располагаются последовательно и занимают несколько байт. Например, элементы массива типа integer, будут занимать по 2 байта. А весь массив займет S^2 байта, где S – количество элементов в массиве.

В матрице для каждого элемента типа integer потребуется 2 байта памяти. Рассмотрим пример.

В данном случае необходимо 24 байт памяти.

Модель размещения массива M типа matrix в памяти.

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

Между переменной и адресом ячейки устанавливается соответствие, однако, при объявлении матрицы программе известно только адрес начала массива, к остальным элементам адрес вычисляется по формуле:

где Addres – местоположение первого элемента, выделенного для массива; I , J – индексы элемента в двумерном массиве; SizeElemt – размер элемента массива (например, 2 байта для элементов типа integer ); sum – количество элементов в строке.

Читать еще:  Метод хорд паскаль

SizeElemt * sum *( I -1)+ SizeElemt *( J -1) — смещение относительно начала массива.

Какой размер памяти выделяется для массива?

Чтобы программа работала нормально, компьютер выделят память сегментами по 64 Кбайт. Один из сегментов отводится для данных, которые обрабатываются программой. Для каждой переменной отводится свой сегмент. Например, если переменная состоит из массива, то он не сможет занимать места больше, чем 65536 байт. Естественно, кроме массива в сегменте могут находится и другие переменные, поэтому объем памяти вычисляется по формуле 65536- S , где S – размер памяти, ранее отведенные под другие переменные.

Рассмотрим пример, в котором:

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

Можно без труда подсчитать количество элементов, которые допустимы по формуле: 65536/2 –1=32767. Однако, других переменных не должно быть. Матрицы обладают еще меньшими пределами индексов.

Решим задачу с двумерным массивом Паскаля.

Задача: Вычислить произведение ненулевых элементов матрицы.

Решение:

  • Для начала нужно установить переменные: матрицу, состоящую из целочисленных элементов; P – произведение элементов, не равное 0; I , J – индексы массива; N , M – количество строк и столбцов в матрице.
  • Входные данные N , M пусть вводятся с клавиатуры, а матрица зададим с помощью функции random ().
  • Выходными параметром получим P (произведение).
  • Выведем матрицу на экран, для проверки работы программы.

А теперь поговорим о процедурах.

Примечание! Тип массива должен быть определен заранее. Например:

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

Print – процедуры вывода на экран матрицы, которая передается по значению.

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

Итак, опишем ход выполнения программы.

  • Ввод значений N и M ;
  • Обращаемся к процедурам vvod ( a ) и print ( a ) для ввода и вывода матрицы соответственно, где а – матрица;
  • Переменной, которая отвечает за произведение P, присвоим значение 1;
  • Поочередно перебираем элементы матрицы с индексом 11 до элемента с индексом Каждый элемент матрицы должен удовлетворять условию: если a ij ? 0, то произведение P умножаем на элемент a ij ( P = P * a ij );
  • Выводим на экран результат произведения ненулевых элементов матрицы – P

лабы по информатике, егэ

лабораторные работы и задачи по программированию и информатике, егэ по информатике

Pascal: Занятие № 10. Двумерный массив в Pascal

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

Матрица или двумерный массив – это прямоугольная таблица чисел (или других элементов одного типа). Каждый элемент матрицы имеет два индекса (номер строки и номер столбца).

Исходные данные для решения многих задач можно представить в табличной форме:

Таблица результатов производственной деятельности нескольких филиалов фирмы может быть представлена так:

zavod1: array [1..4] of integer; zavod2: array [1..4] of integer; zavod3: array [1..4] of integer;

Или в виде двумерного массива так:

var A: array[1..3,1..4] of integer;

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

Варианты описания двумерного массива

    Описание массива в разделе переменных:

const N = 3; M = 4; var A: array[1..N,1..M] of integer;

const M=10; N=5; type matrix=array [1..M, 1..N] of integer; var A: matrix;

for i:=1 to N do for j:=1 to M do begin write(‘A[‘,i,’,’,j,’]=’); read ( A[i,j] ); end;

Следующий фрагмент программы выводит на экран значения элементов массива по строкам:

for i:=1 to N do begin for j:=1 to M do write ( A[i,j]:5 ); writeln; end;

Рассмотрим следующую задачу: Получены значения температуры воздуха за 4 дня с трех метеостанций, расположенных в разных регионах страны:

Номер станции1-й день2-й день3-й день4-й день
1-8-14-19-18
225282620
311182025
Читать еще:  Перевод математического выражения в паскаль онлайн

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

t[1,1]:=-8;t[1,2]:=-14;t[1,3]:=-19;t[1,4]:=-18;
t[2,1]:=25;t[2,2]:=28;t[2,3]:=26;t[2,4]:=20;
t[3,1]:=11;t[3,2]:=18;t[3,3]:=20;t[3,4]:=25;

Объявление двумерного массива:

var t: array [1..3, 1..4] of integer;

  1. Распечатать температуру на 2-й метеостанции за 4-й день и на 3-й метеостанции за 1-й день.
  2. Распечатать показания термометров всех метеостанций за 2-й день.
  3. Определить среднюю температуру на 3-й метеостанции.
  4. Распечатать, в какие дни и на каких метеостанциях температура была в диапазоне 24-26 градусов тепла.

Самостоятельно подумайте, как находится сумма элементов массива pascal.

const m = 5; n = 4; var a: array[1..m,1..n] of byte; s: array[1..n] of byte; i,j, sum: byte; begin randomize; for i := 1 to m do begin for j := 1 to n do begin . <инициализация элементов массива случайными числами>. <вывод элементов массива>end; writeln end; writeln (‘————‘); <для оформления> <обнуление значений массива суммы s[]:>. <поиск сумм элементов по столбцам:>for i := 1 to n do begin for j := 1 to m do begin s[i]:=. ; end; write(. ) ; end; <поиск общей суммы:>sum:=0; . <вывод массива значений сумм по столбцам:>. write (‘ | sum = ‘, sum); readln end.

Главная и побочная диагональ при работе с двумерными матрицами в Pascal

Главная диагональ квадратной матрицы n x n (т.е. той, у которой количество строк равно количеству столбцов) проходит с верхнего левого угла матрицы (элемент 1,1) до правого нижнего угла матрицы (элемент n,n).

Побочная диагональ квадратной матрицы n x n проходит с нижнего левого угла матрицы (элемент n,1) до правого верхнего угла матрицы (элемент 1,n).

Формулу поиска элементов диагоналей проще всего искать, нарисовав элементы матрицы:

1,11,21,31,4
2,12,22,32,4
3,13,23,33,4
4,14,24,34,4

Учитывая, что первая цифра в программе будет соответствовать счетчику i, а вторая — счетчику j, то из таблицы можно вывести формулы:

Главная диагональ матрицы в Паскаль имеет формулу:
i=j
Побочная диагональ матрицы в Паскаль имеет формулу:
n=i+j-1 (или j=n-i+1 )

где n — размерность квадратной матрицы

Решение:

var i,j,n:integer; a: array[1..100,1..100]of integer; begin randomize; writeln (‘введите размерность матрицы:’); readln(n); for i:=1 to n do begin for j:=1 to n do begin a[i,j]:=random(10); write(a[i,j]:3); end; writeln; end; writeln; for i:=1 to n do begin for j:=1 to n do begin if (i=j) or (n=i+j-1) then a[i,j]:=0; write(a[i,j]:3) end; writeln; end; end.

var A:array[1..5,1..5] of integer; i,j:integer; sum,sum1,sum2:integer; begin randomize; for i:=1 to 5 do for j:=1 to 5 do A[i,j]:=random(10); write (‘Исходный массив A: ‘); for i:=1 to 5 do begin writeln; for j:=1 to 5 do write (A[i,j]:2,’ ‘); end; sum1:=0; for i:=1 to 5 do for j:=1 to 5 do if (i-j=1) then sum1:=sum1+A[i,j]; sum2:=0; for i:=1 to 5 do for j:=1 to 5 do if (j-i=1) then sum2:=sum2+A[i,j]; sum:=sum1+sum2; writeln; writeln(‘Сумма = ‘,sum); end.

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

    Рассмотрим еще один пример работы с двумерным массивом.

    var index1,index2,i,j,N,M:integer; s,min,f:real; a:array[1..300,1..300] of real; begin N:=10; M:=5; for i:=1 to N do begin for j:=1 to M do begin a[i,j]:=random(20); s:=s+a[i,j]; write(a[i,j]:3); end; writeln; end; f:=s/(N*M); writeln(‘srednee znachenie ‘,f); min:=abs(a[1,1]-f); for i:=1 to N do begin for j:=1 to M do begin if abs(a[i,j]-f)

    Максимальный элемент матрицы паскаль

    Поиск максимума и минимума (вариант 1 — максимальное и минимальное значения):

    CONST
    kol_strok=5;
    kol_stolbcov=4;
    VAR
    A:array[1..kol_strok,1..kol_stolbcov] of Real;
    i,j:integer;
    max,min:real;
    BEGIN
    for i:=1 to kol_strok do
    for j:=1 to kol_stolbcov do
    Read(A[i,j]);
    max:=A[1,1];
    min:=A[1,1];
    for i:=1 to kol_strok do
    for j:=1 to kol_stolbcov do
    begin
    if A[i,j]>max then max:=A[i,j];
    if min>A[i,j] then min:=A[i,j];
    end;
    Writeln(‘Максимальный элемент = ‘,max:4:2);
    Writeln(‘Минимальный элемент = ‘,min:4:2);
    END.

    max:=A[1,1]; — начальное значение максимума, предполагаем, что максимальный элемент стоит на пересечении 1-ой строки и 1-го столбца;
    min:=A[1,1]; — начальное значение минимума, предполагаем, что минимальный элемент стоит на пересечении 1-ой строки и 1-го столбца;
    for i:=1 to kol_strok do — перечисляем все строки
    for j:=1 to kol_stolbcov do — перечисляем все столбцы
    if A[i,j]>max then max:=A[i,j]; — если текущий элемент матрицы А больше значения переменной max, то переменной max присваиваем значение этого элемента
    if min>A[i,j] then min:=A[i,j]; — если значение переменной min больше текущего элемента матрицы А, то переменной min присваиваем значение этого элемента

    Читать еще:  Операции ввода вывода паскаль

    Поиск максимума и минимума (вариант 2 — позиции максимального и минимального элементов):

    CONST
    kol_strok=5;
    kol_stolbcov=4;
    VAR
    A:array[1..kol_strok,1..kol_stolbcov] of Real;
    i,j:integer;
    max_stroka,max_stolbec,min_stroka,min_stolbec:integer;
    BEGIN
    for i:=1 to kol_strok do
    for j:=1 to kol_stolbcov do
    Read(A[i,j]);
    max_stroka:=1;
    max_stolbec:=1;
    min_stroka:=1;
    min_stolbec:=1;
    for i:=1 to kol_strok do
    for j:=1 to kol_stolbcov do
    begin
    if A[i,j]>A[max_stroka,max_stolbec] then
    begin
    max_stroka:=i;
    max_stolbec:=j;
    end;
    if A[min_stroka,min_stolbec]>A[i,j] then
    begin
    min_stroka:=i;
    min_stolbec:=j;
    end;
    end;
    Writeln(‘Максимальный элемент = ‘,A[max_stroka,max_stolbec]:4:2);
    Writeln(‘Минимальный элемент = ‘,A[min_stroka,min_stolbec]:4:2);
    END.

    max_stroka:=1; — предположим, что максимальный элемент находится в 1-ой строке
    max_stolbec:=1; — предположим, что максимальный элемент находится в 1-ом столбце
    min_stroka:=1; — предположим, что минимальный элемент находится в 1-ой строке
    min_stolbec:=1; — предположим, что минимальный элемент находится в 1-ом столбце
    if A[i,j]>A[max_stroka,max_stolbec] then — если текущий элемент матрицы А больше элемента находящегося на пересечении max_stroka и max_stolbec, то сохраняем его позицию в наших переменных
    if A[min_stroka,min_stolbec]>A[i,j] then — если элемент находящийся на пересечении min_stroka и min_stolbe больше текущего элемента матрицы А, то сохраняем позицию текущего элемента в наших переменных

    Максимальный элемент матрицы паскаль

    Поиск максимума и минимума (вариант 1 — максимальное и минимальное значения):

    CONST
    kol_strok=5;
    kol_stolbcov=4;
    VAR
    A:array[1..kol_strok,1..kol_stolbcov] of Real;
    i,j:integer;
    max,min:real;
    BEGIN
    for i:=1 to kol_strok do
    for j:=1 to kol_stolbcov do
    Read(A[i,j]);
    max:=A[1,1];
    min:=A[1,1];
    for i:=1 to kol_strok do
    for j:=1 to kol_stolbcov do
    begin
    if A[i,j]>max then max:=A[i,j];
    if min>A[i,j] then min:=A[i,j];
    end;
    Writeln(‘Максимальный элемент = ‘,max:4:2);
    Writeln(‘Минимальный элемент = ‘,min:4:2);
    END.

    max:=A[1,1]; — начальное значение максимума, предполагаем, что максимальный элемент стоит на пересечении 1-ой строки и 1-го столбца;
    min:=A[1,1]; — начальное значение минимума, предполагаем, что минимальный элемент стоит на пересечении 1-ой строки и 1-го столбца;
    for i:=1 to kol_strok do — перечисляем все строки
    for j:=1 to kol_stolbcov do — перечисляем все столбцы
    if A[i,j]>max then max:=A[i,j]; — если текущий элемент матрицы А больше значения переменной max, то переменной max присваиваем значение этого элемента
    if min>A[i,j] then min:=A[i,j]; — если значение переменной min больше текущего элемента матрицы А, то переменной min присваиваем значение этого элемента

    Поиск максимума и минимума (вариант 2 — позиции максимального и минимального элементов):

    CONST
    kol_strok=5;
    kol_stolbcov=4;
    VAR
    A:array[1..kol_strok,1..kol_stolbcov] of Real;
    i,j:integer;
    max_stroka,max_stolbec,min_stroka,min_stolbec:integer;
    BEGIN
    for i:=1 to kol_strok do
    for j:=1 to kol_stolbcov do
    Read(A[i,j]);
    max_stroka:=1;
    max_stolbec:=1;
    min_stroka:=1;
    min_stolbec:=1;
    for i:=1 to kol_strok do
    for j:=1 to kol_stolbcov do
    begin
    if A[i,j]>A[max_stroka,max_stolbec] then
    begin
    max_stroka:=i;
    max_stolbec:=j;
    end;
    if A[min_stroka,min_stolbec]>A[i,j] then
    begin
    min_stroka:=i;
    min_stolbec:=j;
    end;
    end;
    Writeln(‘Максимальный элемент = ‘,A[max_stroka,max_stolbec]:4:2);
    Writeln(‘Минимальный элемент = ‘,A[min_stroka,min_stolbec]:4:2);
    END.

    max_stroka:=1; — предположим, что максимальный элемент находится в 1-ой строке
    max_stolbec:=1; — предположим, что максимальный элемент находится в 1-ом столбце
    min_stroka:=1; — предположим, что минимальный элемент находится в 1-ой строке
    min_stolbec:=1; — предположим, что минимальный элемент находится в 1-ом столбце
    if A[i,j]>A[max_stroka,max_stolbec] then — если текущий элемент матрицы А больше элемента находящегося на пересечении max_stroka и max_stolbec, то сохраняем его позицию в наших переменных
    if A[min_stroka,min_stolbec]>A[i,j] then — если элемент находящийся на пересечении min_stroka и min_stolbe больше текущего элемента матрицы А, то сохраняем позицию текущего элемента в наших переменных

  • Ссылка на основную публикацию
    Adblock
    detector