Показать сообщение отдельно
Старый 21.03.2015, 16:30   #6 (permalink)
Madara
Member
 
Регистрация: 29.11.2013
Сообщений: 50
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Спасибо большое за помощь!

Оба варианта программы работают, выбрал 1 вариант.

Что касается этой бредовой функции, то я понимаю в ней нет смысла, но в задании требуется чтобы в процедуре была функция, это вроде бы как для понимания.
Я с вами совершенно согласен, незачем тратить время и место на переименование стандартной функции, но задание требует...

PHP код:
Function module(x:real):real;
 
Begin
  module
:=abs(x);
 
end// функция модуля 
Вот что получилось у меня с оформлением: (если кому надо)

PHP код:
Program zam;
Const 
n=3;

Type mass=array[1..nof real;
     
matr=array[1..n,1..nof real;

Function 
module(x:real):real;
 
Begin
  module
:=abs(x);
 
end// функция модуля

Function sredarifm(Q:matr):real;
 var
  
summ:real;
  
i,j:integer;
 
Begin
    Summ
:=0;
     
Begin
      
for i:=1 to n do
       for 
j:=1 to n do
         
summ:=summ+Q[i,j];
     
end;
    
sredarifm:=summ/(n*n);
 
end//функция расчёта среднего арифметического матрицы

Procedure zamena(w:real; var p:mass );
 var 
i,k:integer;
  
Begin
   k
:=0;
   for 
i:=1 to n do
    if 
module(p[i])<w then
     Begin
      k
:=k+1;
      
p[i]:=0;
     
end;
   
writeln;
   for 
i:=1 to n do
    
write(p[i]:8:2);
   
Write('   Число замен в данной строке : ',k);
  
end// написал процедуру, считаем количество элементов массива р модули которых больше меньше или равны r,
  
Var
  
i,j:integer;
  
w:real;
  
A:matr;
  
c:mass;

Begin
 Write
('Введите контрольную величину W : ');
 
Readln(w);
 
Writeln('Заполните матрицу А: ');
 for 
i:=1 to n do
  
Begin      
   write
('Введите ',i,' строку из ',n,' элементов : ');
    for 
j:=1 to n do
     
Begin
      read
(A[i,j]);
     
end;
  
end;
 
writeln;
 
writeln('    Исходная матрица А: ');
 
writeln;
 for 
i:=1 to n do
  
Begin
   
for j:=1 to n do
   
write(A[i,j]:8:2);
   
writeln;
  
end;
 
writeln;
 
writeln('    Измененная матрица А: ');
 for 
i:=1 to n do
  
Begin
   
for j:=1 to n do
   
c[j]:=A[i,j];
   
zamena(w,c);
   for 
j:=1 to n do
   
A[i,j]:=c[j];
  
end;
 
writeln;
 
writeln;
 
Writeln('  Среднее арифметическое полученной матрицы : 'sredarifm(A):0:2);
end
Окно вывода выглядит так:
PHP код:
Введите контрольную величину W 5
Заполните матрицу А

Введите 1 строку из 3 элементов 1 3 6
Введите 2 строку из 3 элементов 
1 2 8
Введите 3 строку из 3 элементов 
0 1 9

    Исходная матрица А


    
1.00    3.00    6.00
    1.00    2.00    8.00
    0.00    1.00    9.00

    Имененная матрица А


    
0.00    0.00    6.00   Число замен в данной строке 2
    0.00    0.00    8.00   Число замен в данной строке 
2
    0.00    0.00    9.00   Число замен в данной строке 
2

  Среднее арифметическое полученной матрицы 
2.56 
Не знаю почему, но мне больше нравится вводить матрицу таким образом (возможно это не совсем верно):
PHP код:
Введите 1 строку из 3 элементов 1 3 6
Введите 2 строку из 3 элементов 
1 2 8
Введите 3 строку из 3 элементов 
0 1 9 
Т.е. таким кодом:
PHP код:
for i:=1 to n do
  
Begin      
   write
('Введите ',i,' строку из ',n,' элементов : ');
    for 
j:=1 to n do
     
Begin
      read
(A[i,j]);
     
end;
  
end
Так же в программу можно добавить процедуру, считающую число нулей (замен) в матрице (не желательно):
PHP код:
Procedure chislozamen(A:matr);
 var 
i,j,k:integer;
  
Begin
   k
:=0;
   for 
i:=1 to n do
    
Begin
     
for j:=1 to n do
      
Begin
       
if A[i,j]=0 then
       k
:=k+1;
      
end
    
end;
    
Writeln('  Общее число замен в матрице равно : ',k);
  
end//процедура считающая нули изменённой матрицы - т.е. и число замен 
Эта процедура считает именно нули и при контрольной величине, равной нулю, она не будет работать, поэтому её лучше не использовать
Другого способа посчитать общее число замен не нашёл, в принципе это не требуется в задании...

Владимир, ещё раз спасибо!
Вы как всегда описали всё предельно информативно.
Madara вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070