Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2011, 14:20   #1
Volk_xD
Пользователь
 
Регистрация: 16.12.2010
Сообщений: 25
По умолчанию Ф-ия, определяющая сумму строк матрицы, если на главной диагонали матрицы имеется отрицательный эл-т.

Создать функцию, определяющую сумму элементов строк матрицы, если на главной диагонали матрицы располагается отрицательный элемент. Вывести на экран матрицы, сумму строк матриц и максимальную из них.

Функция считает за сумму строки только сам отрицательный элемент. Как сделать так, что бы считалась сумма всей строки? И как найти максимальную сумму?

Вот что получилось:
Код:
Program Ss;
Uses Crt;
Type TArray=Array[1..10,1..10] of integer;
Var a, b:TArray; n,m,k,l :Byte; sum:integer;
Procedure InMatr2(Var x:TArray; row,col:Byte);
Var d,i,j:Byte; s,y:string;
Begin
writeln ('Ukazhite znachenia elementov matrici:');
For i:=1 to row do Begin
y:=' '; d:=WhereY; GotoXY(1,d);
For j:=1 to col do Begin
readln (x[i,j]);
str(x[i,j]:6,s);
y:=y+s;
GotoXY(Length(y),d);
End;
Writeln;
End;
End;

function Summa(x:TArray; row,col:Byte):integer;
Var sum:integer;
    i,j:Byte;
Begin
for i:=1 to row do begin
sum:=0;
 for j:=1 to col do begin
  if (i=j) and (x[i,j]<0) then
begin
sum:=sum+x[i,j];
inc(n);
end;
if n<>0 then
begin
writeln('Summa elementov ',i,'-i stroki=',sum:4);
inc(k);
n:=0;
end;
end;
end;
if k=0 then writeln('Net strok s otricatelnumi elementami na glavnoi diagonali');
End;


BEGIN
Clrscr;
Writeln('Vveite razmernost matrici (menee 10*10) ');
Readln(n);
m:=n;
InMatr2(a,n,m);
Writeln;
sum:=Summa(a,n,m);
Readkey;
End.
Volk_xD вне форума Ответить с цитированием
Старый 04.01.2011, 14:43   #2
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Цитата:
функция считает за сумму строки только сам отрицательный элемент
в соответствии с логикой программы
Цитата:
if (i=j) and (x[i,j]<0)
т.е. в сумму идут только отрицательные элементы.
Заведите переменную-признак
Проходитесь по массиву вставив ваше условие и если встретится элемент меньше нуля, то "активизируйте" эту переменную
затем если переменная "активизирована" то
Код:
for i:=1 to n do
 for j:=1 to m do
  массивсумм[i]:=массивсумм[i]+массивисходный[i,j];
А затем в полученном массиве найдите максимальный элемент
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.

Последний раз редактировалось Niro; 04.01.2011 в 14:45.
Niro вне форума Ответить с цитированием
Старый 04.01.2011, 15:20   #3
Volk_xD
Пользователь
 
Регистрация: 16.12.2010
Сообщений: 25
По умолчанию

Я вот собственно и прошу помочь с реализацией функции, основанной на вышеизложенном вами алгоритме (или похожем, но правильном)
Volk_xD вне форума Ответить с цитированием
Старый 04.01.2011, 15:49   #4
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Код:
for i:=1 to row do
  for j:=1 to col do
     if (i=j) and (x[i,j]<0) then priznak:=1;

if priznak=1 then begin // нах-е сумм каждой строки и закидывания ее в нов. массив
                       for i:=1 to row do
                          for j:=1 to col do
                          newmassiv[i]:=newmassiv[i]+x[i,j];
                       end;

for i:=1 to row do
   writeln('сумма ',i,' строки равна ',newmassiv[i]);

max:=newmassiv[1];
for i:=2 to row do //поиск максимального элемента
  if newmassiv[i]>max then max:=newmassiv[i];
writeln('максимальная из сумм ',max);
Ну думаю исходную матрицу выведите сами
P.S. код не проверял, но должно работать
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума Ответить с цитированием
Старый 04.01.2011, 16:05   #5
k0tone
Пользователь
 
Аватар для k0tone
 
Регистрация: 09.11.2010
Сообщений: 99
По умолчанию

Ещё, как вариант:
Код:
function Summa(x:TArray; row,col:Byte):integer;
Var sum:integer;
    i,j:Byte;
Begin
for i:=1 to row do
 if (x[i,i]<0) then
  for i:=1 to row do
   begin
    sum:=0;
     for j:=1 to col do
      begin
       sum:=sum+x[i,j];
      end;
    writeln('Summa elementov ',i,'-i stroki=',sum:4);
   end;
writeln('Net strok s otricatelnumi elementami na glavnoi diagonali');
End;
Если я вам помог - нажмите на весы пот аватаркой!
k0tone вне форума Ответить с цитированием
Старый 04.01.2011, 18:31   #6
Volk_xD
Пользователь
 
Регистрация: 16.12.2010
Сообщений: 25
По умолчанию

Не получается требуемого решения...=(
У Niro - выдаёт ошибку (может я неправильно объявляю массив).
У k0tone - считает сумму всех строк, а не только с отрицательным элементом на диагонали.
Уже часа 4 сижу и не получается переделать. Кто знает, как решить, подскажите пожалуйста
Volk_xD вне форума Ответить с цитированием
Старый 05.01.2011, 13:39   #7
k0tone
Пользователь
 
Аватар для k0tone
 
Регистрация: 09.11.2010
Сообщений: 99
По умолчанию

Я подумал что и нужно искать сумму каждой строки =)

Цитата:
Создать функцию, определяющую сумму элементов строк матрицы, если на главной диагонали матрицы располагается отрицательный элемент. Вывести на экран матрицы, сумму строк матриц и максимальную из них.
Код:
function Summa(x:TArray; row,col:Byte):integer;
Var sum:array [1..10] of integer;
    max:integer;
    i,j:Byte;
Begin
k:=0;
for i:=1 to row do
 if (x[i,i]<0) then
  begin
   k:=k+1;
   sum[k]:=0;
   for j:=1 to col do sum[k]:=sum[k]+x[i,j];
   writeln('Summa elementov ',i,'-i stroki=',sum[k]:4);
  end;
if k>0 then
 begin
  max:=sum[1];
  for i:=2 to k do
  if sum[i]>max then max:=sum[i];
  writeln('Maksimalnaya summa=',max);
 end
else
 writeln('Net strok s otricatelnumi elementami na glavnoy diagonali');
End;
Если я вам помог - нажмите на весы пот аватаркой!

Последний раз редактировалось k0tone; 05.01.2011 в 18:40.
k0tone вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Матрицы.Помянять элементы главной диагонали, если они являються простыми числами Darkren Помощь студентам 2 23.11.2010 09:45
ПАСКАЛЬ! умножение k-ой строки исходной матрицы на сумму элементов главной диагонали wrmarw Помощь студентам 5 08.05.2010 12:05
возведение в квадрат элементов главной диагонали матрицы. Паскаль hardrace Помощь студентам 7 14.11.2009 22:54
Вычислить сумму элементов матрицы, расположенные на главной диагонали и выше нее MariyaVo Паскаль, Turbo Pascal, PascalABC.NET 9 10.05.2009 21:19
Найти сумму парных элементов матрицы v[4][4].Расположенных ниже главной диагонали. Black_Angel91 Помощь студентам 11 21.04.2009 20:51