Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
3 / 3 / 2
Регистрация: 28.09.2015
Сообщений: 339
1

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

26.10.2015, 22:58. Показов 2380. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте,нужна помощь с программкой. Задание:В прямоугольной матрице каждый нулевой элемент заменить средним арифметическим значением ненулевых элементов той строки, в которой расположен этот элемент.
Собственно начал работать и вот в чем загвоздка,печатается массив и находится среднее арифметическое,но всех элементов,а надо,чтоб нулевые не учитывались. С заменой еще не разбирался,так как тут застрял. Моя наработка кода,буду признателен за помощь.
C
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
42
43
44
45
#include "math.h"
#include<stdio.h> //Модуль стандартного ввода-вывода
#include<conio.h> /*Модуль функций расширения ввода-вывода*/
#include<windows.h>
 
#define Nmax 10
#define Mmax 10
int main()
{
    int k,i,j,n=4, m=3;
    double sr[4*3],a[Nmax][Mmax]=
    {{45,4,0,55},
    {0,2,6,44},
    {98,0,0,22}
    };
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    printf ("Исходная матрица\n");
  for (i=0; i<m; i++)
  { 
    k=0;
    for ( j=0; j<n; j++)
    {
      k++;
      if (k<5) 
        printf("%7.0lf%c",a[i][j],j==n-1?'\n':' ');
      else
     {
        k=0;
        printf("%7.0lf\n",a[i][j]);
     }
    }
  }
  for(i=0; i<m; i++)
        {
         sr[i]=0; 
         for(j=0; j<n;j++)           
            sr[i]+=a[i][j];
            sr[i]/=n;}      
    printf("\nЗначения среднего арифметического в строках матрицы\n");
    for(i=0; i<m;i++)
        printf("sr[%d]=%8.1lf\n",i,sr[i]);
  getch();
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.10.2015, 22:58
Ответы с готовыми решениями:

Заменить нулевые элементы на среднее арифметическое наименьшего и наибольшего элементов
Заменить нулевые элементы на среднее арифметическое наименьшего и наибольшего элементов Размер...

В массиве действительных чисел все нулевые элементы заменить на среднее арифметическое всех элементов массива
В массиве действительных чисел все нулевые элементы заменить на среднее арифметическое всех...

Найти среднее арифметическое элементов каждой из четных строк матрицы
Задана квадратная матрица A размером NxN (N&lt;=10), состоящая из действительных элементов. Найти...

Вычислить среднее арифметическое элементов матрицы, лежащих на пересечении строк
Программа вычисляет среднее арифметическое элементов матрицы, лежащих на пересечении строк, номера...

16
15 / 15 / 21
Регистрация: 24.09.2014
Сообщений: 76
26.10.2015, 23:43 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "math.h"
#include<stdio.h> //Модуль стандартного ввода-вывода
#include<conio.h> /*Модуль функций расширения ввода-вывода*/
#include<windows.h>
 
#define Nmax 10
#define Mmax 10
int main()
{
    int k,i,j,n=4, m=3;
    double sr[4*3],a[Nmax][Mmax]=
    {{45,4,0,55},
    {0,2,6,44},
    {98,0,0,22}
    };
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    printf ("Исходная матрица\n");
  for (i=0; i<m; i++)
  { 
    k=0;
    for ( j=0; j<n; j++)
    {
      k++;
      if (k<5) 
        printf("%7.0lf%c",a[i][j],j==n-1?'\n':' ');
      else
     {
        k=0;
        printf("%7.0lf\n",a[i][j]);
     }
    }
  }
  for(i=0; i<m; i++)
        {
         sr[i]=0; 
         for(j=0; j<n;j++)           
            sr[i]+=a[i][j];
            sr[i]/=n;}      
    printf("\nЗначения среднего арифметического в строках матрицы\n");
    for(i=0; i<m;i++)
        printf("sr[%d]=%8.1lf\n",i+1,sr[i]);
    for(i=0; i<n;i++)
    {
        for(j=0; j<m;j++)
        {
            if (a[i][j]==0)
                a[i][j]=sr[i];
        }
    }
     for (i=0; i<m; i++)
  { 
    k=0;
    for ( j=0; j<n; j++)
    {
      k++;
      if (k<5) 
        printf("%7.0lf%c",a[i][j],j==n-1?'\n':' ');
      else
     {
        k=0;
        printf("%7.0lf\n",a[i][j]);
     }
    }
  }
  getch();
    return 0;
}
Добавлено через 2 минуты
Сложный вывод матрицы. Зачем строить велосипед? (просто пример, не для этой программы).
C
1
2
3
4
5
6
7
printf("\nИсходная матрица: ");  
    for(i=0;i<n;i++)           
    {  
        printf("\n"); 
        for(j=0;j<m;j++)       
        printf("%5d",a[i][j]); 
    }
Добавлено через 19 минут
Неправильно условие прочитал. У меня учитывались нули.
Вот, переделал:
C
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
42
43
44
45
46
47
48
49
#include <stdio.h> 
#include <clocale>
#include <conio.h>
#include <stdlib.h>
 
void main() 
{  
    setlocale(LC_ALL, "Rus");
    int **mas,i,j,k=0,n,m;
    float s=0;
    printf("Введите N: ");
    scanf("%d",&n);
    printf("Введите M: ");
    scanf("%d",&m);
    mas=(int**)calloc(n,sizeof(int*));
    for(i=0;i<n;i++)
        mas[i]=(int*)calloc(m,sizeof(int));   
    for(i=0;i<n;i++)            
    for(j=0;j<m;j++)            
    {  
        printf("mas[%d][%d]= ",i+1,j+1);
        scanf("%d",&mas[i][j]); 
    } 
    printf("\nИсходная:\n"); 
    for(i=0;i<n;i++)           
    {  
        printf("\n"); 
        for(j=0;j<m;j++)       
        printf("%5d",mas[i][j]); 
    }
    printf("\n");
    for(i=0;i<n;i++)
    {
    for(j=0;j<m;j++)
        if(mas[i][j]!=0)
        {
        s+=mas[i][j];
        k++;
        }
        s/=k;
        printf("\nСреднее арифм %d строки = %.1f",i+1,s);
        s=0;
        k=0;
    }
    for(i=0;i<n;i++)
    free(mas[i]);
    free(mas);
    getch();
}
1
3 / 3 / 2
Регистрация: 28.09.2015
Сообщений: 339
27.10.2015, 09:17  [ТС] 3
Цитата Сообщение от Рыбоеж Посмотреть сообщение
Неправильно условие прочитал. У меня учитывались нули.
Вот, переделал:
Сначала компилятор выдал вот такие ошибки:
1>d:\новая папка\vc\include\clocale(23): error C2061: синтаксическая ошибка: идентификатор "lconv"
1>d:\новая папка\vc\include\clocale(23): error C2059: синтаксическая ошибка: ;
1>d:\новая папка\vc\include\clocale(23): error C2061: синтаксическая ошибка: идентификатор "localeconv"
1>d:\новая папка\vc\include\clocale(23): error C2059: синтаксическая ошибка: ;
1>d:\новая папка\vc\include\clocale(23): error C2061: синтаксическая ошибка: идентификатор "setlocale"
1>d:\новая папка\vc\include\clocale(23): error C2059: синтаксическая ошибка: ;
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(8): error C2143: синтаксическая ошибка: отсутствие ";" перед "тип"
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(9): error C2143: синтаксическая ошибка: отсутствие ";" перед "тип"
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(11): error C2065: n: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(13): error C2065: m: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(14): error C2065: mas: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(14): error C2065: n: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(14): warning C4047: =: "int" отличается по уровням косвенного обращения от "int **"
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(15): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(15): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(15): error C2065: n: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(15): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(16): error C2065: mas: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(16): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(16): error C2109: для индекса требуется массив или указатель
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(16): error C2065: m: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(17): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(17): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(17): error C2065: n: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(17): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(18): error C2065: j: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(18): error C2065: j: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(18): error C2065: m: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(18): error C2065: j: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(20): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(20): error C2065: j: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(21): error C2065: mas: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(21): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(21): error C2109: для индекса требуется массив или указатель
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(21): error C2065: j: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(24): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(24): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(24): error C2065: n: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(24): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(27): error C2065: j: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(27): error C2065: j: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(27): error C2065: m: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(27): error C2065: j: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(28): error C2065: mas: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(28): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(28): error C2109: для индекса требуется массив или указатель
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(28): error C2065: j: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(31): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(31): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(31): error C2065: n: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(31): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(33): error C2065: j: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(33): error C2065: j: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(33): error C2065: m: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(33): error C2065: j: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(34): error C2065: mas: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(34): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(34): error C2109: для индекса требуется массив или указатель
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(34): error C2065: j: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(36): error C2065: s: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(36): error C2065: mas: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(36): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(36): error C2109: для индекса требуется массив или указатель
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(36): error C2065: j: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(37): error C2065: k: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(39): error C2065: s: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(39): error C2065: k: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(40): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(40): error C2065: s: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(41): error C2065: s: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(42): error C2065: k: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(44): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(44): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(44): error C2065: n: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(44): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(45): error C2065: mas: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(45): error C2065: i: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(45): error C2109: для индекса требуется массив или указатель
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(45): error C2198: free: слишком мало аргументов для вызова
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(46): error C2065: mas: необъявленный идентификатор
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(46): warning C4022: free: несоответствие указателя для фактического параметра 1
1>
1>СБОЙ построения.


Я в коде передвинул обьявление в начало и обьявил еще переменную s(так как компилятор затребовал) и вот,что он мне вновь выдал за ошибки:
1>d:\новая папка\vc\include\clocale(23): error C2061: синтаксическая ошибка: идентификатор "lconv"
1>d:\новая папка\vc\include\clocale(23): error C2059: синтаксическая ошибка: ;
1>d:\новая папка\vc\include\clocale(23): error C2061: синтаксическая ошибка: идентификатор "localeconv"
1>d:\новая папка\vc\include\clocale(23): error C2059: синтаксическая ошибка: ;
1>d:\новая папка\vc\include\clocale(23): error C2061: синтаксическая ошибка: идентификатор "setlocale"
1>d:\новая папка\vc\include\clocale(23): error C2059: синтаксическая ошибка: ;
1>c:\users\slawa\desktop\исходники\кр 2 матрица.c(9): error C2143: синтаксическая ошибка: отсутствие ";" перед "тип"

Как быть?
0
15 / 15 / 21
Регистрация: 24.09.2014
Сообщений: 76
27.10.2015, 13:36 4
Какая IDE?
0
3 / 3 / 2
Регистрация: 28.09.2015
Сообщений: 339
27.10.2015, 14:16  [ТС] 5
Цитата Сообщение от Рыбоеж Посмотреть сообщение
Какая IDE?
Visual Studio 2010
0
15 / 15 / 21
Регистрация: 24.09.2014
Сообщений: 76
27.10.2015, 15:08 6
Так же Visual Studio 2010. Все работает.

Добавлено через 2 минуты
Попробуй убрать setlocale.
0
3 / 3 / 2
Регистрация: 28.09.2015
Сообщений: 339
27.10.2015, 15:30  [ТС] 7
Цитата Сообщение от Рыбоеж Посмотреть сообщение
Попробуй убрать setlocale.
Все равно вот это выдает
1>d:\новая папка\vc\include\clocale(23): error C2061: синтаксическая ошибка: идентификатор "lconv"
1>d:\новая папка\vc\include\clocale(23): error C2059: синтаксическая ошибка: ;
1>d:\новая папка\vc\include\clocale(23): error C2061: синтаксическая ошибка: идентификатор "localeconv"
1>d:\новая папка\vc\include\clocale(23): error C2059: синтаксическая ошибка: ;
1>d:\новая папка\vc\include\clocale(23): error C2061: синтаксическая ошибка: идентификатор "setlocale"
1>d:\новая папка\vc\include\clocale(23): error C2059: синтаксическая ошибка: ;

Добавлено через 6 минут
Я только конечно учусь,но не пойму причем в ошибке 23 строка? если там у нас просто печать,а он туда еще что-то приписывает.
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
27.10.2015, 15:54 8
Satros1205,
C
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <stdio.h>
#include <conio.h>
 
#define ROWS 3
#define COLS 4
 
void print_matrix(double matrix[ROWS][COLS]);
double average(double matrix[COLS]);
void replace(double matrix[COLS], double average);
 
int main()
{
    double matrix[ROWS][COLS] = {{45, 4, 0, 55}, {0, 2, 6, 44}, {98, 0, 0, 22}};
    int i, j;
    
    printf("\nИсходная матрица:\n");
    print_matrix(matrix);
    
    for (i = 0; i < ROWS; ++i)
        replace(matrix[i], average(matrix[i]));
    
    printf("\nКонечная матрица:\n");
    print_matrix(matrix);
    
    _getch();
    
    return 0;
}
 
void print_matrix(double matrix[ROWS][COLS])
{
    int i, j;
    for (i = 0; i < ROWS; ++i)
    {
        for (j = 0; j < COLS; ++j)
            printf("%3.1f\t", matrix[i][j]);
        printf("\n");
    }
}
 
double average(double matrix[COLS])
{
    double avrg = 0;
    int j, count = 0;
    for (j = 0; j < COLS; ++j)
        if (matrix[j])
        {
            avrg += matrix[j];
            ++count;
        }
    avrg /= count;
    
    return avrg;
}
 
void replace(double matrix[COLS], double average)
{
    int j;
    for (j = 0; j < COLS; ++j)
        if (!matrix[j])
            matrix[j] = average;
}
0
3 / 3 / 2
Регистрация: 28.09.2015
Сообщений: 339
27.10.2015, 16:15  [ТС] 9
Kerry_Jr, Вот ваша программа работает,вопрос только вот это никак нельзя заменить/засунуть под инт?)
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
void print_matrix(double matrix[ROWS][COLS]);
double average(double matrix[COLS]);
void replace(double matrix[COLS], double average);
Буду разбираться с вашим кодом и хочу попробовать переписать под свой лад,чтобы мог потом преподу его собственно обьяснить) а то я в таком формате как вы еще не писал и не совсем понятен код.
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
27.10.2015, 17:11 10
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Satros1205, если сделать через int, то среднее арифметическое в массив не запишется, точнее запишется только целая часть.

Добавлено через 9 минут
Можете так попробовать
C
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <stdio.h>
#include <conio.h>
 
#define ROWS 3
#define COLS 4
 
void print_matrix(double matrix[ROWS][COLS], int n); //  n - количество знаков после запятой
double average(double matrix[COLS]);
void replace(double matrix[COLS], double average);
 
int main()
{
    double matrix[ROWS][COLS] = {{45, 4, 0, 55}, {0, 2, 6, 44}, {98, 0, 0, 22}};
    int i, j;
    
    printf("\nИсходная матрица:\n");
    print_matrix(matrix, 0);
    
    for (i = 0; i < ROWS; ++i)
        replace(matrix[i], average(matrix[i]));
    
    printf("\nКонечная матрица:\n");
    print_matrix(matrix, 1);
    
    _getch();
    
    return 0;
}
 
void print_matrix(double matrix[ROWS][COLS], int n)
{
    int i, j;
    for (i = 0; i < ROWS; ++i)
    {
        for (j = 0; j < COLS; ++j)
            printf("%3.*f\t", n, matrix[i][j]);
        printf("\n");
    }
}
 
double average(double matrix[COLS])
{
    double avrg = 0;
    int j, count = 0;
    for (j = 0; j < COLS; ++j)
        if (matrix[j])
        {
            avrg += matrix[j];
            ++count;
        }
    avrg /= count;
    
    return avrg;
}
 
void replace(double matrix[COLS], double average)
{
    int j;
    for (j = 0; j < COLS; ++j)
            if (!matrix[j])
                matrix[j] = average;
}
0
3 / 3 / 2
Регистрация: 28.09.2015
Сообщений: 339
27.10.2015, 17:37  [ТС] 11
Kerry_Jr, я просто хочу переписать код попроще(по такому принципу как я шапке темы выкладывал),чтобы я мог хоть обьяснить,что к чему) Вот у меня пару вопросов
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
replace(matrix[i], average(matrix[i]));
Можно ли это чем нибудь попроще заменить? я просто не понимаю,что такое replace а чем заменить его я хз.
Еще такой вопрос,можно ли всю работу программы засунуть под int main? Т.е. чтоб начало программы int main... и всего лишь один return в конце,чтоб не было void Обьясняю конечно как первобытный,но как могу)

Цитата Сообщение от Kerry_Jr Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
double avrg = 0;
  int j, count = 0;
  for (j = 0; j < COLS; ++j)
    if (matrix[j])
    {
      avrg += matrix[j];
      ++count;
    }
  avrg /= count;
return avrg;
}
А вот здесь не пойму,у вас тут расчет СА,но не вижу где проверка условия,чтобы элемент не был равен нулю. Спасибо за помощь за раннее)

Добавлено через 12 минут
Я просто уверен,что препод потребует,чтоб программа показывала СА,я так понимаю в этом случае спецификатор void можно убрать?

Добавлено через 10 минут
Или допустим можно как нибудь изменить мой код,чтобы там при расчете СА не считало нулевые элементы? или мой код безнадежен?)
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
27.10.2015, 18:06 12
Цитата Сообщение от Satros1205 Посмотреть сообщение
C++
1
if (matrix[j])
вот проверка на то, что элемент не равен нулю. То есть, в С/С++ некоторые типы данных могут быть автоматически преобразованы к типу bool - все, что ноль - false, остальное - true. Так вот, если matrix[j] равен нулю, то в условии он преобразуется в false, и тело условия не выполнится, в остальных случаях условие выполняется.
0
3 / 3 / 2
Регистрация: 28.09.2015
Сообщений: 339
27.10.2015, 18:10  [ТС] 13
Kerry_Jr,
C
1
2
3
4
5
6
7
8
9
for(i=0; i<m; i++)
        {
         sr[i]=0; 
         for(j=0; j<n;j++)
            sr[i]+=a[i][j];
         sr[i]/=n;}  
    printf("\nЗначения среднего арифметического в строках матрицы\n");
    for(i=0; i<m;i++)
        printf("sr[%d]=%8.1lf\n",i,sr[i]);
Ну вот в моем коде можно как-то сделать,чтобы он делал проверку элементов на то,чтобы они не были равны нулю? просто пытался через if написать и он начинает просто бесится и выдавать такие значения,которые даже с учетом нулевых элементов не получить. Просто так он нормально СА считает,а чтоб без нулевых элементов никак.
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
27.10.2015, 18:23 14
Лучший ответ Сообщение было отмечено Satros1205 как решение

Решение

Satros1205,
C
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <stdio.h>
#include <conio.h>
 
#define ROWS 3 // количество строк
#define COLS 4 // количество сьолбцов
 
int main()
{
    double matrix[ROWS][COLS] = {{45, 4, 0, 55}, {0, 2, 6, 44}, {98, 0, 0, 22}};
    int i, j, count;
    double average;
    
    // вывод исходной матрицы
    printf("\nИсходная матрица:\n");
    for (i = 0; i < ROWS; ++i)
    {
        for (j = 0; j < COLS; ++j)
            printf("%.*f\t", 0, matrix[i][j]); // звездочка заменится нулем, и дробная часть не выведется
        printf("\n");
    }
    
    printf("\nСредние арифметические:\n");
    for (i = 0; i < ROWS; ++i)
    {
        // расчет СА
        average = 0;
        count = 0;
        for (j = 0; j < COLS; ++j)
            if (matrix[i][j] != 0) // "!= 0" можно опустить
            {
                average += matrix[i][j]; // сумма ненулевых элементов
                ++count; // количество ненулевых элементов
            }
        average /= count; // собственно СА
        printf("СА[%d] = %.1f\t", i, average);
        // замена нулевых элементов
        for (j = 0; j < COLS; ++j)
            if (matrix[i][j] == 0)
                matrix[i][j] = average;
    }
    printf("\n");
    
    // вывод конечной матрицы
    printf("\nКонечная матрица:\n");
    for (i = 0; i < ROWS; ++i)
    {
        for (j = 0; j < COLS; ++j)
            printf("%.*f\t", 1, matrix[i][j]);
        printf("\n");
    }
    // задержка консольного окна
    _getch();
    
    return 0;
}
1
3 / 3 / 2
Регистрация: 28.09.2015
Сообщений: 339
27.10.2015, 18:25  [ТС] 15
Kerry_Jr,
Огромное спасибо,этот код мне намного понятен
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
27.10.2015, 18:28 16
Satros1205, там где звездочки в printf, замените звездочки нужными числами, а 0 и 1 уберите, т.е так
C
1
printf("%.*f\t", 0, matrix[i][j]);
замените на
C
1
printf("%.0f\t", matrix[i][j]);
а это
C
1
printf("%.*f\t", 1, matrix[i][j]);
на это
C
1
printf("%.1f\t", matrix[i][j]);
0
3 / 3 / 2
Регистрация: 28.09.2015
Сообщений: 339
27.10.2015, 18:32  [ТС] 17
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
там где звездочки в printf, замените звездочки нужными числами
да,я знаю,еще раз спасибо огромное
0
27.10.2015, 18:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.10.2015, 18:32
Помогаю со студенческими работами здесь

Найти среднее арифметическое всех наибольших элементов строк и столбцов матрицы
Дана действительная матрица размера 7х6. Найти среднее арифметическое всех наибольших элементов...

Найти среднее арифметическое всех наибольших элементов строк и столбцов матрицы
Дана матрица размера 7х6. Найти среднее арифметическое всех наибольших элементов строк и столбцов...

Найти среднее арифметическое элементов каждой из строк заданной матрицы (почему не работает программа?)
Задана квадратная матрица А размером N х N (N&lt;=10), состоящая из действительных элементов. Найти...

Найти количество строк матрицы, среднее арифметическое элементов которых меньше заданной величины
Коэффициенты системы линейных уравнений заданы в виде прямоугольной матрицы. С помощью допустимых...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru