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

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

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

 
 Ответить  Открыть новую тему 
> Процедуры + матрицы :(
Олег
сообщение 27.10.2003 13:36
Сообщение #1


Гость






Привет.
Вот попалась мне такая програмка.

Дано 5ть матриц!!! При этом все они разной размерности (5*1, 1*5 или 5*5). И все их надо забивать, ну если я сделаю пять циклов для ввода, меня повесят smile.gif

Вот я и решил сделать процедурку, но столкнулся с проблемой: как указать, какой из пяти массивов заполнять?
 К началу страницы 
+ Ответить 
GLuk
сообщение 27.10.2003 19:01
Сообщение #2


Профи
****

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

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


Кому указать? Компилеру или юзеру?
Приведи код что-ли...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
zx1024
сообщение 27.10.2003 22:04
Сообщение #3


Пионер
**

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

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


В процедурку передавать указатель на массив или сам массив и его размеры.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Олег
сообщение 28.10.2003 0:39
Сообщение #4


Гость






В процедуру надо передовать сам массив и его размерность.

Например у меня описанно пять массивов: a,b,c... и мне нужно создать процедуру в которую бы вводились размерность и имя массива (???), вот с этим и проблема. Может можно это реализовать как-то по другому?
 К началу страницы 
+ Ответить 
GLuk
сообщение 28.10.2003 6:42
Сообщение #5


Профи
****

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

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


А нафига в процедуру передавать весь массив?
Или тебе жизненно необходимо реализовать это через стек?

zx1024 все правильно сказал, на практике это выглядит так:
Procedure ReadAhead(ArrayPnt:Pointer; X,Y:Word);

И все-таки приведи код...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Олег
сообщение 28.10.2003 10:04
Сообщение #6


Гость






Народ, принципиального ничего нет, но вот суть задачи:
Есть пять массивов (двумерных), у всех разная размерность, и мне нужно все их заводить. Я никогда не поверю что мой препод проглотит пять циклов... Как бы вы сделали это безобразие?
А в моем коде как раз таки и есть пять циклов sad.gif
 К началу страницы 
+ Ответить 
Camel_Toe
сообщение 28.10.2003 11:46
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 26

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


напиши ОДНУ процедуру, в которую передаешь ссылку на конкретный массив (первый или пятый по счету не важно) и размерность матрицы. И все. Если надо массив заполнять с клавы - то это понятно, если случайными числами - то есть такая функция random. посмотри в справке ;). А с пятью циклами ты чот загнула...............=)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Олег
сообщение 28.10.2003 12:59
Сообщение #8


Гость






Вот с этой процедурой то у меня и проблема, как в нее передать ссылку на масив? У меня не получается. Напишите  пример кода, плиз sad.gif
 К началу страницы 
+ Ответить 
Camel_Toe
сообщение 28.10.2003 15:56
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 26

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


объяви тип массива
Код
const
m=100;
n=100;
type array1=array[1..m,1..n] of integer;

А когда надо вызывать процедуру, пиши например следующее:
Код
procedure FillMatrix (var Matr: array1; var q: integer);

{q-размерность матрицы}. Попробуй.

Сообщение отредактировано: volvo - 17.12.2004 14:49
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
GLuk
сообщение 28.10.2003 20:42
Сообщение #10


Профи
****

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

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


Цитата
Народ, принципиального ничего нет, но вот суть задачи:
Есть пять массивов (двумерных), у всех разная размерность, и мне нужно все их заводить. Я никогда не поверю что мой препод проглотит пять циклов... Как бы вы сделали это безобразие?
А в моем коде как раз таки и есть пять циклов sad.gif


Насчет принципиальности - это ты к чему;?
принципиальности действия, понятия или что-то ишшо?!
До кучи есть ишшо один вариант (без объявления типа):

Код
Var
P:Pointer;
a1:array[1..5] of LongInt;
Begin
P:=Addr(a1);
End.


Сообщение отредактировано: volvo - 17.12.2004 14:50
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Олег
сообщение 30.10.2003 7:06
Сообщение #11


Гость






"Принципиально" - это я насчет процедур, но без них никак. Из того что вы предложили я ничего не смог реализовать. Вот мое извращение на тему "Ввод массивов через процедуру..." :

Код
program no_name;
uses crt;
const
n=5;
m=1;
l=3;

type
mas=array[1..n,1..n] of integer;
var
i,j:integer;
x,y,a,b:mas;

procedure vvod(n,m,k:integer);
begin
    for i:=1 to n do
    begin
         for j:=1 to m do
         begin
         writeln('Vvedite ',i,'[',j,']');
               case k of
               1: readln(x[i,j]);
               2: readln(y[i,j]);
               3: readln(a[i,j]);
               4: readln(b[i,j]);
               end;
         end;
    end;
end;

begin
clrscr;
writeln('vvedite X:');
vvod(2,2,1);
readkey;

end.



Мне тоже не нравится.... Это "подходит" только для ввода массивов, а как тогда будет выглядеть процедура умножения двух произвольных матриц? Т.е. мне нужно задать размерность первой, второй, имена первой, второй и третей (получающейся в результате умнажения) матриц... Как это сделать??? И пожалуйста, напишите код... smile.gif
Заранее благодарствую.
 К началу страницы 
+ Ответить 
Camel_Toe
сообщение 30.10.2003 13:24
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 26

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


Попробуй так smile.gif

Код
program no_name;
Uses crt;

const
 m=20;
 n=20;

type
 mas=array[1..m,1..n] of integer;

procedure vvod(n,m:integer; var Matr: mas);
begin
    for i:=1 to m do
    begin
         for j:=1 to n do
         begin
         writeln('Vvedite ',i,'[',j,']');
          readln (matr[i,j]);     
         end;
    end;
end;

var
i:integer;
a,b,c,d,e:mas;

begin
clrscr;
for i:=1 to 5 do begin
      write ('введите размер матрицы: <m на n>: m и n не больше 20: ');
      readln (m,n);
      case i of
      1: vvod (m,n,a);
      2: vvod (m,n,b);
      3: vvod (m,n,c);
      4: vvod (m,n,d);
      5: vvod (m,n,e);
       end;
      end;

readkey;

end.


Если что не получится - спроси, сам я прогу не набирал, правил твою:-)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 

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