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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2009, 21:44   #1
LyaLyaLya
Пользователь
 
Аватар для LyaLyaLya
 
Регистрация: 02.12.2008
Сообщений: 27
Лампочка задачка с объектами

ПЛИЗ, помогите разобраться!!!!

исправте мну ошибочку, оч прошу, завтра сдавать последнюю лабу....

Требование к выполнению работы:
1. Описать объект, определяющий одномерный или двумерный массив , размерность данного массива, процедуры и\или функции, реализирующие ввод-вывод и обработку массива согласно заданию.
2. В основной программе создать два-три объекта и выполнить их обработку.

Задание :
Заданы 3 матрицы действительных чисел 5х6, 10х8, 8х7. Определить сумму элементов в тех столбцах, которые не содержат отрицательных элементов. Сравнить результаты обработки матриц.


вот что я накатала:
Код:
Program pr7;
type matr=array [1..10,1..10] of real;
ooo=object;
n,m:byte;
a,b,c:matr;
procedure Vvod(n,m:byte);
procedure vivod;
procedure sum_m;
end;

var x,y,z:ooo;
i,j:integer;

procedure ooo.vvod;
var i,j:byte;
begin
 for i:=1 to n do
  for J;=1 to m do
  x[i,j]:=random(20);
end;


procedure ooo.vivod;
var i,j:byte;
begin 
for i:=1 to n do 
 begin writeln;
  for j:=1 to m do
  write(x[i,j]:6:0);
 end;
end;

procedure ooo.sum_m;
var i,j:byte;
begin
summ:=0;
for j:=1 to n do 
for i:=1 to m do
 begin
 if x[i,j]>0 then
 summ[i]:=summ[i]+x[i,j];
 write(summ:6:0);
 end;
end;

begin 
x.vvod(5,6);
y.vvod(10,8);
z.vvod(8,7);
 x.vivod;
 y.vivod;
 z.vivod;
writeln;writeln;
x.summ;
y.summ;
z.summ;
end.
LyaLyaLya вне форума Ответить с цитированием
Старый 07.01.2009, 23:37   #2
MalexG
Форумчанин
 
Регистрация: 06.11.2008
Сообщений: 100
По умолчанию

Ваша ошибка в том, что не совсем правильно представляете, что такое объект!
Объект - это динамическая структура со своими полями (данными) и методами (процедурами и функциями). Т.к. это динамическая структура, то под нее необходимо выделять память, а после работы с этой структурой память необходимо освободить. Для этих целей служат специальные методы, так называемые "конструктор" объекта и "деструктор". Остальные методы применяются по назначению, ради которого и создан объект.
Рекомендую что-нибудь почитать, это очень серьезная тема.

Последний раз редактировалось MalexG; 08.01.2009 в 00:23.
MalexG вне форума Ответить с цитированием
Старый 07.01.2009, 23:56   #3
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

А код такой солидный!
Sasha_Smirnov вне форума Ответить с цитированием
Старый 08.01.2009, 01:39   #4
MalexG
Форумчанин
 
Регистрация: 06.11.2008
Сообщений: 100
По умолчанию

Исправленный вариант. Извините переменные обозвал по-своему.
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TArr = array of array of integer;
  TMatrix = object
    ColCount: byte;   // Количество столбцов в массиве
    RowCount: byte;   // Количество строк в массиве
    Arr: TArr;        // Динамический массив
    procedure Init(AColCount, ARowCount: byte);
    procedure GetMatrix;
    function GetSumm: integer;
    procedure Done;
end;

var
  Matrix1, Matrix2, Matrix3: TMatrix;

procedure TMatrix.Init(AColCount, ARowCount: byte);
var
  i,j: byte;
begin
 ColCount := AColCount;
 RowCount := ARowCount;       
 SetLength(Arr, RowCount, ColCount);  // Создание динамического массива
 for i := 0 to RowCount-1 do
   for j := 0 to ColCount-1 do
     Arr[i,j] := random(100) - 50;
end;

procedure TMatrix.GetMatrix;
var
  i,j: byte;
begin
  writeln;
  for i := 0 to RowCount-1 do
  begin
    for j := 0 to ColCount-1 do
      write(Arr[i,j], #9);
    writeln;
  end;
end;

function TMatrix.GetSumm: integer;
var
  i, j: byte;
  Summ, ResSumm: integer;
  IsNegative: boolean;
begin
  ResSumm := 0;

  for j := 0 to ColCount-1 do
  begin
    IsNegative := false;
    Summ := 0;
    i := 0;
    while (i < RowCount) or not IsNegative do
    begin
      if Arr[i,j] > 0 then
        Summ := Summ + Arr[i,j]
      else
        IsNegative := true;
      inc(i);
    end;
    if not IsNegative then
      ResSumm := ResSumm + Summ;
  end;
  GetSumm := ResSumm;
end;

procedure TMatrix.Done;
begin
  // Освобождение памяти, занимаемой динамическим массивом
  Arr := nil;    
end;

begin 
  randomize;

  Matrix1.Init(5,6);
  Matrix2.Init(10,8);
  Matrix3.Init(8,7);

  Matrix1.GetMatrix;
  Matrix2.GetMatrix;
  Matrix3.GetMatrix;

  writeln;
  writeln;

  writeln(Matrix1.GetSumm);
  writeln(Matrix2.GetSumm);
  writeln(Matrix3.GetSumm);

  Matrix1.Done;
  Matrix2.Done;
  Matrix3.Done;

  readln;
end.
MalexG вне форума Ответить с цитированием
Старый 08.01.2009, 22:56   #5
LyaLyaLya
Пользователь
 
Аватар для LyaLyaLya
 
Регистрация: 02.12.2008
Сообщений: 27
По умолчанию

хм, а как сделать без динамического объекта? а то мы их еще не учили...
LyaLyaLya вне форума Ответить с цитированием
Старый 09.01.2009, 00:11   #6
MalexG
Форумчанин
 
Регистрация: 06.11.2008
Сообщений: 100
По умолчанию

Цитата:
Сообщение от LyaLyaLya Посмотреть сообщение
хм, а как сделать без динамического объекта? а то мы их еще не учили...
То, что вы выложили и есть статический вариант объекта. Я выложил рабочий вариант вашей задачи. Внес коррективы и т.п.
MalexG вне форума Ответить с цитированием
Старый 09.01.2009, 00:13   #7
MalexG
Форумчанин
 
Регистрация: 06.11.2008
Сообщений: 100
По умолчанию

Если вас смущает использование динамического массива, используйте обычный массив. В этом случае процедура Done не потребуется.
MalexG вне форума Ответить с цитированием
Старый 09.01.2009, 01:19   #8
ul_m
 
Регистрация: 09.01.2009
Сообщений: 5
По умолчанию

хм, а где взять модуль SysUtils и что такое {$APPTYPE CONSOLE}??
ul_m вне форума Ответить с цитированием
Старый 09.01.2009, 01:20   #9
maladoy
delphi-ст!
Форумчанин
 
Аватар для maladoy
 
Регистрация: 02.01.2009
Сообщений: 825
По умолчанию это делфийское

консольное приложение!!!!
вступлю в команду разработчиков ПО на Delphi
maladoy вне форума Ответить с цитированием
Старый 09.01.2009, 02:02   #10
ul_m
 
Регистрация: 09.01.2009
Сообщений: 5
По умолчанию

с 17 ошибкой
ul_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с классами и объектами Shavminator Общие вопросы Delphi 7 18.12.2009 04:11
нужна помощь - работа с объектами и не только freemotivation Паскаль, Turbo Pascal, PascalABC.NET 6 22.11.2008 01:29
Взаимодействие ListView с рукописными объектами. Turbine Общие вопросы Delphi 1 15.08.2008 11:27
Взаимодействие ListView с другими объектами. Передача Turbine Компоненты Delphi 0 13.08.2008 22:40
Управление Программно созданными объектами dars73 Помощь студентам 14 19.11.2007 01:42