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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2012, 23:58   #1
Вероника_94
Пользователь
 
Регистрация: 19.01.2012
Сообщений: 22
Стрелка подпрограммы (ПАСКАЛЬ)

нужно данную программу переделать с использованием процедур



Код:
uses crt;
var
a:array[1..10,1..10] of integer;
b:array[1..10,1..10] of integer;
c:array[1..10,1..10] of integer;
d:array[1..10,1..10] of integer;
e:array[1..10,1..10] of integer;
f:array[1..10,1..10] of integer;
g:array[1..10,1..10] of integer;
h:array[1..10,1..10] of integer;
t:array[1..10,1..10] of integer;
i,j,n,m,sp,s,l:integer;
begin
clrscr;
randomize;
repeat
writeln('Каким способом формирования матриц будем пользоваться?');
writeln('1: Формирование случайным образом');
writeln('2: Формирование вручную');
write('Введите способ формирование матриц=');
readln(sp);
case sp of
1: begin
    write('Введите размер матриц=');
    readln(n);
    writeln('Формирование матрицы A:');
    for i:=1 to n do begin
     for j:=1 to n do begin
     a[i,j]:=random(5);
     write(a[i,j]:5);
     end;
    writeln;
    end;
    writeln('Формирование матрицы B:');
    for i:=1 to n do begin
     for j:=1 to n do begin
     b[i,j]:=random(5);
     write(b[i,j]:5);
     end;
    writeln;
    end;
    writeln('Формирование матрицы C');
    for i:=1 to n do begin
     for j:=1 to n do begin
     c[i,j]:=random(5);
     write(c[i,j]:5);
     end;
    writeln;
    end;
   end;
2: begin
    write('Введите размер матриц=');
    readln(n);
    writeln('Формирование матрицы A:');
    for i:=1 to n do begin
     for j:=1 to n do begin
     read(a[i,j]);
     end;
    write;
    end;
    writeln('Формирование матрицы B:');
    for i:=1 to n do begin
     for j:=1 to n do begin
     read(b[i,j]);
     end;
    write;
    end;
    writeln('Формирование матрицы C:');
    for i:=1 to n do begin
     for j:=1 to n do begin
     read(c[i,j]);
     end;
    write;
    end;
   end;
else writeln('Ошибка, введите заново=');
end;
until (sp>=1) or (sp<3);
readln;
writeln('A*B:');
s:=0;
for i:=1 to n do begin
 for j:=1 to n do begin
  for l:=1 to n do begin
   s:=s+a[i,l]*b[l,j];
   end;
   e[i,j]:=s;
   s:=0;
  end;
end;
for i:=1 to n do begin
 for j:=1 to n do begin
 write(e[i,j]:5);
 end;
 writeln;
end;
writeln('3*B');
for i:=1 to n do begin
 for j:=1 to n do begin
 f[i,j]:=(3*b[i,j]);
 end;
end;
for i:=1 to n do begin
 for j:=1 to n do begin
 write(f[i,j]:5)
 end;
 writeln;
end;
writeln('Транспонирование матрицы C:');
for i:=1 to n do begin
 for j:=1 to n do begin
 t[i,j]:=c[j,i];
 end;
end;
for i:=1 to n do begin
 for j:=1 to n do begin
 write(t[i,j]:5);
 end;
 writeln;
end;
writeln('Подсчёт матрицы D по формуле: D=AB+3B-C^T:');
for i:=1 to n do begin
 for j:=1 to n do begin
 d[i,j]:=e[i,j]+f[i,j]-t[i,j];
 write(d[i,j]:5);
 end;
 writeln;
end;
readln;
end.
Вероника_94 вне форума Ответить с цитированием
Старый 04.02.2012, 08:03   #2
<- DelpHIFanat ->
Пользователь
 
Аватар для <- DelpHIFanat ->
 
Регистрация: 07.11.2011
Сообщений: 58
По умолчанию

Переписал я Вашу программу: в виде процедур оформил повторяющиеся действия такие, как: формирование матрицы (случайным образом и вручную), вывод матрицы на экран. При желании можно в виде процедур описать: перемножение матриц, умножение матрицы на число, транспонирование матрицы.

Код:
uses crt;

Type
  Matrix=array[1..10,1..10] of integer;

var
a, b, c, d, e, f, g, h, t: Matrix;
i,j,n,m,sp,s,l: integer;

Procedure MatrixForm(Var A: Matrix; Const N: Integer);
Var
  i, j: Integer;
Begin
  for i:=1 to n do 
    begin
      for j:=1 to n do 
        begin
          a[i,j]:=random(5);
          write(a[i,j]:5);
        end;
      writeln;
    end;
End;

Procedure MatrixInput(Var A: Matrix; Const N: Integer);
Var
  i, j: Integer;
Begin
  for i:=1 to n do 
    begin
      for j:=1 to n do 
        begin
          Write('A[', i, ';', j, '] = ');
          read(a[i,j]);
        end;
      write;
    end;
End;

Procedure MatrixOutToScreen(Const A: Matrix; Const N: Integer);
Var
  i, j: Integer;
Begin
  for i:=1 to n do 
    begin
      for j:=1 to n do 
        write(a[i,j]:5);
      writeln;
    end;
End;

begin
clrscr;
randomize;
repeat
writeln('Каким способом формирования матриц будем пользоваться?');
writeln('1: Формирование случайным образом');
writeln('2: Формирование вручную');
write('Введите способ формирование матриц=');
readln(sp);

case sp of
1: begin
      write('Введите размер матриц=');
      readln(n);
      writeln('Формирование матрицы A:');
      MatrixForm(A, N);
      writeln('Формирование матрицы B:');
      MatrixForm(B, N);
      writeln('Формирование матрицы C');
      MatrixForm(C, N);
   end;
2: begin
      write('Введите размер матриц=');
      readln(n);
      writeln('Формирование матрицы A:');
      MatrixInput(A, N);
      writeln('Формирование матрицы B:');
      MatrixInput(B, N);
      writeln('Формирование матрицы C:');
      MatrixInput(C, N);
   end;
else 
  writeln('Ошибка, введите заново=');
end;

until ((sp>=1) or (sp<3));

readln;
writeln('A*B:');
s:=0;
for i:=1 to n do begin
 for j:=1 to n do begin
  for l:=1 to n do begin
   s:=s+a[i,l]*b[l,j];
   end;
   e[i,j]:=s;
   s:=0;
  end;
end;

MatrixOutToScreen(E, N);

writeln('3*B');
for i:=1 to n do begin
 for j:=1 to n do begin
 f[i,j]:=(3*b[i,j]);
 end;
end;

MatrixOutToScreen(F, N);

writeln('Транспонирование матрицы C:');
for i:=1 to n do begin
 for j:=1 to n do begin
 t[i,j]:=c[j,i];
 end;
end;

MatrixOutToScreen(T, N);

writeln('Подсчёт матрицы D по формуле: D=AB+3B-C^T:');
for i:=1 to n do begin
 for j:=1 to n do begin
 d[i,j]:=e[i,j]+f[i,j]-t[i,j];
 write(d[i,j]:5);
 end;
 writeln;
end;
readln;
end.
Использовал компилятор Pascal ABC.NET. Будут вопросы - пишите в личку.
Лучше вообще не иметь знаний о чём-то, чем иметь неправильные знания об этом!..
<- DelpHIFanat -> вне форума Ответить с цитированием
Старый 04.02.2012, 14:05   #3
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Я бы предложил такой вариант:
Код:
type
  arr=array[1..10,1..10] of integer;

procedure RandForm(a,b,c:arr);
var
  i,j,n:integer;
 begin
    write('Введите размер матриц=');
    readln(n);
    writeln('Формирование матрицы A:');
    for i:=1 to n do begin
     for j:=1 to n do begin
     a[i,j]:=random(5);
     write(a[i,j]:5);
     end;
    writeln;
    end;
    writeln('Формирование матрицы B:');
    for i:=1 to n do begin
     for j:=1 to n do begin
     b[i,j]:=random(5);
     write(b[i,j]:5);
     end;
    writeln;
    end;
    writeln('Формирование матрицы C');
    for i:=1 to n do begin
     for j:=1 to n do begin
     c[i,j]:=random(5);
     write(c[i,j]:5);
     end;
    writeln;
    end;
   end;

procedure ManualForm(a,b,c:arr);
  var
    i,j,n:integer;
  begin
    write('Введите размер матриц=');
    readln(n);
    writeln('Формирование матрицы A:');
    for i:=1 to n do begin
     for j:=1 to n do begin
     read(a[i,j]);
     end;
    write;
    end;
    writeln('Формирование матрицы B:');
    for i:=1 to n do begin
     for j:=1 to n do begin
     read(b[i,j]);
     end;
    write;
    end;
    writeln('Формирование матрицы C:');
    for i:=1 to n do begin
     for j:=1 to n do begin
     read(c[i,j]);
     end;
    write;
    end;
   end;

procedure MultMatrix(a,b:arr; var E,F:arr; n:integer);
var
i,j,l,s:integer;
begin
s:=0;
for i:=1 to n do begin
 for j:=1 to n do begin
  for l:=1 to n do begin
   s:=s+a[i,l]*b[l,j];
   end;
   e[i,j]:=s;
   s:=0;
  end;
end;
for i:=1 to n do begin
 for j:=1 to n do begin
 write(e[i,j]:5);
 end;
 writeln;
end;
writeln('3*B');
for i:=1 to n do begin
 for j:=1 to n do begin
 f[i,j]:=(3*b[i,j]);
 end;
end;
for i:=1 to n do begin
 for j:=1 to n do begin
 write(f[i,j]:5)
 end;
 writeln;
end;
end;

procedure transp(c:arr; var t:arr; n:integer);
var
  i,j:integer;
begin
for i:=1 to n do begin
 for j:=1 to n do begin
 t[i,j]:=c[j,i];
 end;
end;
for i:=1 to n do begin
 for j:=1 to n do begin
 write(t[i,j]:5);
 end;
 writeln;
end;
end;

procedure podschet(E,F,T:arr; var D:arr; n:integer);
var
  i,j:integer;
begin
for i:=1 to n do begin
 for j:=1 to n do begin
 d[i,j]:=e[i,j]+f[i,j]-t[i,j];
 write(d[i,j]:5);
 end;
 writeln;
end;
end;

var
a,b,c,d,e,f,g,h,t:arr;
i,j,n,m,sp,s,l:integer;
begin
randomize;
repeat
writeln('Каким способом формирования матриц будем пользоваться?');
writeln('1: Формирование случайным образом');
writeln('2: Формирование вручную');
write('Введите способ формирование матриц=');
readln(sp);
case sp of
1:RandForm(a,b,c);
2:ManualForm(a,b,c);
else writeln('Ошибка, введите заново=');
end;
until (sp>=1) or (sp<3);
readln;
writeln('A*B:');
multmatrix(a,b,E,F,n);
writeln('Транспонирование матрицы C:');
transp(C,T,n);
writeln('Подсчёт матрицы D по формуле: D=AB+3B-C^T:');
podschet(E,F,T,D,n);
readln;
end.
Все тривиальное просто
whatever вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подпрограммы паскаль tower38 Паскаль, Turbo Pascal, PascalABC.NET 3 10.01.2012 21:57
Паскаль.Подпрограммы. M_arisha Помощь студентам 3 19.12.2011 17:18
паскаль подпрограммы Джуля Помощь студентам 6 23.12.2010 23:23
Подпрограммы/Паскаль Базиля Помощь студентам 10 09.12.2009 01:48