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

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

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

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





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

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


Приветик всем! У меня небольшая проблемка - функция в проге должна находить сумму всех элементов матрицы, но выдает всегда 0 (может не те параметры dry.gif ). Пож. помогите
program zadacha;
uses crt;
type mt=array [1..20,1..20] of real;
var
A,H:mt;
K:array [1..20] of real;
b:array [1..20] of integer;
IM1:char;
n1,m1:integer;
ch, fl:char;
regim: byte;
formula: byte;
sum: real;
l: real;
function sumelem(IM: char;
Matr1: mt;
n,m:integer):real;
var i,j:integer;
sum: real;
begin
writeln;
sum:=0;
begin
for i:=1 to n do
for j:=1 to m do
sum:=sum+Matr1[i,j];
end;
sumelem:=sum;
end;
.
.
.
.

l:= sumelem (IM1, A, n1, m1);
textcolor(green);
write('Сумма всех элементов матрицы: ',l:8:2);
textcolor(white);
writeln;
writeln;
writeln ('Завершить работу программы?');
writeln (' Y -да;');
writeln (' N - нет.');
fl:=readkey;
until (fl='Y') or (fl='y');
end.


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


Профи
****

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

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


хм.. интересно.. сейчас убрала все, что не относится к функции и добавила заполнение.. все считает:
program zadacha;
const n1=2;
n2=3;
type mt=array [1..20,1..20] of real;
var
A,H:mt;
i,j: integer;
IM1:char;
l: real;
function sumelem(IM: char; Matr1: mt; n,m:integer):real;
var i,j:integer;
sum: real;
begin
writeln;
sum:=0;
for i:=1 to n do
for j:=1 to m do
sum:=sum+Matr1[i,j];
sumelem:=sum;
end;

begin
for i:=1 to n1 do
begin
for j:=1 to n2 do
begin
A[i,j]:=random(5);
write('',A[i,j]:3 :2,' ');
end;
writeln;
end;

l:= sumelem (IM1, A, n1, n2);
write('Сумма всех элементов матрицы: ',l:8:2);
end.

Возможно ошибка где-то в другом месте.. без полного кода угадать где она не могу..

добавлено: ребят, что-то с тегами не то, вот тут смайлик хочет отобразиться - write('',A[i,j]3.gif2,' ');

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


Новичок
*

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

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


Покажи всю программу.


Интересно, как у тебя тут прога работает???
fl:=readkey;
until (fl='Y') or (fl='y');


--------------------
P.S. это лично моё мнение :)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата(Айра @ 13.06.2008 17:38) *
что-то с тегами не то, вот тут смайлик хочет
отобразиться
Не позволяй smile.gif
write('',A[i,j]:3 :2,'  ');
Никаких смайлов, с точки зрения синтаксиса языка тоже нет ошибки ...

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





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

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


вот весь код.
program zadacha;
uses crt;
type mt=array [1..20,1..20] of real;
var
A,H:mt;
K:array [1..20] of real;
b:array [1..20] of integer;
IM1:char;
n1,m1:integer;
ch, fl:char;
regim: byte;
formula: byte;
sum: real;
l: real;
function sumelem(IM: char;
Matr1: mt;
n,m:integer):real;
var i,j:integer;
sum: real;
begin
writeln;
sum:=0;
begin
for i:=1 to n do
for j:=1 to m do
sum:=sum+Matr1[i,j];
end;
sumelem:=sum;
end;

procedure PRC1 (IM:char;
Matr1:mt;
n,m: integer;
schet: byte;
Form: byte );
var
i,j: integer;
error: integer;
sum: real;
min: real;
max: real;
K:array [1..20] of real;
b:array [1..20] of integer;
pr: real;
Matr2: mt;
z: real;

begin
writeln;
textcolor(yellow);
writeln('‚введите размеры матрицы);
writeln('n-строки, m-столбцы');

repeat
write ('n=');
{$i-}
readln(n);
Error:=IOResult;
{$i+}
if (n>20) or (n<2) or (Error<>0) then
writeln('неверно!');
until (n<=20) and (n>=2) and (error=0);
writeln;

repeat
write('m=');
{$i-}
readln(m);
Error:=IOResult;
{$i+}
if (m>20) or (m<2) or (Error<>0) then
writeln('неверно!');
until (m<=20) and (m>=2) and (error=0);
writeln;

for i:=1 to n do
for j:=1 to m do
begin
repeat
write('‚ўҐ¤ЁвҐ Matr1[',i,',',j,']=');
{$i-}
readln(Matr1[i,j]);
Error:=IOResult;
{$i+}
if (Matr1[i,j]>=10000) or (Matr1[i,j]<=-10000) or (Error<>0) then
writeln('ЋиЁЎЄ .Џ®ўв®аЁвҐ ўў®¤!');
until (Matr1[i,j]<=10000) and (Matr1[i,j]>=-10000) and (error=0);
writeln;
end;
clrscr;

for i:=1 to n do
begin
for j:=1 to m do
write(Matr1[i,j]:8:0,'');
writeln;
end;

case schet of
1: begin
writeln;
for j:=1 to m do
begin
b[j]:=0;
for i:=1 to n do
if Matr1[i,j]>0 then
b[j]:=b[j]+1;
end;
textcolor(white);
writeln;
for j:=1 to m do
writeln('‚ в столбце № ',j,' кол-во положит элементов: ',b[j]:4);
writeln;
end;

2: begin

writeln;
for j:=1 to m do
begin
K[j]:=0;
for i:=1 to n do
if Matr1[i,j]>0 then
K[j]:=K[j]+Matr1[i,j];
end;
writeln('Сумма положит. элементов');
for j:=1 to m do
write(K[j]:8:0);
writeln;
end;

3: begin
writeln;
writeln;
for j:=1 to m do
begin
K[j]:=0;
for i:=1 to n do
if Matr1[i,j]>0 then
K[j]:=K[j]+Matr1[i,j];
end;

for j:=1 to m do
begin
for i:=1 to n do
if Matr1[i,j]<>0 then
Matr2[i,j]:=K[j] / Matr1[i,j];
end;
for i:=1 to n do
begin
for j:=1 to m do
write(Matr2[i,j]:8:2,'');
writeln;
end;
end;
end;

case Form of

1: begin
sum:=0;
for i:=1 to n do
for j:=1 to m do
if i=j then sum:= sum + Matr1[i,j];
z:=sum;
writeln;
writeln ('сумма элементов главной диагонали:');
writeln (sum:8:2,' ');
end;

2: begin
writeln;
max:=Matr1[1,1]; min:=Matr1[1,1];
for i:=1 to n do
begin
for j:=1 to m do
if Matr1[i,j]>max then max:=Matr1[i,j];
if Matr1[i,j]<min then min:=Matr1[i,j];
pr:=max-min;
z:=pr;
end;

writeln ('Разница между максимумом и минимумом:',pr:8:2);
end;
end;

end;


begin
clrscr;
ch:=readkey;
repeat
clrscr;
textcolor(yellow);
writeln ('—Что вы хотите найти');
textcolor(white);
writeln;
writeln ('1 => кол-во полож. элем.;');
writeln;
writeln ('2 => сумму полож. элем.;');
writeln;
writeln ('3 => новую матрицу...');

readln (regim);
writeln;
textcolor(yellow);
writeln ('Какой формулой хотите восп.?');
textcolor(white);
writeln;
writeln ('1 => суммы элем. главной диагонали;');
writeln;
writeln ('2 => разница между макс. и миним..');
readln (formula);

PRC1 (IM1, A, n1, m1, regim, formula);
l:= sumelem (IM1, A, n1, m1);
textcolor(green);
write('‘Сумма полож. элементов',l:8:2);
textcolor(white);
writeln;
writeln;
writeln ('завершить?');
writeln (' Y - да');
writeln (' N - нет.');
fl:=readkey;
until (fl='Y') or (fl='y');
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

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

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


как я и предполагала, смотри:
procedure PRC1 (IM:char;      
Matr1:mt;
n,m: integer;
schet: byte;
Form: byte );

у тебя матрица здесь параметр-значение, т.е. ты что-то делаешь с ней в процедуре, а когда выходишь из нее, ее значение все равно не меняется.. т.е. она у тебя остается забита нулями, поэтому и сумма = 0. Тебе нужно, чтоб матрица была параметр-переменная, т.е. var Matr1: mt.
Насчет остальных переменных не знаю, может где-то еще такие ошибки проскочат..

Добавлено через 1 мин.
еще.. зачем тебе im: char в функции подсчета суммы? оно там не используется же..

Добавлено через 3 мин.
ага.. тоже самое происходит у тебя и с n1, m1.. после выхода из процедуры PRC1 их значения будут равны 0.. нужно var добавить..

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





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

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


Большое спасибо smile.gif . Сейчас попробую исправить.

Вот так должно получиться???
function sumelem(IM: char;
n,m:integer):real;
var
Matr1: mt;
n1,m1:integer
i,j:integer;
sum: real;
begin
writeln;
sum:=0;
begin
for i:=1 to n do
for j:=1 to m do
sum:=sum+Matr1[i,j];
end;
sumelem:=sum;
end;


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


Профи
****

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

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


Нет no1.gif функция, которая считает сумму у тебя правильная, только не знаю зачем в ней IM: char;
Тебе нужно немного переделать PRC1. Вот:
procedure PRC1 (IM:char; 
var Matr1:mt; //теперь это параметр-переменная
var n,m: integer; //и здесь так же
schet: byte;
Form: byte );



Добавлено через 6 мин.
знаешь, у меня такой вопрос.. ты пробовал компилировать то, что написал?

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


Гость






Цитата
знаешь, у меня такой вопрос.. ты пробовал компилировать то, что написал?
Встречный вопрос: пробовал, и что? smile.gif Компилируется... И работает. Только считать будет всякий мусор, но компиляцию проходит успешно...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Профи
****

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

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


у меня не компилируется О_о
(я про всю программу)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

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

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


2 Айра, ship - это девушка.


--------------------
P.S. это лично моё мнение :)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Профи
****

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

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


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





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

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


procedure PRC1 (IM:char; 
var Matr1:mt; //теперь это параметр-переменная
var n,m: integer; //и здесь так же
schet: byte;
Form: byte );

Айра, еще раз спасибо!! rolleyes.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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