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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2009, 11:28   #1
Ake
Пользователь
 
Аватар для Ake
 
Регистрация: 12.02.2009
Сообщений: 22
Стрелка ООП на Паскале.

Проверьте плз код.


Задание


Разработать систему наследуемых объектов и программу для нахождения суммы, разности, присваивания, произведения векторов и матриц различных типов (целого, вещественного, комплексного). С помощью этих объектов найти n-ю степень матрицы.

описала только объект матрица. одномерная. в модуле.
Пишет ошибку 150 после строчки procedure matrica. paznost;...



код :
unit mat;
interface
uses crt;
type
matrica = object
procedure prisv(n,i: integer);
procedure symma;
procedure raznost;
procedure proizv;
end;
var
n,i: integer;
k: real;
a,b : array[1..100] of real;

implementation


procedure matrica.prisv (n,i:integer);
begin
for i:=1 to n do
begin
Writeln('a[,i,]=');
readln(a[i]);
end;
for i:=1 to n do
writeln(a[i]);
end;

procedure matrica. paznost;
begin
for i:= 1 to n do
a[i]:= a[i] - b[i];
end;}

procedure matrica.proizv;
begin
for i:=1 to n do
a[i]:= ((a[i]*b[i])+(a[i+1]*b[i+1]));
end;


procedure matrica.symma;
begin
for i:=1 to n do
begin
a[i]:= a[i]+b[i];
end;

end;
end.
Ake вне форума Ответить с цитированием
Старый 28.02.2009, 12:50   #2
bura
Пользователь
 
Регистрация: 07.01.2009
Сообщений: 15
По умолчанию

Ну, откуда процедуры твоего класса (объекта) знают, что A - это квадратная матрица вещественных чисел, а N - это размерность квадратной матрицы A? Надо ввести для объекта такие поля, как квадратная матрица и ее размер. Затем, зачем ты передаешь в процедуры параметр i? Объявляй i как переменную внутри процедур.
bura вне форума Ответить с цитированием
Старый 28.02.2009, 13:58   #3
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

объект без полей - это нонсэнс - если объект - матрица - значит поля должны быть соответствующие - поле - матрица; или другой вариант - сделать поля размеров, а матрица будет по размерам набираться

да и матрица - это массив массива - то есть a[i,k], a[1..100,1..50] - вот матрицы, квадратная матрица - это a[1..100,1..100] допустим, то есть с равным количеством строк и столбцов

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

Код:
procedure matrica. paznost;
begin
for i:= 1 to n do
a[i]:= a[i] - b[i];
end;}
Вот мой вариант исправленной вашей программы:
Код:
unit mat;
interface
 uses crt;
 const n = 100;
 type
 matrica = object
             x : integer;
             a,b : array [1..n,1..n] of real;
             procedure prisv;
             procedure symma;
             procedure raznost;
             procedure proizv;
           end;

implementation

 procedure matrica.prisv;
 var
  i,k : integer;
 begin
   for i:=1 to x do
    for k:=1 to x do
    begin
      Write('a[,',i,',]=');
      readln(a[i,k]);
    end;
   writeln;
   for i:=1 to x do
   begin
     for k:=1 to x do write (a[i,k],'|');
     writeln
   end
 end;

procedure matrica.raznost;
var
 i,k : integer;
begin
  for i:=1 to x do
   for k:=1 to x do a[i,k]:=a[i,k]-b[i,k];
end;

procedure matrica.proizv;
var
 i,k : integer;
begin
for i:=1 to x do
 for k:=1 to x-1 do a[i,k]:=a[i,k]*b[i,k]+a[i,k+1]*b[i,k+1];
end;

procedure matrica.symma;
var
 i,k : integer;
begin
  for i:=1 to x do
   for k:=1 to x do a[i,k]:=a[i,k]+b[i,k];
end;

end.

Последний раз редактировалось capta1n; 28.02.2009 в 14:27.
capta1n вне форума Ответить с цитированием
Старый 28.02.2009, 14:40   #4
bura
Пользователь
 
Регистрация: 07.01.2009
Сообщений: 15
По умолчанию

Надо присвоить значение полю x.
Можно так это сделать:
Код:
procedure matrica.prisv(n: integer);
 var
  i,k : integer;
 begin
  x:=n;
Неплохо было бы и проверку принадлежности значения n диапазону [1..100] сделать.
bura вне форума Ответить с цитированием
Старый 28.02.2009, 15:06   #5
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

значению поля x должно присваиваться пользователем - именно так он укажет на размер массива объекту, проверку делать не надо - глобально описана константа, отвечающая за размер массива, а вот проверить x на то, что он входит в диапозон 1..n можно, но это уже высший пилотаж
capta1n вне форума Ответить с цитированием
Старый 28.02.2009, 23:27   #6
Ake
Пользователь
 
Аватар для Ake
 
Регистрация: 12.02.2009
Сообщений: 22
По умолчанию

Да, ошибка. Не та буква. Исправила. все выполняется верно.
А разве матрица не может быть одномерной?
Ake вне форума Ответить с цитированием
Старый 01.03.2009, 00:20   #7
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

точно не знаю, но всегда матрицу представлял себе из 2 или более строк
capta1n вне форума Ответить с цитированием
Старый 01.03.2009, 14:29   #8
bura
Пользователь
 
Регистрация: 07.01.2009
Сообщений: 15
По умолчанию

Программа действительно работает правильно? Странно
bura вне форума Ответить с цитированием
Старый 04.03.2009, 16:03   #9
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

ничего странного: хорошая программа всегда должна работать правильно )))
capta1n вне форума Ответить с цитированием
Старый 06.03.2009, 22:41   #10
Ake
Пользователь
 
Аватар для Ake
 
Регистрация: 12.02.2009
Сообщений: 22
По умолчанию

Писала-писала...
Чего-то не хочет она работать так как надо.
При ПРисваивании матрицы а она ее присваивает, а дальше не хочет пахать.. Не знаю в чем проблема.
ПРоверьте плз код.


Юнит.

unit mat;
interface
uses crt;
type
matrica = object
procedure prisv(n,i,j: integer);
procedure symma;
procedure raznost;
procedure proizv;
end;
var
n,i,j: integer;
k: real;
a,b : array[1..20, 1..20] of real;


type mat2 = object (matrica)
procedure prisv(n, i,j: integer);
procedure symma;
procedure raznost;
procedure proizv;
procedure stepen(c,q: integer);
end;
var
d : array [1..100, 1..100] of real;
c,q : integer;


implementation

procedure matrica.prisv (n,i,j:integer);
begin
writeln('vvidite n=');
readln(n);
for i:=1 to n do
for j:=1 to n do
begin
Writeln('a[,i,',',j,]=');
readln(a[i,j]);
end;
for i:=1 to n do
for j:=1 to n do
write(a[i,j],'| ');
end;

procedure matrica. raznost;
begin
for i:= 1 to n do
for j:=1 to n do
a[i,j]:= a[i,j] - b[i,j];
write(a[i,j],'| ');
end;

procedure matrica.proizv;
begin
for i:=1 to n do
a[i,j]:= ((a[i,j]*b[i,j])+(a[i,j+1]*b[i+1,j]));
write(a[i,j],'| ');
end;

procedure mat2. prisv (n,i,j :integer);
begin
inherited prisv(n,i,j);
writeln('vvod matricu D');
begin
writeln('d[,i,',',j,]=');
readln(d[i,j]);
end;
write(d[i,j],'| ');
end;

procedure mat2. symma;
begin
inherited symma;
end;

procedure mat2. raznost;
begin
inherited raznost;
end;

procedure mat2. proizv;
begin
inherited proizv;
end;

procedure mat2. stepen(c, q : integer);
begin
q:=1;
writeln ('vvedite stepen c=');
readln(c);
for q:=1 to c do
begin
for i:=1 to n do
for j:=1 to n do

a[i,j]:=((a[i,j]*a[i,j]) +(a[i,j+1]*a[i+1,j]));
end;
for i:=1 to n do
for j:=1 to n do
write (a[i,j],'| ');
end;

procedure matrica.symma;
begin
for i:=1 to n do
begin
a[i,j]:= a[i,j]+b[i,j];
end;
end;

end.



сама прога.

program ake;
uses crt, mat;
var
i,j,n: integer;
b,a: array [1..20,1..20] of real;
option : word;
x :mat2;


begin

clrscr;
textbackground(5);
textcolor(0);
writeln(' vvedite n');
writeln(' ');
readln(n);
writeln('vvod matricu b');
for i:=1 to n do
for j:=1 to n do
begin
writeln ('b[',i,',',j,']=');
readln(b[i,j]);

end;

while true do begin
writeln(' ');
writeln('vuberite deistvie');
writeln('1- prisvaivanie,2- slozhenie,3- vuchitanie,4- proizvedenie,5- vozvedenie');

readln(option);

case option of
1 : begin
writeln('prisvaivanie');
x.prisv(n,i,j);

end;

2 : begin
writeln('slozhenie');
x.symma;

end;

3 : begin
writeln('vuchitanie');
x.raznost;
end;
4 : begin
writeln('proizvedenie');
x.proizv;
end;
5 : begin
writeln('vozvedenie v stepen');
x.stepen(c, q);
end;

end;
readln;
end;
end.



матрица б используется как вспомогательная при сложении и вычитании.
Ake вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ООП инкапсуляция albatros Общие вопросы Delphi 2 03.02.2009 08:28
задача по ООП Lenivec** Фриланс 2 17.07.2008 15:17
ООП Римма Общие вопросы Delphi 16 15.04.2008 11:32
ООП Andrey Gort Общие вопросы Delphi 1 22.11.2006 15:01