Практикум по программированию Обработка числовых данных
.pdf7. МОДУЛИ ПОЛЬЗОВАТЕЛЕЙ |
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.
