Задача про матрицу и одномерный массив. |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Задача про матрицу и одномерный массив. |
Batia |
Сообщение
#1
|
Гость |
Задача такая:
**На основе матрицы A(4 строки, 5 столбцов) сформировать одномерный массив B из 5 элэментов. Каждий элемент Bk этого массива получает значение, равное полусумме ззначений наибольшего и наименьшего элементов в k-м столбце матрицы A. Для вычисления полусуммы значений наибольшего и наименьшего элементов в произвольном столбцематрицы использовать процедуру.** Никак не могу ее решить, а препод. что-либо объяснять отказывается. Помогите, если сможете. |
APAL |
Сообщение
#2
|
Смотрю... Группа: Пользователи Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: 6 |
А что уже пытался сделать? выкладывай...
-------------------- |
Batia |
Сообщение
#3
|
Гость |
:
program Project2; А вот по поводу процедуры почти никаких идей! Сообщение отредактировано: Altair - |
APAL |
Сообщение
#4
|
Смотрю... Группа: Пользователи Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: 6 |
Цитата type m=array[1..100,1..100] of integer; mas=array[1..100] of integer; var A:m; Что то я не понял: по условию матрица 4x5, а в приведенном примере массив 100x100 Цитата uses SysUtils; А что используется из этого модуля? Цитата procedure vvod(m,n:integer;var x:m);{ввел} var i,j: integer; begin writeln('введите матрицу'); Здесь главное чтобы сам не напутал с именем переменной и именем типа... Цитата А вот по поводу процедуры почти никаких идей! Даю идею: читаем условие - "Для вычисления полусуммы значений наибольшего и наименьшего элементов в произвольном столбцематрицы использовать процедуру". Отсюда следует, что можно создать процедуру в которую будет передаваться массив и индекс столбца (можно и без передачи массива, а работать только с индексом, обращаясь к самому исходному массиву, но на этом теряется универсальность процедуры, т.е. ее так просто не перенесешь в другую программу), а возвращать будет уже результат полусуммы. Заголовок может например выглядить так:
-------------------- |
Batia |
Сообщение
#5
|
Гость |
За идею конечно спасибо, но вопросов, к сожалению, меньше не стало.
Например: ii -это индекс? mout - это массив? Да и вообще, в это этой истории много всего непонятного: что такое полусумма, еще можно понять, наибольший и наиаменьший элементы должны находиться как-то так: min:=A[1,1]; max:=A[1,1]; for i=1 to n do for j=1 to m do if A[i,j]<min then min:=A[i,j]; {о необходимости begin-ов и end-ов, с сожалению, ничего не знаю} if A[i,j]>max then max:=A[i,j]; Но больше всего меня смущает фраза: " Каждый Bk-ый элемент... получает значение..... k-м столбце матрицы A" Что это означает в переводе на русский? И еще один вопрос, за чем находить и передовать индекс, если полусумма это простое число. Надеюсь, что в моих рассуднениях можно проследить логику, и они не очень далеки от правды. |
APAL |
Сообщение
#6
|
Смотрю... Группа: Пользователи Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: 6 |
Цитата ii -это индекс? mout - это массив? Да, ii - это индекс столбца mOut - смотри "Real", т.е. вещественное число, т.е. это и будет возвращаться процедурой как полусумма. Цитата что такое полусумма, еще можно понять, наибольший и наиаменьший элементы должны находиться как-то так: min:=A[1,1]; max:=A[1,1]; for i=1 to n do for j=1 to m do if A[i,j]<min then min:=A[i,j]; {о необходимости begin-ов и end-ов, с сожалению, ничего не знаю} if A[i,j]>max then max:=A[i,j]; Не совсем так, полусумму нужно найти среди мин. и макс. элементов в определенной столбце (ii - индекс, который и передает в процедуру этот самый номер столбца), а у тебя ищется по всему массиву.
Цитата Но больше всего меня смущает фраза: " Каждый Bk-ый элемент... получает значение..... k-м столбце матрицы A" Что это означает в переводе на русский? см. выше приведенный код, может станет понятнее. Цитата И еще один вопрос, за чем находить и передовать индекс, если полусумма это простое число. Мы передаем индекс (номер столбца) в процедуру, для того, чтобы она знала с каким именно столбцом ей работать. -------------------- |
Batia |
Сообщение
#7
|
Гость |
Теперь нужно сформировать массив, процедура возвращает нам число {полусумму}, зачит надо вызвать ее 5 раз и записать значения в B:
PolSum(A;??;mOut); B[1]:=mOut; PolSum(A;??;mOut); B[2]:=mOut;... Проделав эту операцию 5 раз, массив должен сформироваться, и его надо вывести процедурой, которую я уже приводил. Так ли это, можно ли сделать это проще, и какой индекс столбца нужно писать при обращении, в данном случае. |
volvo |
Сообщение
#8
|
Гость |
Цитата можно ли сделать это проще For i := 1 to 5 do begin P.S. Если использовать функцию PolSum вместо процедуры, будет еще проще... |
APAL |
Сообщение
#9
|
Смотрю... Группа: Пользователи Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: 6 |
To: volvo
У него в условии написано "процедуру", а с функцией конечно покрасивше было бы. -------------------- |
Batia |
Сообщение
#10
|
Гость |
Попытался собрать все воедино, но возникает много ошибок, не знаю как их исправить, помогите пожалуйста.
program Project2; Сообщение отредактировано: volvo - |
volvo |
Сообщение
#11
|
Гость |
Batia, все (ну, почти все) нормально сделано... Есть 2 основные ошибки:
1) не описываешь переменные, которые используются Procedure PolSum(m : tM;ii : Byte;Var mOut : Real); и эти переменные - глобально: type 2) Количество и порядок следования параметров в описании процедуры и при ее вызове НЕ должны меняться... А у тебя - меняются... Основная часть должна быть такой: ... |
Batia |
Сообщение
#12
|
|||
Гость |
Все исправил, ошибок нет, но после токо как введешь матрицу, происходит выход из программы:
program Project4;
|
|||
volvo |
Сообщение
#13
|
Гость |
Ну, телепатов тут нет, какие значения ты вводил нам неизвестно. На моих - нормально отработало (только вот Read в процедуре ввода мешает... Замени его на ReadLn и вводи число за числом, после каждого - Enter, иначе ты просто не увидишь результата...)
|
Текстовая версия | 10.01.2025 6:02 |