Форум программистов, компьютерный форум CyberForum.ru

В прямоугольной матрице каждый нулевой элемент заменить средним арифметическим значением ненулевых элементов той строки - C++

Восстановить пароль Регистрация
 
hospik
1 / 1 / 0
Регистрация: 21.11.2011
Сообщений: 77
24.03.2012, 12:18     В прямоугольной матрице каждый нулевой элемент заменить средним арифметическим значением ненулевых элементов той строки #1
В прямоугольной матрице каждый нулевой элемент заменить средним арифметическим значением ненулевых элементов той строки, в которой расположен данный нулевой элемент. Если в строке несколько нулевых элементов, то они должны быть заменены одним и тем же значением.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2012, 12:18     В прямоугольной матрице каждый нулевой элемент заменить средним арифметическим значением ненулевых элементов той строки
Посмотрите здесь:

Заменить все элементы с отрицательными значениями средним арифметическим значением всех положительных элементов. C++
Заменить все элементы с отрицательными значениями средним арифметическим значением всех положительных элементов C++
C++ В массиве каждый элемент, равный нулю, заменить средним арифметическим всех элементов
Заменить в каждом массиве максимальный элемент средним арифметическим положительных элементов (если оно существует) соответствующего массива C++
C++ Заменить максимальный элемент в матрице, средним арифметическим элементов строки, в которой находится максимальный элемент
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
24.03.2012, 12:43     В прямоугольной матрице каждый нулевой элемент заменить средним арифметическим значением ненулевых элементов той строки #2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
float matrix[N][M]; 
 
for (int i=0;i<N;i++) {
    float s=0;
    float zero[M]; //номера элементов, которые равны 0
    int count=0;   //количество 0
    for (int j=0;j<M;j++) {
        if (matrix[i][j]==0) {
                             zero[count]=j;
                             count++;
                             }
        else s+=matrix[i][j];
        }
    }
    s/=M;
    for (int j=0;j<count;j++) {
        matrix[i][zero[j]]=s;        
    }
}
истина где-то рядом =)
Байт
 Аватар для Байт
13940 / 8771 / 1219
Регистрация: 24.12.2010
Сообщений: 15,872
24.03.2012, 13:01     В прямоугольной матрице каждый нулевой элемент заменить средним арифметическим значением ненулевых элементов той строки #3
C
1
2
3
for(j=0, s=0; j<M; j++) s+= matrix[i][j];
s /= M;
for(j=0; j<M; j++) if (matrix[i][j]==0) matrix[i][j]=s;
Nekto, твой алгоритм лучше тем, что он однопроходный (те. быстрее), зато мой не требует дополнительной памяти. Извечная дилема...
Выбор - за ТС.
hospik
1 / 1 / 0
Регистрация: 21.11.2011
Сообщений: 77
26.03.2012, 20:01  [ТС]     В прямоугольной матрице каждый нулевой элемент заменить средним арифметическим значением ненулевых элементов той строки #4
Ребят а можете кто то код полностью написать а то я в С++ начинающий?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
27.03.2012, 06:17     В прямоугольной матрице каждый нулевой элемент заменить средним арифметическим значением ненулевых элементов той строки #5
В данном случае не прав ни Nekto, ни Байт.

Цитата Сообщение от hospik Посмотреть сообщение
В прямоугольной матрице каждый нулевой элемент заменить средним арифметическим значением ненулевых элементов той строки
А у обоих получается среднее арифметическое значение всех элементов строки
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
27.03.2012, 07:52     В прямоугольной матрице каждый нулевой элемент заменить средним арифметическим значением ненулевых элементов той строки #6
Цитата Сообщение от valeriikozlov Посмотреть сообщение
В данном случае не прав ни Nekto, ни Байт.


А у обоих получается среднее арифметическое значение всех элементов строки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for (int i=0;i<N;i++) {
    float s=0;
    float zero[M]; //номера элементов, которые равны 0
    int count=0;   //количество 0
    for (int j=0;j<M;j++) {
        if (matrix[i][j]==0) {
                             zero[count]=j;
                             count++;
                             }
        else s+=matrix[i][j];
        }
    }
    s/=(M-count);
    for (int j=0;j<count;j++) {
        matrix[i][zero[j]]=s;        
    }
}
(M-count) тогда =)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.03.2012, 09:35     В прямоугольной матрице каждый нулевой элемент заменить средним арифметическим значением ненулевых элементов той строки
Еще ссылки по теме:

Каждый элемент массива A[k] заменить средним значением первых k элементов массива C++
В прямоугольной матрице заменить каждый нулевой элемент на среднее арифметическое строки C++
C++ В прямоугольной матрице каждый нулевой элемент заменить средним арифметическим значением

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

Или воспользуйтесь поиском по форуму:
Байт
 Аватар для Байт
13940 / 8771 / 1219
Регистрация: 24.12.2010
Сообщений: 15,872
27.03.2012, 09:35     В прямоугольной матрице каждый нулевой элемент заменить средним арифметическим значением ненулевых элементов той строки #7
Цитата Сообщение от valeriikozlov Посмотреть сообщение
А у обоих получается среднее арифметическое значение всех элементов строки
Вы совершенно правы! Как-то пропустил. Те. делить надо на количество ненулевых элементов А ежели все нулевые? Ну тогда или кричать, что задача неразрешима, или положить ответ = 0
Yandex
Объявления
27.03.2012, 09:35     В прямоугольной матрице каждый нулевой элемент заменить средним арифметическим значением ненулевых элементов той строки
Ответ Создать тему
Опции темы

Текущее время: 01:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru