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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2013, 12:37   #1
fakesmile
Новичок
Джуниор
 
Регистрация: 01.02.2013
Сообщений: 2
По умолчанию задача на двумерный массив (PascalABC)

Здравствуйте. Помогите, пожалуйста.
Дана прямоугольная матрица 4x3:
1)вычислить среднее арифметическое значение среди ее элементов, расположенных в четных строках и нечетных столбцах.
2)поменять местами строки, содержащие наибольший и наименьший элементы матрицы (все элементы матрицы различны)
3)найти количество столбцов, в которых все элементы положительные.

ввод элементов массива осуществляется с клавиатуры
fakesmile вне форума Ответить с цитированием
Старый 01.02.2013, 13:01   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А чем помочь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.02.2013, 13:21   #3
fakesmile
Новичок
Джуниор
 
Регистрация: 01.02.2013
Сообщений: 2
По умолчанию

Есть частично задача, но в ней неверно высчитывает среднее арифметическое
Код:
Const
  n=4;
  m=3;
Var
  x: Array[1..n,1..m] of Integer;
  i,j,imin,imax: Byte;
  min,max,s,k,tmp,t: Integer;
BEGIN
max:=-Maxint;
min:=Maxint;
Writeln('Матрица:');
For i:=1 to n do
begin
  For j:=1 to m do
  begin
    x[i,j]:=Random(21)-5;
    If x[i,j]<min Then
    begin
      imin:=i;
      min:=x[i,j];
    end;
    If x[i,j]>max Then
    begin
      imax:=i;
      max:=x[i,j];
    end;
    Write(x[i,j]:4);
  end;
  Writeln
end;
Writeln('Средние арифметические:');
For i:=1 to n do
If not(Odd(i)) Then
begin
  For j:=1 to m do
  s:=s+x[i,j];
  Writeln(i,' строка: ',s/m:2:2);
  s:=0;
end;
For j:=1 to m do
If Odd(j) Then
begin
  For i:=1 to n do
  s:=s+x[i,j];
  Writeln(j,' столбец: ',s/n:2:2);
  s:=0;
end;
Writeln('Измененная матрица:');
For j:=1 to m do
begin
  tmp:=x[imin,j];
  x[imin,j]:=x[imax,j];
  x[imax,j]:=tmp;
end;
For i:=1 to n do
begin
  For j:=1 to m do
  Write(x[i,j]:4);
  Writeln
end;
For j:=1 to m do
begin
  t:=0;
  For i:=1 to n do
  If x[i,j]>=0 Then
  Inc(t);
  If t=n Then
  Inc(k);
end;
Writeln('Кол-во столбцов, в которых все элементы положительные = ',k);
END.
fakesmile вне форума Ответить с цитированием
Старый 01.02.2013, 13:50   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Ну так... чему у Вас равно s перед входом в цикл нахождения среднего арифметического? (чему угодно)
А чему должно быть равно? (нулю)
Abstraction вне форума Ответить с цитированием
Старый 01.02.2013, 13:59   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Код:
Const
  n = 4;
  m = 3;

Var
  x: Array [1 .. n, 1 .. m] of Integer;
  i, j, imin, imax: Byte;
  min, max, s, k, tmp, t: Integer;

BEGIN
  randomize;
  max := -Maxint;
  min := Maxint;
  Writeln('Матрица:');
  For i := 1 to n do
  begin
    For j := 1 to m do
    begin
      x[i, j] := Random(21) - 5;
      If x[i, j] < min Then
      begin
        imin := i;
        min := x[i, j];
      end
      else If x[i, j] > max Then
      begin
        imax := i;
        max := x[i, j];
      end;
      Write(x[i, j]:4);
    end;
    Writeln
  end;
  Writeln('Среднее арифметическое:');
  i := 2;
  k := 0;
  s := 0;
  while i <= n do
  begin
    j := 1;
    while j <= m do
    begin
      s := s + x[i, j];
      inc(k);
      inc(j, 2);
    end;
    inc(i, 2);
  end;
  if k > 0 then
    Writeln(s / k:2:2)
  else
    Writeln('Нет подходящих элементов');
  Writeln('Измененная матрица:');
  For j := 1 to m do
  begin
    tmp := x[imin, j];
    x[imin, j] := x[imax, j];
    x[imax, j] := tmp;
  end;
  For i := 1 to n do
  begin
    For j := 1 to m do
      Write(x[i, j]:4);
    Writeln
  end;
  k := 0;
  For j := 1 to m do
  begin
    t := 0;
    For i := 1 to n do
      t := t + ord(x[i, j] > 0);
    k := k + ord(t = n);
  end;
  Writeln('Кол-во столбцов, в которых все элементы положительные = ', k);
  readln;
END.
Я по-другому понял задание - среднее арифметическое элементов, находящееся на пересечении четных столбцов и нечетных строк.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на двумерный массив в Си acmilanfan Помощь студентам 0 29.11.2011 23:01
Двумерный массив - задача Ale34 Паскаль, Turbo Pascal, PascalABC.NET 0 25.05.2011 14:28
задача на двумерный массив ArchiS Помощь студентам 7 20.12.2010 22:54
Задача на двумерный массив [Gunpowder M.D.] Помощь студентам 1 18.10.2010 01:48