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

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

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

Восстановить пароль

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

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

Всем доброго времени суток! Помогите пожалуйста переделать задачу в объекты, описание классов у же есть, а именно переделать сами процедуры в объекты
Код:
модуль

unit UOperMatr;

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


  type
    tmas=array[1..n] of integer;
    tmatr=array[1..m] of tmas;

    TMatrix=class
             private
               fmatr:tmatr;
               i,j,k:integer;
               a,b,c,s,r,p:tmatr;
               z:char;
             public
               procedure Vvod(var a:tmatr); //ввод матрицы
               procedure Prz(a,b:tmatr; var c:tmatr; var um,un:integer); //произведение матриц
               procedure Tran(var a:tmatr; var um,un:integer); //транспонирование матрицы
               procedure PrMt(c:tmatr; um,un:integer); //печать матрицы
               procedure DstrGUE(var um,un,h:integer); //ввод номера строки для удаления
               procedure Dstr(var a:tmatr; var um:integer; h:integer); //удаление строки в матрице
               procedure DstoGUE(var um,un,h:integer); //ввод номера столбца для удаления
               procedure Dsto(var a:tmatr; var un:integer; um,h:integer); //удаление столбца в матрице
               function Sym(a,b:tmatr; var um,un:integer):tmatr; //сумма матриц
               function Razn(a,b:tmatr; var um,un:integer):tmatr; //разность матриц
           end;

    TMatrixGUI=class(TMatrix)
    public
      procedure DstrGUE();
      procedure DstoGUE();
    end;

var
  Mx1,Mx2,Mx3:TMatrix;
  {Mx1.vvod();
  Mx1.fmatr[1,1]

  MX2.vvod();
  mx3.sum(mx1,mx2);}
implementation

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

  procedure DstrGUE();
  var
    um,un,h:integer;
  begin
    um:=m;
    un:=n;
    repeat
      writeln(#10,'Какую строку хотите удалить?');
      readln(h);
      if (h>um) or (h<=0) then
      writeln('Попытка удалить из матрицы несуществующую строку!')
    until  (h<=um) and (h>=1)
  end;

  procedure Dstr();
  var
    i,h,um:integer;
  begin
    for i:=h+1 to um do
      Mx1.fmatr[i-1]:=Mx1.fmatr[i];
    um:=um-1
  end;

  procedure DstoGUE();
  var
    um,un,h:integer;
  begin
    um:=m;
    un:=n;
    repeat
      writeln(#10,'Какой столбец хотите удалить?');
      readln(h);
      if (h>un) or (h<=0) then
        writeln('Попытка удалить из матрицы несуществующий столбец!')
    until  (h<=un) and (h>=1)
  end;

  procedure Dsto();
  var
    i,j,um,un,h:integer;
  begin
    for i:=1 to um do
      begin
        for j:=h+1 to un do
          Mx1.fmatr[i,j-1]:=Mx1.fmatr[i,j]
      end;
    un:=un-1
  end;

  function Sym():tmatr;
  var
    i,j,um,un:integer;
  begin
    for i:=1 to m do
      begin
        for j:=1 to n do
          Mx3.Sym[i,j]:=Mx1[i,j]+Mx2[i,j]
      end;

    um:=m;
    un:=n
  end;

  function Razn():tmatr;
  var
    i,j:integer;
  begin
    for i:=1 to m do
      begin
        for j:=1 to n do
          Mx3.Razn[i,j]:=Mx1[i,j]-Mx2[i,j]
      end;

    um:=m;
    un:=n
  end;

  procedure Prz();
  var
    t,i,j,um,un:integer;
  begin
    for i:=1 to n do
        for j:=1 to mb do
            for t:=1 to m do
              Mx3.fmatr[i,j]:=Mx3.fmatr[i,j]+Mx1.fmatr[i,t]*Mx2.fmatr[t,j];

    um:=m;
    un:=n
  end;

  procedure Tran();
  var
    k,nn,mm,i,j: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
        for j:=i+1 to nn do
          begin
            k:=Mx1.fmatr[i,j];
            Mx1.fmatr[i,j]:=Mx1.fmatr[j,i];
            Mx1.fmatr[j,i]:=k
          end
  end;

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

end.

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

Я пытался переделать, но где-то наверное на ошибался, помогите пожалуйста исправить ошибки.
Начинающий програм вне форума Ответить с цитированием
Старый 15.11.2012, 19:44   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
помогите пожалуйста исправить ошибки.
Вот и начнем с них.
Выкладывай список ошибок. Но для начала опиши все процедуры так:
Код:
procedure TMatrix.Prz(a, b: tmatr; var c: tmatr; var um, un: integer);
begin

end;
т.е. "TMatrix." перед именем процедуры говорит о том что эта процедура является методом класса (пренадлежит классу.)
И еще сразу уж: Mx1.fmatr[...]. Здесь убери Mx1.
fmatr это поле класса.
I'm learning to live...

Последний раз редактировалось Stilet; 16.11.2012 в 15:57.
Stilet вне форума Ответить с цитированием
Старый 15.11.2012, 21:29   #4
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

В скобках процедуры, описывать переменные не нужно, я уже пытался сдать не приняли из-за этого

Я исправил.
Все равно не работает.

Код:
unit UOperMatr;

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


  type
    tmas=array[1..n] of integer;
    tmatr=array[1..m] of tmas;

    TMatrix=class
             private
               fmatr:tmatr;
               i,j,k:integer;
               a,b,c,s,r,p:tmatr;
               z:char;
             public
               procedure Vvod(var a:tmatr); //ввод матрицы
               procedure Prz(a,b:tmatr; var c:tmatr; var um,un:integer); //произведение матриц
               procedure Tran(var a:tmatr; var um,un:integer); //транспонирование матрицы
               procedure PrMt(c:tmatr; um,un:integer); //печать матрицы
               procedure DstrGUE(var um,un,h:integer); //ввод номера строки для удаления
               procedure Dstr(var a:tmatr; var um:integer; h:integer); //удаление строки в матрице
               procedure DstoGUE(var um,un,h:integer); //ввод номера столбца для удаления
               procedure Dsto(var a:tmatr; var un:integer; um,h:integer); //удаление столбца в матрице
               function Sym(a,b:tmatr; var um,un:integer):tmatr; //сумма матриц
               function Razn(a,b:tmatr; var um,un:integer):tmatr; //разность матриц
           end;

    TMatrixGUI=class(TMatrix)
    public
      procedure DstrGUE();
      procedure DstoGUE();
    end;

var
  Mx1,Mx2,Mx3:TMatrix;
  {Mx1.vvod();
  Mx1.fmatr[1,1]

  MX2.vvod();
  mx3.sum(mx1,mx2);}
implementation

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

  procedure Mx1.DstrGUE();
  var
    um,un,h:integer;
  begin
    um:=m;
    un:=n;
    repeat
      writeln(#10,'Какую строку хотите удалить?');
      readln(h);
      if (h>um) or (h<=0) then
      writeln('Попытка удалить из матрицы несуществующую строку!')
    until  (h<=um) and (h>=1)
  end;

  procedure Mx1.Dstr();
  var
    i,h,um:integer;
  begin
    for i:=h+1 to um do
      fmatr[i-1]:=fmatr[i];
    um:=um-1
  end;

  procedure Mx1.DstoGUE();
  var
    um,un,h:integer;
  begin
    um:=m;
    un:=n;
    repeat
      writeln(#10,'Какой столбец хотите удалить?');
      readln(h);
      if (h>un) or (h<=0) then
        writeln('Попытка удалить из матрицы несуществующий столбец!')
    until  (h<=un) and (h>=1)
  end;

  procedure Mx1.Dsto();
  var
    i,j,um,un,h:integer;
  begin
    for i:=1 to um do
      begin
        for j:=h+1 to un do
          fmatr[i,j-1]:=fmatr[i,j]
      end;
    un:=un-1
  end;

  function Mx3.Sym():tmatr;
  var
    i,j,um,un:integer;
  begin
    for i:=1 to m do
      begin
        for j:=1 to n do
          Mx3.Sym[i,j]:=Mx1[i,j]+Mx2[i,j]
      end;

    um:=m;
    un:=n
  end;

  function Mx3.Razn():tmatr;
  var
    i,j:integer;
  begin
    for i:=1 to m do
      begin
        for j:=1 to n do
          Mx3.Razn[i,j]:=Mx1[i,j]-Mx2[i,j]
      end;

    um:=m;
    un:=n
  end;}

  procedure Mx1.Prz();
  var
    t,i,j,um,un:integer;
  begin
    for i:=1 to n do
        for j:=1 to mb do
            for t:=1 to m do
              fmatr[i,j]:=fmatr[i,j]+fmatr[i,t]*fmatr[t,j];

    um:=m;
    un:=n
  end;

  procedure Mx1.Tran();
  var
    k,nn,mm,i,j: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
        for j:=i+1 to nn do
          begin
            k:=fmatr[i,j];
            fmatr[i,j]:=fmatr[j,i];
            fmatr[j,i]:=k
          end
  end;

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

end.
Начинающий програм вне форума Ответить с цитированием
Старый 15.11.2012, 22:14   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Все равно не работает.
До чего же информативная фраза... )
Раньше нас в школах так не учили, может стоит вернуть СССР с его системой образования?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.11.2012, 22:24   #6
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

Вы уже программировать умеете, а я только хочу этому научиться. Я Вас не прошу написать мне программу, а просто прошу указать мои ошибки, которые я сам и буду исправлять. Выручите пожалуйста!

Последний раз редактировалось Начинающий програм; 15.11.2012 в 22:29.
Начинающий програм вне форума Ответить с цитированием
Старый 16.11.2012, 10:33   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Сравни!
Цитата:
Но для начала опиши все процедуры так:
Код:
procedure TMatrix.Prz(a, b: tmatr; var c: tmatr; var um, un: integer);
begin

end;
Цитата:
Я исправил.
Код:
  procedure Mx1.Prz();
  var
    t,i,j,um,un:integer;
--------------------------------------------------------------

потом (а можешь сначала) убери это
Цитата:
Код:
var
  Mx1,Mx2,Mx3:TMatrix;
И соответсвенно ВСЕ упоминания об этом внутри процедур(методов).
Цитата:
И еще сразу уж: Mx1.fmatr[...]. Здесь убери Mx1.
fmatr это поле класса.
-------------------------------------------------------------------
далее
Цитата:
Код:
             private
               fmatr:tmatr;
               i,j,k:integer;
               a,b,c,s,r,p:tmatr;
               z:char;
Зачем в классе локальные по сути переменные i,j,k,....
убираем, оставляем только
Код:
             private
                fmatr:tmatr;
-----------------------------------------------------
вообще-то мы пишем класс и методы для работы именно с этим классом (Tmatrix), а не с каким-то "непонятным" массивом (tmatr). Правило ООП.(заголовки (описание) метода не должен знать о внутренностях.
Код:
             public
               procedure Vvod(var a: TMatrix); //ввод матрицы
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 16.11.2012 в 10:54.
evg_m вне форума Ответить с цитированием
Старый 16.11.2012, 14:13   #8
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

Что еще не так?

Код:
unit UOperMatr;

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


  type
    tmas=array[1..n] of integer;
    tmatr=array[1..m] of tmas;

    TMatrix=class
              private
                fmatr:tmatr;
              public
                procedure Vvod(var a:tmatr); //ввод матрицы
                procedure Prz(a,b:tmatr; var c:tmatr; var um,un:integer); //произведение матриц
                procedure Tran(var a:tmatr; var um,un:integer); //транспонирование матрицы
                procedure PrMt(c:tmatr; um,un:integer); //печать матрицы
                procedure Dstr(var a:tmatr; var um:integer; h:integer); //удаление строки в матрице
                procedure Dsto(var a:tmatr; var un:integer; um,h:integer); //удаление столбца в матрице
                function Sym(a,b:tmatr; var um,un:integer):tmatr; //сумма матриц
                function Razn(a,b:tmatr; var um,un:integer):tmatr; //разность матриц
            end;

    TMatrixGUE=class(TMatrix)
                 public
                   procedure DstrGUE(var um,un,h:integer); //ввод номера строки для удаления
                   procedure DstoGUE(var um,un,h:integer); //ввод номера столбца для удаления
               end;

var
  Mx1,Mx2,Mx3:TMatrix;
  {Mx1.vvod();
  Mx1.fmatr[1,1]

  MX2.vvod();
  mx3.sum(mx1,mx2);}
implementation

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

  procedure TMatrixGUE.DstrGUE(a,b:tmatr; var c:tmatr; var um,un:integer);
  var
    um,un,h:integer;
  begin
    um:=m;
    un:=n;
    repeat
      writeln(#10,'Какую строку хотите удалить?');
      readln(h);
      if (h>um) or (h<=0) then
      writeln('Попытка удалить из матрицы несуществующую строку!')
    until  (h<=um) and (h>=1)
  end;

  procedure TMatrix.Dstr(var a:tmatr; var um:integer; h:integer);
  var
    i,h,um:integer;
  begin
    for i:=h+1 to um do
      fmatr[i-1]:=fmatr[i];
    um:=um-1
  end;

  procedure TMatrixGUE.DstoGUE(var um,un,h:integer);
  var
    um,un,h:integer;
  begin
    um:=m;
    un:=n;
    repeat
      writeln(#10,'Какой столбец хотите удалить?');
      readln(h);
      if (h>un) or (h<=0) then
        writeln('Попытка удалить из матрицы несуществующий столбец!')
    until  (h<=un) and (h>=1)
  end;

  procedure TMatrix.Dsto(var a:tmatr; var un:integer; um,h:integer);
  var
    i,j,um,un,h:integer;
  begin
    for i:=1 to um do
      begin
        for j:=h+1 to un do
          fmatr[i,j-1]:=fmatr[i,j]
      end;
    un:=un-1
  end;

  function TMatrix.Sym(a,b:tmatr; var um,un:integer):tmatr;
  var
    i,j,um,un:integer;
  begin
    for i:=1 to m do
      begin
        for j:=1 to n do
          fmatr[i,j]:=fmatr[i,j]+fmatr[i,j]
      end;

    um:=m;
    un:=n
  end;

  function TMatrix.Razn(a,b:tmatr; var um,un:integer):tmatr;
  var
    i,j,um,un:integer;
  begin
    for i:=1 to m do
      begin
        for j:=1 to n do
          fmatr[i,j]:=fmatr[i,j]-fmatr[i,j]
      end;

    um:=m;
    un:=n
  end;

  procedure TMatrix.Prz(a,b:tmatr; var c:tmatr; var um,un:integer);
  var
    t,i,j,um,un:integer;
  begin
    for i:=1 to n do
        for j:=1 to mb do
            for t:=1 to m do
              fmatr[i,j]:=fmatr[i,j]+fmatr[i,t]*fmatr[t,j];

    um:=m;
    un:=n
  end;

  procedure TMatrix.Tran(var a:tmatr; var um,un:integer);
  var
    k,nn,mm,i,j: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
        for j:=i+1 to nn do
          begin
            k:=fmatr[i,j];
            fmatr[i,j]:=fmatr[j,i];
            fmatr[j,i]:=k
          end
  end;

  procedure TMatrix.PrMt(c:tmatr; um,un:integer);
  var
    i,j,um,un:integer;
  begin
    writeln('Новая матрица:',#10);
    for i:=1 to um do
      begin
        for j:=1 to un do
          if fmatr[i,j]<10 then
            write(' ',fmatr[i,j],' ')
          else
            write(fmatr[i,j],' ');
        writeln
      end
  end;

end.

Последний раз редактировалось Начинающий програм; 16.11.2012 в 15:55.
Начинающий програм вне форума Ответить с цитированием
Старый 16.11.2012, 14:17   #9
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

Я все сделал как Вы описали.

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

Цитата:
а я только хочу этому научиться.
А что ты у нас спрашиваешь? Давай проанализируем:
Цитата:
Я исправил.
Все равно не работает.
...
Что я еще не так сделал?
А теперь догадайся какой правильный ответ на такие вопросы?
Цитата:
Компилятор выдает
Еще раз внимательно читай пост №3. Там указано как описать процедуру, таким образом чтоб она была процедурой класса.
Подсказка: Чтобы процедура стала методом нужно перед ее именем описать имя класса.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В окне перемещаются объекты, отталкиваясь от стенок окна. Каждый объект имеет свой поток, перемещающий его. Встретившись, объекты ИльназВ C# (си шарп) 13 22.11.2012 19:00
Геометрические объекты в Delphi Сергей58rus Помощь студентам 1 07.04.2011 15:21
Клик мыши на объекты в Delphi MeGAAkrO Помощь студентам 3 10.04.2010 13:29
3d объекты в Delphi 7 - программирование и вставка Unweather Помощь студентам 1 26.11.2008 14:48