Untitled
raw download clone
TEXT
views 32
,
size 5284 b
Program project1;
{Програма створює прямокутну матрицю RxS дiйсних чисел, виводить її на екран}

{$mode objfpc}{$H+}

Uses crt, SysUtils,                {пiд’єднання модуля}
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

Const
    gen=6;      {загальна кiлькiсть знакiв для виведення чисел}
    fr=1;          {кiлькiсть знакiв пiсля десяткової крапки}
    n0=1;        {мiнiмальна кiлькiсть рядкiв та стовпцiв матрицi}
    nfull=10;   {максимальна кiлькiсть рядкiв та стовпцiв матрицi}
    nm=-14;    {нижня межа елементiв матрицi}
    vm=16;     {верхня межа елементiв матрицi}

Type marr=array [1..nfull,1..nfull] of real;  {тип-двовимiрний масив дiйсних чисел}


Var    {описання глобальних змiнних}
    v:string;   {повiдомлення для користувача}
    R:integer;         {реальна кiлькiсть рядкiв матрицi}
    S:integer;         {реальна кiлькiсть стовпцiв матрицi}
    m,a:marr;            {матрицi дiйсних чисел}



{функцiя введення реальної кiлькостi рядкiв/стовпцiв матрицi}
function in_n(vv:string; nn0,nnfull:integer):integer;
var
    nn:integer;    {замiсник функцiї}
begin
    repeat
        writeln(vv);
        readln(nn);
        if not((nn>=nn0) and (nn<=nnfull))
            then writeln('Недопустиме значення!');
    until (nn>=nn0) and (nn<=nnfull);
    in_n:=nn;     {передаємо значення функцiї вiд змiнної-замiсника}
end;

{процедура створення матрицi}
procedure inmarr(var mm:marr; rr,ss:integer);
var
    i:integer;    {лiчильник рядкiв}
    j:integer;    {лiчильник стовпцiв}
begin
{заповнення матрицi дiйсними числами в межах nm..vm}
    for i:=1 to rr do          {змiщення по рядкам}
        for j:=1 to ss do    {змiщення по стовпцям}
            mm[i,j]:=nm+(vm-nm)*random;
end;

{виведення елементів більших за число яке користува ввів до массиву}
function resulting_arr(m,a:marr; rr,ss:integer):marr;
var
    i:integer;    {лiчильник рядкiв}
    j:integer;    {лiчильник стовпцiв}
begin
   for i:=1 to rr do          {змiщення по рядкам}
      for j:=1 to ss do                {змiщення по стовпцям}
          if m[i,j]>0 then        {ящко елемент додатній то рахуємо}
             begin
                  resulting_arr[i,j]:=m[i,j]-a[i,j];    {до матриці яку поверне функція записуємо різницю}
             end;
end;
{процедура виведення матрицi}
procedure outmarr(mm:marr; rr,ss:integer);
var
    i:integer;    {лiчильник рядкiв}
    j:integer;    {лiчильник стовпцiв}
begin
    for i:=1 to rr do   {змiщення по рядкам}
        begin
            for j:=1 to ss do   {змiщення по стовпцям}
                write(mm[i,j]:gen:fr);
            writeln;   {перед тим, як виводити наступний рядок матрицi,
                                         курсор на екранi переводиться на наступний рядок}
        end;
end;

{Основний блок програми}
Begin
    clrscr;           {очистка екрану}
    randomize;   {запуск генератора випадкових чисел}

{введення реальної кiлькостi рядкiв та стовпців матрицi}
    v:='Введiть кiлькiсть рядкiв та стовпців матрицi в межах вiд '+IntToStr(n0)+' до '+ IntToStr(nfull);
    R:=in_n(v,n0,nfull);
    S:=R;
{створення матриць }
    inmarr(m,R,S);      {Виклик процедури створення матрицi}
    inmarr(a,R,S);       {Виклик процедури створення матрицi}
{виведення матриць }
    clrscr;          {очистка екрану}

    writeln('Матриця 1:');
    outmarr(m,R,S);         {Виклик процедури виведення матрицi}
    writeln;
    writeln('Матриця 2:');
    outmarr(a,R,S);         {Виклик процедури виведення матрицi}
    writeln;

{виведення оновленної матриці}
    outmarr(resulting_arr(m,a,R,S),R,S);

    writeln('Програму завершено. Для виходу натиснiть Enter.');
    readln;                       {затримка екрану}
End.    {ну ось i все}
close fullscreen
Login or Register to edit or fork this paste. It's free.