Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практикум по программированию Обработка числовых данных

.pdf
Скачиваний:
562
Добавлен:
23.03.2016
Размер:
3 Мб
Скачать
☆

7. МОДУЛИ ПОЛЬЗОВАТЕЛЕЙ

241

 

 

4)определение номера строки матрицы, содержащей минимальный элемент, т. е. поиск минимального элемента всей мат рицы и номера строки, в которой он расположен (подпрограмма поиска минимального элемента);

5)удаление из матрицы строки с заданным номером;

6)определение цифр целого числа;

7)вычисление суммы элементов одномерного массива;

8)сортировка строк матрицы;

9)вывод полученных результатов:

unit ModMatr; //Вариант со статическими массивами interface

const mm=20; nn=15; kk=10; type

mas=array[1..nn] of Real; matr=array[1..mm] of mas; masbyt=array[1..kk] of Byte; masint=array[1..mm] of Integer;

function Rus(s:String):String; procedure Input(out m,n:Integer;

out b:matr); procedure Output(const m,n:Integer;

const b:matr); function MaxStr(const m,n:Integer;

const b:matr):Integer; function MinStr(const m,n:Integer;

const b:matr):Integer; procedure Udalenie(const m,n,nom:Integer;

var b:matr); procedure Zifra(a:LongInt;

out c:masbyt; out kol:Byte);

procedure Sortirov(const m:Integer; var b:matr;

var s:masint);

implementation

function Rus(s:String):String; var

i:Byte; begin

Result:='';

for i:=1 to Length(s) do case s[i] of

242

ПРАКТИКУМ ПО ПРОГРАММИРОВАНИЮ

 

 

'À'..'ï': Result:=Result+Chr(Ord(s[i])-64); 'ð'..'ÿ': Result:=Result+Chr(Ord(s[i])-16); '¨': Result:=Result+Chr(240);

'¸': Result:=Result+Chr(241); else

Result:=Result+s[i];

end;

end;

procedure Input(out m,n:Integer; out b:matr); var

i,j:Integer; begin

WriteLn(Rus('Введите количество строк ') ,Rus('и столбцов матрицы'));

ReadLn(m,n);

WriteLn(Rus('Введите элементы матрицы ') ,Rus('по строкам '));

for i:=1 to m do begin

for j:=1 to n do Read(b[i,j]);

ReadLn;

end;

end;

procedure Output(const m,n:Integer; const b:matr);

var i,j:Integer;

begin

for i:=1 to m do begin

for j:=1 to n do Write(b[i,j]:6:1,' ');

WriteLn;

end;

end;

function MaxStr(const m,n:Integer; const b:matr):Integer;

var i,j:Integer;

7. МОДУЛИ ПОЛЬЗОВАТЕЛЕЙ

243

 

 

bmax:Real; begin

bmax:=b[1,1];

Result:=1;

for i:=1 to m do for j:=1 to n do

if b[i,j]>bmax then begin

bmax:=b[i,j];

Result:=i;

end;

end;

function MinStr(const m,n:Integer; const b:matr):Integer;

var i,j:Integer; bmin:Real;

begin bmin:=b[1,1]; Result:=1;

for i:=1 to m do for j:=1 to n do

if b[i,j]<bmin then begin

bmin:=b[i,j];

Result:=i;

end;

end;

procedure Udalenie(const m,n,nom:Integer; var b:matr);

var i:Integer;

begin

for i:=nom to m-1 do b[i]:=b[i+1];

end;

procedure Zifra(a:LongInt; out c:masbyt; out kol:Byte);

var k:Byte;

244

ПРАКТИКУМ ПО ПРОГРАММИРОВАНИЮ

 

 

begin kol:=0; repeat

k:=a mod 10; kol:=kol+1; c[kol]:=k; a:=a div 10;

until a=0; end;

procedure Sortirov(const m:Integer; var b:matr;

var s:masint);

var i,k,sp:Integer; pr:Boolean; f:mas;

begin k:=0; repeat

k:=k+1;

pr:=True;

for i:=1 to m-k do if s[i]>s[i+1] then begin

pr:=False;

sp:=s[i];

s[i]:=s[i+1];

s[i+1]:=sp;

f:=b[i];

b[i]:=b[i+1];

b[i+1]:=f;

end; until pr;

end;

end.

program Modul1;

//Основная программа, использующая модуль ModMatr {$APPTYPE CONSOLE}

uses SysUtils,ModMatr;

7. МОДУЛИ ПОЛЬЗОВАТЕЛЕЙ

245

 

 

var b:matr;

m,n,imax,imin,i,j:Integer;

kol:Byte;

c:masbyt;

s:masint; begin

Input(m,n,b);

Output(m,n,b);

imax:=MaxStr(m,n,b);

imin:=MinStr(m,n,b); WriteLn('imax=',imax:3,' imin=',imin:3); if imax>imin then

begin Udalenie(m,n,imax,b); Udalenie(m,n,imin,b); m:=m-2;

end

else if imin>imax then begin

Udalenie(m,n,imin,b);

Udalenie(m,n,imax,b); m:=m-2;

end;

Output(m,n,b); for j:=1 to m do begin

Zifra(Trunc(Abs(b[j,n])), c, kol); s[j]:=0;

for i:=1 to kol do begin

Write(c[i]:2);

s[j]:=s[j]+c[i];

end;

WriteLn(s[j]:5);

end;

Sortirov(m,b,s);

Output(m,n,b); for i:=1 to m do Write(s[i]:5);

ReadLn;

end.

246

ПРАКТИКУМ ПО ПРОГРАММИРОВАНИЮ

 

//Вариант модуля с динамическими массивами

unit

ModMatrDinMas;

interface type

mas=array of Real; matr=array of mas; masbyt=array of Byte; masint=array of Integer;

function Rus(s:String):String; procedure Input(out m,n:Integer;

out b:matr); procedure Output(const m,n:Integer;

const b:matr); function MaxStr(const m,n:Integer;

const b:matr):Integer; function MinStr(const m,n:Integer;

const b:matr):Integer; procedure Udalenie(const m,nom:Integer;

var b:matr); procedure Zifra(a:LongInt;

out c:masbyt; out kol:Byte);

procedure Sortirov(const m:Integer; var b:matr;

var s:masint);

implementation

function Rus(s:String):String; var

i:Byte; begin

Result:='';

for i:=1 to Length(s) do case s[i] of

'À'..'ï': Result:=Result+Chr(Ord(s[i])-64); 'ð'..'ÿ': Result:=Result+Chr(Ord(s[i])-16); '¨': Result:=Result+Chr(240);

'¸': Result:=Result+Chr(241); else

Result:=Result+s[i];

end;

end;

//Процедура ввода исходных данных: //количества строк и столбцов матрицы,

7. МОДУЛИ ПОЛЬЗОВАТЕЛЕЙ

247

 

 

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

procedure Input(out m,n:Integer; out b:matr); var

i,j:Integer; begin

WriteLn(Rus('Введите количество строк) ,Rus(' и столбцов матрицы'));

ReadLn(m,n);

WriteLn(Rus('Введите матрицу по строкам')); SetLength(b,m,n);

for i:=0 to m-1 do begin

for j:=0 to n-1 do Read(b[i,j]);

ReadLn;

end;

end;

//Процедура вывода исходных данных – матрицы, procedure Output(const m,n:Integer;

const b:matr);

var i,j:Integer;

begin

for i:=0 to m-1 do begin

for j:=0 to n-1 do Write(b[i,j]:6:1,' ');

WriteLn;

end;

end;

//Функция определения строки, содержащей //максимальный элемент матрицы

function MaxStr(const m,n:Integer; const b:matr):Integer;

var i,j:Integer; bmax:Real;

begin bmax:=b[0,0]; Result:=0;

for i:=0 to m-1 do for j:=0 to n-1 do

if b[i,j]>bmax then

248

ПРАКТИКУМ ПО ПРОГРАММИРОВАНИЮ

 

 

begin bmax:=b[i,j]; Result:=i;

end;

end;

//Функция определения строки, //содержащей минимальный элемент матрицы function MinStr(const m,n:Integer;

const b:matr):Integer;

var i,j:Integer; bmin:Real;

begin bmin:=b[0,0]; Result:=0;

for i:=0 to m-1 do for j:=0 to n-1 do

if b[i,j]<bmin then begin

bmin:=b[i,j];

Result:=i;

end;

end;

//Функция удаления строки матрицы //с заданным номером

procedure Udalenie(const m,nom:Integer; var b:matr);

var i:Integer;

begin

for i:=nom to m-2 do b[i]:=b[i+1];

end;

//Процедура определения цифр целого числа //и формирования массива цифр

procedure Zifra(a:LongInt; out c:masbyt; out kol:Byte);

var k:Byte;

begin kol:=0; repeat

7. МОДУЛИ ПОЛЬЗОВАТЕЛЕЙ

249

 

 

k:=a mod 10; kol:=kol+1; SetLength(c,kol); c[kol-1]:=k; a:=a div 10;

until a=0; end;

//Процедура сортировки строк матрицы //по возрастанию суммы цифр целой части //последнего элемента строки

procedure Sortirov(const m:Integer; var b:matr;

var s:masint);

var i,k,sp:Integer; pr:Boolean; f:mas;

begin k:=0; repeat

k:=k+1;

pr:=True;

for i:=0 to m-k-1 do if s[i]>s[i+1] then begin

pr:=False;

sp:=s[i];

s[i]:=s[i+1];

s[i+1]:=sp;

f:=b[i];

b[i]:=b[i+1];

b[i+1]:=f;

end; until pr;

end;

end.

program Modul1Din; {$APPTYPE CONSOLE} uses

SysUtils,ModMatrdinmas; var

b:matr;

250

ПРАКТИКУМ ПО ПРОГРАММИРОВАНИЮ

 

 

m,n,imax,imin,i,j:Integer;

kol:Byte;

c:masbyt;

s:masint; begin

Input(m,n,b); WriteLn(Rus(‘Исходная матрица')); Output(m,n,b); imax:=MaxStr(m,n,b); imin:=MinStr(m,n,b);

WriteLn('imax=',imax+1:3,' imin=',imin+1:3); if imax>imin then

begin Udalenie(m,imax,b); Udalenie(m,imin,b); m:=m-2;

end

else if imin>imax then begin

Udalenie(m,imin,b);

Udalenie(m,imax,b); m:=m-2;

end;

WriteLn(Rus('Полученная матрица')); Output(m,n,b);

SetLength(s,m); for j:=0 to m-1 do begin

Zifra(Trunc(Abs(b[j,n-1])), c, kol); s[j]:=0;

for i:=0 to kol-1 do s[j]:=s[j]+c[i];

WriteLn(Rus('Сумма цифр последнего ') ,Rus('элемента строки: '),s[j]:5);

end;

Sortirov(m,b,s);

WriteLn(

Rus('Полученная отсортированная матрица ')); Output(m,n,b);

for i:=0 to m-1 do Write(s[i]:5);

ReadLn;

end.