Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2012, 16:51   #1
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию Реализация задачи в ООП

Всем доброго времени суток! Помогите пожалуйста, нужно переделать задачу в ООП. Заранее благодарю!
Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  windows,
  OperMatr in 'OperMatr.pas';
BEGIN
  setconsolecp(1251);
  setconsoleoutputcp(1251);
  REPEAT
    repeat
      write('--------------------------------------------------------------------------------');
      write('Меню: '#10);
      writeln('1) Удаление строки в матрице.');
      writeln('2) Удаление столбца в матрице.');
      writeln('3) Сумма двух матриц.');
      writeln('4) Разность двух матриц.');
      writeln('5) Произведение двух матриц.');
      writeln('6) Транспонирование матрицы.');
      writeln('7) Завершить работы.');
      write(#10'Ваш выбор: ');
      readln(k);
      if (k<1) or (k>7) then
        writeln('Ошибка ввода! Попробуйте еще!')
    until (k>=1) and (k<=7);

    case k of
      1:  begin
            writeln('Введите матрицу размерности ',m,'x',n,#10);
            Vvod(a);
            Dstr(a);
          end;

      2:  begin
            writeln('Введите матрицу размерности ',m,'x',n,#10);
            Vvod(a);
            Dsto(a);
          end;

      3:  begin
            writeln('Введите матрицу размерности ',m,'x',n,#10);
            Vvod(a);
            writeln('Введите вторую матрицу размерности ',m,'x',n,#10);
            Vvod(b);
            c:=Sym(a,b);
            PrMt(c)
          end;

      4:  begin
            writeln('Введите матрицу размерности ',m,'x',n,#10);
            Vvod(a);
            writeln('Введите вторую матрицу размерности ',m,'x',n,#10);
            Vvod(b);
            c:=Razn(a,b);
            PrMt(c)
          end;

      5:  begin
            writeln('Введите матрицу размерности ',m,'x',n,#10);
            Vvod(a);
            writeln('Введите вторую матрицу размерности ',mb,'x',nb,#10);
            Vvod(b);
            Prz(a,b,c);
            PrMt(c)
          end;

      6:  begin
            writeln('Введите матрицу размерности ',m,'x',n,#10);
            Vvod(a);
            Tran(a);
            PrMt(a)
          end;

      7:  begin
            exit
          end;
    end;
    writeln(#10,'Выйти из программы?');
    writeln('Y-выйти');
    writeln('N-остаться');
    repeat
      readln(z);
      if (z='y') or (z='Y') then
        z:='y'
      else
        if (z='n') or (z='N') then
          z:='n'
        else
          writeln('Ошибка ввода!');
    until (z='y') or (z='Y') or (z='n') or (z='N');
  UNTIL z='y'
END.
Начинающий програм вне форума Ответить с цитированием
Старый 26.10.2012, 16:52   #2
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

Модуль:
Код:
unit OperMatr;

interface
  const
    m=3;
    n=3;
    mb=3;
    nb=3;

  type
    mas=array[1..n] of integer;
    matr=array[1..m] of mas;

  var
    i,j,k:integer;
    a,b,c,s,r,p:matr;
    z:char;

  procedure Vvod(var a:matr); //ввод матрицы
  procedure Prz(a,b:matr; var c:matr); //произведение матриц
  procedure Tran(var a:matr); //транспонирование матрицы
  procedure PrMt(c:matr); //печать матрицы
  procedure Dstr(a:matr); //удаление строки в матрице
  procedure Dsto(a:matr); //удаление столбца в матрице

  function Sym(a,b:matr):matr; //сумма матриц
  function Razn(a,b:matr):matr; //разность матриц

implementation

  procedure Vvod(var a:matr);
  begin
    for i:=1 to m do
      begin
        for j:=1 to n do
          read(a[i,j]);
        readln
      end;
  end;

  procedure Dstr(a:matr);
  var
    um,un,h:integer;
  begin
    um:=m;
    un:=n;
    repeat
      write('h=');
      read(h);
      if (h>um) or (h<=0) then
      writeln('Попытка удалить из матрицы несуществующую строку!')
    until  (h<=um) and (h>=1);
    for i:=h+1 to um do
      a[i-1]:=a[i];
    um:=um-1;

    writeln('Новая матрица:',#10);
    for i:=1 to um do
      begin
        for j:=1 to un do
          if a[i,j]<10 then
            write(' ',a[i,j],' ')
          else
            write(a[i,j],' ');
          writeln
      end
  end;

  procedure Dsto(a:matr);
  var
    um,un,h:integer;
  begin
    um:=m;
    un:=n;
    repeat
      write('h=');
      read(h);
      if (h>un) or (h<=0) then
        writeln('Попытка удалить из матрицы несуществующий столбец!')
    until  (h<=un) and (h>=1);;
    for i:=1 to um do
      begin
        for j:=h+1 to un do
          a[i,j-1]:=a[i,j]
      end;
    un:=un-1;

    writeln('Новая матрица:',#10);
    for i:=1 to um do
      begin
        for j:=1 to un do
          if a[i,j]<10 then
            write(' ',a[i,j],' ')
          else
            write(a[i,j],' ');
        writeln
      end
  end;

  function Sym(a,b:matr):matr;
  begin
    for i:=1 to m do
      begin
        for j:=1 to n do
          Sym[i,j]:=a[i,j]+b[i,j]
      end
  end;

  function Razn(a,b:matr):matr;
  begin
    for i:=1 to m do
      begin
        for j:=1 to n do
          Razn[i,j]:=a[i,j]-b[i,j]
      end
  end;

  procedure Prz(a,b:matr; var c:matr);
  var
    t,u:integer;
  begin
    for i:=1 to n do
      begin
        for j:=1 to mb do
          begin
            for t:=1 to m do
              c[i,j]:=c[i,j]+a[i,t]*b[t,j]
          end
      end
  end;

  procedure Tran(var a:matr);
  var
    k,nn,mm,u:integer;
  begin
    if m>n then
      begin
        mm:=n;
        nn:=m
      end
    else
      begin
        mm:=m;
        nn:=n
      end;
    for i:=1 to mm do
      begin
        for j:=i+1 to nn do
          begin
            k:=a[i,j];
            a[i,j]:=a[j,i];
            a[j,i]:=k
          end
      end
  end;
  
  procedure PrMt(c:matr);
  begin
    writeln('Новая матрица:',#10);
    for i:=1 to m do
      begin
        for j:=1 to n do
          if c[i,j]<10 then
            write(' ',c[i,j],' ')
          else
            write(c[i,j],' ');
        writeln
      end
  end;
end.

Последний раз редактировалось Начинающий програм; 26.10.2012 в 16:55.
Начинающий програм вне форума Ответить с цитированием
Старый 27.10.2012, 11:01   #3
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

Переделайте пожалуйста хотя бы пару процедур, чтобы я понял принцип.
Начинающий програм вне форума Ответить с цитированием
Старый 27.10.2012, 11:20   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

А вы вообще не понимаете что такое ООП?
eval вне форума Ответить с цитированием
Старый 27.10.2012, 15:09   #5
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

Можно сказать и так
Начинающий програм вне форума Ответить с цитированием
Старый 27.10.2012, 17:15   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

С потолка:

Модуль класса:
Код:
unit OperMatr;

interface
  const
    m=3;
    n=3;
    mb=3;
    nb=3;

  type
    mas=array[1..n] of integer;
    matr=array[1..m] of mas;

TMyClass=class

  procedure Vvod(var a:matr); //ввод матрицы
  procedure Prz(a,b:matr; var c:matr); //произведение матриц
  procedure Tran(var a:matr); //транспонирование матрицы
  procedure PrMt(c:matr); //печать матрицы
  procedure Dstr(a:matr); //удаление строки в матрице
  procedure Dsto(a:matr); //удаление столбца в матрице

  function Sym(a,b:matr):matr; //сумма матриц
  function Razn(a,b:matr):matr; //разность матриц

end;

  var
    i,j,k:integer;
    a,b,c,s,r,p:matr;
    z:char;

implementation

  procedure TMyClass.Vvod(var a:matr);
  begin
    for i:=1 to m do
      begin
        for j:=1 to n do
          read(a[i,j]);
        readln
      end;
  end;

  procedure  TMyClass.Dstr(a:matr);
  var
    um,un,h:integer;
  begin
    um:=m;
    un:=n;
    repeat
      write('h=');
      read(h);
      if (h>um) or (h<=0) then
      writeln('Попытка удалить из матрицы несуществующую строку!')
    until  (h<=um) and (h>=1);
    for i:=h+1 to um do
      a[i-1]:=a[i];
    um:=um-1;

    writeln('Новая матрица:',#10);
    for i:=1 to um do
      begin
        for j:=1 to un do
          if a[i,j]<10 then
            write(' ',a[i,j],' ')
          else
            write(a[i,j],' ');
          writeln
      end
  end;

  procedure  TMyClass.Dsto(a:matr);
  var
    um,un,h:integer;
  begin
    um:=m;
    un:=n;
    repeat
      write('h=');
      read(h);
      if (h>un) or (h<=0) then
        writeln('Попытка удалить из матрицы несуществующий столбец!')
    until  (h<=un) and (h>=1);;
    for i:=1 to um do
      begin
        for j:=h+1 to un do
          a[i,j-1]:=a[i,j]
      end;
    un:=un-1;

    writeln('Новая матрица:',#10);
    for i:=1 to um do
      begin
        for j:=1 to un do
          if a[i,j]<10 then
            write(' ',a[i,j],' ')
          else
            write(a[i,j],' ');
        writeln
      end
  end;

  function  TMyClass.Sym(a,b:matr):matr;
  begin
    for i:=1 to m do
      begin
        for j:=1 to n do
          Sym[i,j]:=a[i,j]+b[i,j]
      end
  end;

  function  TMyClass.Razn(a,b:matr):matr;
  begin
    for i:=1 to m do
      begin
        for j:=1 to n do
          Razn[i,j]:=a[i,j]-b[i,j]
      end
  end;

  procedure  TMyClass.Prz(a,b:matr; var c:matr);
  var
    t,u:integer;
  begin
    for i:=1 to n do
      begin
        for j:=1 to mb do
          begin
            for t:=1 to m do
              c[i,j]:=c[i,j]+a[i,t]*b[t,j]
          end
      end
  end;

  procedure TMyClass. Tran(var a:matr);
  var
    k,nn,mm,u:integer;
  begin
    if m>n then
      begin
        mm:=n;
        nn:=m
      end
    else
      begin
        mm:=m;
        nn:=n
      end;
    for i:=1 to mm do
      begin
        for j:=i+1 to nn do
          begin
            k:=a[i,j];
            a[i,j]:=a[j,i];
            a[j,i]:=k
          end
      end
  end;
  
  procedure  TMyClass.PrMt(c:matr);
  begin
    writeln('Новая матрица:',#10);
    for i:=1 to m do
      begin
        for j:=1 to n do
          if c[i,j]<10 then
            write(' ',c[i,j],' ')
          else
            write(c[i,j],' ');
        writeln
      end
  end;
end.
Прога:
Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  windows,
  OperMatr in 'OperMatr.pas';

var My:TMyClass;
BEGIN

 My:=TMyClass.Create;

  setconsolecp(1251);
  setconsoleoutputcp(1251);
  REPEAT
    repeat
      write('--------------------------------------------------------------------------------');
      write('Меню: '#10);
      writeln('1) Удаление строки в матрице.');
      writeln('2) Удаление столбца в матрице.');
      writeln('3) Сумма двух матриц.');
      writeln('4) Разность двух матриц.');
      writeln('5) Произведение двух матриц.');
      writeln('6) Транспонирование матрицы.');
      writeln('7) Завершить работы.');
      write(#10'Ваш выбор: ');
      readln(k);
      if (k<1) or (k>7) then
        writeln('Ошибка ввода! Попробуйте еще!')
    until (k>=1) and (k<=7);

    case k of
      1:  begin
            writeln('Введите матрицу размерности ',m,'x',n,#10);
            my.Vvod(a);
            my.Dstr(a);
          end;

      2:  begin
            writeln('Введите матрицу размерности ',m,'x',n,#10);
            my.Vvod(a);
           my. Dsto(a);
          end;

      3:  begin
            writeln('Введите матрицу размерности ',m,'x',n,#10);
            my.Vvod(a);
            writeln('Введите вторую матрицу размерности ',m,'x',n,#10);
            my.Vvod(b);
            c:=my.Sym(a,b);
            my.PrMt(c)
          end;

.........

      7:  begin
            exit
          end;
    end;
 .........

FreeAndNil(my);
END.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация задачи на С/С++ aspen Общие вопросы C/C++ 0 21.10.2012 15:40
4 задачи паскаль ООП. Срок вторник днем по москве thebestneo Фриланс 2 21.12.2010 13:03
Массивы массивов и реализация задачи javadeveloper Общие вопросы по Java, Java SE, Kotlin 1 30.07.2010 20:13
Задачи по ООП tavrocotaps Общие вопросы .NET 5 15.01.2010 18:48
Две задачи на зачет по ООП. Помогите пожалуйста :+) (буду признателен) ar.poker Паскаль, Turbo Pascal, PascalABC.NET 0 19.12.2008 17:41