Remkomplekty.ru

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

Вычислить сумму матрицы паскаль

Сумма элементов матрицы

Сумма элементов матрицы
в общем нужно скоро сдавать лабу, я всё никак не могу решить задачу.. задана квадратная матрица.

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

Сумма диагональных элементов матрицы
Условие: Задана квадратная матрица A(8, 8). Найти сумму диагональных элементов матрицы (по главной.

Сумма элементов столбца матрицы
Задана матрица (3*3). Найти сумму любого столбца (номер ввести с клавиатуры). Вычисление суммы.

По-моему так :

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

Если формальный параметр описан со служебным словом var, то его называют параметром-переменной и говорят, что он передается по ссылке. Если же параметр описан без слова var, то его называют параметром-значением и говорят, что он передается по значению.

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

Тогда при вызове PrintSquare(5*a-b) значение 5*a-b будет вычислено и присвоено переменной i, после чего выполнится тело процедуры.
Если параметр передается по ссылке, то при вызове подпрограммы фактический параметр заменяет собой в теле процедуры соответствующий ему формальный параметр. В итоге любые изменения формального параметра-переменной внутри процедуры приводят к соответствующим изменениям фактического параметра. Например, если описана процедура

Да уж верно. Теперь всё понятно. Спасибо.

Добавлено через 2 минуты
Т. е. , когда я задал сразу:

По-моему так :

Вот окончательная прога, что бы было солидарно и корректно

думаю, что человеку, который просит помощи в такой программе особо неважно КАК оно написано.
и согласен я не с кодом, а с алгоритмом в том плане, что он поозрачен и легко доступен для понимания.
а то что глабальные переменные лучше не использовать, так это не дают на начальных этапах обучения программированию. лично мне это рассказали когда мне закончили преподавать ОСНОВЫ программирования (основной целью является дать понять принципы программирования) и начали давать всеми любимый Си.
использование var у автора проги — это недоконца понимание продцедур и функций и передачи параметров. этому учат.

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

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

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

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

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

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).

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

Вычислить сумму матрицы паскаль

Двумерные массивы (матрицы)

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

Каждый элемент матрицы описывается, как

где:
A(i,j) — значение элемента матрицы
А — имя матрицы
i — номер строки
j — номер столбца

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

Прямоугольная матрица

Квадратная матрица

Соотношение индексов в квадратной матрице

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

1 способ:

где:
— идентификатор массива
array — массив
— количество строк в матрице — количество столбцов в матрице
of — для
— описание типа переменных в массиве (real, integer и т. д.)

Пример:
Массив А состоит из 4 столбцов и 3 строк, значение каждого элемента матрицы представляет собой вещественное число.
а : array [1..3,1..4] of real;

Массив В и С состоят из 3 строк и 3 столбцов, значение каждого элемента матрицы представляет собой целое число.
b, с : array [1..3,1..3] of integer;

2 способ:

Пример:
Массив А состоит из 4 столбцов и 3 строк, значение каждого элемента матрицы представляет собой вещественное число.
а : array [1..3] of array [1..4] of real;

Массив В и С состоят из 3 строк и 3 столбцов, значение каждого элемента матрицы представляет собой целое число.
b,c : array [1..3] of array [1..3] of integer;

Ввод — вывод значений элементов матрицы

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

program zadacha (input, output); (ввод с клавиатуры, вывод в столбик>
var
a: array[1..10,1..10] of real;
j, i: integer;
begin
for i:=1 to 10 do
for j:=1 to 10 do
begin
readln (a[i, j]);
writeln ( ‘a(‘, i, ‘,’, j, ‘)=’, a[i,j])
end
end.

Заполнение элементов матрицы по формуле

program zadacha (input, output) ; <ввод по формуле, вывод таблицей>
var
a: array[1..10,1..10] of real;
i,j: integer;
begin
for i:=1 to 10 do
begin
for j:=1 to 10 do
begin
a[i,j]: = (i + 0.5)/(j + sin(j));
write ( a[i,j], ‘ ‘)
end;
writeln
end
end.

Заполнение элементов матрицы случайными числами

program zadacha (input,output); <ввод случайных чисел, вывод в строчку>
var
a: array[1..10,1..10] of integer;
i,j: integer;
begin
randomize;
for i:=1 to 10 do
for j:=1 to 10 do
begin
a[i,j]:=random(30);
write ( ‘а(‘, i, ‘,’, j, ‘)=’, a[i,j])
end
end.

Типовые задачи на матрицы

Нахождение экстремумов
Дана прямоугольная матрица A(10,15), заполненная случайными числами в диапазоне от 0 до 29 включительно. Выдать на печать максимальное значение элементов данной матрицы.

program zadacha (input, output); <нахождение наибольшего значения>
var
a: array[1..10,1..15] of integer;
i,j,max: integer;
begin
randomize;
for i:=1 to 10 do
for j:=1 to 15 do a[i,j]:=random(30);
max:=a [1,1];
for i:=1 to 10 do
for j:=1 to 15 do
if a[i,j]>max then max:=a[i,j]; writeln ( ‘максимальное значение=’,тах)
end.

Суммирование значений элементов матрицы
Дана матрица A(l,15), заполненная датчиком случайных чисел. Найти сумму значений всех элементов данной матрицы.

program zadacha (input, output) ; <сумма значений элементов матрицы>
var
a: array[1..10,1..l5] of integer;
i,j,s: integer;
begin
s:=0;
randomize;
for i:=1 to 10 do
for j:=1 to 15 do
begin
a [i,j]:=random(30);
s:=s + a[i,j]
end;
writeln ( ‘сумма значений=’,s)
end.

Нахождения количества значений элементов матрицы
Дана матрица A(10,20), заполненная датчиком случайных чисел в диапазоне от -10 до 19 включительно. Подсчитать количество положительных значений элементов каждой строки матрицы.

program zadacha (input, output) ; <кол-во знач. элементов в каждой строке матрицы>
var
a: array[1..10,1..20] of integer;
i,j,k: integer;
begin
for i:=1 to 10 do
begin
k:=0;
for j:=1 to 20 do
begin
a[i,j]:=random (30)-10;
if a[i,j]>0 then k:=k+1
end;
writeln ( ‘кол-во полож. знач. в ‘, i, ‘ строке=’,k)
end;
end.

Формирование нового одномерного массива из значений элементов матрицы
Дана матрица, состоящая из 10 строк и 5 столбцов и заполненная случайными числами в диапазоне от 0 до 29. Сформировать одномерный массив SUM из сумм значений элементов каждого столбца матрицы.

program zadacha (input, output); <формирование одномерного массива из сумм по столбцам>
var
a: array[1..10,1..5] of integer;
sum: array[1..5] of integer;
i,j,s: integer;
begin
for i:=1 to 10 do
for j:=1 to 5 do
begin
a [i,j] :=random (30) ;
writeln (‘эл-нт мас-ва=’,a[i,j])
end;
for j:=1 to 5 do
begin
s:=0;
for i:=1 to 10 do s:=s + a[i,j];
sum[j]:=s
end;
for i:=1 to 5 do writeln ( ‘sum(‘, i,’)=’,sum(i))
end.

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

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

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

  • 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]

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