Fruitsekta.ru

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

Сумма элементов строки матрицы паскаль

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

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

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)

    Ввод вывод матриц в Паскале

    Ввод или вывод матриц на языке программирования Паскаль выполняются с использованием вложенных циклов, при этом в список ввода/вывода помещается переменная с индексом.

    Вводить матрицы в Паскале можно по элементам или по строкам

    • For i:=1 to n do

    For j:=1 to n do Read(x[i, j]);
    -2
    3
    . . .
    5

    • For i:=1 to n do

    Begin
    For j:=1 to n do Read(x[i, j]);
    Readln;
    End;

    -2 3 6 2
    . . .
    4 2 1 7

    Аналогично можно записать процедуры вывода, но при этом необходимо предусмотреть разделительные пробелы и форматы выводимых данных.

    For i:=1 to n do
    Begin
    For j:=1 to n do Write(x[i, j]:4);
    Writeln;
    End;

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

    Пример №12.1. Сформировать матрицу случайных целых чисел в диапазоне -10..10 и найти ее максимальный элемент. Программу написать на языке Паскаль.

    Текст программы

    Program м3;
    Uses CRT;
    Const n=4; m=5;
    k1=10;
    k2=k1*2+1;
    Type matr =array[1..n,1..m] of integer;
    Var
    a :matr;
    i, f, ma :integer;
    Begin
    ClrScr;
    Randomize;
    Writeln(‘Исходная матрица:’);
    For i:=1 to n do
    Begin
    For j:=1 to m do
    Begin
    f:=random(k2);
    a[i, j]:=k1-f;
    Write(a[i,j]:3,’ ‘:3);
    End;
    Writeln;
    End;
    ma:=a[1, 1];
    For i:=1 to n do
    For j:=1 to m do
    If a[i, j]>ma then ma:=a[i, j];
    Writeln;
    Writeln(‘Результат:’);
    Writeln(‘ma=’,ma);
    Repeat Until KeyPressed
    End.

    Пример 12.2. Найти сумму положительных элементов элемент в каждом столбце матрицы, заданной в файле inp.txt.
    4 -3 5 -7 -8
    3 9 -1 -2 6
    -3 6 -5 4 -2
    -4 -5 2 7 -3

    Текст программы

    Program ma11;
    <Найти сумму положительных элементов элемент в каждом столбце матрицы>
    Uses CRT;
    Const
    n = 4; m=5;
    Type
    vec =array[1..m] of integer;
    mat =array[1..n] of vec;
    t =text;
    Var
    a : mat;
    max : vec;
    ma : integer;
    i,j : byte;
    f1 : t;
    Begin
    ClrScr;
    Assign(f1,’inp.txt’);Reset(f1);
    Writeln(‘Исходный масив:’);
    For i:=1 to n do
    Begin
    For j:=1 to m do
    Begin
    Read(f1,a[i,j]);
    Write(a[i,j]:5);
    End;
    Readln(f1);Writeln
    End;
    Writeln;
    for j:=1 to m do
    Begin
    ma:=a[1,j];
    for i:=1 to n do
    If a[i,j]>ma then ma:=a[i,j];
    max[j]:=ma;
    End;
    Writeln(‘Результат:’);
    for j:=1 to m do Write(max[j]:6);
    Readln;
    end.

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

    Исходный массив:
    4 -3 5 -7 -8
    3 9 -1 -2 6
    -3 6 -5 4 -2
    -4 -5 2 7 -3

    Результат:
    4 9 5 7 6

    Пример 12.3. Найти сумму положительных элементов элемент в каждой строке матрицы, заданной в файле inp.txt.
    4 -3 5 -7 -8
    3 9 -1 -2 6
    -3 6 -5 4 -2
    -4 -5 2 7 -3

    Текст программы

    Program ma1;
    <Найти сумму положительных элементов в каждой строке матрицы>
    Uses CRT;
    Const
    n = 4; m=5;
    Type
    vec =array[1..n] of integer;
    mat =array[1..n,1..m] of integer;
    t =text;
    Var
    a : mat;
    sp : vec;
    s : integer;
    i,j : byte;
    f1 : t;
    Begin
    ClrScr;
    Assign(f1,’inp.txt’);Reset(f1);
    Writeln(‘Исходный массив:’);
    For i:=1 to n do
    Begin
    For j:=1 to m do
    Begin
    Read(f1,a[i,j]);
    Write(a[i,j]:5);
    End;
    Readln(f1);Writeln
    End;
    Writeln;
    for i:=1 to n do
    Begin
    s:=0;
    for j:=1 to m do
    If a[i,j]>0 then s:=s+a[i,j];
    sp[i]:=s;
    End;
    Writeln(‘Результат:’);
    for i:=1 to n do Write(sp[i]:6);
    Readln;
    end.

    Читать еще:  Формальные параметры паскаль

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

    Исходный массив:
    4 -3 5 -7 -8
    3 9 -1 -2 6
    -3 6 -5 4 -2
    -4 -5 2 7 -3

    Результат:
    9 18 10 9

    Пример 12.4. Найти сумму отрицательных элементов в каждой строке матрицы а(5х4).

    Текст программы

    Program ran_arr;
    <Найти сумму отрицательных элементов в каждой строке>
    Uses CRT;
    Const
    n = 5; m=4;
    k1 = 10;
    k2 = 2*k1+1;
    Type
    vec =array[1..n] of integer;
    mat =array[1..n,1..m] of integer;
    Var
    arr_mat : mat;
    arr_vec : vec;
    s : integer;
    i,j,f : byte;
    Begin
    ClrScr;
    Randomize;
    Writeln(‘Генерируем исходный масив’);
    For i:=1 to n do
    Begin
    For j:=1 to m do
    Begin
    f:=Random(k2);
    arr_mat[i,j] := k1-f;
    Write(arr_mat[i,j]:6);
    end;
    Writeln;
    End;
    for i:=1 to n do
    Begin
    s:=0;
    for j:=1 to m do If arr_mat[i,j] max then max:=x[i,j];
    If x[i,j]

    Вернуться в оглавление:Алгоритмические языки

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

    Двумерный массив в Паскале представляет собой таблицу, состоящую из нескольких одномерных массивов. Двумерные массивы 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
  • Ссылка на основную публикацию
    Adblock
    detector
    ×
    ×