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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2012, 21:27   #1
Андрей11111
 
Регистрация: 22.05.2012
Сообщений: 7
По умолчанию нужно переделать в объектно-ориентированное программирование

Код:
begin
  writeln ('Программа умножает матрицу A на матрицу B');
  write('Введите число строк 1-й матрицы - A (<=50)--> ');readln;
  write('Введите число столбцов 1-й матрицы - A (<=50)--> ');readln;
  write('Введите число столбцов 2-й матрицы - B (<=50)--> ');readln;
  writeln('Введите 1-ю матрицу (A):');
  for ii:=1 to nn do
  for jj:=1 to kk do
    begin
      write('Введите A[',ii,',',jj,'] --> ');
      readln(AA[ii,jj]);
    end;

  writeln('Введите 2-ю матрицу (B):');
  for ii:=1 to kk do
  for jj:=1 to mm do
   begin write('Введите B[',ii,',',jj,'] --> '); readln(BB[ii,jj]);
   end;

  {Вычисляем элементы матрицы-результата}

    for ii:=1 to nn do
    for jj:=1 to mm do
      begin
        Summa:= 0;
        for ll:= 1 to kk do
          Summa:= Summa + AA[ii,ll]*BB[ll,jj];
          CC[ii,jj] := Summa;
      end;
{Выводим матрицу-результат:}
  writeln('---- Результат: -----');
  for ii:=1 to nn do
    begin
      for jj:=1 to mm do
        write(CC[ii,jj]:8:2);
      writeln;
    end;
readln;
end.

Последний раз редактировалось Stilet; 28.05.2012 в 21:33.
Андрей11111 вне форума Ответить с цитированием
Старый 28.05.2012, 22:18   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Ну так и создайте объект с тремя методами: ввод данных, вычисления, печать.
s-andriano вне форума Ответить с цитированием
Старый 28.05.2012, 23:35   #3
Андрей11111
 
Регистрация: 22.05.2012
Сообщений: 7
По умолчанию

я не умею, помоги пожалуйста
Андрей11111 вне форума Ответить с цитированием
Старый 28.05.2012, 23:46   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Я не вижу никаких собственных попыток что-то сделать.
Код, судя по всему, писал не ты.
Значит, оно тебе не нужно.
s-andriano вне форума Ответить с цитированием
Старый 29.05.2012, 00:46   #5
kuy
Форумчанин
 
Аватар для kuy
 
Регистрация: 05.09.2011
Сообщений: 109
Радость

Андрей11111, первое - где описание переменных? Без описания переменных сложновато как-то переделать. Второе - программа не работает так как нужно, как можно не рабочую программу переделать?
Код:
  writeln ('Программа умножает матрицу A на матрицу B');
  write('Введите число строк 1-й матрицы - A (<=50)--> ');readln;
  write('Введите число столбцов 1-й матрицы - A (<=50)--> ');readln;
  write('Введите число столбцов 2-й матрицы - B (<=50)--> ');readln;
  writeln('Введите 1-ю матрицу (A):');
"readln;" - просто ожидает ENTER, и ничего ни к чему не присваивает, если тебе нужно ввести значение переменной "ii" - пиши так: readln(ii);
Если сделаешь рабочую программу, которую я себе скопирую и она будет работать, сделаю объект.
kuy вне форума Ответить с цитированием
Старый 29.05.2012, 13:59   #6
Андрей11111
 
Регистрация: 22.05.2012
Сообщений: 7
По умолчанию

так что нужно сделать?
Андрей11111 вне форума Ответить с цитированием
Старый 29.05.2012, 14:06   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Дописать представленную программу до рабочего состояния.
Тогда kuy согласится помочь с ООП.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 29.05.2012, 14:15   #8
Андрей11111
 
Регистрация: 22.05.2012
Сообщений: 7
По умолчанию

я не смогу. у меня ещё второй вариант этой задачи:
Program Umnoj2;
Const Max=50;
Var AA,BB,CC: array [1..Max,1..Max] of Double;
{to est' mesto dlya matric videlyaem s zapasom}
ii,jj,kk,nn,mm,ll : integer; Summa: double;
begin
writeln ('Programma umnozhaet matricu A na matricu B');
write('Vvedite chislo strok 1-y matricy - A (<=50)--> ');readln(NN);
write('Vvedite chislo stolbcov 2-y matricy - A (<=50)--> ');readln(KK);
write('Vvedite chislo stolbcov 2-y matricy - B (<=50)--> ');readln(MM);
writeln('Vvedite 1-yu matricu (A):');
for ii:=1 to nn do
for jj:=1 to kk do
begin
write('Vvedite A[',ii,',',jj,'] --> ');
readln(AA[ii,jj]);
end;

writeln('Vvedite 2-yu matricu (B):');
for ii:=1 to kk do
for jj:=1 to mm do
begin write('Vvedite B[',ii,',',jj,'] --> '); readln(BB[ii,jj]);
end;

{Vychislyaem elementy matricy-rezul'tata}

for ii:=1 to nn do
for jj:=1 to mm do
begin
Summa:= 0;
for ll:= 1 to kk do
Summa:= Summa + AA[ii,ll]*BB[ll,jj];
CC[ii,jj] := Summa;
end;
{Vyvodim matricy-rezul'tat}
writeln('---- rezul'tat: -----');
for ii:=1 to nn do
begin
for jj:=1 to mm do
write(CC[ii,jj]:8:2);
writeln;
end;
readln;
end.
Андрей11111 вне форума Ответить с цитированием
Старый 29.05.2012, 15:32   #9
kuy
Форумчанин
 
Аватар для kuy
 
Регистрация: 05.09.2011
Сообщений: 109
По умолчанию

Андрей11111, апостроф для вывода в консоль пишется с двума штрихами (по крайней мере в моём компиляторе, мб в твоём с одной, но я сомневаюсь), вот: не writeln('---- rezul'tat: -----');, а writeln('---- rezul''tat: -----');
Ну а в целом второй вариант программы очень даже не плохой. Если нужны комментарии обращайся, а вкратце: я создал объект, в поля скопировал твои переменные, 3 метода(ввод данных, вычисления, печать), тоже в них твой код скопировал и вызвал в программе.
Код:
Const Max=50;

type
 Matrix = object
   public
    kk,nn,mm: integer;
    Summa: double;
    AA,BB,CC: array [1..Max,1..Max] of Double;
    procedure input;
    procedure calculations;
    procedure output;
   end;

procedure Matrix.input;
var ii,jj:integer;
begin
 write('Vvedite chislo strok 1-y matricy - A (<=50)--> '); readln(NN);
 write('Vvedite chislo stolbcov 2-y matricy - A (<=50)--> '); readln(KK);
 write('Vvedite chislo stolbcov 2-y matricy - B (<=50)--> '); readln(MM);
 writeln('Vvedite 1-yu matricu (A):');
 for ii:=1 to nn do
  for jj:=1 to kk do
   begin
    write('Vvedite A[',ii,',',jj,'] --> ');
    readln(AA[ii,jj]);
   end;
 writeln('Vvedite 2-yu matricu (B):');
 for ii:=1 to kk do
  for jj:=1 to mm do
   begin
    write('Vvedite B[',ii,',',jj,'] --> ');
    readln(BB[ii,jj]);
   end;
end;

procedure Matrix.calculations;
var ii,jj,ll:integer;
begin;
 for ii:=1 to nn do
  for jj:=1 to mm do
   begin
    Summa:= 0;
    for ll:= 1 to kk do
     Summa:= Summa + AA[ii,ll]*BB[ll,jj];
    CC[ii,jj] := Summa;
   end;
end;

procedure Matrix.output;
var ii,jj:integer;
begin
 writeln('---- rezul''tat: -----');
 for ii:=1 to nn do
  begin
   for jj:=1 to mm do
    write(CC[ii,jj]:8:2);
   writeln;
  end;
end;

var MyMatrix:Matrix;
begin
 writeln ('Programma umnozhaet matricu A na matricu B');
 MyMatrix.input;
 MyMatrix.calculations;
 MyMatrix.output;
 readln;
end.

Последний раз редактировалось kuy; 29.05.2012 в 22:22.
kuy вне форума Ответить с цитированием
Старый 29.05.2012, 16:14   #10
Андрей11111
 
Регистрация: 22.05.2012
Сообщений: 7
По умолчанию

спасибо большое))))
можешь ещё метод крамера переделать под ООП?)
program Kramer;
uses crt;
type
Tmass=array[1..20] of real;
Tmatrix=array[1..20] of Tmass;
procedure Per(k,n:integer;var a:Tmatrix;var p:integer);
var z:Real;j,i:integer;
begin
z:=abs(a[k,k]);
i:=k;
p:=0;
for j:=k+1 to n do
begin
if abs(a[j,k])>z then
begin
z:=abs(a[j,k]);
i:=j;
p:=p+1;
end;
end;
if i>k then
for j:=k to n do
begin
z:=a[i,j];
a[i,j]:=a[k,j];
a[k,j]:=z;
end;
end;
function Znak(p:integer):integer;
begin
if p mod 2=0 then
Znak:=1 else Znak:=-1;
end;
procedure Opr(n:integer;a:tmatrix;var det:real);
var k,i,j,p:integer;r:real;
begin
det:=1.0;
for k:=1 to n do
begin
if a[k,k]=0 then Per(k,n,a,p);
det:=znak(p)*det*a[k,k];
for j:=k+1 to n do
begin
r:=a[j,k]/a[k,k];
for i:=k to n do
begin
a[j,i]:=a[j,i]-r*a[k,i];
end;
end;
end;
end;
var a:Tmatrix;
c:array[1..20] of Tmatrix;
b,x:Tmass;
det,det1:real;
n,k,j,i:integer;
begin
clrscr;
write('Порядок системы n=');
readln(n);
writeln('Введите коэффициенты системы:');
for i:=1 to n do
for j:=1 to n do
read(a[i,j]);
readln;
writeln('Введите свободные члены:');
for i:=1 to n do
read(b[i]);
readln;
clrscr;
writeln('Расширенная матрица системы:');
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:7:2);
write(b[i]:9:2);
writeln;
end;
Opr(n,a,det);{определитель системы исходной}
for i:=1 to n do
begin
for k:=1 to n do
begin
for j:=1 to n do
c[i][k,j]:=a[k,j];
c[i][k,i]:=b[k];
end;
Opr(n,c[i],det1);
if(det=0)and(det1=0) then
begin
writeln('Система не определена!');
readln;
exit;
end;
if(det=0)and(det1<>0) then
begin
writeln('Система не имеет решений!');
readln;
exit;
end;
x[i]:=det1/det;{корень}
end;
writeln('Корни сиcтемы:');
for i:=1 to n do
writeln('x',i,'=',x[i]:7:3);
readln
end.
Андрей11111 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
объектно-ориентированное программирование ГульнарочкаГ Помощь студентам 3 09.02.2012 16:14
Объектно-ориентированное программирование Kira444 Помощь студентам 21 03.02.2011 16:34
Объектно ориентированное программирование в С++ SeReGa48 Помощь студентам 0 16.11.2010 23:27
Объектно-ориентированное программирование valiaam55 Паскаль, Turbo Pascal, PascalABC.NET 17 10.07.2010 10:30
Объектно-ориентированное программирование dzhI Помощь студентам 8 19.03.2009 13:38