0 / 0 / 2
Регистрация: 08.10.2017
Сообщений: 23
1

Заменить все отрицательные элементы массива нулём, а положительные - средним арифметическим массива

29.10.2017, 16:16. Показов 1311. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача: Заменить все отрицательные элементы массива - нулём, а положительные - средним арифметическим массива.
Вопрос:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
uses crt;
const n=5;
var a,b: array [1..n,1..5] of integer;
    i,j: byte;
begin
writeln('исходный массив');
for i:=1 to n do
    begin
    for j:=1 to n do
        begin
        a[i,j]:=random(19)-9;
        write(a[i,j]:3);
        if a[i,j]<0 then b[i,j]:=0 else b[i,j]:=a[i,j];
        end;
    writeln;
    end;
writeln('Массив В');
for i:=1 to n do
    begin
    for j:=1 to n do
        write(b[i,j]:3);
    writeln;
    end;
readln;
end.
Первую часть сделал - заменить все отрицательные элементы на 0, а как поступать с к - нет идей...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2017, 16:16
Ответы с готовыми решениями:

Все отрицательные элементы массива заменить нулем
N=10 Все отрицательные элементы массива заменить нулем. const WG=100; type ...

Заменить в массиве все отрицательные элементы средним арифметическим значением всех положительных, вывести оба массива
Здравствуйте, стоит такая задача: Сгенерировать одномерный целочисленный массив случайного размера...

Заменить положительные элементы средним арифметическим всех элементов массива
Дан массив. Если элементы выше ноля надо заменить их средним арифметическим значением всех...

Положительные элементы массива заменить средним арифметическим среди положительных элементов
Пожалуйста, помогите решить задачу. Положительные элементы массива заменить средним арифметическим...

6
Alvin Seville
342 / 272 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
29.10.2017, 16:54 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const
  N = 3;
  M = 3;
 
var
  A: array [0..N - 1, 0..M - 1] of integer;
  B: array [0..N - 1, 0..M - 1] of real;
  Average: real;
 
begin
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
    begin
      Readln(A[i, j]);
      Average += A[i, j];
      B[i, j] := Ord(A[i, j] >= 0) * A[i, j];
    end;
  
  Average := Average / (N * M);
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      if A[i, j] > 0 then
        B[i, j] := Average;
  
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to M - 1 do
      Write(B[i, j]:8:2);
    Writeln();
  end;
end.
Добавлено через 2 минуты
При замене на 0 достаточно:
Pascal
1
B[i, j] := Ord(A[i, j] >= 0) * A[i, j];
Добавлено через 43 секунды
Для неотрицательных Ord вернет 1, что означает, что мы не меняем A[i, j], но если элемент отрицательный, то Ord вернет 0 и на выходе будет 0.
0
0 / 0 / 2
Регистрация: 08.10.2017
Сообщений: 23
29.10.2017, 17:46  [ТС] 3
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
При замене на 0 достаточно:
PascalВыделить код
1
B[i, j] := Ord(A[i, j] >= 0) * A[i, j];
Боюсь, что препод не поймёт меня, Average - ещё не проходили. Сейчас этап изучения одно- и двух- мерных массивов. С Вашего ответа немного понял, как среднее арифметическое сделать, но всё остался на прежнем месте, код так и не соображу..

Добавлено через 40 минут
Вот, сделал сам, всё работает.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
uses crt; 
const n=5; 
var a,b: array [1..n,1..n] of real; 
sum: array [1..n] of real;
i,j: byte; 
begin 
    writeln('Исходный массив: '); 
    for i := 1 to n do 
    begin 
        sum[i] :=0;
        for j := 1 to n do 
        begin 
            a[i, j] := random(19) - 9; 
            write(a[i, j]:5); 
            sum[i] := sum[i] + a[i, j];
        end; 
        sum[i] := sum[i] / n;
        writeln; 
    end; 
    
    for i := 1 to n do 
    begin 
        for j := 1 to n do 
        begin
            if a[i, j] < 0 then 
                b[i, j] := 0 
            else 
                b[i, j] := sum[i];  
        end; 
        writeln; 
    end;    
     
    writeln('Обработанный массив: '); 
    for i := 1 to n do 
    begin 
        for j := 1 to n do 
            write(b[i, j]:5); 
        writeln; 
    end; 
    readln; 
end.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32793 / 21133 / 8144
Регистрация: 22.10.2011
Сообщений: 36,393
Записей в блоге: 8
29.10.2017, 17:51 4
Цитата Сообщение от Yungmusasi Посмотреть сообщение
Average - ещё не проходили
А i проходили? А j? Точно такое же имя переменной - Average...

Добавлено через 3 минуты
Цитата Сообщение от Yungmusasi Посмотреть сообщение
всё работает
"Работает" и "работает правильно" - это разные вещи. Вот вышеприведенный код - просто работает. Потому что в задаче требуется найти среднее арифметическое всего массива, и заменить им все положительные элементы. А ты меняешь их на среднее арифметическое строки, а не массива.
0
Alvin Seville
342 / 272 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
29.10.2017, 17:56 5
Yungmusasi, так что еще в моем коде не понятно?

Добавлено через 2 минуты

Не по теме:


Вот еще примеры кода обработки массивов без условных операторов:
1 - Замена отрицательных элементов на неотрицательные

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const
  N = 5;
  M = 5;
 
var
  A: array [0..N - 1, 0..M - 1] of integer;
 
procedure Print(d: integer);
begin
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to M - 1 do
      Write(A[i, j]:d);
    Writeln();
  end;
  Writeln();
end;
 
begin
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      A[i, j] := -10 + Random(20);
  
  Print(4);
  
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      A[i, j] := (1 - 2 * Ord(A[i, j] < 0)) * A[i, j];
  
  Print(4);
end.
2 - Удвоить положительные элементы
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const
  N = 5;
  M = 5;
 
var
  A: array [0..N - 1, 0..M - 1] of integer;
 
procedure Print(d: integer);
begin
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to M - 1 do
      Write(A[i, j]:d);
    Writeln();
  end;
  Writeln();
end;
 
begin
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      A[i, j] := -10 + Random(20);
  
  Print(4);
  
  for var i := 0 to N - 1 do
    for var j := 0 to M - 1 do
      A[i, j] := (1 + Ord(A[i, j] > 0)) * A[i, j];
  
  Print(4);
end.

0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32793 / 21133 / 8144
Регистрация: 22.10.2011
Сообщений: 36,393
Записей в блоге: 8
29.10.2017, 18:13 6
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
Pascal
1
A[i, j] := (1 - 2 * Ord(A[i, j] < 0)) * A[i, j];
Это теперь так строка
Pascal
1
A[i, j] := Abs(A[i, j]);
записывается?
0
Alvin Seville
342 / 272 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
29.10.2017, 18:20 7


Добавлено через 16 секунд
Если без использования Abs - да.
0
29.10.2017, 18:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.10.2017, 18:20
Помогаю со студенческими работами здесь

Положительные элементы массива заменить средним арифметическим среди положительных элементов.
1) Вычислить S = 2/3 + 4/5 + 6/7 +... + 112/113. 2) Вводя n значений r, вычислить по выбору...

Заменить все элементы массива с четными индексами средним арифметическим всех элементов массива
Добрый день! не получается решить задачу. Не могу уразуметь как работать с индексами. Прошу...

Заменить все элементы массива с отрицательными значениями средним арифметическим положительных
Объявить массив целых чисел и заполнить его случайными значениями. Размер массива и диапазон...

Заменить все положительные элементы массива средним значением массива
Дан массив из 10 целых чисел. написать программу замены всех положительных элементов средним...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru