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

Выбор наиболее близкого среднего значения - C++

Восстановить пароль Регистрация
 
Nika92
26 / 0 / 1
Регистрация: 28.10.2010
Сообщений: 8
25.12.2010, 13:43     Выбор наиболее близкого среднего значения #1
Задание: написать программу для выбора строки матрицы,наиболее близкой по среднему значению к заданному числу. Вот код:
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
#include "stdafx.h"
#include <conio.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#define MATRIX_MAX_SIZE 100
 
int main()
{
    int matr[MATRIX_MAX_SIZE][MATRIX_MAX_SIZE]; // матрица
    int sum[MATRIX_MAX_SIZE] = {0}; // сумма элементов строки матрицы
    int n,m;                   // число строк и столбцов,вводимые с клавиатуры
    float min,X; // миним.значение и произвольное число
    float Avr[MATRIX_MAX_SIZE]={0}; // среднее значение строки
    float A[MATRIX_MAX_SIZE]={0}; // разность Х и ср.значения строки
    
    setlocale( LC_ALL, "russian" );  // установка русского режима
    printf("Выполняется ввод элементов двухмерного массива a\n");
    printf("Введите количество строк массива\n");
    scanf("%d",&n);
    printf("Введите количество столбцов массива\n");
    scanf("%d",&m);
    //Задание j – номеров строк вводимых элементов массива
    for (int i = 0; i < m; i++)
    //Задание i – номеров столбцов строки j элементов массива
    for (int j = 0; j < n; j++)
        {
            printf ("Введите значение элемента a [%d][%d] = ",i,j);  
            scanf("%d",&matr[i][j]);
        }
    printf("Введите X \n"); // ввод произвольного Х
    scanf("%f",&X);
    printf( "\n\nСредние значения равны: " );
        for(int i = 0; i < n; i++)
            {
                sum[n] += matr[n][m];
                printf( "%f", Avr[n] += sum[n] / m ); // вывод ср.значений на экран
            }
    
        // Разности Х и средних значений
        for(int i = 0; i <= n; i++)
            {
                A[n] += abs(X-Avr[n]);
                printf("%f", A[n] += abs(X-Avr[n]));
            }
        min=A[0];
        if (A[n]<min)
            {
                min=A[n];
                printf("Строка %f наиболее близка к Х\n",n);
            }
    
    //Завершение выполнения программы
    printf("\nНажмите любую клавишу\n");
    _getch();
    return 0;
}
Проблема в подсчёте средних значений..какие-то они совсем невразумительные) видимо,что-то не так с типами... И последняя часть,где вывод нужной строки...
Сильно не ругайтесь,я только учусь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2010, 13:43     Выбор наиболее близкого среднего значения
Посмотрите здесь:

Вычисление среднего значения C++
Найти номера строки и столбца для элемента матрицы, наиболее близкого к среднему значению всех ее элементов. C++
C++ В одномерном массиве значение каждого элемента заменить разностью этого значения и среднего арифметического значения других элементов
Нахождение среднего значения C++
C++ Нахождение среднего значения
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
25.12.2010, 17:02     Выбор наиболее близкого среднего значения #2
может я чего не понял но динамич массивы ни в куче ли строятся

Добавлено через 41 минуту
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
#include <math.h>
#include <conio.h>
#include <locale.h>
#include<iostream>
#include <stdio.h>
#include <stdlib.h>
#include<iomanip>
using namespace std;
 
int main()
{
        int n,m;
         cout<<"enter n\n";
         cin>>n;
         cout<<"Enter m\n";
         cin>>m;
         int** mat=new int*[n];
         for(int i=0;i<n;i++)mat[i]=new int[m];
         for(int i=0;i<n;i++){
                        for(int j=0;j<m;j++){
                            printf("mat[%d][%d]= ", i,j);
                            cin>>mat[i][j];
                        }
                        cout<<endl;
                    }
                    cout<<"\nMassiv \n";
                    for(int i=0;i<n;i++){
                        for(int j=0;j<m;j++){
                            cout<<setw(4)<<mat[i][j]<<" ";
                        }
                        cout<<endl;
                    }
                    float x;
                    cout<<"\nEnter x \n";
                    cin>>x;
                    float *delta=new float[n];
                    float sum=0;
                    float mind=0; int imin=0;
                    for(int i=0;i<n;i++){
                        for(int j=0;j<m;j++){
                            sum+=mat[i][j];
                        }
                        delta[i]=fabs(x-sum/m);
                        sum=0;
                    }
                    mind=delta[0]; 
                    for(int i=0;i<n;i++){
                        if(delta[i]<mind){
                            mind=delta[i];
                            imin=i;
                        }
                    }
                    cout<<"\nIndex stroki: \n"<<imin<<endl;
                    for(int i=0;i<n;i++)delete[]mat[i];
                    delete mat;
        _getch();
        return 0;
}
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
25.12.2010, 17:09     Выбор наиболее близкого среднего значения #3
igorrr37, похоже вы чего-то не поняли, потому что, во-первых, динамические массивы не строятся, под них выделяется память, а во-вторых, в этой программе динамическими массивами и не пахнет.
Nika92
26 / 0 / 1
Регистрация: 28.10.2010
Сообщений: 8
25.12.2010, 17:59  [ТС]     Выбор наиболее близкого среднего значения #4
igorrr37, спасибо,всё работает
silent_1991, а как тогда?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
25.12.2010, 18:18     Выбор наиболее близкого среднего значения #5
Nika92, да можно вариант igorrr37 использовать, я имел ввиду, что в вашем вариант нету динамических массивов.
Nika92
26 / 0 / 1
Регистрация: 28.10.2010
Сообщений: 8
25.12.2010, 18:32  [ТС]     Выбор наиболее близкого среднего значения #6
silent_1991, ясно)
а если,например,средние значения совпали,как это обозначить? чтобы получить вывод на экран примерно "строки [i],[i] одинаково близки к Х"?
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
25.12.2010, 20:30     Выбор наиболее близкого среднего значения #7
да можно и несколько строк
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
#include <math.h>
#include<map>
#include <conio.h>
#include<iostream>
#include <stdio.h>
#include<iomanip>
using namespace std;
 
int main()
{
        int n,m;
         cout<<"enter n\n";
         cin>>n;
         cout<<"Enter m\n";
         cin>>m;
         int** mat=new int*[n];
         for(int i=0;i<n;i++)mat[i]=new int[m];
         for(int i=0;i<n;i++){
              for(int j=0;j<m;j++){
                      printf("mat[%d][%d]= ", i,j);
                      cin>>mat[i][j];
              }
              cout<<endl;
      }
      cout<<"\nMassiv \n";
      for(int i=0;i<n;i++){
              for(int j=0;j<m;j++){
                      cout<<setw(4)<<mat[i][j]<<" ";
              }
              cout<<endl;
      }
      float x;
      cout<<"\nEnter x \n";
      cin>>x;
      float *delta=new float[n];
      float sum=0;
      float mind=0; int imin=0;
      for(int i=0;i<n;i++){
              for(int j=0;j<m;j++){
                      sum+=mat[i][j];
              }
              delta[i]=fabs(x-sum/m);
              sum=0;
      }
      multimap<float, int> m1;
      for(int i=0;i<n;i++){
                m1.insert(pair<float, int>(delta[i], i));
            }
            multimap<float, int>::iterator it;
            cout<<"\nIndeks strok(i)\n";
            for(it=m1.begin();it!=m1.end();it++){
                if(it->first==(m1.begin())->first) 
                    cout<<it->second<<endl;
            }
      getch();
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2010, 22:23     Выбор наиболее близкого среднего значения
Еще ссылки по теме:

C++ Нахождение среднего значения дробей
Найти в массиве порядковый номер наиболее близкого элемента к заданному целому числу Х C++
C++ Найти номера строки и столбца для элемента матрицы, наиболее близкого к среднему значению всех элементов

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

Или воспользуйтесь поиском по форуму:
Nika92
26 / 0 / 1
Регистрация: 28.10.2010
Сообщений: 8
25.12.2010, 22:23  [ТС]     Выбор наиболее близкого среднего значения #8
эммм...спасибо конечно,но можно как-то проще? честно говоря,последний кусок мне совсем непонятен...
Yandex
Объявления
25.12.2010, 22:23     Выбор наиболее близкого среднего значения
Ответ Создать тему
Опции темы

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