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

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

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

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


Новичок
*

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

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


uses crt;
const
Max= 100;

type
tStroka= array [1..Max] of integer;

var
a: array [1..100] of tStroka;
N, M, i, j :integer;
s:real;
e: tStroka;

begin
write('N, M -> ');
readln(N, M);
write('Input matrix -> ');
for i:=1 to N do
for j:=1 to M do
begin
write('A[',i,',',j,'] -> ');
readln(a[i, j]);
end;
for i:=1 to n do
for j:=i-1 downto 1 do
begin
if a[j,1]<a[j+1,1] then
begin
e:=a[j];
a[j]:=a[j+1];
a[j+1]:=e;
end;

writeln (a[i,j]);
end;
for i:= 1 to n do
begin
s:=0;
for j:= 1 to m do
s:=s+a[i,1];
end;
s:=s/N;
write (s);
end.

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


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Eduard @ 26.05.2011 20:21) *
Как сделать сортировку в виде процедуры, а вычисление в виде функции? Препод говорил что-то о разных способах задания переменых в процедурах и функциях, и я запутался, когда, какой способ использовать.
Думаю, твой препод имел в виду параметры-значения и параметры-переменные. Сортировку нужно применять непосредственно к самой матрице, и результат должен отразиться на ней - следовательно, надо применять var-параметр. Вычисление чего-то там (я так и не понял, чего именно; если среднее по столбцам - то оно делается неправильно) дает некий отдельный результат, никак не отражающийся на самой матрице. Следовательно, жеательно применить параметр-значение (хотя var-параметр тоже будет работать, и даже быстрее, нужно только следить за тем, чтоб случайно не испортить матрицу). А все вспомогательные переменнные (параметры цикла, промежуточные суммы..) надо делать локальными, то есть определять их внутри процедуры/функции.
Короче, примерно вот так:
const
Max= 100;

type
tStroka= array [1..Max] of integer;
tMnogoStrok= array [1..100] of tStroka;

var
a: tMnogoStrok;
N, M, i, j:integer;
e: tStroka;


procedure Sort(var a: tMnogoStrok);
var
i,j: integer;
begin
for i:=1 to n do
for j:=i-1 downto 1 do begin
if a[j,1]<a[j+1,1] then begin
e:=a[j];
a[j]:=a[j+1];
a[j+1]:=e;
end;
writeln (a[i,j]);
end
end;

function Calculation(a: tMnogoStrok): double;
var
i,j: integer;
s: double;
begin
for i:= 1 to n do begin
s:=0;
for j:= 1 to m do s:=s+a[i,1];
end;
Calculation:= s/N
end;

begin
write('N, M -> ');
readln(N, M);
write('Input matrix -> ');
for i:=1 to N do
for j:=1 to M do
begin
write('A[',i,',',j,'] -> ');
{readln(a[i, j]);}
a[i,j]:= Random(n*m);
end;
Sort(a);
writeln (Calculation(a));
end.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Цитата(Lapp @ 27.05.2011 1:33) *



function Calculation(a: tMnogoStrok): double;
var
i,j: integer;
s: double;
begin
for i:= 1 to n do begin
s:=0;
for j:= 1 to m do s:=s+a[i,1];
end;
Calculation:= s/N
end;



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


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Eduard @ 27.05.2011 7:19) *
В этом месте вылазит ошибка Stack overflow error.
Увеличь стек или уменьши размер массивов.
Какой у тебя компилятор?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


Цитата(Lapp @ 27.05.2011 8:55) *

Какой у тебя компилятор?

TP7
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Eduard @ 27.05.2011 8:56) *
TP7

А ездишь ты на телеге?..

По умолчанию, в TP7 стек был, кажется.. 16 К. Твой массив 100х100х2=20К. Увеличь стек до максимума (64К). Это в опциях.

Скачай FP (freepascal.org) и займись делом, а не бирюльками.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

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

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


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


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Eduard @ 27.05.2011 9:08) *
Спасибо. Я не мог понять что такое стек.
Стек - это область памяти, где размещаются переменные вызываемых процедур. Динамически аллоцируемая память размещается в "куче" (heap). Она в TP может достигать аж ~600 килобайт!! Дикое количество, особенно если учесть, что размер памяти сейчас измеряется даже не мегабайтами, а гигабайтами.. Иначе говоря, ТР тебе позволяет использовать одну-две сотых доли процента установленной памяти..
Зачем пользоваться краденным старьем, если есть бесплатный новый компилятор со всеми современными возможностями?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Злостный любитель
*****

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

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


> Иначе говоря, ТР тебе позволяет использовать одну-две сотых доли процента установленной памяти..

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


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(TarasBer @ 27.05.2011 10:39) *
Можно перейти в защищённый режим и использовать всю память.
А сделать один большой массив?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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