• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

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

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите решить задачу в паскале

  • Автор темы Автор темы NAt
  • Дата начала Дата начала

NAt

Новые
Регистрация
9 Дек 2012
Сообщения
45
Реакции
0
Баллы
0
Помогите решить задачу в паскале

Дана матрица (nхm).Создать массив, каждый элемент которого равен среднему арифметическому отрицательных элементов в каждой строке матрицы. Упорядочить строки матрицы по убыванию средних арифметических элементов.
program a1345;
const n=10;
var a:array[1..n,1..n] of real;
i,j,n_max,k,kol:integer;
max,temp:real;
s:array[1..n]of real;
begin
randomize;
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:= random(20)-10;
write(' ',a[i,j]);
end;
writeln;
end;
for i:=1 to n do
begin
kol:=0; s:=0;
for j:=1 to n do
begin
if a[i,j]<0 then
begin
kol:=kol+1;
s:=a[i,j]+s;
end;
end;
end;
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:=s/kol;
end;
end;
а дальше я запуталась, подскажите пожалуйста)
 
а дальше я запуталась, подскажите пожалуйста)
Подсказываю.
Прежде всего, не следует самочинно упрощать задачу: если в условии стоит размерность матрицы 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[j]. Сделано это исключительно для наглядности, поскольку в конце приходится иметь дело с вектор-строками a. Но можно всё это задавать и в обычной форме - тоже должно работать (по идее).
И еще. Желательно предусмотреть ситуацию, когда отрицательных чисел в строке не окажется вовсе. Сделано.
Код:
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.
 
Спасибо огромное)
 
Назад
Сверху