![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Олег |
![]()
Сообщение
#1
|
Гость ![]() |
Привет.
Вот попалась мне такая програмка. Дано 5ть матриц!!! При этом все они разной размерности (5*1, 1*5 или 5*5). И все их надо забивать, ну если я сделаю пять циклов для ввода, меня повесят ![]() Вот я и решил сделать процедурку, но столкнулся с проблемой: как указать, какой из пяти массивов заполнять? |
GLuk |
![]()
Сообщение
#2
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: ![]() ![]() ![]() |
Кому указать? Компилеру или юзеру?
Приведи код что-ли... |
zx1024 |
![]()
Сообщение
#3
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 119 Пол: Мужской Репутация: ![]() ![]() ![]() |
В процедурку передавать указатель на массив или сам массив и его размеры.
|
Олег |
![]()
Сообщение
#4
|
Гость ![]() |
В процедуру надо передовать сам массив и его размерность.
Например у меня описанно пять массивов: a,b,c... и мне нужно создать процедуру в которую бы вводились размерность и имя массива (???), вот с этим и проблема. Может можно это реализовать как-то по другому? |
GLuk |
![]()
Сообщение
#5
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: ![]() ![]() ![]() |
А нафига в процедуру передавать весь массив?
Или тебе жизненно необходимо реализовать это через стек? zx1024 все правильно сказал, на практике это выглядит так: Procedure ReadAhead(ArrayPnt:Pointer; X,Y:Word); И все-таки приведи код... |
Олег |
![]()
Сообщение
#6
|
Гость ![]() |
Народ, принципиального ничего нет, но вот суть задачи:
Есть пять массивов (двумерных), у всех разная размерность, и мне нужно все их заводить. Я никогда не поверю что мой препод проглотит пять циклов... Как бы вы сделали это безобразие? А в моем коде как раз таки и есть пять циклов ![]() |
Camel_Toe |
![]()
Сообщение
#7
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 26 Репутация: ![]() ![]() ![]() |
напиши ОДНУ процедуру, в которую передаешь ссылку на конкретный массив (первый или пятый по счету не важно) и размерность матрицы. И все. Если надо массив заполнять с клавы - то это понятно, если случайными числами - то есть такая функция random. посмотри в справке ;). А с пятью циклами ты чот загнула...............=)
|
Олег |
![]()
Сообщение
#8
|
Гость ![]() |
Вот с этой процедурой то у меня и проблема, как в нее передать ссылку на масив? У меня не получается. Напишите пример кода, плиз
![]() |
Camel_Toe |
![]()
Сообщение
#9
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 26 Репутация: ![]() ![]() ![]() |
объяви тип массива
Код 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 |
GLuk |
![]()
Сообщение
#10
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Народ, принципиального ничего нет, но вот суть задачи: Есть пять массивов (двумерных), у всех разная размерность, и мне нужно все их заводить. Я никогда не поверю что мой препод проглотит пять циклов... Как бы вы сделали это безобразие? А в моем коде как раз таки и есть пять циклов ![]() Насчет принципиальности - это ты к чему;? принципиальности действия, понятия или что-то ишшо?! До кучи есть ишшо один вариант (без объявления типа): Код Var P:Pointer; a1:array[1..5] of LongInt; Begin P:=Addr(a1); End. Сообщение отредактировано: volvo - 17.12.2004 14:50 |
Олег |
![]()
Сообщение
#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. Мне тоже не нравится.... Это "подходит" только для ввода массивов, а как тогда будет выглядеть процедура умножения двух произвольных матриц? Т.е. мне нужно задать размерность первой, второй, имена первой, второй и третей (получающейся в результате умнажения) матриц... Как это сделать??? И пожалуйста, напишите код... ![]() Заранее благодарствую. |
Camel_Toe |
![]()
Сообщение
#12
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 26 Репутация: ![]() ![]() ![]() |
Попробуй так
![]() Код 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. Если что не получится - спроси, сам я прогу не набирал, правил твою:-) |
![]() ![]() |
![]() |
Текстовая версия | 24.07.2025 16:05 |