Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
23 / 3 / 1
Регистрация: 03.11.2014
Сообщений: 73
1

Среднее арифметическое в массиве

15.11.2014, 17:50. Показов 1552. Ответов 21
Метки нет (Все метки)

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


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
#include "stdafx.h"
#include <conio.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    float mas[10][10]={{5, 8, 3.5, -1.7, 7, 12, -32, 7, 5, -4}, {5, 8, 3.5, -1.7, 7, 12, -32, 7, 5, -4},
    {5, 8, 3.5, -1.7, 7, 12, -32, 7, 5, -4}, {5, 8, 3.5, -1.7, 7, 12, -32, 7, 5, -4},
    {5, 8, 3.5, -1.7, 7, 12, -32, 7, 5, -4}, {5, 8, 3.5, -1.7, 7, 12, -32, 7, 5, -4},
    {5, 8, 3.5, -1.7, 7, 12, -32, 7, 5, -4}, {5, 8, 3.5, -1.7, 7, 12, -32, 7, 5, -4},
    {5, 8, 3.5, -1.7, 7, 12, -32, 7, 5, -4}, {5, 8, 3.5, -1.7, 7, 12, -32, 7, 5, -4}};
    int i, j, n=10;
    float mas2[10][10], sum=0;
    printf ("Ishodnaya matrica:\n");
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            printf ("%.f  ", mas[i][j]);
        printf ("\n");
    }
    printf ("\n");
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
        {
            int sum = mas[i][j];
            if ((i-1)>=0)
                sum += mas[i-1][j];
            if ((j-1)>=0)
                sum += mas[i][j-1];
            if (((i-1)>=0) && ((j-1)>=0))
                sum += mas[i-1][j-1];
            if (((i-1)>=0) && ((j+1)<n))
                sum += mas[i-1][j+1];
            if (((i+1)<n) && ((j-1)>=0))
                sum += mas[i+1][j-1];
            if ((i+1)<n)
                sum += mas[i+1][j];
            if ((j+1)<n)
                sum += mas[i][j+1];
            if (((i+1)<n) && ((j+1)<n))
                sum += mas[i+1][j+1];
            mas2[i][j] = sum/9;
        }
        printf ("Poluchennaya matrica:\n");
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
                printf ("%.f  ", mas2[i][j]);
            printf ("\n");
        }
        getch();
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.11.2014, 17:50
Ответы с готовыми решениями:

Вычислить среднее арифметическое в массиве
написать программу которая &quot;вводит по строкам с клавиатуры двумерный массив и вычисляет среднее...

Найдите среднее арифметическое в массиве
Задача найти в массиве среднее арифметическое . Задача не сложная , алгоритм тоже простой сложи все...

Найти среднее арифметическое значений в массиве
Помогите пожалуйста,чет с массивами беда. Задание такое. Создать массив,с произвольным кол-вом...

Найти в массиве среднее арифметическое простых элементов
кому не сложно, помогите!!! Задачи надо переписывать!

21
4 / 4 / 2
Регистрация: 27.10.2014
Сообщений: 90
15.11.2014, 19:05 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
        {
            int sum = mas[i][j];
            if ((i-1)>=0)
                sum += mas[i-1][j];
            if ((j-1)>=0)
                sum += mas[i][j-1];
            if (((i-1)>=0) && ((j-1)>=0))
                sum += mas[i-1][j-1];
            if (((i-1)>=0) && ((j+1)<n))
                sum += mas[i-1][j+1];
            if (((i+1)<n) && ((j-1)>=0))
                sum += mas[i+1][j-1];
            if ((i+1)<n)
                sum += mas[i+1][j];
            if ((j+1)<n)
                sum += mas[i][j+1];
            if (((i+1)<n) && ((j+1)<n))
                sum += mas[i+1][j+1];
            mas2[i][j] = sum/9;
        }
Хоспади зачем так сложно?
сохраняете матрицу 10*10 в матрицу 11*11(матрица 10*10 будет "окружена" нулями) и проходите матрицу 11*11 циклом

for (int i=1; i<a; i++){
for (int j=1; j<b; j++){
float summ+=arr[i][j]+arr[i-1][j-1]+....//тут ищем ср арифметическое 8 соседних элементов
.... //тут присваиваем summ в новый массив
}

}
0
Вездепух
Эксперт CЭксперт С++
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
15.11.2014, 19:20 3
Цитата Сообщение от kessor Посмотреть сообщение
сохраняете матрицу 10*10 в матрицу 11*11(матрица 10*10 будет "окружена" нулями) и проходите матрицу 11*11 циклом
Ну тогда уж, наверное, 12x12 понадобится...
0
4 / 4 / 2
Регистрация: 27.10.2014
Сообщений: 90
15.11.2014, 19:21 4
Да 12*12, ошибся
0
23 / 3 / 1
Регистрация: 03.11.2014
Сообщений: 73
16.11.2014, 11:49  [ТС] 5
kessor, а моя матрица верная не?

Добавлено через 10 минут
TheCalligrapher, а моя матрица верная не?

Добавлено через 16 часов 14 минут
Помогите кто-нибудь с задачей!!!
0
Вездепух
Эксперт CЭксперт С++
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
16.11.2014, 12:12 6
Цитата Сообщение от INSTINCT95 Посмотреть сообщение
TheCalligrapher, а моя матрица верная не?
Все у вас вроде верно кроме одного: почему сумма и среднее арифметическое элементов вычисляется в типе 'int', в то время как матрицы состоят из элементов типа 'float'???

Также формат "%.f" в 'printf' будет печатать значения как целые числа, т.е. округленными. Зачем вы это делаете?
0
23 / 3 / 1
Регистрация: 03.11.2014
Сообщений: 73
16.11.2014, 12:21  [ТС] 7
TheCalligrapher, Я над этим тоже задумывался, почему матрица не выводит десятичные части, а именно округляет, я пробовал на 1 знак переносить, так для всех целых чисел, 0 торчит.

Добавлено через 3 минуты
TheCalligrapher, Как тогда реализовать это?
0
Вездепух
Эксперт CЭксперт С++
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
16.11.2014, 12:22 8
Лучший ответ Сообщение было отмечено INSTINCT95 как решение

Решение

Цитата Сообщение от INSTINCT95 Посмотреть сообщение
Я над этим тоже задумывался,
"Задумывался"? Так а почему тогда не исправлено?

Во-первых,

C++
1
float sum = mas[i][j]; // не 'int', а 'float'
Во-вторых,

C++
1
printf ("%f  ", mas2[i][j]); // не "%.f", а "%f"
1
23 / 3 / 1
Регистрация: 03.11.2014
Сообщений: 73
16.11.2014, 12:24  [ТС] 9
TheCalligrapher, А как? Я же что говорю, он мне нули приписывает, если просто float, а если "1f" так там есть десятичная часть у чисел с этой частью, а у целых 0 торчит.
0
Вездепух
Эксперт CЭксперт С++
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
16.11.2014, 12:29 10
Цитата Сообщение от INSTINCT95 Посмотреть сообщение
Я же что говорю, он мне нули приписывает, если просто float,
Ну и пусть приписывает.... Что, это так страшно? Ну напишите "%.3f" - пусть три знака после запятой выдает. А то сейчас же вообще ерунда пишется. В матрице - '-1.7', а на экран идет '-2'.
0
23 / 3 / 1
Регистрация: 03.11.2014
Сообщений: 73
16.11.2014, 12:33  [ТС] 11
TheCalligrapher, Полученная матрица заработала с десятичной частью, а с исходной как?
Она при f выводит много нулей, нельзя чтоли, к примеру есть:
5, 8, 3.5, -1.7, 7, 12, -32, 7, 5, -4
?????
так она выводит:
5, 8, 4, -2, 7, 12, -32, 7, 5, -4

Добавлено через 29 секунд
TheCalligrapher, А ну тогда ок, спасибо.
0
Вездепух
Эксперт CЭксперт С++
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
16.11.2014, 12:34 12
Цитата Сообщение от INSTINCT95 Посмотреть сообщение
так она выводит:
5, 8, 4, -2, 7, 12, -32, 7, 5, -4
Я не понимаю вопроса. Она выводит это потому, что вы сами ее попросили округлить числа до целых. Не надо ее просить округлять числа до целых. Для исходной матрицы используйте формат "%.1f" и дело с концом.
0
23 / 3 / 1
Регистрация: 03.11.2014
Сообщений: 73
16.11.2014, 13:28  [ТС] 13
TheCalligrapher, Ещё можете сказать, я тут считал вручную, проверял, половина совпадения в значениях, а какие-то нет, как он считает среднее ариф. в матрице?

Добавлено через 26 минут
TheCalligrapher, Вы здесь?
0
Вездепух
Эксперт CЭксперт С++
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
16.11.2014, 18:59 14
Цитата Сообщение от INSTINCT95 Посмотреть сообщение
половина совпадения в значениях, а какие-то нет
Вы 'int sum' на 'float sum' исправили или нет? На каких именно значениях что-то не совпадает?
0
23 / 3 / 1
Регистрация: 03.11.2014
Сообщений: 73
16.11.2014, 19:01  [ТС] 15
TheCalligrapher, Я исправил на float, мне просто нужно знать как он сумму считает!!!
Вот проверьте у себя:
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
#include "stdafx.h"
#include <conio.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    float mas[10][10]={{5, 8, 3.5, -1.7, 7, 12, -32, 7, 5, -4}, {5, 8, 3.5, -1.7, 7, 12, -32, 7, 5, -4},
    {5, 8, 3.5, -1.7, 7, 12, -32, 7, 5, -4}, {5, 8, 3.5, -1.7, 7, 12, -32, 7, 5, -4},
    {5, 8, 3.5, -1.7, 7, 12, -32, 7, 5, -4}, {5, 8, 3.5, -1.7, 7, 12, -32, 7, 5, -4},
    {5, 8, 3.5, -1.7, 7, 12, -32, 7, 5, -4}, {5, 8, 3.5, -1.7, 7, 12, -32, 7, 5, -4},
    {5, 8, 3.5, -1.7, 7, 12, -32, 7, 5, -4}, {5, 8, 3.5, -1.7, 7, 12, -32, 7, 5, -4}};
    int i, j, n=10;
    float mas2[10][10], sum=0;
    printf ("Ishodnaya matrica:\n");
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            printf ("%.1f  ", mas[i][j]);
        printf ("\n");
    }
    printf ("\n");
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
        {
            float sum = mas[i][j];
            if ((i-1)>=0)
                sum += mas[i-1][j];
            if ((j-1)>=0)
                sum += mas[i][j-1];
            if (((i-1)>=0) && ((j-1)>=0))
                sum += mas[i-1][j-1];
            if (((i-1)>=0) && ((j+1)<n))
                sum += mas[i-1][j+1];
            if (((i+1)<n) && ((j-1)>=0))
                sum += mas[i+1][j-1];
            if ((i+1)<n)
                sum += mas[i+1][j];
            if ((j+1)<n)
                sum += mas[i][j+1];
            if (((i+1)<n) && ((j+1)<n))
                sum += mas[i+1][j+1];
            mas2[i][j] = sum/9;
        }
        printf ("Poluchennaya matrica:\n");
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
                printf ("%f  ", mas2[i][j]);
            printf ("\n");
        }
        getch();
    return 0;
}
0
Вездепух
Эксперт CЭксперт С++
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
16.11.2014, 19:05 16
Цитата Сообщение от INSTINCT95 Посмотреть сообщение
Вот проверьте у себя:
У вас исходная матрица по-прежнему печатается с округлением до целого - "%.f". Вы для проверки какие исходные значения берете: настоящие из кода или округленные с экрана?
0
23 / 3 / 1
Регистрация: 03.11.2014
Сообщений: 73
16.11.2014, 19:09  [ТС] 17
TheCalligrapher, Как это с округлением?
У меня с десятичной частью, все норм.
Мне надо просто знать какие элементы суммируются, сам принцип понять.

Добавлено через 1 минуту
TheCalligrapher, Я беру исходные, округленных нет.
0
Вездепух
Эксперт CЭксперт С++
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
16.11.2014, 19:12 18
Цитата Сообщение от INSTINCT95 Посмотреть сообщение
У меня с десятичной частью, все норм.
Сорри, не заметил, что там "%.1f". Так на каких значениях считается неправильно?
0
23 / 3 / 1
Регистрация: 03.11.2014
Сообщений: 73
16.11.2014, 19:30  [ТС] 19
TheCalligrapher, ну вы говорили, что у меня верно построена программа, мне нужно проверить как он считает по первому элементу.
Почему вместо:
5.0
выходит
2.888889?
как это получилось?


Среднее арифметическое в массиве
0
23 / 3 / 1
Регистрация: 03.11.2014
Сообщений: 73
16.11.2014, 19:32  [ТС] 20
TheCalligrapher, Вот, взгляните
0
16.11.2014, 19:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2014, 19:32
Помогаю со студенческими работами здесь

Найти среднее арифметическое простых чисел в массиве
ПОМОГИТЕ ПЛИИИЗ РЕШИТЬ ЗАДАЧУ!!!!!!!!УСЛОВИЕ - Задан упорядоченный по убыванию целочисленный массив...

Найти среднее арифметическое простых чисел в массиве
помогите решить задачку---Задан упорядоченный по убыванию целочисленный массив Х, вставить в...

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

Среднее арифметическое чисел между даными в массиве
На Си написал всего пару задач,есть условие,и некоторые пункты я сделал но последний неясен....


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

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