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

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

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

> Что-то с функцией., Програма без функции работает, с ней нет.
DarkWishmaster
сообщение 13.12.2010 19:07
Сообщение #1


Бывалый
***

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

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


Здравствуйте!
Program P3; uses crt;                                                         
type matrice=array[1..100,1..100] of integer;
var a:matrice; i,j,s,n:integer;
function F(n:integer;a:matrice):integer;
var i,j,s:integer;
begin
for i:=1 to n do
for j:=1 to n do begin
if (i=n-j+1) and (a[i,j] mod 5=0) then
S:=S+a[i,j];
end;
F:=S; end;
begin clrscr;
readln(n);
for i:=1 to n do
for j :=1 to n do begin
write('a[',i,',',j,']='); read(a[i,j]);
end;
writeln('Suma numerelor este ',F(n,a));
writeln('Matrice:');
for i:=1 to n do begin
for j:=1 to n do
write(a[i,j], ' ');
writeln;
end;
readln; readln; {почему-то с 1 не пашет}
end.
{stack overflow}


Тут програма должна отображать суму чисел которые делятся на 5 без остатка по вторичной диагонале.
Без функции програма работает, с ней нет. Может я как-то не так всё сделал.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 2)
volvo
сообщение 13.12.2010 19:28
Сообщение #2


Гость






Ошибка - это "переполнение стека"? Ожидаемо, потому что по умолчанию размер стека = 16К, размер массива, который передается в функцию - около 20К. Все, стек закончился, и вылетает ошибка. Если передать массив вот так:
function F(n:integer;CONST a:matrice):integer;
, то должно заработать. Я прав?

P.S. Не забудь обнулить переменную S внутри функции, иначе будешь получать странные результаты.
 К началу страницы 
+ Ответить 
DarkWishmaster
сообщение 13.12.2010 19:54
Сообщение #3


Бывалый
***

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

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


Цитата(volvo @ 13.12.2010 20:28) *

Ошибка - это "переполнение стека"? Ожидаемо, потому что по умолчанию размер стека = 16К, размер массива, который передается в функцию - около 20К. Все, стек закончился, и вылетает ошибка. Если передать массив вот так:
function F(n:integer;CONST a:matrice):integer;
, то должно заработать. Я прав?

P.S. Не забудь обнулить переменную S внутри функции, иначе будешь получать странные результаты.


Заработало!!! Спасибо большое!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 22.06.2025 0:12
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"