Untitled
raw download clone
TEXT
views 30
,
size 6533 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=-8;    {нижня межа елемент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: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 maxseri(a:marr;rr,ss:integer):integer;
var
    i:integer;    {лiчильник рядкiв}
    j:integer;    {лiчильник стовпцiв}
    count,maxcount:integer; {для пірдрахунку кількості елементів що стоять
                                                                 у зростанні}
    pr:real; {будемо зберігати попереднє значення}
begin
    count:=0;    {запишемо серію на початку нуль}
    maxcount:=0;
    pr:=a[1,1]; {записуємо попереднє значення до змінної}
     for i:=1 to rr do   {змiщення по рядкам}
        begin
            for j:=1 to ss do   {змiщення по стовпцям}
               begin
                   if a[i,j]>pr then      {якщо елемент більше попередього
                                          починаємо рахувати серію зростання}
                     begin
                     count+=1;                 {збільшуємо поточну серію}
                        if count>maxcount then    {якщо поточна серія за максимальну
                                                  запишемо її}
                          maxcount:=count;
                     end
                     else count:=1;               {якщо серія завершилась доречно
                                                  поточну обнулити}
                     pr:=a[i,j];
              end;
        end;
     maxseri:=maxcount; {повернемо значення максимальної серії}




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

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

{створення матрицi }
    inmarr(m,R,S);      {Виклик процедури створення матрицi}

{виведення матрицi }
    clrscr;          {очистка екрану}

    writeln('Матриця 1:');
    outmarr(m,R,S);         {Виклик процедури виведення матрицi}
    writeln;
{виведення максимальної серії зростання}
    writeln('Максимальна кількість розташованих пілряд елементів за зростанням  ',maxseri(m,R,S)); {виводимо результат}

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