Показать сообщение отдельно
Старый 24.12.2012, 10:31   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от NAt Посмотреть сообщение
а дальше я запуталась, подскажите пожалуйста)
Подсказываю.
Прежде всего, не следует самочинно упрощать задачу: если в условии стоит размерность матрицы nxm, т.е. число строк не обязано равняться числу столбцов, то и незачем делать матрицу квадратной. С другой стороны, раз Вы присваиваете элементам матрицы целые значения, то бессмысленно определять ее, как вещественную. То есть можно, конечно, но просто выводить сложнее, да и задавать элементы нужно так:
a[i,j]:= random*20-10;
Поэтому для простоты будем считать матрицу целочисленной.
Еще одно пояснение. В моем варианте программы используется не обычное определение массива
a:array[1..n,1..m] of integer;
а такая форма:
a:array[1..n] of array[1..m] of integer;
и, соответственно, элементы не a[i,j], а a[i][j]. Сделано это исключительно для наглядности, поскольку в конце приходится иметь дело с вектор-строками a[i]. Но можно всё это задавать и в обычной форме - тоже должно работать (по идее).
И еще. Желательно предусмотреть ситуацию, когда отрицательных чисел в строке не окажется вовсе. Сделано.
Код:
const
 n=10;
 m=12;
var
 a:array[1..n] of array[1..m] of integer;
 i,j,k:integer;
 s:array[1..n] of real;
 temp:real;
 kol:array[1..n] of integer;
 V:array[1..m] of integer;

Begin
 randomize;
 for i:=1 to n do
  begin
   for j:=1 to m do
    begin
     a[i][j]:= random(20)-10;
     write(a[i][j]:4);
    end;
   writeln;
  end;
 writeln;
 writeln;
 for i:=1 to n do
  begin
   kol[i]:=0;
   s[i]:=0;
   for j:=1 to m do
    if a[i][j]<0 then
     begin
      kol[i]:=kol[i]+1;
      s[i]:=s[i]+a[i][j];
     end;
  end;
 for i:=1 to n do
  begin
   if kol[i]>0 then
    s[i]:=s[i]/kol[i];
   write(s[i]:6:1);
  end;
 writeln;
 writeln;
 for k:=1 to n-1 do
  for i:=1 to n-k do
   if s[i]<s[i+1] then
    begin
     temp:=s[i];
     s[i]:=s[i+1];
     s[i+1]:=temp;
     V:=a[i];
     a[i]:=a[i+1];
     a[i+1]:=V;
    end;
 for i:=1 to n do
  begin
   for j:=1 to m do
    write(a[i][j]:4);
   writeln;
  end;
 Readln;
End.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

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