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

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

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

 
 Ответить  Открыть новую тему 
> Задача про матрицу и одномерный массив.
сообщение
Сообщение #1


Гость






Задача такая:
**На основе матрицы A(4 строки, 5 столбцов) сформировать одномерный массив B из 5 элэментов. Каждий элемент Bk этого массива получает значение, равное полусумме ззначений наибольшего и наименьшего элементов в k-м столбце матрицы A.
Для вычисления полусуммы значений наибольшего и наименьшего элементов в произвольном столбцематрицы использовать процедуру.**
Никак не могу ее решить, а препод. что-либо объяснять отказывается.
Помогите, если сможете.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Смотрю...
*****

Группа: Пользователи
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

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


А что уже пытался сделать? выкладывай...


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






:
program Project2;

{$APPTYPE CONSOLE}
type m=array[1..100,1..100] of integer; mas=array[1..100] of integer;
var A:m;

uses
SysUtils;
procedure vvod(m,n:integer;var x:m);{ввел}
var i,j: integer;
begin writeln('введите матрицу');
for i:=1 to m do
for j:=1 to n do
read(x[i,j]);
end;
procedure MasOut(n:integer,var p:mas,c:char);{вывел}
var i:integer;
begin
writeln('results for',c);
for i:=1 to n do
write(p[i];'');
writeln;
end;

А вот по поводу процедуры почти никаких идей!

Сообщение отредактировано: Altair -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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('введите матрицу');

Здесь главное чтобы сам не напутал с именем переменной и именем типа...

Цитата
А вот по поводу процедуры почти никаких идей!

Даю идею: читаем условие - "Для вычисления полусуммы значений наибольшего и наименьшего элементов в произвольном столбцематрицы использовать процедуру".
Отсюда следует, что можно создать процедуру в которую будет передаваться массив и индекс столбца (можно и без передачи массива, а работать только с индексом, обращаясь к самому исходному массиву, но на этом теряется универсальность процедуры, т.е. ее так просто не перенесешь в другую программу), а возвращать будет уже результат полусуммы.
Заголовок может например выглядить так:

Type
tM = array [1..4,1..5] of Real;
Procedure PolSum(m : tM;ii : Byte;Var mOut : Real);



--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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"
Что это означает в переводе на русский?
И еще один вопрос, за чем находить и передовать индекс, если полусумма это простое число.
Надеюсь, что в моих рассуднениях можно проследить логику, и они не очень далеки от правды.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 - индекс, который и передает в процедуру этот самый номер столбца), а у тебя ищется по всему массиву.

min:=a[1,ii];
max:=a[1,ii];
For i:=2 to 4 do
If a[i,ii]<min then min:=a[i,ii] else
If a[i,ii]>max then max:=a[i,ii];
mOut:=(min+max)/2;



Цитата
Но больше всего меня смущает фраза: " Каждый Bk-ый элемент... получает значение..... k-м столбце матрицы A"
Что это означает в переводе на русский?

см. выше приведенный код, может станет понятнее.

Цитата
И еще один вопрос, за чем находить и передовать индекс, если полусумма это простое число.

Мы передаем индекс (номер столбца) в процедуру, для того, чтобы она знала с каким именно столбцом ей работать.


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Теперь нужно сформировать массив, процедура возвращает нам число {полусумму}, зачит надо вызвать ее 5 раз и записать значения в B:
PolSum(A;??;mOut);
B[1]:=mOut;
PolSum(A;??;mOut);
B[2]:=mOut;...
Проделав эту операцию 5 раз, массив должен сформироваться, и его надо вывести процедурой, которую я уже приводил.
Так ли это, можно ли сделать это проще, и какой индекс столбца нужно писать при обращении, в данном случае.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата
можно ли сделать это проще

For i := 1 to 5 do begin
PolSum(A, i, mOut);
B[i] := mOut
end;


P.S. Если использовать функцию PolSum вместо процедуры, будет еще проще...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Смотрю...
*****

Группа: Пользователи
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

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


To: volvo
У него в условии написано "процедуру", а с функцией конечно покрасивше было бы.


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Попытался собрать все воедино, но возникает много ошибок, не знаю как их исправить, помогите пожалуйста.

program Project2;

{$APPTYPE CONSOLE}
type tm=array[1..4,1..5] of integer; mas=array[1..5] of integer;
var A:tm;

procedure vvod(m,n:integer;var x:tm);{ââåë}
var i,j: integer;
begin writeln('ââåäèòå ìàòðèöó');
for i:=1 to m do
for j:=1 to n do
read(x[i,j]);
end;
Procedure PolSum(m : tM;ii : Byte;Var mOut : Real);
begin
min:=a[1,ii];
max:=a[1,ii];
For i:=2 to 4 do
If a[i,ii]<min then min:=a[i,ii] else
If a[i,ii]>max then max:=a[i,ii];
mOut:=(min+max)/2;
end;
procedure MasOut(n:integer;var p:mas;c:char);{âûâåë}
var i:integer;
begin
writeln('results for',c);
for i:=1 to n do
write(p[i],'');
writeln;
end;
begin
vvod(4,5,'x',x);
PolSum(x,ii,mOut);
MasOut(5,'B',B);
For i := 1 to 5 do begin
PolSum(A, i, mOut);
B[i] := mOut
end;
end.


Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Batia, все (ну, почти все) нормально сделано... Есть 2 основные ошибки:

1) не описываешь переменные, которые используются
Procedure PolSum(m : tM;ii : Byte;Var mOut : Real);
var min, max, i: integer; { <--- Это надо добавить !!! }


и эти переменные - глобально:
type
tm=array[1..4,1..5] of integer;
mas=array[1..5] of real; { <--- Именно Real а не Integer }

var
A: tm;
B: mas;
i: integer;
mOut: real;

2) Количество и порядок следования параметров в описании процедуры и при ее вызове НЕ должны меняться... А у тебя - меняются... Основная часть должна быть такой:
...
vvod(4,5,x);
For i := 1 to 5 do begin
PolSum(A, i, mOut);
B[i] := mOut
end;
MasOut(5,B,'B');
...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Все исправил, ошибок нет, но после токо как введешь матрицу, происходит выход из программы:
program Project4;

{$APPTYPE CONSOLE}
type tm=array[1..4,1..5] of integer; mas=array[1..5] of real;
var
A: tm;
B: mas;
i: integer;
mOut: real;
procedure vvod(m,n:integer;var x:tm);{ввел}
var i,j: integer;
begin writeln('Input Matr');
for i:=1 to m do
for j:=1 to n do
read(x[i,j]);
end;
Procedure PolSum(m : tM;ii : Byte;Var mOut : Real);
var min,max,i: integer;
begin
min:=a[1,ii];
max:=a[1,ii];
For i:=2 to 4 do
If a[i,ii]<min then min:=a[i,ii] else
If a[i,ii]>max then max:=a[i,ii];
mOut:=(min+max)/2;
end;
procedure MasOut(n:integer;var p:mas;c:char);{вывел}
var i:integer;
begin
writeln('results for',c);
for i:=1 to n do
write(p[i],'');
writeln;
end;
begin
vvod(4,5,a);
For i := 1 to 5 do begin
PolSum(a, i, mOut);
B[i] := mOut
end;
MasOut(5,B,'B');
readln;
end.

М
Я не понял, для тебя что, правил НЕ существует? [ CODE] за тебя должны ставить?

 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Ну, телепатов тут нет, какие значения ты вводил нам неизвестно. На моих - нормально отработало (только вот Read в процедуре ввода мешает... Замени его на ReadLn и вводи число за числом, после каждого - Enter, иначе ты просто не увидишь результата...)
 К началу страницы 
+ Ответить 

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

 





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