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 15:20
Сообщение #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.

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


Пионер
**

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

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


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


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


Гость






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


Пионер
**

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

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


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


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.10.2006 16:02
Сообщение #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 матрицы можно перемножить (только сцепленные), а ты при перемножении нигде не проверяешь, являются ли матрицы сцепленными ...

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


Пионер
**

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

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


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

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


--------------------
Ben sensiz yaşayamam
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Anastacia Adesso
сообщение 18.10.2006 16:32
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.10.2006 16:43
Сообщение #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|

Что я неправильно делаю?
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 18.10.2006 16:44
Сообщение #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 
 К началу страницы 
+ Ответить 
Anastacia Adesso
сообщение 18.10.2006 16:54
Сообщение #11


Пионер
**

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

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


mega_chok.gif

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


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

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

 



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