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

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

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

 
 Ответить  Открыть новую тему 
> функции с параметрами
ship
сообщение 13.06.2008 16:25
Сообщение #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 
 К началу страницы 
+ Ответить 
Айра
сообщение 13.06.2008 17:38
Сообщение #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,' ');

Сообщение отредактировано: Айра - 13.06.2008 18:10
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Alеx J'Root
сообщение 13.06.2008 17:40
Сообщение #3


Новичок
*

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

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


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


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


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


Гость






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

 К началу страницы 
+ Ответить 
ship
сообщение 13.06.2008 18:33
Сообщение #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 
 К началу страницы 
+ Ответить 
Айра
сообщение 13.06.2008 18:49
Сообщение #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 добавить..

Сообщение отредактировано: Айра - 13.06.2008 18:55
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
ship
сообщение 13.06.2008 18:59
Сообщение #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 - 13.06.2008 19:05
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Айра
сообщение 13.06.2008 19:20
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.06.2008 19:33
Сообщение #9


Гость






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


Профи
****

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

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


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


Новичок
*

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

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


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


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


Профи
****

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

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


Сорри.. wink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
ship
сообщение 14.06.2008 16:33
Сообщение #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

 



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