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

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

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

 
 Ответить  Открыть новую тему 
> процедуры ввода и вывода, а можно ли?
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Ну, она и так будет читать столько матриц, сколько нужно:

procedure readmatrix(var a: matrix; var n, m :integer);
begin
...
end;

var
m1, m2, m3: matrix;
begin
readmatrix(m1, n, m);
readmatrix(m2, n, m);
readmatrix(m3, n, m);
end.

В чем проблема?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

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

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


В том что в дальнейшем эти матрицы надо перемножить.
А не получается.
Мож я чтото не то делаю.
Вроде уже всё что можно туда сунула
Прикрепленный файл  UZD4.PAS ( 1.47 килобайт ) Кол-во скачиваний: 452


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Исходные матрицы какие?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

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

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


Вводятся с клавы первые две типа pirma и otra (ну массивы такие).


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






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

{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 матрицы можно перемножить (только сцепленные), а ты при перемножении нигде не проверяешь, являются ли матрицы сцепленными ...

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


Пионер
**

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

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


Хе хе...Так и думала что тут какая то фишка должна быть!!! good.gif

Попробую..
Тока сначала с другими разберусь smile.gif


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Пионер
**

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

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


Гмм компилирует даже
а вот такой прикол
если матрацы 2х2 ввести и (1 2 3 4) * (5 6 7 8)=(19 22 22 26) на самом деле..
А Паскаль говорит что (19 22 43 50) nea.gif непорядок


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Цитата
если матрацы 2х2 ввести и (1 2 3 4) * (5 6 7 8)=(19 22 22 26) на самом деле..

blink.gif С чего бы?

|1 2| |5 6| |1*5+2*7 1*6+2*8| |19 22|
| | * | | = | | = | |
|3 4| |7 8| |3*5+4*7 3*6+4*8| |43 50|

Что я неправильно делаю?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


Цитата(Anastacia Adesso @ 18.10.2006 17:32) *

если матрацы 2х2 ввести и (1 2 3 4) * (5 6 7 8)=(19 22 22 26) на самом деле..
А Паскаль говорит что (19 22 43 50) nea.gif непорядок

он же того... умер. давно. в 1662 году.
а программулина правильно насчитала.
во всяком случае, мне кажется, что
3*5+4*7=15+28=43
3*6+4*8=18+32=50
могу ошибаться.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Пионер
**

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

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


mega_chok.gif

Вы правильно посчитали..
А я не знаю зачем какимто методом считаю..
Бррр
Спасибо good.gif


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 28.03.2024 21:26
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name