IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> процедуры ввода и вывода, а можно ли?
Anastacia Adesso
сообщение 18.10.2006 15:16
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 92
Пол: Мужской
Реальное имя: Stanislav

Репутация: -  0  +


Вот такой вопрос появтлся.

Нужно вводить например 2 (или больше) двумерных массива.
Код
    procedure readmatrix( var a: matrix; var n, m :integer);
    var i,j : integer;
    begin
     repeat write('Ievadi rindu skaitu: ');readln(n)
     until (n>0) and (n<=nn);
     repeat write('Ievadi kolonnu skaitu: ');readln(m)
     until (m>0) and (m<=mm);
     for i:=1 to n do begin
      for j:=1 to m do begin
       writeln('A[',i,j,']= '); readln(a[i,j])
      end end
    end;

    procedure printmatrix(a :matrix; n,m: integer);
    var i,j,k: integer;
    begin for i:=1 to n do begin
      for j:=1 to m do write(a[i,j]:6);
       writeln;
      end
    end;


можно ли эти 2 процедуры сделать так, чтоб поменяв чтото при их вызове типа readmatrix(a,n,m), например а, она ещё и выполняла чтение другой матрицы?
Брр так сложно написано

Ну то есть в разделе описания будет одна процедура, а при вызове 2 раза, прочитает 2 матрицы


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 18.10.2006 16:02
Сообщение #2


Гость






Нельзя напрямую сделать так, чтобы одна и та же процедура заполняла два массива разных типов. Нужен трюк:

{Programma sareizina divas matricas}

uses crt;
const
rinda = 3;
kopa = 2;
kolonna = 5;

type
{ Будет использоваться ниже }
vector = array[1 .. pred(maxint) div sizeof(integer)] of integer;

pirma = array[1..rinda, 1..kopa] of integer;
otra = array[1..kopa, 1..kolonna] of integer;
rezultats = array[1..rinda, 1..kolonna] of integer;

var
row,col: integer;
a1: pirma; a2: otra;
ar: rezultats;

procedure matrixmult(var res:resultats; var a:pirma; b:otra);
var i,j,k: integer;
begin
for i:=1 to rinda do
for j:=1 to kolonna do
begin
res[i,j]:=0;
for k:=1 to kopa do
res[i,j]:=res[i,j]+ a[i,k]* b[k,j];
end
end;

{ Передаешь бестиповый параметр }
procedure readmatrix(var a; n, m :integer);
var
i,j : integer;
mx: vector absolute a;
begin
{
Я закомментировал, ибо ты НЕ должна вводить здесь размерность.
Вводи ДО этого в программе, и передавай сюда через N, M
}
(*
repeat write('Ievadi rindu skaitu: ');readln(n)
until (n>0) and (n<=rinda);
repeat write('Ievadi kolonnu skaitu: ');readln(m)
until (m>0) and (m<=kolonna);
*)
for i:=1 to n do begin
for j:=1 to m do begin
writeln('A[',i,j,']= '); readln(mx[pred(i)*n + j]);
end end
end;

procedure printmatrix(var a; n,m: integer);
var
i,j,k: integer;
mx: vector absolute a;
begin for i:=1 to n do begin
for j:=1 to m do write(mx[pred(i)*n + j]:6);
writeln;
end
end;



begin
clrscr;
writeln('Ievadi 1. matricu'); readmatrix(a1,rinda, kopa);
writeln('Ievadi 2. matricu'); readmatrix(a2,kopa, kolonna);
matrixMult(ar,a1,a2);
clrscr;
writeln('Pirma matrica: ');printmatrix(a1,rinda, kopa); writeln;
writeln('Otra matrica: ');printmatrix(a2,kopa, kolonna);
readkey;
end.


А если еще точнее, чем написано в комментарии - то ты вообще не должна вводить размерность матриц, потому что не каждые 2 матрицы можно перемножить (только сцепленные), а ты при перемножении нигде не проверяешь, являются ли матрицы сцепленными ...

Размерности у тебя уже указаны константами...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 6:25
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"