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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 12)
Айра
сообщение 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('ЋиЁЎЄ  .Џ(r)ў(r)аЁвҐ ўў(r)¤!');
        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

 

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