Пример 9. 2.

Найти сумму всех элементов и след (сумму элементов главной диагонали) квадратных матриц A[k,k] и B[n,n], где k, n  – размеры матриц. Сделаем это с помощью  подпрограммы-процедуры Sum_Sled. В отличие от задания 1 в подпрограмме вычисляются два значения Sum – сумма и Sled – след.

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

program prg_9_2;

{$mode objfpc}{$H+}

uses

Classes, SysUtils, RusTrans;

const

Max=40;                                              // Максимальный размер матриц

type

Mas=array[1..Max,1..Max] of Real;     // Тип для матрицы

var

i,j,k,n:integer;

A,B:Mas;

Sum1,Sum2,Sled1,Sled2:Real;

procedure Sum_Sled(var Sum,Sled:real;M:Mas; r:integer); // Процедура

var

i,j:integer;

begin

Sum:=0;                                        // Обнуление суммы

Sled:=0;                                        // Обнуление следа

for i:=1 to r do

for j:=1 to r do

begin

Sum:=Sum+M[i,i];                  // Накопление суммы

if i=j then Sled:=Sled+M[i,j];    // Накопление следа

end;

end;

begin

writeln(Rus(‘Введите размеры матриц не более ‘),Max);

write(Rus(‘   Первая k=’));                   // Первая матрица

readln(k);

write(Rus(‘   Вторая n=’));                   // Вторая матрица

readln(n);

writeln;

writeln(Rus(‘Спасибо. Для продолжения нажмите Enter’));

writeln;

readln;

Randomize;

for i:=1 to k do                                      // Формирование A

for j:=1 to k do A[i,j]:=0.5-random;

for i:=1 to n do                                              // Формирование B

for j:=1 to n do B[i,j]:=0.5-random;

writeln(Rus(‘Матрицы заполнены случайными числами’));

writeln;

for i:=1 to k do                                      // Вывод матрицы A

begin

for j:=1 to k do write(A[i,j]:8:3);

writeln;

end;

writeln;

for i:=1 to n do                                              // Вывод матрицы B

begin

for j:=1 to n do write(B[i,j]:8:3);

writeln;

end;

readln;

Sum_Sled(Sum1,Sled1,A,k);        // Вызов процедуры для A

Sum_Sled(Sum2,Sled2,B,n);               // Вызов процедуры для B

writeln(Rus(‘Результаты’));        // Заголовок ответа

writeln;

writeln(‘Sum1=’,Sum1:5:2,’ Sled1= ‘, Sled1:5:2);

writeln(‘Sum2=’,Sum2:5:2,’ Sled2= ‘, Sled2:5:2);

readln;                                                        // Ожидание Enter

end.

Консоль перед закрытием программы:

paskal62

Выводы

  • Для упрощения программ используются подпрограммы. При их многократном использовании код вводится один раз.
  • Доступны два вида подпрограмм – функции и процедуры. Функция возвращает одно значение, процедура – ни одного или несколько.
  • Процедура вызывается по имени (со списком фактических параметров) в строке кода программы.
  • Функция вызывается по имени (со списком фактических  параметров) в выражениях. При установленной опции расширенного синтаксиса функцию можно вызывать, как процедуру. При этом значение, возвращаемое функцией, игнорируется.

В подпрограмму могут передаваться параметры-значения, параметры-переменные (со словом var, это адреса с возможностью чтения/записи), параметры-константы (со словом  const, это адреса с возможностью только чтения), параметры-выходные (со словом out, это адреса с возможностью только записи).

Twitter SEO Community Ваау! News2.ru Chipp Korica SMI2 Google Bookmarks Digg I.ua Закладки Yandex Linkstore Myscoop Communizm Ru-marks Webmarks Ruspace Linkomatic Kli.kz Web-zakladka Zakladok.net Reddit delicious Ma.gnolia Technorati Slashdot Yahoo My Web БобрДобр.ru Memori.ru rucity.com МоёМесто.ru Mister Wong



Copyright © 2009-2010 Программирование на паскале.