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

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

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

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


Гость






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

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

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


Профи
****

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

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


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


Пионер
**

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

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


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


Гость






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

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


Профи
****

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

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


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

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

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


Гость






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


Новичок
*

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

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


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


Гость






Вот с этой процедурой то у меня и проблема, как в нее передать ссылку на масив? У меня не получается. Напишите  пример кода, плиз sad.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Профи
****

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

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


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


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

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


Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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
Заранее благодарствую.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

 





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