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